C语言数据结构实验——航空票务管理系统/*航空票务管理系统源代码*/#includestdio.h#includestdlib.h#includestring.h#defineMAXSIZE3/*定义航线量的最大值*/typedefstructwat_ros{charname[10];/*姓名*/intreq_amt;/*订票量*/structwat_ros*next;}qnode,*qptr;typedefstructpqueue{qptrfront;/*等候替补客户名单域的头指针*/qptrrear;/*等候替补客户名单域的属指针*/}linkqueue;typedefstructord_ros{charname[10];/*客户姓名*/intord_amt;/*订票量*/intgrade;/*舱位等级*/structord_ros*next;}linklist;structairline{charter_name[10];/*终点站名*/charair_num[10];/*航班号*/charplane_num[10];/*飞机号*/charday[7];/*飞行周日(星期几)*/inttkt_amt;/*乘员定额*/inttkt_sur;/*余票量*/linklist*order;/*乘员名单域,指向乘员名单链表的头指针*/linkqueuewait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/}lineinfo;structairline*start;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-day,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-ter_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,*new;p1=head;new=(linklist*)malloc(sizeof(linklist));if(!new){printf(\nOutofmemory!!\n);returnNULL;}strcpy(new-name,name);new-ord_amt=amount;new-grade=grade;new-next=NULL;if(head==NULL)/*若原无订票客户信息*/{head=new;new-next=NULL;}elsehead=new;new-next=p1;returnhead;}linkqueueappendqueue(linkqueueq,charname[],intamount)/*增加排队等候的客户名单域*/{qptrnew;new=(qptr)malloc(sizeof(qnode));strcpy(new-name,name);new-req_amt=amount;new-next=NULL;if(q.front==NULL)/*若原排队等候客户名单域为空*/q.front=new;elseq.rear-next=new;q.rear=new;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);/*在排队等候乘员名单域中添加客户信息*/printf(\n注册成功!\n);}elseprintf(\n欢迎您下次再次订购!\n);}}voidreturn_tkt()/*退票模块*/{structairline*info;qnode*t,*back,*f,*r;intgrade;linklist*p1,*p2,*head;charcusname[10];if(!(info=find()))return;/*调用查询函数,根据客户提供的航线进行搜索*/head=info-order;p1=head;printf(请输入你的姓名(退票客户):);scanf(%s,cusname);while(p1!=NULL){/*根据客户提供的姓名到订票客户名单域进行查询*/if(!strcmp(cusname,p1-name))break;p2=p1;p1=p1-next;}if(p1==NULL){printf(对不起,你没有订过票!\n);return;}/*若未找到,退出本模块*/else{/*若信息查询成功,删除订票客户名单域中的信息*/if(p1==head)head=p1-next;elsep2-next=p1-next;info-tkt_sur+=p1-ord_amt;grade=p1-grade;printf(%s成功退票!\n,p1-name);free(p1);}info-order=head;/*重新将航线名单域指向订票单链表的头指针*/f=(info-wait).front;/*f指向排队等候名单队列的头结点*/r=(info-wait).rear;/*r指向排队等候名单队列的尾结点*/t=f;/*t为当前满点条件的排队候补名单域*/while(t){if(info-tkt_sur=info-wait.front-req_amt){/*若满足条件者为头结点*/inti;info-wait.front=t-next;printf(%s订票成功!\n,t-name);for(i=0;it-req_amt;i++)/*输出座位号*/printf(%s的座位号是:%d\n,t-name,(info-tkt_sur)-i);info-tkt_sur-=t-req_amt;info-order=insertlink(info-order,t-req_amt,t-name,grade);/*插入到订票客户名单链表中*/free(t);break;}back=t;t=t-next;if((info-tkt_sur)=(t-req_amt)&&t!=NULL)/*若满足条件者不为头结点*/{inti;back-next=t-next;printf(%s订票成功!\n,t-name);for(i=0;it-req_amt;i++)/*输出座位号*/printf(%s'sseatnumberis:%d\n,t-name,(info-tkt_sur)-i);info-tkt_sur-=t-req_amt;info-order=insertlink(info-order,t-req_amt,t-name,grade);/*插入到订票客户名单链表中*/free(t);break;}if(f==r)break;}}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(*******************************************\n);do{printf(请选择:);scanf(%s,s);c=atoi(s);}while(c0||c7);returnc;}main(){structairlineair[MAXSIZE]=