




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 航空客运订票系统姓名:xxx 班级:xxxx 学号:xxxxxxxxx目录一、 问题描述.1二、 设计要求.1三、 数据结构设计.2四、 详细设计程序.3五、 运行与测试.9六、 收获及体会.13一、问题描述设计一个航空客运订票系统,为乘客提供各种航空客运信息服务。二、 设计要求 1 每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量); 2 系统能实现的操作和功能如下: a) 查询航线: 根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一
2、天航班的日期和余票额; b) 承办订票业务: 根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续, 输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。若需要,可登记排队候补; c) 承办退票业务: 根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。 三、 数据结构设计a)等候替补的客户名单(包括姓名、所需票量)typedef struct wat_ros char name10;/*姓名*/ int req
3、_amt;/*订票量*/ struct wat_ros *next;qnode,*qptr;typedef struct pqueu qptr front;/*等候替补客户名单域的头指针*/ qptr rear;/*等候替补客户名单域的属指针*/linkqueue;b)订票的客户名单(包括姓名、订票量、舱位等级1,2或3)typedef struct ord_ros char name10;/*客户姓名*/ int ord_amt;/*订票量*/ int grade;/*舱位等级*/ struct ord_ros *next;linklist;c)每条航线所涉及的信息:终点站名、航班号、飞机号
4、、飞行日(星期几)、乘员定额、余票量、已订票的客户名单、以及等候替补的客户名单struct airline char zong_name10;/*终点站名*/ char air_num10;/*航班号*/ char plane_num10;/*飞机号*/ char date7;/*飞行日期(星期几)*/ int tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/ linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/lineinfo;四、详细设计程序主函数
5、:int menu_select()/*菜单界面*/ int c; char s20; printf("ntt航空客运订票系统n"); printf("*n"); printf(" 1.浏览航线信息n"); printf(" 2.浏览已订票客户信息n"); printf(" 3.查询航线n"); printf(" 4.办理订票业务n"); printf(" 5.办理退票业务n"); printf(" 6.查看剩余票数并排序n"); pr
6、intf(" 0.退出系统n"); printf("*n"); do printf("请选择:"); scanf("%s",s); c=atoi(s); while(c<0|c>7); return c;void main() start=air;for(;) switch(menu_select() case 1:list();break; case 2:prtlink();break; case 3:search();break; case 4:order();break; case 5:retur
7、n_tkt();break; case 6:sort_tkt();break; case 0:printf("n欢迎使用本系统,再见!n");exit(0); printf("nPress any key to continue!n"); getch();航线信息:struct airline char zong_name10;/*终点站名*/ char air_num10;/*航班号*/ char plane_num10;/*飞机号*/ char date7;/*飞行日期(星期几)*/ int tkt_amt;/*乘员定额*/ int tkt_sur;
8、/*余票量*/ linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/ linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/lineinfo;struct airline *start;struct airline airMAXSIZE="aaa","1","001","SUN",30,15, "bbb","2","002","MON",40,10, "ccc&q
9、uot;,"3","003","FRI",50,14,"ddd","4","004","TUE",60,20;void display(struct airline *info)/*打印每条航线的基本信息*/printf("%8st%3st%st%4stt%3dt%10dn",info->ter_name,info->air_num,info->plane_num,info->date,info->tkt_
10、amt,info->tkt_sur);void list()/*打印全部航线信息*/ struct airline *info; int i=0; info=start; printf("终点站名t航班号t飞机号t飞行日期t乘员定额t余票量n"); while(i<MAXSIZE) display(info); info+; i+; printf("nn");查询航线:void search()/*根据客户提出的终点站名输出航线信息*/ struct airline *info,*find(); char name10; int i=0; i
11、nfo=start; printf("请输入终点站名:"); scanf("%s",name); while(i<MAXSIZE) if(!strcmp(name,info->zong_name) break; info+; i+; if(i>=MAXSIZE) printf("对不起,该航线未找到!n"); else printf("终点站名t航班号t飞机号t飞行日期t乘员定额t余票量n"); display(info); struct airline *find()/*根据系统提出的航班号查询
12、并以指针形式返回*/ struct airline *info; char number10; int i=0; info=start; printf("请输入航班号:"); scanf("%s",number); while(i<MAXSIZE) if(!strcmp(number,info->air_num) return info; info+; i+; printf("对不起,该航线末找到!n"); return NULL;客户信息:void prtlink()/*打印订票乘员名单域的客户名单信息*/ linkli
13、st *p; struct airline *info; info=find(); p=info->order; if(p!=NULL) printf("客户姓名 订票数额 舱位等级n"); while(p) printf("%stt%dt%dn",p->name,p->ord_amt,p->grade); p=p->next; else printf("该航线没有客户信息!n");linklist *insertlink(linklist *head,int amount,char name,int g
14、rade)/*增加订票乘员名单域的客户信息*/ linklist *p1,*new1; p1=head; new1=(linklist *)malloc(sizeof(linklist); if(!new1) printf("nOut of memory!n");return NULL; strcpy(new1->name,name); new1->ord_amt=amount; new1->grade=grade; new1->next=NULL; if(head=NULL)/*若原无订票客户信息*/ head=new1;new1->next
15、=NULL; else head=new1; new1->next=p1; return head;linkqueue appendqueue(linkqueue q,char name,int amount)/*增加排队等候的客户名单域*/ qptr new1;new1=(qptr)malloc(sizeof(qnode);strcpy(new1->name,name);new1->req_amt=amount;new1->next=NULL;if(q.front=NULL)/*若原排队等候客户名单域为空*/ q.front=new1;else q.rear->
16、next=new1;q.rear=new1;return q;订票业务:void order()/*办理订票业务*/ struct airline *info; int amount,grade; char name10; info=start; if(!(info=find() return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/ printf("请输入你订票所需要的数量:"); scanf("%d",&amount); if(amount>info->tkt_amt)/*若客户订票额超过乘员定票总额,退出*/ p
17、rintf("n对不起,您输入的票的数量已经超过乘员定额!"); return; if(amount<=info->tkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/ int i; printf("请输入您的姓名(订票客户):"); scanf("%s",name); printf("请输入%s票的舱位等级:",name); scanf("%d",&grade); info->order=insertlink(info->order,amount
18、,name,grade);/*在订票乘员名单域中添加客户信息*/ for(i=0;i<amount;i+)/*依次输出该订票客户的座位号*/ printf("%s的座位号是:%dn",name,info->tkt_amt-info->tkt_sur+i+1); info->tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/ printf("n祝您乘坐愉快!n"); else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ char r; printf("n已经没有更多的票,您需要排
19、队等候吗?(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"); else printf("n欢迎您下次再次订购!n"); 退票
20、业务:void return_tkt()/*退票模块*/ struct airline *info; qnode *t,*back,*f,*r; int grade; linklist *p1,*p2,*head; char cusname10; if(!(info=find() return;/*调用查询函数,根据客户提供的航线进行搜索*/ head=info->order; p1=head; printf("请输入你的姓名(退票客户):"); scanf("%s",cusname); while(p1!=NULL) /*根据客户提供的姓名到订票
21、客户名单域进行查询*/ if(!strcmp(cusname,p1->name) break; p2=p1;p1=p1->next; if(p1=NULL) printf("对不起,你没有订过票!n");return;/*若未找到,退出本模块*/ else /*若信息查询成功,删除订票客户名单域中的信息*/ if(p1=head) head=p1->next; else p2->next=p1->next; info->tkt_sur+=p1->ord_amt; grade=p1->grade; printf("%s
22、成功退票!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)/*若满足条件者为头结点*/ int i; info->wait.front=t-&g
23、t;next; printf("%s订票成功!n",t->name); for(i=0;i<t->req_amt;i+)/*输出座位号*/ printf("%s的座位号是:%dn",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;
24、t=t->next; if(info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若满足条件者不为头结点*/ int i; back->next=t->next; printf("%s订票成功!n",t->name); for(i=0;i<t->req_amt;i+)/*输出座位号*/ printf("<%s>'s seat number is:%dn",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; 剩票排序:vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 天府新区信息职业学院《果蔬加工工艺学实验》2023-2024学年第二学期期末试卷
- 上海旅游高等专科学校《基础教育改革研究》2023-2024学年第二学期期末试卷
- 西安科技大学《生物医学仪器分析》2023-2024学年第二学期期末试卷
- 江苏师范大学《嵌入式系统理论》2023-2024学年第二学期期末试卷
- 2024年纺织专业知识考题试题及答案
- 学社联笔试题目及答案
- 宏观财税面试题及答案
- 2024年考试成功的知识体系构建试题及答案
- 商业设计师考试的难点攻克方法试题及答案
- 招聘测试题及答案解析
- 人教版数学八年级下册17.1《勾股定理》(第1课时)听评课记录
- 2025届高考英语读后续写提分技巧+讲义
- 粮食熏蒸培训课件
- 2024秋国家开放大学《四史通讲》形考作业、期末大作业试卷ABC参考答案
- 工会法律知识竞赛考试题库200题(含答案)
- 辽宁省第二届职业技能大赛(健康照护赛项)理论参考试题及答案
- GB/T 44770-2024智能火电厂技术要求
- 【经典文献】《矛盾论》全文
- 存款保险条例培训
- 舰艇损害管制与舰艇损害管制训练
- 惠州市2025届高三第二次调研考试(二调)试题 政治试卷(含答案解析)
评论
0/150
提交评论