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

📄 flight.cpp

📁 航空售票系统 查询班次
💻 CPP
字号:
#include "flight.h"


flight::flight()//初始化
{

	char sa[N][20]={"南京","杭州","天津","上海","广州"};           //始发站

	char ea[N][20]={"北京","南京","武汉","北京","天津"};           //终点站
	
	char date[N][20]={"12.31","1.2","1.3","1.5","1.7"};            //日期
    
	int fnum[N]={1001,1002,1003,1004,1005},tic[N]={11,42,32,34,12};//航班号
	
	int length=N;
	int size=10;
	int i,kk;
   
	for(i=0;i<N;i++)
   { 
	  
      strcpy((fl[i]).staAddr,sa[i]);
      strcpy((fl[i]).endAddr,ea[i]);
	  strcpy((fl[i]).date,date[i]);
      (fl[i]).booked=0;
      (fl[i]).ticket=tic[i];
      (fl[i]).flightnum=fnum[i];
	  (fl[i]).cusnum=0;
	  (fl[i]).waitnum=0;

   }
}


void flight::printall(int *length)//打印所有航班信息
{
  int i;
       printf("\n\t\t\t* * * * * * * * * *");
	   printf("\n\t\t\t  显示所有航班信息 ");
	   printf("\n\t\t\t* * * * * * * * * *\n\n");

    printf("\t航班号    起点站  终点站  日期    乘员定额  已售票数  剩余票数\n\n");
  for(i=0;i<(*length);i++)
  {	
    printf("\t%-6d",(fl[i]).flightnum);
	printf("   %-7s",(fl[i]).staAddr);	
	printf("   %-7s",(fl[i]).endAddr);
	printf("   %-6s",(fl[i]).date);
    printf("   %-8d",(fl[i]).ticket);
    printf("   %-8d",(fl[i]).booked);
    printf("   %-6d",(fl[i]).ticket-(fl[i]).booked);
    printf("\n");
  }
  printf("\n\n\t按任意键返回主菜单\n");
  getch();

}


int flight::findflight(int n,int *length)//根据航班号找出该航班
{
  int i;
  for(i=0;i<*length;i++)//length:航班总数
    if (fl[i].flightnum==n)
		return i;
  return 999;//未找到
}



void flight::printselect(int i,int n)//打印航班号为n的航班
{

    printf("\n\t\t\t%d 航 线 信 息\n\n",n);
    printf("   航班号  起点站  终点站 日  期  乘员定额  已售票数  剩余票数\n\n");
    printf("   %-5d",(fl[i]).flightnum);
	printf("   %-5s",(fl[i]).staAddr);	
	printf("   %-5s",(fl[i]).endAddr);
	printf("   %-6s",(fl[i]).date);
    printf("   %-8d",(fl[i]).ticket);
    printf("   %-8d",(fl[i]).booked);
    printf("   %-6d",(fl[i]).ticket-(fl[i]).booked);
    printf("\n");
}

void flight::booktic(int *length)             //显示订票系统
{
   int i=0,n=0,t=999,pn=0,kk=0;            //n:航班号t:输入航班号,pn:欲订票数
   char na[10],key;
   printf("\n\t\t\t* * * * * * * * * *");
   printf("\n\t\t\t  订 票 系 统 ");
   printf("\n\t\t\t* * * * * * * * * *\n\n");
   
   while(1)
   {
     printf("\t请输入航班号(现有航班为1001~1005):\n");
     scanf("%d",&n);
	 t=findflight(n,length);
     if(t==999) 
	 {
        printf("\n\t没有找到您所要的航班号,请重新输入\n");
	    continue;
      }

      printselect(t,n);
	  printf("\n\t请输入您的姓名和所需的票数: ");
      printf("\n\t姓名:");
      scanf("%s",na);
      printf("\n\t票数(输入0取消订票):");
      scanf("%d",&pn);
      if(pn==0)
      {

		  printf("取消订票");
		  break;
      }
      if(pn<=(fl[t].ticket-fl[t].booked)&&n>=1)//检查订票数量数是否符合要求
      {
	   fl[t].cusnum++;//订票人数+1
	   int ztemp=fl[t].cusnum;
	   strcpy(fl[t].next[ztemp-1].customer,na);//记录订票人信息
	   fl[t].next[ztemp-1].num=pn;

       fl[t].booked+=pn;
       printf("\n\t%s,恭喜您订票成功!\n",na);
       getch();
       return;
      }

      else
      {
         printf("\n\tSorry,没有足够的机票\n 按<Y> 重新输入 按<W>候票 按<N>返回\n");
         do
         {
           key=getch();

         }while(key!='Y'&&key!='y'&&key!='n'&&key!='N'&&key!='W'&&key!='w');
      }
       if(key=='Y'||key=='y')//重新输入
                continue;
    
	   
	   else if(key=='W'||key=='w')//候票
	   {
		   for(int kk=0;kk<fl[t].waitnum;kk++)
			   ;
		   fl[t].waitnum++;
		   strcpy(fl[t].people[kk],na);
       printf("\n\t%s,已排入候票队列,请耐心等候!\n",na);
       getch();
       return;		   
	   }
	   
	   else if(key=='N'||key=='n')
	   {
		   return;//返回
	   }
       else 
	   {
         printf("\n\tsorry,订票失败!");
         return;
       }
   }
}  


int flight::findname(flightdetail *m,char na[])
{
	for(int i=0;i<10;i++)
	{
		if(strcmp(m[i].customer,na)==0)
			return i;
	}
	return 999;

}




void flight::returntic(int *length)
{
   int i=0,n=0,t=999,pn=0;
   int temp,itemp;
   char na[10],key;
   printf("\n\t\t\t* * * * * * * * * *");
   printf("\n\t\t\t  退 票 系 统 ");
   printf("\n\t\t\t* * * * * * * * * *\n\n");
     while(1)
   {
     printf("\nStep1.请输入航班号:");
     scanf("%d",&n);
     
	 t=findflight(n,length);
     if(t==999)
     {
         printf("\n航班号未找到,按<Y>重新输入 或 按<N>返回");

         do
         {
           key=getch();
         }
		 while(key!='Y'&&key!='y'&&key!='n'&&key!='N');

       if(key=='n'||key=='N')
       {
          getch();
          return;
       }

       else
	   {
         system("cls");

		 printf("\n\t\t\t* * * * * * * * * *");
		 printf("\n\t\t\t  退 票 系 统 ");
		 printf("\n\t\t\t* * * * * * * * * *\n\n");
         continue;
        }
     }
            
	 printf("Step2.姓名:");
     scanf("%s",na);
   	 temp=findname(fl[t].next,na);

         if(temp==999)
        {
            printf("\n没有找到您的信息!\n 按<Y>重新输入 按<N>返回");
            do
            {
            key=getch();
            }
			while(key!='Y'&&key!='y'&&key!='n'&&key!='N');

		   if(key=='n'||key=='N')
		   {
			  getch();
			  return;
		   }
		   
		   else
		   {
				 system("cls");
			   
				 printf("\n\t\t\t* * * * * * * * * *");
			   printf("\n\t\t\t  退 票 系 统 ");
			   printf("\n\t\t\t* * * * * * * * * *\n\n");
						 continue;
			}
		 }
    
		 printf("\n\t航班号   起始站  终点站   姓  名   所订票数 ");
         
		 printf("\n\t %-5d   %-10s %-10s %-10s %-10d",fl[t].flightnum,fl[t].staAddr,
		 
			 fl[t].endAddr,fl[t].next[temp].customer,fl[t].next[temp].num);
		 
		 printf("\nStep3.需要退的票数:");
		 scanf("%d",&pn);

     if(pn>fl[t].next[temp].num||pn<1)
     {
       printf("\n所输入的票数不对\n\t按 <Y> 重新输入 按 <N>返回");
           do
            {
            key=getch();
            }
			while(key!='Y'&&key!='y'&&key!='n'&&key!='N');

		   if(key=='n'||key=='N')
			   {
				  printf("\n\t退票失败!\n");
				  getch();
				  return;
			   }
		   else
			   {
				 system("cls");
				   
				 printf("\n\t\t\t* * * * * * * * * *");
				 printf("\n\t\t\t  退 票 系 统 ");
			     printf("\n\t\t\t* * * * * * * * * *\n\n");
				 continue;
				}
		 }

	  fl[t].next[temp].num -=pn ;	 
      printf("\n%s,您已经成功退了 %d 张票 \n \n\t按任意键返回",fl[t].next[temp].customer,pn);
 
	  if(fl[t].next[temp].num==0)//退了全部的票,将该退票人信息删除
		 {
			  
			  itemp=fl[t].cusnum-1;
			  if(itemp!=temp)
			  {
				  strcpy(fl[t].next[temp].customer,fl[t].next[itemp].customer);
				  fl[t].next[temp].num=fl[t].next[itemp].num;
			  }
			  fl[t].cusnum--;
		 }
	 
     fl[t].booked-=pn;
     getch();


//补票
	int Rest=fl[t].ticket-fl[t].booked;
	int ticketnum=0;
	 
	for(int kk=0;kk<fl[t].waitnum && Rest>0;kk++)//fl[t].waitnum是总候票人数
	 {
		 strcpy(na,fl[t].people[kk]);
		 
		 printf("\n\t %s 有票了!",na);
		 
		 printf("请输入所需的票数(1~%d),按0放弃订票:",Rest); 
		 scanf("%d",&ticketnum);
		 
		 if(ticketnum==0)
			 continue;
		 int flag=1;
		
		 while(flag)
		 {
			if(ticketnum<=Rest && ticketnum>0)//满足补票要求
			{//补票操作
			 
				 flag=0;
				 Rest-=ticketnum;
				 
				 int jtemp=fl[t].cusnum;
				 strcpy(fl[t].next[jtemp].customer,na);
				 fl[t].next[jtemp].num=ticketnum;
				 fl[t].cusnum++;
				 fl[t].booked+=pn;
				 fl[t].waitnum--;
				 printf("\n%s,恭喜您订票成功!\n",na);			 
				 getch();	
				 break;
			}
			else//补票不成功
			{	
				printf("\n\tsorry:您所输入的票数不正确,请重新输入(输入0表示取消定票)\n");
				scanf("%d",&ticketnum);			
				if(ticketnum==0)//
				{
					flag=0;
					break;
				}
			}
		 }	 
	 }
  break;
  }  
}



void flight::search(int *length)
{  
	int ff=0,i;
    char na[10];
   
   printf("\n\t\t\t* * * * * * * * * *");
   printf("\n\t\t\t  显示我的航班信息 ");
   printf("\n\t\t\t* * * * * * * * * *\n\n");

   printf("\n\t输入您的姓名:");
   scanf("%s",na);
   
    for(i=0;i<*length;i++)//*length表示总航线数
	{
		 for(int j=0;j<fl[i].cusnum;j++)//fl[i].cusnum是该i条航线的总订票人数
		 {
		   if(strcmp(fl[i].next[j].customer,na)==0)
		   {          
			    printf("\n\n\n\t航班号    起点站   终点站  时间   姓名     票数\n\n");
			    printf("\t%-10d",(fl[i]).flightnum);				
				printf(" %-10s",(fl[i]).staAddr);				
				printf(" %-10s",(fl[i]).endAddr);				
				printf(" %-10s",(fl[i]).date);			    
				printf(" %-10s",na); 
				printf(" %-4d\n",fl[i].next[j].num);
			    
				ff++;
		   }
		 }	 
	}
   
	if(ff==0)
	   printf("\n\t没有找到您需要的航班\n");

   printf("\n\t按任意键返回");

   getch();

}  



void flight::FlightSearch(int *length)
{
	int n;

   printf("\n\t\t\t* * * * * * * * * *");
   printf("\n\t\t\t  航 班 查 询");
   printf("\n\t\t\t* * * * * * * * * *\n\n");

   printf("\n\t输入航班号:");
   scanf("%d",&n);
    
   printf("   航班号  起点站  终点站 日  期  乘员定额  已售票数  剩余票数\n\n");

  int ff=0;
  for(int i=0;i<*length;i++)
  {
	  if(fl[i].flightnum -n==0)
	  {
		printf("   %-5d",(fl[i]).flightnum);
		printf("   %-5s",(fl[i]).staAddr);	
		printf("   %-5s",(fl[i]).endAddr);	
		printf("   %-6s",(fl[i]).date);
		printf("   %-8d",(fl[i]).ticket);
		printf("   %-8d",(fl[i]).booked);
		printf("   %-6d",(fl[i]).ticket-(fl[i]).booked);
		
		ff++;

	  }		  
  }
  if(ff==0)
	printf("\n\t没有找到您需要的航班\n");

    printf("\n\t按任意键返回");
    getch();

}  


void flight::create(int *length)
{ 
	char sa[20],ea[20],date[20],password[]="123456",pa[7],key;
    int m,n,i;  
  
	printf("\n\t\t\t* * * * * * * * * *");
    printf("\n\t\t\t  增 加 航 班 ");
    printf("\n\t\t\t* * * * * * * * * *\n\n");
    int checkTimes = 1;

    printf("\n\t输入密码:");
  while(1)
  {
      for(i=0;i<7;i++)
	  {	 
		 pa[i]=getch();
		 if(pa[i]=='\r')//\r是回车符
		 {
			pa[i]='\0';
			break; 
		 }
		 printf("*");
	  }
	
	  if(strcmp(password,pa)==0)
	  {
		  printf("\n\n\t密码正确!\n");
		  break;
	  }

	  else
	  {
		  printf("\n\t密码错误\n\t按<Y>重新输入 按<N>返回\n");
	        do
				{
				key=getch();
				}
			while(key!='Y'&&key!='y'&&key!='n'&&key!='N');

		   if(key=='n'||key=='N')
		   {
			  getch();
			  return;
		   }
		   else if (checkTimes < 3)
		   {     
				 printf("\n\t您还有%d次机会\n", (3-checkTimes));
				 printf("\t输入密码:");
				 checkTimes++;
				 continue;
		   }
		   else 
		   {
			  printf("\n\t密码输入次数已达到最大\n");
			  printf("\n\t按任意键返回");
			  getch();
			  return;
		   }
	  }
  }
  printf("\n\t输入航班号:");
  scanf("%d",&n);
  printf("\n\t输入起点站:");
  scanf("%s",sa);
  printf("\n\t输入终点站:");
  scanf("%s",ea);
  printf("\n\t输入日期:");
  scanf("%s",date);
  printf("\n\t输入票数:");
  scanf("%d",&m);
  
  
  
  //添加新航班信息
  strcpy(fl[*length].staAddr,sa);
  strcpy(fl[*length].endAddr,ea);
  fl[*length].flightnum=n;
  strcpy(fl[*length].date,date);
  fl[*length].ticket=m;
  fl[*length].booked=0;
  fl[*length].cusnum=0;
  printf("\n");
  printselect(*length,n);
  printf("\n\t按任意键返回\n");
  (*length)++;//总航班数+1
  getch();
}




void flight::deleteflight(int *length)//删除航线
{ 
	char password[]="123456",pa[7],key;
	int n,i,kk,j;
    
	printf("\n\t\t\t* * * * * * * * * *");
    printf("\n\t\t\t  删 除 航 班 ");
	printf("\n\t\t\t* * * * * * * * * *\n\n");
	int checkTimes = 1;

    printf("\n\t输入密码:");
  while(1)
  {
      for(i=0;i<7;i++)
	  {
       pa[i]=getch();
		   if(pa[i]=='\r')//回车符
		   {
			 pa[i]='\0';
			 break; 
		   }
       printf("*");
	  }
	  if(strcmp(password,pa)==0)
	  {
		  printf("\n\n\t密码正确!\n");
		  break;
	  }
	  else
	  {
		  printf("\n\t密码错误\n\t按<Y>重新输入 按<N>返回\n");
	       do
				{
				key=getch();
				}
			while(key!='Y'&&key!='y'&&key!='n'&&key!='N');

		   if(key=='n'||key=='N')
		   {
			 printf("\n\t按任意键返回");
			  getch();
			  return;
		   }
		   else if (checkTimes < 3)
		   {     
				 printf("\n\t您还有%d次机会\n", (3-checkTimes));
				 printf("\t输入密码:");
				 checkTimes++;
				 continue;
		   } 
		   else 
		   {
			  printf("\n\t密码输入次数已达到最大\n");
			  printf("\n\t按任意键返回");
			  getch();
			  return;
		   }

	  }
  }
   
  printf("\n\t输入航班号:");
  scanf("%d",&n);
  	const int ft=findflight(n,length);
	
	if(ft==999)
	{
		printf("\n\t没有找到航班,按任意键返回");
		getch();
	}
	else
	{
		printf("\n\t确定要删除航班%d吗?按<Y>删除",n);
		char ch=getch();
		if(ch=='Y'||ch=='y')
		{
			const int l=(*length)-1;
			if (ft!=l)//ft是要删除的航线,l是最后一条航线;将最后一条航线往前复制
		{	
			fl[ft].flightnum=fl[l].flightnum;
			fl[ft].booked=fl[l].booked;
			fl[ft].cusnum=fl[l].cusnum;
			fl[ft].waitnum=fl[l].waitnum;
			strcpy(fl[ft].date,fl[l].date);
			strcpy(fl[ft].endAddr,fl[l].endAddr);
		
			for (int j=0;j<fl[l].cusnum;j++)
			{
				strcpy(fl[ft].next[j].customer,fl[l].next[j].customer);
			}		

			fl[ft].next->num=fl[l].next->num;
			for (j=0;j<fl[l].waitnum;j++)
			{
				strcpy(fl[ft].people[j],fl[l].people[j]);
			}
			strcpy(fl[ft].staAddr,fl[l].staAddr);
			fl[ft].ticket=fl[l].ticket;
		}
	
		(*length)--;//总航线数-1
		printf("\n\n\t已成功删除航班%d",n);
		}
	}
  printf("\n");
  printall(length);//打印所有航线
}


//void flight::help()
//{
//	printf("\n\t\t\t* * * * * * * * * *");
//    printf("\n\t\t\t  帮        助");
//	printf("\n\t\t\t* * * * * * * * * *\n\n");
//
//	printf("\n\n\t\t    1.本次共有 1001--1005 航班\n");
//	printf("\n\t\t      2.日期输入格式为"月.日"\n");
//	printf("\n\t\t      3.为了照顾他人,请按需订票");
//	printf("\n\t\t      如有其他疑问其咨询服务台\n");
//	printf("\n\t\t      祝您旅途愉快!\n");
//	printf("\n\t\t      按任意键返回\n");
//	getch();
//	
//}

⌨️ 快捷键说明

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