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

📄 flight.cpp

📁 航空订票信息系统很好的一个用C篇的,希望大家下载交流
💻 CPP
字号:
#include"flight.h"





int Load(flights &ft,sheets &st,int flag){
	FILE *fp;
	int n=0;
	int i=0;
	if(flag==1)
	{
	
	    if((fp=fopen("航班信息.txt","r"))==NULL)
		{
		printf("\n文件加载失败!\n");
		exit(1);
		}

	
	     fscanf(fp,"%d",&n); 
		if(n==NULL||n==0)
		{
		printf("\n文件加载失败!\n");
		exit(1);
		}

	     initFlight(ft,n);
		 ft.length=n;
         fgetc(fp);
	     while(i<n)
		 {
          fscanf(fp,"%s%s%s%s%s%d%f%f",ft.ft[i].id,ft.ft[i].fromcity,ft.ft[i].tocity,ft.ft[i].uptime,ft.ft[i].downtime,&ft.ft[i].count,&ft.ft[i].price,&ft.ft[i].discount);
	      fgetc(fp);	     
		  i++;
		 }
		 fclose(fp);
	}





	else if(flag==2)
	{
		n=0;
		i=0;
		if((fp=fopen("订单信息.txt","r"))==NULL)
		{
		printf("\n文件加载失败!\n");
		exit(1);
		}
	    fscanf(fp,"%d",&n);
		if(n==NULL||n==0)
		{
		printf("\n文件加载失败!\n");
		exit(1);
		}
	    initSheet(st,n);
		st.length=n;
	    fgetc(fp);

	   while(i<n)
	   {
           fscanf(fp,"%d%s%s%s%d",&st.st[i].id,st.st[i].username,st.st[i].credit,st.st[i].ft.id,&st.st[i].count);
			i++;
	       fgetc(fp);
	   }
	   fclose(fp);
	 }
	else
		{
		printf("\n文件加载失败!\n");
		exit(1);
		}

	
return 1;
}


int Save(flights ft,sheets st,int flag){
	FILE *fp;

	if(flag==1)
	{
    	if((fp=fopen("航班信息.txt","w"))==NULL)
		{
		printf("\n文件保存失败!\n");
		exit(1);
		}
       	fprintf(fp,"%d\n",ft.length);

    	for(int i=0;i<ft.length;i++)
		{
          fprintf(fp,"%-10s%-10s%-10s%-10s%-10s%-5d%-5.1f  %-3.2f\n",ft.ft[i].id,ft.ft[i].fromcity,ft.ft[i].tocity,ft.ft[i].uptime,ft.ft[i].downtime,ft.ft[i].count,ft.ft[i].price,ft.ft[i].discount);
		}
	fclose(fp);
	printf("\n航班信息文件保存成功!\n");
   // free(ft.ft);
	}


	else if(flag==2)
	{
		if((fp=fopen("订单信息.txt","w"))==NULL)
		{
		printf("\n文件保存失败!\n");
		exit(1);
		}
		fprintf(fp,"%d\n",st.length);
	    for(int i=0;i<st.length;i++)
		{
           fprintf(fp," %-4d %-10s%-10s%-10s     %-3d\n",st.st[i].id,st.st[i].username,st.st[i].credit,st.st[i].ft.id,st.st[i].count);
		}
	     fclose(fp);
     	printf("\n订单信息文件保存成功!\n");
      //  free(st.st); 
	}




	else
		{
		printf("\n文件保存失败!\n");
		exit(1);
		}
	
	return 1;
	

}


int Show(flights ft,sheets st,int flag){
	int i;
	if(flag==0)
	{
    	printf("\n 航班号   起飞城市  抵达城市  起飞时间  降落时间  票数 票价 折扣 ");
	    printf("=================================================================\n");	
		for(i=0;i<ft.length;i++)
		{
          printf("%-10s%-10s%-10s%-10s%-10s%-5d%-5.2f%-5.2f\n",ft.ft[i].id,ft.ft[i].fromcity,ft.ft[i].tocity,ft.ft[i].uptime,ft.ft[i].downtime,ft.ft[i].count,ft.ft[i].price,ft.ft[i].discount);
          printf("-----------------------------------------------------------------\n");
		}
	}

	else if(flag==1)
	{
	    printf("\n 编号 客户姓名  证件号码  预定航班   订票数量  ");
      	printf("=================================================================\n");	
      	for(i=0;i<st.length;i++)
		{
          printf(" %-4d %-10s%-10s%-10s     %-3d\n",st.st[i].id,st.st[i].username,st.st[i].credit,st.st[i].ft.id,st.st[i].count);
          printf("-----------------------------------------------------------------\n");
		}
	}

	else

		printf("\n信息为空!\n");
		
	return 1;

}



int initFlight(flights &ft,int n){
	ft.ft=NULL;
	ft.ft=(flight *)malloc(n*sizeof(flight));
	if(!ft.ft)
	{
		printf("初始化失败!\n");
		exit(1);
	}

	ft.Num=n+ftSIZE;
	ft.length=n;
	return 1;
}


int initSheet(sheets &st,int n){
	st.st=(sheet *)malloc(n*sizeof(sheet));
/*	if(!st.st)
	{
		printf("初始化失败!\n");
		exit(1);
	}
	*/
	st.Num=n+stSIZE;
	st.length=0;
	return 1;
}


int addFlight(flights &ft,sheets st){
    int i;
	flight *newbase=NULL;
	Load(ft,st,1);
	Load(ft,st,2);

	i=ft.length;

    printf("\n按Enter添加航班信息,按#停止输入...");
	while(getchar()!='#')
	{
	printf("\n航班编号:");
	scanf("%s",ft.ft[i].id);
	fflush(stdin);
	printf("\n起飞城市:");
	scanf("%s",ft.ft[i].fromcity);
	fflush(stdin);
	printf("\n抵达城市:");
	scanf("%s",ft.ft[i].tocity);
	fflush(stdin);
	printf("\n起飞时间:");
	scanf("%s",ft.ft[i].uptime);
	fflush(stdin);
	printf("\n降落时间:");
	scanf("%s",ft.ft[i].downtime);
	fflush(stdin);
	printf("\n航班票数:");
	scanf("%d",&ft.ft[i].count);
	fflush(stdin);
	printf("\n航班票价:");
	scanf("%f",&ft.ft[i].price);
	fflush(stdin);
	printf("\n票价折扣:");
	scanf("%f",&ft.ft[i].discount);
	fflush(stdin);

	i++;
	ft.length++;
	
	if(ft.length>=ft.Num)
	{
		newbase=(flight *)realloc(ft.ft,(addSIZE+stSIZE)*sizeof(sheet));
		if(!newbase)
		{
		printf("内存空间不够!\n");
		exit(1);
		}
		ft.ft=newbase;
		ft.Num+=addSIZE;
	}
printf("\n继续输入...");

	}
Save(ft,st,1);
Save(ft,st,1);
 //free(ft.ft);

      
return 1;
}


void showFlight(flight f,int flag,int pos)
{
	if(flag==0)
	{	puts("\n=======================================================================");
		puts(" id  航班号  起飞城市  抵达城市  起飞时间  降落时间  票数   票价   折扣 ");
		puts("=======================================================================");
	}

    printf(" %2d  %-8s%-10s%-10s%-10s%-10s %-5d %-5.1f  %-5.2f\n",pos,f.id,f.fromcity,f.tocity,f.uptime,f.downtime,f.count,f.price,f.discount);
    puts("-----------------------------------------------------------------------");
}



int Book(flights &ft,sheets &st)
{ 
	sheet *newbase=NULL; 
	flight f;
	sheet s;
	int temp;
	int j;
	int i;
	char ch;
	Load(ft,st,1);
	Load(ft,st,2);

    i=st.length;
    printf("\n按Enter输入订单信息,按#键停止输入...");
    ch=getchar();
	///////////////////////////////////////////
while(ch!='#')
{

    j=0;
	
	printf("\n预订航班:");

	scanf("%s",s.ft.id);
	fflush(stdin);

	printf("\n订票数量:");
	scanf("%d",&s.count);
	fflush(stdin);


    temp=getFlight(ft,s.ft.id,"","",f,1);

/////////////////////////////////////////////////////////
  
	if(temp)
	{///3

		if(f.count>=s.count)
		{ 
		     printf("\n是否选择该航班?(Y/N): ");	         
			 ch=getchar();

	         if(ch=='y'||ch=='Y')
			 {
		       s.ft=f;
			   s.ft.count=s.count;
		       ft.ft[temp-1].count-=s.count;
			   goto lp;
			 }
		     else
			    goto next;
		}



	   else
	   {  
		   if(f.count<=0)
		   printf("\n该航班满仓!\n");
	       else
		   printf("\n票数不足!\n");

           printf("\n可供选择的航班有:\n");

		   temp=getFlight(ft,"",f.fromcity,f.tocity,f,2);//////
		   /////////////////////------------------temp 
         if(temp)
		   {

			   if(f.count>=s.count)
			   {
			          printf("\n是否选择该航班?(Y/N): ");
	                  fflush(stdin);
					  ch=getchar();
	                  if(ch=='y'||ch=='Y')
					  {
		               s.ft=f;
					   s.ft.count=s.count;
		               ft.ft[temp-1].count-=s.count;
					   goto lp;
					  }
					  else
						  goto next;
			   }


			   else 
			   {
				    if(f.count<=0)
		            printf("\n该航班也满仓!\n");
	                else
		            printf("\n该航班票数不足!\n");
					goto next;
				}

		   }
/////////////////////------------------temp
  else
		   {
			   printf("\n没有可预定的航班!\n");
			   goto next;
		   }

	  
	   }
	}
else
goto next;

////////////////////////////////////////////////////////////
	
lp:	printf("\n客户姓名:");
	scanf("%s",s.username);
	fflush(stdin);
	printf("\n证件号码:");
	scanf("%s",s.credit);
	fflush(stdin);
  
	
	printf("\n订单如下:\n");
	s.id=st.st[i-1].id+1;
	showSheet(s,0);




	//goto next; 
	s.ft=f;
	st.st[i]=s;
	
	i++;
	st.length++;
	  
	if(st.length>=st.Num)
	{
		newbase=(sheet *)realloc(st.st,(addSIZE+stSIZE)*sizeof(sheet));
		if(!newbase)
		{
		printf("内存空间不够!\n");
		exit(1);
		}
		st.st=newbase;
		st.Num+=addSIZE;
	}
	  

next: fflush(stdin);
	  printf("\n下一张订单?...");
	  ch=getchar();
	 
}
	 
//	  Save(ft,st,2);
//	  Save(ft,st,1);
/*  free(ft.ft);
  ft.ft=NULL;
  free(st.st);
  st.st=NULL;
  */
	return 1;
}//1



int Search(flights ft,sheets st){
	//int temp;
	int choice;
	char ft_id[10];
	char fromcity[10];
	char tocity[10];
	Load(ft,st,1);
	flight f;
	
	char ch='y';
	while(ch=='y'||ch=='Y')
	{
//	puts("\t\t\t ===================================");
	printf("\n\t\t     1、按航班查询   2、按城市查询\n");
	puts("===============================================================================");
	printf("请选择: ");
	scanf("%d",&choice);
	fflush(stdin);
	if(choice==1)
	{
		printf("\n请输入航班号: ");
		scanf("%s",ft_id);
		fflush(stdin);
		getFlight(ft,ft_id,"","",f,1);

	}
	else if(choice==2)
	{
		printf("\n请输入起飞城市:");
		scanf("%s",fromcity);
		fflush(stdin);
		printf("\n请输入抵达城市:");
		scanf("%s",tocity);
		fflush(stdin);
	    getFlight(ft,"",fromcity,tocity,f,2);
		
	}

	else
	{
		printf("\n输入错误!\n");
		exit(1);
	}	
	printf("\n继续查询?(Y/N): ");
	ch=getchar();
	}
	fflush(stdin);
//	free(ft.ft);
 //   free(st.st);
return 1;
}



int unBook(flights &ft,sheets &st){

	int id=0;
	int i;
	int j=0;
	int count=1;
	flight f;
	int temp;
	Load(ft,st,1);
	Load(ft,st,2);
	printf("\n按Enter键输入退票信息,按#键结束...");
	char ch=getchar();
	while(ch!='#')
	{
	printf("\n输入退票订单号:");
	scanf("%d",&id);
	fflush(stdin);

	if(id>=st.st[st.length-1].id)
	{
	  printf("\n该订单已经过期!\n");
	  
	  goto lp;
	}

	for(i=0;i<st.length;i++)
	{
		if(st.st[i].id==id)
		{
			if(st.st[i].count==0)
			{
				printf("\n该订单已无效!\n");
				goto lp;
			}
			j=i;
			break;
		}
	
	}
	printf("\n该订单信息如下:\n");
    showSheet(st.st[i],0);
    printf("\n订单预订的航班:\n");
	temp=getFlight(ft,st.st[i].ft.id,"","",f,1);
	if(temp)
	{
	printf("\n输入退票的数量:");
	fflush(stdin);
	scanf("%d",&count);
	fflush(stdin);

	if(count>st.st[i].count)
	{
		printf("\n退票数量有误!\n");
		goto lp;
	}

	////////////////////////////////////
	ft.ft[temp-1].count+=count;
	st.st[i].count-=count;
	///////////////////////////////////

	printf("\n退票成功!\n");

	printf("\n新订单信息如下:\n");
    showSheet(st.st[i],0);
    printf("\n该航班信息如下:\n");
	temp=getFlight(ft,st.st[i].ft.id,"","",f,1);
	}

	
lp:	printf("\n按Enter键继续,按#键退出...");
	ch=getchar();
	}
	Save(ft,st,1);
	Save(ft,st,2);
	//free(ft.ft);
    //free(st.st);
	return 1;
	
}


int	getFlight(flights ft,char id[],char fromcity[],char tocity[],flight &f,int flag){
    int j=0;
	int temp=-1;
	if(flag==1)
	{
		for(int i=0;i<ft.length;i++)
		{
			if(!strcmp(id,ft.ft[i].id))
			{
				f=ft.ft[i];
				showFlight(f,0,i);
				return i+1;
			}
		}


		if(i>=ft.length)
		{
			printf("\n该航班不存在!\n");
			return 0;
		}

	}
	else
		if(flag==2)
		{
			for(int i=0;i<ft.length;i++)
			{
			  if(!strcmp(fromcity,ft.ft[i].fromcity)&&!strcmp(tocity,ft.ft[i].tocity))
			  {			  
			    showFlight(ft.ft[i],j++,i);
				return 1;
			  }
			}
            
			
		    if(j==0)
			{
			printf("\n该航班不存在!\n");
			return 0;
			}
		
		    else
		   {
			  printf("请选择查看编号:");
			  scanf("%d",&temp);
			  fflush(stdin);
			  f=ft.ft[temp];/////////////////////////////////////////////////
			  return temp+1;
			}

		}
		else
			return 0;


}

void showSheet(sheet s,int flag){
	if(flag==0)
	{	puts("\n=======================================================================");
		puts("    编号         用户名         证件号          航班         票数   ");
		puts("=======================================================================");
	}

    printf("     %-3d          %-10s     %-10s      %-10s    %-5d\n",s.id,s.username,s.credit,s.ft.id,s.count);
    puts("-----------------------------------------------------------------------");
}
int Menu(){
	int choice;
	puts("     \n\t=========================================================\n");
	puts("                        〓〓〓  飞机订票系统  〓〓〓\n  ");

	puts("                        ※  Copyright ☆ XieGang  ※  \n ");
	puts("     \t=========================================================\n");
	printf("     \t\t\t   0-------------系统信息\n\n");
	printf("     \t\t\t   1-------------查询航班\n\n");
	printf("     \t\t\t   2-------------机票预订\n\n");
	printf("     \t\t\t   3-------------机票退订\n\n");
	printf("     \t\t\t   4-------------录入航班\n\n");
	printf("     \t\t\t   5-------------退出系统\n\n");
	puts("     \t==========================================================\n");
	printf("\t\t\t\t请选择: ");
	fflush(stdin);
	scanf("%d",&choice);
	fflush(stdin);
	return choice;
}

void SystemInfo(){
	FILE *fp;
	if(!(fp=fopen("系统信息.txt","r")))
	{
		puts("说明文件丢失!");
			return ;
	}
	puts("\n\n\n\n");
	puts("--------------------------------------------------------------------------------");
	puts("                          〓〓〓 系统信息 〓〓〓\n  ");
	puts("--------------------------------------------------------------------------------");	
	while(!feof(fp))
		putchar(fgetc(fp));
	
	putchar(10);
	puts("--------------------------------------------------------------------------------");
}

⌨️ 快捷键说明

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