版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告 设计题目航空客运订票系统 专业班级 学号 姓名 电话 完成日期2017.04.13 1. 问题描述 2 2. 系统设计2 3. 数据结构与算法描述4 4. 测试结果与分析 6 5. 总结10 6. 参考文献 10 附录程序源代码10 第7页 课程设计题目 1. 问题描述 基于人们对航空客运使用需求的日益提高,为方便乘客提前买票及 优化飞机航空订票服务,需要开发一个飞机订票系统,此程序是为实现 航班情况的查询,订票,退票以及客户信息浏览与票务信息浏览等基本 功能。 2. 系统设计 2.1 设计目标 (1)可以浏览航线信息;包括终点站名、航班号、飞机号、飞行日期、 乘员定额和
2、余票量; (2)可以浏览已订票客户信息;包括客户姓名、订票数额和舱位等级; (3)可以查询航线;包括终点站名、航班号、飞机号、飞行日期、乘员 定额和余票量; (4)可以办理订票业务;需提供航班号、所需票数、客户姓名和舱位等 级,生成客户座位号; (5)可以办理退票业务;提供航班号和客户姓名,即可退票; (6)可以查看剩余票数; (7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构, 设计程序完成功能。 2.2 设计思想 (1)运行环境(软硬件环境): DEV-C+; (2)输入的形式和输入值的范围: 由航空公司输入航线情况并以单链表 的形式存储在内存里面; (3)输出的形式描述:通过
3、客户的输入,输出相应内容; (4)功能描述:用户可通过本系统实现对航班的查询、 订票和退票功能 2.3系统模块划分 航空客运订票系给 图总体结构设计框图4 2.3.1主函数 输出菜单界面。输入指令,显示,敲击回车开始工作。 2.3.2浏览航线信息 编写void list()函数实现打印全部航线信息的功能,调用void display。函数实现打印struct airli ne链表中存储的航线的基本信 息的功能。 2.3.2浏览已订票客户信息 编写void prtlink()函数实现打印订票乘员名单域的客户名单信息的功 能,调用find ()函数查询并以指针形式返回。 2.3.3查询航线 编写v
4、oid search()函数实现根据客户提出的终点站名输出航线信息的 功能。用户输入终点站名,该函数会在航线信息链表中进行查询,并输 出该航线信息或提示未找到该航线。 2.3.4办理订票业务 编写void order()函数实现办理订票业务的功能。根据客户提供的航班 号,调用find ()函数进行查询,如为空,退出该模块;输入客户订票 额,若客户订票额末超过余票量, 订票成功,调用 linklist *insertlink() 在订票乘员名单域中添加客户信息,并在该航线的余票量中减掉该客户 的订票量,然后依次输出该订票客户的座位号;客户订票额超过余票量 总额或满员, 询问客户是否需要进行排队等
5、候; 若等候, 调用 linkqueue appendqueue() 在排队等候乘员名单域中添加客户信息;否则退出。 2.3.5 办理退票业务 编写 void return_tkt() 函数实现办理退票业务的功能。根据客户提供 的航班号,调用 find ()函数进行查询,根据客户提供的姓名到订票客 户名单域进行查询,若未找到,退出本模块;若信息查询成功,在订票 乘员名单域中删除客户信息,并在该航线的余票量中增加该客户的订票 量。检查排队等候乘员名单域,找出满足当前条件的排队候补名单域, 插入到订票客户名单链表中。循环该步骤直到无满足当前条件的排队候 补名单域,退出。 2.3.6 查看剩余票数
6、编写 void list() 函数实现打印全部航 线信息 的功能 ,调用 void display() 函数实现打印每条航线的基本信息的功能。 3. 数据结构与算法描述 (1) 下述单链表用来存储乘员信息, 包括客户姓名、 订票量、舱位等级。 typedef struct ord_ros char name10;/* 客户姓名 */ in t ord_amt;/* 订票量 */ int grade;/*舱位等级 */ struct ord_ros *next; linklist; (2) 下述单链队列用来存储等候替补客户信息, 通过队列先进先出的特 点,使先排队的客户先订票成功。 typede
7、f struct wat_ros /*单链队列存储等候替补客户信息 */ char name10;/* 姓名 */ int req_amt;/* 订票量 */ struct wat_ros *next; qnode,*qptr; typedef struct pqueue qptr front;/* 等候替补客户名单域的头指针 */ qptr rear;/*等候替补客户名单域的属指针*/ linkqueue; (3)下述结构体存储了航班信息,终点站名、航班号、飞机号、飞行日 期、乘员定额和余票量。 struct airline char ter_name10;/* 终点站名 */ char a
8、ir_num10;/* 航班号 */ char pla ne_num10;/* 飞机号 */ char date7;/*飞行日期(星期几)*/ int tkt_amt;/* 乘员定额 */ int tkt_sur;/* 余票量*/ linklist *order;/* 乘员名单域,指向乘员名单链表的头指针 */ linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队 尾的指针 */ line; ( 5)( 4)通过修改全局变量 MAXSIZE 的数值即可改变航线数目,在 struct airline airMAXSIZE 中可修改、增加、删除航线信息。 struct
9、 airline *head; /*初始化航班信息 */ struct airline airMAXSIZE= BJS,1,MU5694,JUN1st,50,50, BJS,2,MU5694,JUN2 nd,50,50, SHA,3,MU5390,JUN1st,50,50, SHA,4,MU5390,JUN2 nd,50,50, CAN,5,CZ3364,JUN1st,50,50, CAN,6,CZ3364,JUN2 nd,50,50 ; 4. 测试结果与分析(可将测试过程抓图说明) 4.1进入航空客运订票系统 4.2浏览航线信息(输入指令“ 1” JUNlst JUNlst JUNlst 航
10、班号飞机号飞行日期 1 HU594 2 MU5390 3 CZ3364 航空客运订票系统 余票量 乘员罡颓 3 3 4.3浏览已订票客户信息(输入指令“ 2”) C:Use矶悌Deskto p戲空客运订票系宛exe 亚泄票 理理看岀 办擊一連 4 5 6 0 信 户 息客务窘 信票业业票 线氏票亜荼统 航已航舀禦 一理理看岀 嚼声历-I1.M 12 3 4 5 6 0 C:U se Deskto p 空客统.exe 息 信 心客务盍 昌票业业票 .易票亜審 已航 理理看出 注也入腹班号:丄 /* 姓名 */ int req_amt;/* 订票量 */ struct wat_ros *next;
11、 qnode,*qptr; typedef struct pqueue qptr front;/* 等候替补客户名单域的头指针 */ qptr rear;/* 等候替补客户名单域的属指针 */ linkqueue; typedef struct ord_ros char name10;/* 客户姓名 */ int ord_amt;/* 订票量 */ int grade;/* 舱位等级 */ struct ord_ros *next; linklist; struct airline char ter_name10;/* 终点站名 */ char air_num10;/* 航班号 */ char
12、 plane_num10;/* 飞机号 */ char date7;/* 飞行日期(星期几) */ int tkt_amt;/* 乘员定额 */ int tkt_sur;/* 余票量 */ linklist *order;/* 乘员名单域,指向乘员名单链表的头指针 */ linkqueue wait;/* 等候替补的客户名单域, 分别指向排队等候名单队头队尾的指 针*/ line; struct airline *head; /* 初始化航班信息 */ struct airline airMAXSIZE= BJS,1,MU5694,JUN1st,50,50, BJS,2,MU5694,JUN2
13、nd,50,50, SHA,3,MU5390,JUN1st,50,50, SHA,4,MU5390,JUN2nd,50,50, CAN,5,CZ3364,JUN1st,50,50, CAN,6,CZ3364,JUN2nd,50,50 ; void display(struct airline *a)/* 打印每条航线的基本信息 */ printf(%8st%3st%st%4stt%3dt%10dn,a-ter_name,a-air_num,a-plane_num,a- date,a-tkt_amt,a-tkt_sur); void list()/* 打印全部航线信息 */ struct air
14、line *a; int i=0; a=head; printf( 终点站名 t 航班号 t 飞机号 t 飞行日期 t 乘员定额 t 余票量 n); while(iMAXSIZE) display(a); /* 调用 dispiay 函数来输出 */ a+; 第17页 i+; printf(nn); void search()/* 根据客户提出的终点站名输出航线信息 */ struct airline *a,*find(); char name10; int i=0; a=head; printf( 请输入终点站名 :); scanf(%s,name); while(iter_name) br
15、eak; a+; i+; if(i=MAXSIZE) printf( 对不起,该航线未找到 !n); else printf( 终点站名 t 航班号 t 飞机号 t 飞行日期 t 乘员定额 t 余票量 n); display(a); struct airline *find()/* 根据系统提出的航班号查询并以指针形式返回 */ struct airline *a;/* 在航线信息链表中进行查询 */ 第18页 char number10; int i=0; a=head; printf( 请输入航班号 :); scanf(%s,number); while(iair_num) return
16、a; a+; i+; printf( 对不起,该航线末找到 !n); return NULL; void prtlink()/* 打印订票乘员名单域的客户名单信息 */ linklist *p; struct airline *a; a=find(); p=a-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(li
17、nklist *head,int amount,char name,int grade) /* 单域的客户信息 */ 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; ne
18、w1-next=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-n
19、ext=new1; q.rear=new1; return q; void order()/* 办理订票业务 */ struct airline *a; int amount,grade; char name10; a=head; if(!(a=find() return;/* 根据客户提供的航班号进行查询,如为空,退出该模块 */ printf( 请输入你订票所需要的数量 :); scanf(%d, if(amounta-tkt_amt)/* 若客户订票额超过余票量总额,退出 */ printf(n 对不起,您输入的票的数量已经超过乘员定额 !); return; 第21页 if(amoun
20、ttkt_sur)/* 若客户订票额末超过余票量, 订票成功并等记信息 */ int i; printf( 请输入您的姓名(订票客户) :); scanf(%s,name); printf( 请输入 %s 票的舱位等级 :,name); scanf(%d, a-order=insertlink(a-order,amount,name,grade);/* 在订票乘员名单域中添 加客户信息 */ a-tkt_sur-=amount;/* 该航线的余票量应减掉该客户的订票量 */ for(i=amount;i0;i-)/* 依次输出该订票客户的座位号 */ printf(%s 的座位号是 :%dn,
21、name,AMOUNT-a-tkt_sur-i+1); printf(n 祝您乘坐愉快! n); else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ char r; printf(n 已经没有更多的票,您需要排队等候吗 ?(Y/N); r=getch();/ 用来读取 r 字符,不显示 printf(%c,r); if(r=Y|r=y) printf(n 请输入您的姓名(排队订票客户) :); scanf(%s,name); a-wait=appendqueue(a-wait,name,amount);/* 在排队等候乘员名单域 中添加客户信息 */ printf(n 注
22、册成功 !n); else printf(n 欢迎您下次再次订购! n); void return_tkt()/* 退票模块 */ struct airline *a; qnode *t,*back,*f,*r; int grade; linklist *p1,*p2,*head; char cusname10; if(!(a=find() return;/* 调用查询函数,根据客户提供的航线进行搜索 */ head=a-order; p1=head; printf( 请输入你的姓名(退票客户) :); scanf(%s,cusname); while(p1!=NULL)/* 根据客户提供的姓
23、名到订票客户名单域进行查询 */ if(!strcmp(cusname,p1-name) break; p2=p1;p1=p1-next; if(p1=NULL) printf( 对不起,你没有订过票 !n); return; /* 若未找到,退出本模块 */ else/* 若信息查询成功,删除订票客户名单域中的信息*/ if(p1=head) head=p1-next; 第24页 else p2-next=p1-next; a-tkt_sur+=p1-ord_amt; grade=p1-grade; printf(%s 成功退票! n,p1-name); free(p1); a-order=
24、head;/* 重新将航线名单域指向订票单链表的头指针 */ f=(a-wait).front;/*f 指向排队等候名单队列的头结点 */ r=(a-wait).rear;/*r 指向排队等候名单队列的尾结点 */ t=f;/*t 为当前满点条件的排队候补名单域 */ while(t) if(a-tkt_sur=a-wait.front-req_amt)/* 若满足条件者为头结点 */ int i; a-wait.front=t-next; printf(%s 订票成功! n,t-name); for(i=0;ireq_amt;i+)/* 输出座位号 */ printf(%s 的座位号是 :%
25、dn,t-name,(a-tkt_sur)-i); a-tkt_sur-=t-req_amt; a-order=insertlink(a-order,t-req_amt,t-name,grade);/* 插入到订票 客户名单链表中 */ free(t); break; back=t; t=t-next; if(a-tkt_sur)=(t-req_amt) back-next=t-next; printf(%s 订票成功! n,t-name); for(i=0;ireq_amt;i+)/* 输出座位号 */ printf(s seat number is:%dn,t-name,(a-tkt_sur)-i); a-tkt_sur-=t-req_amt;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国网河北省电力校园招聘(提前批)笔试模拟试题浓缩500题及答案详解(名校卷)
- 2026秋季国家管网集团广西公司高校毕业生招聘笔试参考题库(浓缩500题)及答案详解(基础+提升)
- 2026国网江苏省电力公司高校毕业生提前批招聘(约450人)笔试备考题库浓缩500题附答案详解(a卷)
- 2026秋季国家管网集团西北公司高校毕业生招聘考试参考试题(浓缩500题)附答案详解(巩固)
- 2025国网湖北省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题及答案详解1套
- 2026秋季国家管网集团华中公司高校毕业生招聘笔试模拟试题(浓缩500题)含答案详解(综合卷)
- 2026届国家管网集团高校毕业生招聘考试备考试题(浓缩500题)及参考答案详解(完整版)
- 2026秋季国家管网集团华中公司高校毕业生招聘笔试备考题库(浓缩500题)带答案详解(考试直接用)
- 国家管网集团山东分公司2026届秋季高校毕业生招聘考试备考题库(浓缩500题)及参考答案详解(巩固)
- 2026秋季国家管网集团福建公司高校毕业生招聘笔试备考试题(浓缩500题)附参考答案详解(研优卷)
- 2025年中资环绿色供应链(天津)有限公司招聘笔试参考题库含答案解析
- 警察执勤压力情绪管理
- (2025)全市党员干部党规党纪廉政知识竞赛题库及答案
- 监理规划范本模板
- 心血管疾病介入培训考试电生理起搏模拟精彩试题(含答案)
- 火灾自动报警系统试题及答案
- 水利工程副高职称答辩指南
- 光子嫩肤的临床护理
- 2025年4月自考00067财务管理学答案含评分参考
- 农产品供应链管理试题及答案
- 和解协议书日期范本
评论
0/150
提交评论