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

📄 cpp1.cpp

📁 航空售票系统 查询班次
💻 CPP
字号:
/*
程序采用链表和顺序表的混合设计

功能:可以输入姓名查询自己的航班信息
      可以订票,退票
      可以增加航班(设置了密码)
几个函数功能的描述:
void init(flightmange* fl,char fn[][20],int fnum[],int tic[] ) 初始化航班信息
void printall(flightmange* fl,int *length)显示所有航班信息
void welcome()显示主界面
int findflight(flightmange *fl,int n,int *length)查询是否存在此航班号
void printselect(flightmange *fl,int i,int n)显示当前航班信息
void booktic(flightmange *fl,int *length)订票
flightdetail* findname(flightdetail *m,char na[]) 搜索指定用户名
void returntic(flightmange *fl,int *length)退票
void search(flightmange *fl,int *length)搜索指定用户的航班信息
void create(flightmange *fl,int *length)在原有的航班基础上添加新航班

*/
#define N 5
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#include "ctype.h"
#include "conio.h"

typedef struct flightdetail
{
   char customer[10];
   int num;
   struct flightdetail *next;

}flightdetail;


typedef struct flightmange
{
//   char name[20];
   char date[20];
   char staAddr[20];
   char endAddr[20];
   int booked;
   int ticket;
   int flightnum;
   char people[5][20];
   flightdetail *next;
}flightmange;

void init(flightmange* fl,char staAdd[][20],char endAdd[][20],char date[][20],int fnum[],int tic[] )
{
   int i;
   flightdetail *fd;
   for(i=0;i<N;i++)
   {  fd=(flightdetail *)malloc(sizeof(flightdetail));
 //     strcpy((fl[i]).name,fn[i]);
   strcpy((fl[i]).staAddr,staAdd[i]);
    strcpy((fl[i]).endAddr,endAdd[i]);
	  strcpy((fl[i]).date,date[i]);
      (fl[i]).booked=0;
      (fl[i]).ticket=tic[i];
      (fl[i]).flightnum=fnum[i];
      (fl[i]).next=fd;
      fd->next=NULL;
	  for(int kk=0;kk<5;kk++)
		(fl[i]).people[kk][0]='\0';
   }
}
void printall(flightmange* fl,int *length)
{
  int i;
    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();

}
void welcome()
{
	   printf("\n\n\n\t\t\t* * * * * * * * * *\n");
   printf("\t\t\t飞 机 售 退 票 系 统\n");
      printf("\t\t\t* * * * * * * * * *\n\n");
   printf("\t\t    1. 增 加 航 班(需要密码)\n");
   printf("\t\t    2. 订   票\n");
   printf("\t\t    3. 退   票\n");
   printf("\t\t    4. 显 示 所 有 航 班 信 息\n");
   printf("\t\t    5. 显 示 我 的 航 班 信 息\n");
   printf("\t\t    6. 退   出\n");
//   printf("\n\nPlease Enter a Num to Select an Item\n\n");

}  

 
int findflight(flightmange *fl,int n,int *length)
{
  int i;
  for(i=0;i<*length;i++)
    if (fl[i].flightnum==n) return i;
  return 999;

}
void printselect(flightmange *fl,int i,int 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 booktic(flightmange *fl,int *length)
{
   int i=0,n=0,t=999,nn=0;
   char na[10],key;
   flightdetail *p,*q;
   printf("\n\t\t\t* * * * * * * * * *");
   printf("\n\t\t\t  订 票 系 统 ");
   printf("\n\t\t\t* * * * * * * * * *\n\n");
   while(1)
   {
     printf("\t请输入航班号:");
     scanf("%d",&n);
	 t=findflight(fl,n,length);
     if(t==999)  {
                printf("\n没有找到您所要的航班号,请重新输入:");
                getch();
 //               system("cls");
//				printf("\n\t\t\t订 票 系 统\n\n");
                continue;
                    }

      printselect(fl,t,n);
	        printf("\n\t请输入您的姓名和所需的票数: ");
      printf("\n\t姓名:");
      scanf("%s",na);
      printf("\n\t票数:");
      scanf("%d",&nn);
      if(nn==0)
      {
		  printf("\n\t出错:所输入的票数不正确\n");
       getch();
       system("cls");
		printf("\n\t\t订 票 系 统\n\n");
       continue;

      }
      if(nn<=(fl[t].ticket-fl[t].booked)&&n>=1)
      {
       q=fl[t].next->next;
       p=(flightdetail *)malloc(sizeof(flightdetail));
       strcpy(p->customer,na);
       p->num=nn;
       p->next=q;
       fl[t].next->next=p;
       fl[t].booked+=nn;
       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')
       {
                   system("cls");
                printf("\n\t\t\t\t 订 票 系 统\n\n");
                continue;
       }
       
	   else if(key=='W'||key=='w')//候票
	   {
		   for(int kk=0;kk<5&&fl[t].people[kk][0]!='\0';kk++)
			   ;
		   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;
       }
   }
}  


flightdetail* findname(flightdetail *m,char na[])
{
   flightdetail *p=m;
   m=m->next;
   while(m!=NULL)
   {
     if(strcmp(m->customer,na)==0) return p;
     p=m;
     m=m->next;
   }
   return NULL;
}

void returntic(flightmange *fl,int *length)
{
   int i=0,n=0,t=999,nn=0;
   char na[10],key;
   flightdetail *p,*q;
   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(fl,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')
       {
//          printf("\n\tOperation Failed ,Thanks for Using");
          getch();
          return;
       }
       else{
             system("cls");
             printf("\n\t\t\t退 票 系 统\n\n");
             continue;
            }
     }
 //           printf("\nCorrect Flight Num!\n\n");
            printf("Step2.姓名:");
            scanf("%s",na);
            p=findname(fl[t].next,na);
         if(p==NULL)
        {
            printf("\n没有找到您的信息!\n 按<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退 票 系 统\n\n");
             continue;
            }
     }
     printf("\n\t航班号   起始站  终点站   姓  名   所订票数 ");
     printf("\n\t %-5d   %-10s %-10s %-10s %-10d",fl[t].flightnum,fl[t].staAddr,fl[t].endAddr,p->next->customer,p->next->num);
     printf("\nStep3.需要退的票数:");
     scanf("%d",&nn);
     q=p->next;
     if(nn>q->num||nn<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订 票 系 统\n");
             continue;
            }
     }
      q->num-=nn;
      printf("\n%s,您已经成功退了 %d 张票 \n \n\t按任意键返回",q->customer,nn);
     if(q->num==0)
     {
      p->next=q->next;
      free(q);
     }
     fl[t].booked-=nn;
     getch();


//补票
	int Rest=fl[t].ticket-fl[t].booked;
	int ticketnum=0;
//	char ch;
	 for(int kk=0;kk<5 && fl[t].people[kk][0]!='\0' && Rest>0;kk++)
	 {
		 strcpy(na,fl[t].people[kk]);
		 printf("\n\t %s 有票了!",na);
		 printf("请输入所需的票数(1~%d),按0放弃订票\n",Rest);
		 
		 scanf("%d",&ticketnum);
		 if(ticketnum==0)
			 continue;
		 int flag=1;
		 while(flag)
		 {
			if(ticketnum<=Rest && ticketnum>0)
			{
			flag=0;
			 Rest-=ticketnum;
			 q=fl[t].next->next;
			 p=(flightdetail *)malloc(sizeof(flightdetail));
			 strcpy(p->customer,na);
			 p->num=ticketnum;
			 p->next=q;
			 fl[t].next->next=p;
			 fl[t].booked+=nn;
			 printf("\n%s,恭喜您订票成功!\n",na);			 
			 getch();	
			 break;
			}
			else
			{	
				printf("\nsorry:您所输入的票数不正确,请重新输入\n");
				scanf("%d",&ticketnum);			
				if(ticketnum==0)
				{
					flag=0;
					break;
				}
			}
		 }	 
	 }
	 
  break;
  }  
}
void search(flightmange *fl,int *length)
{  int ff=0,i;
   char na[10];
   flightdetail *p;
   printf("Enter Your Name:");
    scanf("%s",na);
   printf("\n\n\t航班号    起点站   终点站  时间   姓名     票数\n\n");
    for(i=0;i<*length;i++)
   {
	p=fl[i].next->next;
//	int zhou=(p==NULL);
     while(p)
     {
       if(strcmp(p->customer,na)==0)
          {           
           printf("\t%-10d",(fl[i]).flightnum);
		    printf(" %-10s",(fl[i]).staAddr);
			printf(" %-10s",(fl[i]).endAddr);
			printf(" %-10s",(fl[i]).date);
           printf(" %-10s",p->customer);
           printf(" %-4d\n",p->num);
           ff++;
        }
      p=p->next;
     }
   }
   if(!ff) printf("\n\t没有找到您需要的航班");
   getch();

}  

 


void create(flightmange *fl,int *length)
{ 
	char sa[20],ea[20],date[20],password[]="123456",pa[7],key;
  int m,n,i;
  flightdetail *p;
  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{
 //            system("cls");
             printf("\t输入密码:");
             continue;
            }

  }
  }
//system("cls");
  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;
  p=(flightdetail *)malloc(sizeof(flightdetail));
  p->next=NULL;
  fl[*length].next=p;
  printf("\n");
  printselect(fl,*length,n);
	printf("\n\t按任意键返回\n");
  (*length)++;
  getch();
}

void main()
{ 
	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,1001,1002,1003,1004},tic[N]={11,42,32,34,12};
   char key;
   flightmange *fl;
   int size=50,length=N;
   fl=(flightmange *)malloc(size*sizeof(flightmange));
   init(fl,sa,ea,date,fnum,tic) ;
   system("cls");
 /*  printf("\t\t\t* * * * * * * * * *\n");
   printf("\n\t\t民航售票系统\n\n\n");
   printf("\t\t\t* * * * * * * * * *\n");

   printf("\nInfo:This Programe was Compiled With Visual C++,\n     And Has Been Tested On TurboC2.0");
   getch();
   printf("\nInitialize Success!\nNow Press Any Key to Continue");
   getch();
   system("cls");
   */
   welcome();
   while((key=getch())!='6')
   {
      switch(key)
      {   case '1' :system("cls");create(fl,&length);system("cls");welcome();break;
          case '2' :system("cls");booktic(fl,&length);system("cls");welcome();break;
          case '3' :system("cls");returntic(fl,&length);system("cls");welcome();break;
          case '4' :system("cls");printall(fl,&length);system("cls");welcome();break;
          case '5' :system("cls");search(fl,&length);system("cls");welcome();break;
		 	  
          default :;
      }
   }
}
 

⌨️ 快捷键说明

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