《航空客运订票系统》由会员分享,可在线阅读,更多相关《航空客运订票系统(27页珍藏版)》请在金锄头文库上搜索。
1、课 程 设 计 报 告课程名称 数据结构 课题名称 航空客运订票系统 专 业 通 信 工 程 班 级 学 号 姓 名 指导教师 2013 年 6 月 29 日湖南工程学院课 程 设 计 任 务 书课程名称 数据结构 课 题 航空客运订票系统 专业班级 学生姓名 学 号 指导老师 张鏖烽 田娟秀 李杰君 审 批 任务书下达日期 2013 年 6 月 23 日任 务 完成日期 2013 年 6 月 29 日 目 录1. 需求分析.12. 概要设计.1 2.1 定义“航线”类型.2 2.2 主函数.2 2.3 调用关系.33. 详细设计.3 3.1 航线与客户的存储结构.3 3.2 各个系统模块.3
2、 3.3 算法设计.4 3.4 主函数功能.6 3.5 整个系统的流程图.7 3.6 存储结构设计.74. 调试分析.75. 用户使用说明.86. 测试结果.107. 心得体会.128. 附录.13 课题名称 航空客运订票系统1. 需求分析 航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。【基本要求】(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);(2)系统能实现的操作和功能
3、如下:录入:可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中;查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。初始化航班信息如下: 通过输入
4、05这六个数字选择相应的操作,如:查询航班,订票,退票等操作;2. 概要设计 两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。注:由于“航线”可只用一条单链表记录,故采用全局变量,减少参数的传递。 2.1定义“航线”类
5、型 ADT Lairline数据对象:D=ai|ai航线链表集,i=1,2,3,n,n=0数据关系:R1=| ai-1,aiD,i=1,2,3,n 基本操作:Lairline search_line()/按航班号查找航班Lairline search_plane()/按飞机号查找航班Lairline search_date()/按飞行日期查找航班Lairline search_addr()/按航班终点查找航班 void boundary()/主菜单界面void insert_line()/插入新航班void print_customer(airline *p)/显示航班客户信息void boo
6、k()/订票系统void waited(airline *p)/排队订票系统void Refund()/退票系统void search()/航班查询系统void InitLine()/初始化航线信息void printline()/显示所有航班信息 ADT Lairline; 2.2 主函数 void main() 初始化; do接受命令; 处理命令(调用相应函数); while(“命令”!=“退出”); 2.3 调用关系 3. 详细分析 3.1航线和客户的存储结构 客户存储结构体 typedef struct customer char name20; /姓名 int num; /订票数量i
7、nt level; /舱位等级customer *next; /指向后继乘客 customer,*Lcustomer; 航线存储结构体 typedef struct airline char ter_address20; /终点站char line_num10; /航班号 char plane_num10; /飞机型号int date; /飞行日期int total; /总人数int remain; /余票数 customer *booked;/已定客户信息customer *wait; /替补客户信息 airline *next; /指向后继航线 airline,*Lairline; 3.2
8、 各个系统模块 (1) 浏览航线模块: 定义void print_customer(airline *p),显示成员的信息;调用void printline()函数输出全部航线信息。 (2) 浏览订票客户信息模块: 定义订票客户信息的结构体customer,根据输入航班号调用search()函数寻找客户信息。 (3) 查询航线模块: 顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。 (4) 订票模块: 查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功, 否则失败。 (5) 退票模块: 输入要退票的乘客姓名,查找乘客资料的链表中是否有这位乘客,
9、有则删去此节点,并在空位上加1,无则退票失败。如果此时余票额大于等于候补客户的订票数量,那么候补客户订票成功。 3.3 算法设计 1.按照航班查找 Lairline search_line() char a10;airline *p;p=L-next; P(Please input the number of line:); S(%s,a);for(;p;p=p-next)if(!strcmp(a,p-line_num ) break;return p;注:通过建立节点p实现链表的遍历,利用for循环挨个查找,直到找到为止,再返回找到的这个节点,实现传递。 2.订票系统 void book() int i; int flag=0;airline *p;customer *cst, *c; P(Please choose the way of viewing:n); /查询方式选择P(Thenumberoftheflight=1n); P(The address of the final dest