⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 飞机订票.cpp

📁 简单的飞机订票系统
💻 CPP
字号:
//Predefine 
//#include <conio.h>  clrscr(); 清屏函数在TURBO C中
#include <stdio.h> //include printf() 
#include <stdlib.h>//include exit()
#include <string.h>//include gets(char str[]) strcpy() strcmp()
#define PN   10  
#define TM   20
#define RC   15
#define CN   20
#define CEN  20
#define DT   10
#define MaxP 10  //最大航班数
//航班与订票信息结构
typedef struct PlaneInfro{
	char  date[DT];
	char  PlaneName[PN];
	char  Time[TM];
	char  ReachCity[RC];
	float Price;
	float Counter;	  //折扣
	float FinaPrice;
	int   Seateds;    //已订票数
	int   Leaveseats; //剩余票数
	int   Fullseats;
}PlaneInf;
//客户资料结构
typedef struct ClientInfro{
	char  PlaneName[PN];
	char  ClientName[CN];
	char  CertifyNum[CEN];
	char  Date[30];	   //订票日期
	int   BookPage;    //订单号
	int   Bookcounter; //订票数
}ClientInf;
////数据信息
int Pn=0,Page=0;              //Pn is Planenumbers,Page is BookPages
	PlaneInf  PIF[MaxP];	  //relate PlaneInf.dat 其中航班数组下标与订票数组下标一一映射对应

//*********************Preload.c*************************************/ 
//预先载入航班数据信息
void LodePIF(){
	FILE *fp;//文件指针

	if((fp=fopen("PlaneInf.dat","rb"))==NULL)
		{fprintf(stderr," PlaneInf.dat is not exist!\n");
		return;
		}
	else while(fread(&PIF[Pn],sizeof(PlaneInf),1,fp)==1) Pn++;		
	fclose(fp);				
}
//获取初始订单号
void GetPage(){
	FILE *fp;//文件指针

	if((fp=fopen("ClientInf.dat","rb"))==NULL)
	{
		fprintf(stderr,"ClientInf.dat is not exist!\n");
		return;//page=0
	}
	else {fseek(fp,0,2);
		  Page=ftell(fp)/sizeof(ClientInf);//Page follow the end of File
		  fclose(fp);
		}
}
//***
void Preload(){
	printf("载入数据!!!\n");
	GetPage();
	LodePIF();
	//clrscr();>>>>>>
}

//*********************BookFace().c*************************************/
//显示界面
void BookFace(){
	printf("\t*****************************************************\n");
	printf("\t\t    BOOK SYSTEM\n");
	printf("\t\t1.录入航班信息\n");
	printf("\t\t2.查询航班信息\n");
	printf("\t\t3.订票\n");
	printf("\t\t4.退票\n");
	printf("\t\t5.修改航班信息\n");
	printf("\t\t6.显示全部航班信息\n");
	printf("\t\t7.显示全部客户信息\n");
	printf("\t\t8.显示全部定票信息\n");
	printf("\t\t9.退出\n");
	printf("\t*****************************************************\n");
	printf("请选择相应选项的数值以启动相应功能:\n");
}
//************************AddPlaInf().c**********************************/
//获取航班信息
void Input_PIF(){
	char str[10];

	printf("请输入航班号:\n");
	gets(PIF[Pn].PlaneName);
	printf("请输入起飞日期 :\n");
	gets(PIF[Pn].date);
	printf("请输入起降时间  :\n");
	gets(PIF[Pn].Time);
	printf("请输入抵达城市  :\n");
	gets(PIF[Pn].ReachCity);
	printf("请输入票价  :\n");
	gets(str);PIF[Pn].Price=atof(str);
	printf("请输  折扣  :\n");
	gets(str);PIF[Pn].Counter=atof(str);
	printf("请输入满座数  :\n");
	gets(str);PIF[Pn].Fullseats=PIF[Pn].Leaveseats=atoi(str);
	PIF[Pn].FinaPrice=PIF[Pn].Counter*PIF[Pn].Price;
	PIF[Pn].Seateds=0;
}

//录入航班信息
void AddPlaInf(){
	char ch='y',str[4];
	//clrscr();>>>>>>
	printf("请输入相应的 航班号  起飞日期  起降时间     抵达城市 票价   折扣 满座数\n");
	printf("     example NS001   9.10      9:30-10:30   wuhan    300.0  0.9  50\n");
	while(ch!='N'&&ch!='n')
	{  
		Input_PIF(); //获取航班信息	
		Pn++;		//航班指针后移
		printf("退出?[N or n]继续?[any key]:\n");
		gets(str);
		ch=str[0];
	}
	//clrscr();>>>>>>
	BookFace();
}
//*************************InquireInf().c*********************************/
//判断该航班是否存在
//可传入 航班名 或者 抵达城市 判断
int IshavePla(int pos,char str[]){

	for(;pos<Pn&&(strcmp(str,PIF[pos].PlaneName)!=0&&strcmp(str,PIF[pos].ReachCity)!=0);pos++);
	if(pos<Pn) return pos;//成功则 还回该航班所在位子
	else return -1;//OR RETURN -1
}
//**
void Inquire(){
		char str[20];
		int k=0;
		void DisplayPn(int k);

		gets(str);
		if(Pn!=0){//没有录入航班信息
			while((k=IshavePla(k,str))>=0)//找到该航班;
				{DisplayPn(k);
				 k++;
				}
			printf("对不起,没有该航班的信息!!\n");
		}
		else printf("对不起,还没有录入航班信息!!\n");
}
//*********
void InquireInf(){    
	char str[4];
	int opt;

	//clrscr();>>>>>>	
	if(Pn!=0)
	{
		printf("请输入 1.航班号  2.抵达城市 0.退出\n");
		gets(str);opt=atoi(str);
		while(opt!=3)
		{    
			if(opt==1) 
				{  printf("请输入航班号:\n");
				   Inquire();
				}
			else if(opt==2)
				{  printf("请输入抵达城市:\n");
				   Inquire();
				}
			else printf("无效的输入命令,请再输入:\n");

			printf("退出?[3] 继续?[1.航班号 2.抵达城市]:\n");
			gets(str);opt=atoi(str);
		}//end of while 
	//clrscr();>>>>>>
	BookFace();
	}else printf("空文件,没有任何数据信息!!请载入!!!\n");//end of if1
}



//判断该航班是否还有票
int IshavePiao(int k,int counter){
	char ch='n';
	if(PIF[k].Leaveseats>=counter) return counter;
	else if(PIF[k].Leaveseats!=0) 
			{printf("对不起,只剩下%d张票了\n",PIF[k].Leaveseats);
			 printf("要定就选择[Y or y],退出就选择[any key]\n");
			 scanf("%1s",&ch);
			 if(ch=='Y'&&ch=='y') return PIF[k].Leaveseats;
			 else return -1;
			 }
	else return 0;
}
//修改订票信息
void ChangeBIF(int k, int counter){
	
	PIF[k].Seateds+=counter;
	PIF[k].Leaveseats-=counter;
}
//获取客户资料
#include<time.h>//时间头文件
void CreatCIF(int k,int counter,ClientInf& temp){
	time_t now;
	long int curent=time(&now);//当前系统时间
	char *str=ctime(&curent);

	printf("请输入有关信息:\n");
	printf("请输入姓名:\n");
	gets(temp.ClientName);
	printf("证件号:\n");
	gets(temp.CertifyNum);
	strcpy(temp.PlaneName,PIF[k].PlaneName);
	strcpy(temp.Date,str);
	temp.BookPage=Page++;
	temp.Bookcounter=counter;
}
//***
void AddToFileC(ClientInf& newer){//-->Client.dat ab
	FILE *fp;//文件指针

	if((fp=fopen("ClientInf.dat","ab"))==NULL)
	{
		fprintf(stderr,"ClientInf.dat is not exist!\n");
		exit(-1);
	}
	else while(fwrite(&newer,sizeof(ClientInf),1,fp)!=1);
	fclose(fp);
}
//***
void Book(){
	char str[PN],str1[PN];//缓存字符数组
	int counter,k;
	char ch='y';
	ClientInf temp;

	//clrscr();>>>>>>
	if(Pn==0) printf("空文件,没有任何数据信息!!请载入!!!\n");
	else while(ch!='N'&&ch!='n')
	{	
		printf("请输入要定的航班号:\n");
		gets(str);
		printf("定票数量:\n");
		gets(str1);
		counter=atoi(str1);
		if((k=IshavePla(0,str))>=0)			//航班存在?
			{counter=IshavePiao(k,counter);
			 if(counter>0)					//还有余票?
		       {ChangeBIF(k,counter);		//订票
				CreatCIF(k,counter,temp);   //创建客户质料
				AddToFileC(temp);			//add to Client.dat
				}
			 else if(counter==0) printf("航班已满,对不起,请另选择!\n");
			 else printf("欢迎下次定票!!\n");	  
			}
		else printf("没有你要定的航班,请另选择!\n");
		printf("退出?[N or n]继续?[any key]:\n");
		gets(str);
		ch=str[0];
	}
	//clrscr();>>>>>>
	BookFace();
}
void ChangePIF(int k){
	char ch='y',str[20];
	int opt;
	void DisplayPn(int k);

	printf("请选择如下选项的数值进行修改:\n");
	DisplayPn(k);
	while(ch!='N'&&ch!='n')
	{
	printf("请输入选项值:\n");
	gets(str);
	opt=atoi(str);
	printf("请输入更新值:\n");
	switch(opt){
	 case 1: gets(str);//获取字符串到缓存ETR中
			 strcpy(PIF[k].PlaneName,str);//copy and change planeInf.PlaneName
			 break;
	 case 2: gets(str);
			 strcpy(PIF[k].date,str);
			 break;
	 case 3: gets(str);
			 strcpy(PIF[k].Time,str);
			 break;
	 case 4: gets(str);
			 strcpy(PIF[k].ReachCity,str);
		     break;
	 case 5: gets(str);
			 PIF[k].Price=atof(str);
			 PIF[k].FinaPrice=PIF[k].Counter*PIF[k].Price;
			 break;
	 case 6: gets(str);
			 PIF[k].Counter=atof(str);
			 PIF[k].FinaPrice=PIF[k].Counter*PIF[k].Price;	
			 break;
	 case 7: printf("该项不能修改\n");
			 break;
	 case 8: gets(str);
			 PIF[k].Fullseats=atoi(str);
			 break;
	 default: printf("无效的输入命令\n");
				}
	printf("继续修改:[any key]  退出修改:[n or N]\n");
	gets(str);
	ch=str[0];
	}
}
//***
void ChangePlaInf(){
	int k;
	char str[PN];
	char ch='y';
	void DisplayPn(int k);

	//clrscr();>>>>>>
	if(Pn==0) printf("空文件,没有任何数据信息!!请载入!!!\n");
	else while(ch!='N'&&ch!='n')
	{
	 printf("请输入要修改的航班号:\n");
	 gets(str);
	 if((k=IshavePla(0,str))<0)  //航班存在?
		printf("没有你要修改的航班号!\n");
	 else 
		if(PIF[k].Seateds==0) //没运作可修改
			{	ChangePIF(k);	  //进入修改
				printf("修改后的航班信息为:\n");
				DisplayPn(k);
			}					
		else fprintf(stderr,"该航班正在运作,不能修改!!");
     printf("继续修改:[any key]  退出修改:[n or N]\n");
	 gets(str);
	 ch=str[0];
	}
	//clrscr();>>>>>>
	BookFace();
}
//**********************DisplayP().c************************************/
//显示单个航班数据信息
void DisplayPn(int k){
	 printf("\t\t**************************\n");
	 printf("\t\t1.航班号  :%-s\n",PIF[k].PlaneName);
	 printf("\t\t2.起飞日期:%-s\n",PIF[k].date);
	 printf("\t\t3.起降时间:%-s\n",PIF[k].Time);
	 printf("\t\t4.抵达城市:%-s\n",PIF[k].ReachCity);
	 printf("\t\t5.票价    :%-.2f\n",PIF[k].Price);
	 printf("\t\t6.折扣    :%.2f\n",PIF[k].Counter);
	 printf("\t\t7.实际票价:%.2f\n",PIF[k].FinaPrice);
	 printf("\t\t8.满座数  :%d\n",PIF[k].Fullseats);
	 printf("\t\t**************************\n");
}
//显示全部航班数据信息
void DisplayP(){
	if(Pn==0) printf("空文件,没有任何数据信息!!请载入!!!\n");
	else for(int k=0;k<Pn;k++)
		     DisplayPn(k);
	BookFace();
}
 
//********************DisplayC().c**************************************/
//显示单个客户数据信息
void DisplayCn(ClientInf& temp){
	 printf("\t\t**************************\n");
	 printf("\t\t1.订单号   :%-d\n",temp.BookPage);
	 printf("\t\t2.航班号   :%-s\n",temp.PlaneName);
	 printf("\t\t3.客户姓名 :%-s\n",temp.ClientName);
	 printf("\t\t4.证件号   :%-s\n",temp.CertifyNum);
	 printf("\t\t5.订票日期 :%-s\n",temp.Date);
	 printf("\t\t6.订票数量 :%d\n",temp.Bookcounter);
	 printf("\t\t**************************\n");
}
//显示全部客户数据信息
void DisplayC(){
	FILE *fp;//文件指针
	ClientInf temp;

	if((fp=fopen("ClientInf.dat","rb"))==NULL)
			{
			fprintf(stderr,"ClientInf.dat is not exist!\n");
			printf("没有任何数据信息!!请载入!!!\n");
			BookFace();
			return;
			}
	while(fread(&temp,sizeof(ClientInf),1,fp)==1) DisplayCn(temp);
	fclose(fp);
	BookFace();
}
//**********************DisplayB().c************************************/
//显示单个订票数据信息
void DisplayBn(int k){
	 printf("\t\t**************************\n");
	 printf("\t\t1.航班号   :%-s\n",PIF[k].PlaneName);
	 printf("\t\t2.已订票数 :%-d\n",PIF[k].Seateds);
	 printf("\t\t3.剩余票数 :%-d\n",PIF[k].Leaveseats);
	 printf("\t\t**************************\n");
}
//显示全部订票数据信息
void DisplayB(){
	if(Pn==0) printf("还没有订票信息!!!\n");
	else for(int k=0;k<Pn;k++)
	 	    DisplayBn(k);
	BookFace();
}
// **********************Operate().c************************************/
void Operate(){
	int opt;
	char str[4];

	gets(str);
	opt=atoi(str);
	while(opt!=9)
	{
		switch(opt)
		{
		case 1: AddPlaInf();break;
		case 2: InquireInf();break;
		case 3: Book();break;
	   //	case 4: RetenBook();break;
		case 5: ChangePlaInf();break;
		case 6: DisplayP();break;
		case 7: DisplayC();break;
		case 8: DisplayB();break;
		default : printf("无效的输入命令,请再输入:\n");
		}
	printf("请再输入:\n");
	gets(str);
	opt=atoi(str);
	}
}
//***************************Aftload().c*******************************/
//用后保存数据信息
//保存航班信息
void SavePIF(){
	FILE *fp;
    if((fp=fopen("PlaneInf.dat","rb"))==NULL&&Pn==0) return;//file is not exist
	else if((fp=fopen("PlaneInf.dat","wb"))==NULL)
		{ fprintf(stderr,"can't open the file!\n");
		  exit(-1);
		}
	for(int k=0;k<Pn;k++)
	   fwrite(&PIF[k],sizeof(PlaneInf),1,fp);
	fclose(fp);
}

//********
void Aftload(){
	printf("保存数据!!!!\n");
	SavePIF();
}

//***************************End of Modles()******************************/
/*************************main.c******************************************************/
int main(){
	
	Preload();  //预先载入数据信息.......
	BookFace(); //界面
	Operate();  //操作功能模块
	Aftload();  //保存数据信息...........
	return 0;
}

/*********************endofmain.c*********************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -