航空客运订票系统:xxx班级:xxxx学号:xxxxxxxxx目录一、问题描述………………………………………………………………..1二、设计要求…..………………………………………………………………..1三、数据结构设计………………………………………………………………..2四、详细设计程序………………………………………………………………..3五、运行与测试…….………………………………………………...................9六、收获及体会…………….……………………………………………..13一、问题描述设计一个航空客运订票系统,为乘客提供各种航空客运信息服务。二、设计要求1.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户(包括、订票量、舱位等级1,2或3)以及等候替补的客户(包括、所需票量);2.系统能实现的操作和功能如下:a)查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;b)承办订票业务:......专业技术资料根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。若需要,可登记排队候补;c)承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。三、数据结构设计a)等候替补的客户(包括、所需票量)typedefstructwat_ros{charname[10];/**/intreq_amt;/*订票量*/structwat_ros*next;}qnode,*qptr;typedefstructpqueu{qptrfront;/*等候替补客户域的头指针*/qptrrear;/*等候替补客户域的属指针*/}linkqueue;b)订票的客户(包括、订票量、舱位等级1,2或3)typedefstructord_ros{charname[10];/*客户*/......专业技术资料intord_amt;/*订票量*/intgrade;/*舱位等级*/structord_ros*next;}linklist;c)每条航线所涉及的信息:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户、以及等候替补的客户structairline{charzong_name[10];/*终点站名*/charair_num[10];/*航班号*/charplane_num[10];/*飞机号*/chardate[7];/*飞行日期(星期几)*/inttkt_amt;/*乘员定额*/inttkt_sur;/*余票量*/linklist*order;/*乘员域,指向乘员链表的头指针*/linkqueuewait;/*等候替补的客户域,分别指向排队等候队头队尾的指针*/}lineinfo;四、详细设计程序主函数:intmenu_select()/*菜单界面*/{intc;chars[20];printf(\n\t\t航空客运订票系统\n);......专业技术资料printf(******************************************\n);printf(1.浏览航线信息\n);printf(2.浏览已订票客户信息\n);printf(3.查询航线\n);printf(4.办理订票业务\n);printf(5.办理退票业务\n);printf(6.查看剩余票数并排序\n);printf(0.退出系统\n);printf(*******************************************\n);do{printf(请选择:);scanf(%s,s);c=atoi(s);}while(c0||c7);returnc;}voidmain(){start=air;for(;;){switch(menu_select())......专业技术资料{case1:list();break;case2:prtlink();break;case3:search();break;case4:order();break;case5:return_tkt();break;case6:sort_tkt();break;case0:printf(\n欢迎使用本系统,再见!\n);exit(0);}printf(\nPressanykeytocontinue!\n);getch();}}航线信息:structairline{charzong_name[10];/*终点站名*/charair_num[10];/*航班号*/charplane_num[10];/*飞机号*/chardate[7];/*飞行日期(星期几)*/inttkt_amt;/*乘员定额*/inttkt_sur;/*余票量*/linklist*order;/*乘员域,指向乘员链表的头指针*/linkqueuewait;/*等候替补的客户域,分别指向排队等候队头队尾的指针*/......专业技术资料}lineinfo;structairline*start;structairlineair[MAXSIZE]={{aaa,1,001,SUN,30,15},{bbb,2,002,MON,40,10},{ccc,3,003,FRI,50,14},{ddd,4,004,TUE,60,20}};voiddisplay(structairline*info)/*打印每条航线的基本信息*/{printf(%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n,info-ter_name,info-air_num,info-plane_num,info-date,info-tkt_amt,info-tkt_sur);}voidlist()/*打印全部航线信息*/{structairline*info;inti=0;info=start;printf(终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n);while(iMAXSIZE){display(info);info++;i++;......专业技术资料}printf(\n\n);}查询航线:voidsearch()/*根据客户提出的终点站名输出航线信息*/{structairline*info,*find();charname[10];inti=0;info=start;printf(请输入终点站名:);scanf(%s,name);while(iMAXSIZE){if(!strcmp(name,info-zong_name))break;info++;i++;}if(i=MAXSIZE)printf(对不起,该航线未找到!\n);else{printf(终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n);......专业技术资料display(info);}}structairline*find()/*根据系统提出的航班号查询并以指针形式返回*/{structairline*info;charnumber[10];inti=0;info=start;printf(请输入航班号:);scanf(%s,number);while(iMAXSIZE){if(!strcmp(number,info-air_num))returninfo;info++;i++;}printf(对不起,该航线末找到!\n);returnNULL;}客户信息:voidprtlink()......专业技术资料/*打印订票乘员域的客户信息*/{linklist*p;structairline*info;info=find();p=info-order;if(p!=NULL){printf(客户订票数额舱位等级\n);while(p){printf(%s\t\t%d\t%d\n,p-name,p-ord_amt,p-grade);p=p-next;}}elseprintf(该航线没有客户信息!!\n);}linklist*insertlink(linklist*head,intamount,charname[],intgrade)/*增加订票乘员域的客户信息*/{linklist*p1,*new1;p1=head;new1=(linklist*)malloc(sizeof(linklist));if(!new1){printf(\nOutofmemory!!\n);returnNULL;}strcpy(new1-name,name);......专业技术资料new1-ord_amt=amount;new1-grade=grade;new1-next=NULL;if(head==NULL)/*若原无订票客户信息*/{head=new1;new1-next=NULL;}elsehead=new1;new1-next=p1;returnhead;}linkqueueappendqueue(linkqueueq,charname[],intamount)/*增加排队等候的客户域*/{qptrnew1;new1=(qptr)malloc(sizeof(qnode));strcpy(new1-name,name);new1-req_amt=amount;new1-next=NULL;if(q.front==NULL)/*若原排队等候客户域为空*/q.front=new1;elseq.rear-next=new1;q.rear=new1;......专业技术资料returnq;}订票业务:voidorder()/*办理订票业务*/{structairline*info;intamount,grade;charname[10];info=start;if(!(info=find()))return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/printf(请输入你订票所需要的数量:);scanf(%d,&amount);if(amountinfo-tkt_amt)/*若客户订票额超过乘员定票总额,退出*/{printf(\n对不起,您输入的票的数量已经超过乘员定额!);return;}if(amount=info-tkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/{inti;printf(请输入您的(订票客户):);scanf(%s,name);printf(请输入%s票的舱位等级:,name);......专业技术资料scanf(%d,&grade);info-order=insertlink(info-order,amount,name,grade);/*在订票乘员域中添加客户信息*/for(i=0;iamount;i++)/*依次输出该订票客户的座位号*/printf(%s的座位号是:%d\n,name,info-tkt_amt-info-tkt_sur+i+1);info-tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/printf(\n祝您乘坐愉快!\n);}else/*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/{charr;printf(\n已经没有更多的票,您需要排队等候吗?(Y/N));r=getch();printf(%c,r);if(r=='Y'||r=='y'){printf(\n请输入您的(排队订票客户):);scanf(%s,name);info-wait=appendqueue(info-wait,name,amount);/*在排队等候乘员域中添加客户信息*/p