ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:89.03KB ,
资源ID:498791      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-498791.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(航空客运订票系统实验报告.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

航空客运订票系统实验报告.docx

1、航空客运订票系统实验报告 实习报告题目:设计一个包括查询航线、客票预订和办理退票等业务的航空客运订票系统班级: 姓名: 学号: 完成日期:一、需求分析 1 每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量); 2 全部数据可以只放在内存中; 3 系统能实现的操作和功能如下: a) 查询航线: 根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额; b) 承办订票业务: 根据客户提出的要求(航班号、订票数额)查询该航班票额情

2、况,若尚有余票,则为客户办理订票手续, 输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。若需要,可登记排队候补; c) 退票业务: 根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询 问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。 4.测试数据:1.查看航线信息2.办理订票业务: 航班号:5 订票数量:5 姓名:1 舱位等级:13.办理订票业务: 航班号:5 订票数量:6 是否候票:y 姓名:24.办理订票业务: 航班号:5 订票数量:3 是否候票:y 姓名:35.办理退票业务: 航班号:

3、5 姓名:16查询航线: 终点站名:haerbin7查看已定票客户信息:航班号:58查询航线: 终点站名:shanghai详细测试数据见调试分析。 二、概要设计 1本程序含有订票客户结构体,候补队列,航线结构体等3个主要模块。Main 和菜单menu也是重要模块。客户结构采用链表存储,主要操作有插入insert;队列采用链队列存储,主要操作有插入add,航线结构采用顺序存储。 2功能模块说明(1)显示已初始化的全部航线信息利用airlinelist()函数。(2)浏览已订票客户信息利用Viewlink()函数。(3)根据客户提出的终点站名,调用search()函数输出航线信息。(4)order

4、()办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。(5)refund()办理退票业务:调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。退票成功后,重新将航线名单域指向订票单链表的头指针。根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。(6)退出本系统三、详细设计1.主程序中需要的全程量#define FLIGHT_NU

5、MBER 5 /*给定5条航线*/#define MAX 200 /*给定座位号最大为200*/int seatMAX=0,0;/*初始化每条航线200个座位号为0,即未被预定*/int seat_numMAX; /*暂时存放已发给客户的座位号,为存放到客户名单域的媒介*/2.链队列类型(1)结点类型typedef struct QNode char name10;/*等候替补客户姓名*/ int Wnumber;/*订票量*/ struct QNode *next;QNode,*Queueptr;(2)队列类型typedef struct WaitQueue Queueptr front;

6、/*等候替补客户名单域的头指针*/ Queueptr rear; /*等候替补客户名单域的属指针*/LinkQueue; /*等候替补客户用链队列存储*/LinkQueue AddQueue(LinkQueue q,char name,int amount)return q;返回等候替补的客户名单域为分别指向队头和队尾的指针3.链表类型typedef struct LNode /*定义已定票客户的线性链表结构*/ char name10;/*客户姓名*/ int Book_num;/*订票量*/ int grade;/*舱位等级*/ int numMAX;/*订票客户的座位号*/ struct

7、 LNode *next;LinkList;LinkList *InsertLink(LinkList *head,int amount,char name,int grade,int *seat_num)return head返回链表头指针4.线性表类型typedef struct airline /*定义航线的结构*/ char terminus10;/*终点站名 */ char flight_num10;/*航班号*/ char plane_num10;/*飞机号*/ char day7;/*飞行周日(星期几)*/ int total_num;/*乘员定额数量*/ int remain_

8、num;/*余票量*/ int seatMAX; /*每条航线的座位数额为MAX设定大于乘员定额数量*/ LinkList *order;/*乘员名单域,指向乘员名单链表的头指针*/ LinkQueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/SqList;struct airline *first; /*定义指向航线结构的指针*/5程序伪码:#include #include #include #include#define FLIGHT_NUMBER 5 /*给定5条航线*/#define MAX 200 /*给定座位号最大为200*/int seatMA

9、X=0,0;/*初始化每条航线200个座位号为0,即未被预定*/int seat_numMAX; /*暂时存放已发给客户的座位号,为存放到客户名单域的媒介*/typedef struct QNode char name10;/*等候替补客户姓名*/ int Wnumber;/*订票量*/ struct QNode *next;QNode,*Queueptr;typedef struct WaitQueue Queueptr front; /*等候替补客户名单域的头指针*/ Queueptr rear; /*等候替补客户名单域的属指针*/LinkQueue; /*等候替补客户用链队列存储*/ty

10、pedef struct LNode /*定义已定票客户的线性链表结构*/ char name10;/*客户姓名*/ int Book_num;/*订票量*/ int grade;/*舱位等级*/ int numMAX;/*订票客户的座位号*/ struct LNode *next;LinkList;typedef struct airline /*定义航线的结构*/ char terminus10;/*终点站名 */ char flight_num10;/*航班号*/ char plane_num10;/*飞机号*/ char day7;/*飞行周日(星期几)*/ int total_num

11、;/*乘员定额数量*/ int remain_num;/*余票量*/ int seatMAX; /*每条航线的座位数额为MAX设定大于乘员定额数量*/ LinkList *order;/*乘员名单域,指向乘员名单链表的头指针*/ LinkQueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/SqList;struct airline *first; /*定义指向航线结构的指针*/void display(struct airline *info) /*输出每条航线的基本信息*/printf(%8st%3st%4st%5stt%5dt%12dn,info-term

12、inus,info-flight_num,info-plane_num,info-day,info-total_num,info-remain_num);void airlinelist()/*显示全部航线信息*/ struct airline *info; /*定义指向航线结构的指针*/ int i=0; info=first; /*将指向第一条航线的指针赋给info*/ printf(终点站名t航班号t飞机号t飞行周日t乘员定额t余票量n); while(iFLIGHT_NUMBER) display(info); info+; /*指向下一条航线的指针,即查找下一条航线*/ i+; /w

13、hile printf(nn);/airlinelistvoid search() /*搜索客户提出的终点站名,若存在,则输出该航线基本信息*/ struct airline *info; char name10; int i=0; int j=0; /*j用来记录与客户提出的终点站名相同的航线条数*/ info=first; /*将指向第一条航线的指针赋给info*/ printf(请输入终点站名:); scanf(%s,name); while(iterminus) if(j=0) printf(终点站名t航班号t飞机号t飞行周日t乘员定额t余票量n); display(info); j+

14、; info+; i+; /if elseinfo+; i+; /while if(j=0) printf(Sorry,没有该终点站!n);/searchstruct airline *find() /*根据客户提出的航班号查询并以指针形式返回*/ struct airline *info; char number10; int i=0; info=first; printf(请输入航班号:); scanf(%s,number); while(iflight_num) return info; info+; i+; /while return NULL;/find void Viewlink(

15、) /*显示订票乘员名单域的客户名单信息*/ LinkList *p; struct airline *info; info=find(); /*将find()函数返回的指针赋给info*/ if(info=NULL) printf(对不起,没有该航班号!n); else p=info-order; if(p!=NULL) printf(客户姓名 订票数额 舱位等级n); while(p) printf(%st%8dt%dn,p-name,p-Book_num,p-grade); p=p-next; /while /if else printf(该航线没有客户信息!n); /ViewlinkL

16、inkList *InsertLink(LinkList *head,int amount,char name,int grade,int *seat_num)/*增加订票乘员名单域的客户信息*/ LinkList *q,*p;int j; q=head; p=(LinkList *)malloc(sizeof(LinkList); /*向系统要空间存放新增的乘员名单域*/ if(!p) printf(nOut of memory!n); return NULL; strcpy(p-name,name); p-Book_num=amount; p-grade=grade; p-next=NUL

17、L; for(j=0;jnumj=(*seat_num)+;/*记录该乘员座位号,若其退票则可以回收对应的座位号*/ if(head=NULL) /*若原无订票客户信息*/ head=p;p-next=NULL; else /*新增订票客户从订票乘员链表前面插入*/ head=p; p-next=q; return head; /*返回链表头指针,该头指针此时指向新增乘员名单域*/LinkQueue AddQueue(LinkQueue q,char name,int amount)/*增加排队等候的客户名单域*/ Queueptr p; p=(Queueptr)malloc(sizeof(Q

18、Node);/*向系统要空间存储排队客户*/ strcpy(p-name,name); p-Wnumber=amount; p-next=NULL; if(q.front=NULL)/*若原排队等候客户名单域为空*/ q.front=p; else q.rear-next=p; q.rear=p; return q;void order() /*办理订票业务*/ struct airline *info; int amount,grade; char name10; info=find(); if(info=NULL)printf(对不起,没有该航班号);return ;/*根据客户提供的航班

19、号进行查询,如为空,退出该模块*/ printf(请输入你订票所需要的数量:); scanf(%d,&amount); if(amountinfo-total_num)/*若客户订票额超过乘员定票总额,退出*/ printf(n对不起,您输入的票的数量已经超过乘员定额!); return; if(amountremain_num)/*若客户订票额末超过余票量,订票成功并等记信息*/ int i,j; j=0; printf(请输入您的姓名(订票客户):); scanf(%s,name); printf(请输入%s票的舱位等级:,name); scanf(%d,&grade); for(i=1;

20、itotal_num;i+)/*依次输出该订票客户的座位号*/ if(j=amount) break; while(info-seati=0)/*查找未被定去的座位号*/ info-seati=info-seati-1+1; printf(%s的座位号是:%dn,name,info-seati);/*将还没被订走的座位号发给订票客户*/ seat_numj=info-seati;/*将刚发出的座位号存放到数组seat_num再存放到订票乘员名单域中,为其退票回收座位号做准备*/ j+; info-order=InsertLink(info-order,amount,name,grade,sea

21、t_num);/*在订票乘员名单域中添加客户信息*/ info-remain_num-=amount;/*该航线的余票量应减掉该客户的订票量*/ printf(n订票成功,祝你乘坐愉快!n); else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ char r; printf(n已经没有更多的票,您需要排队等候吗?(Y/N); r=getch(); printf(%c,r); if(r=Y|r=y) printf(n请输入您的姓名(排队订票客户):); scanf(%s,name); info-wait=AddQueue(info-wait,name,amount);/*在

22、排队等候乘员名单域中添加客户信息*/ printf(n注册成功!n); else printf(n欢迎您下次再次订购!n); void refund() /*退票模块*/ struct airline *info; QNode *m,*back,*n,*p; int grade; LinkList *p1,*p2,*head; char cusname10; info=find(); if(info=NULL) printf(对不起,没有该航班号);return;/*调用查询函数,根据客户提供的航线进行搜索*/ head=info-order; p1=head; printf(请输入你的姓名(

23、退票客户):); scanf(%s,cusname); while(p1!=NULL) /*根据客户提供的姓名到订票客户名单域进行查询*/ if(!strcmp(cusname,p1-name) break; p2=p1;p1=p1-next; if(p1=NULL) printf(对不起,你没有订过票!n);return;/*若未找到,退出本模块*/ else/*若信息查询成功,删除订票客户名单域中的信息*/ int j,k; for(j=0;jBook_num;j+)/*将退票座位号初始为0即未被预定*/ k=p1-numj; info-seatk=0; if(p1=head) head=

24、p1-next; else p2-next=p1-next; info-remain_num+=p1-Book_num; grade=p1-grade; printf(%s成功退票!n,p1-name); free(p1); info-order=head;/*重新将航线名单域指向订票单链表的头指针 */ n=(info-wait).front;/*n指向排队等候名单队列的头结点*/ p=(info-wait).rear;/*p指向排队等候名单队列的尾结点*/ m=n;/*m为当前满点条件的排队候补名单域*/ while(m) if(m=(info-wait).front) if(info-r

25、emain_num=info-wait.front-Wnumber)/*若满足条件者为头结点*/ int i,j; info-wait.front=m-next; printf(%s订票成功!n,m-name); for(i=1,j=0;itotal_num;i+)/*依次输出该等候替补客户的座位号*/ if(j=m-Wnumber) break; while(info-seati=0) info-seati=info-seati-1+1; printf(%s的座位号是:%dn,m-name,info-seati); seat_numj=info-seati; j+; /*while*/ /*

26、for*/ info-remain_num-=m-Wnumber; info-order=InsertLink(info-order,m-Wnumber,m-name,grade,seat_num);/*插入到订票客户名单链表中*/ free(m); m=info-wait.front; /*if*/ else back=m; m=m-next; /*if*/ else if(info-remain_num)=(m-Wnumber)/*若满足条件者不为头结点*/ int i,j; back-next=m-next; printf(%s订票成功!n,m-name); for(i=1,j=0;it

27、otal_num;i+)/*依次输出该替补订票客户的座位号*/ if(j=m-Wnumber) break; while(info-seati=0)info-seati=info-seati-1+1; printf(%s的座位号是:%dn,m-name,info-seati); seat_numj=info-seati; j+; /*while*/ /*for*/ info-remain_num-=m-Wnumber; info-order=InsertLink(info-order,m-Wnumber,m-name,grade,seat_num);/*插入到订票客户名单链表中*/ free(

28、m); m=back-next; /*if*/ else back=m; m=m-next; /*else*/ /*else if*/ /*while*/ /*refund*/int menu()/*菜单界面*/ int a; char b20; printf(ntt航空客运订票系统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(请选择你需要的功能(例如:你想办理订票

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2