《数据结构课程设计》报告设计题目航空客运订票系统专业班级学号姓名电话完成日期2017.04.13第1页目录1.问题描述………………………………………………22.系统设计………………………………………………23.数据结构与算法描述…………………………………44.测试结果与分析………………………………………65.总结…………………………………………………106.参考文献………………………………………………10附录程序源代码…………………………………………10第2页课程设计题目1.问题描述基于人们对航空客运使用需求的日益提高,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序是为实现航班情况的查询,订票,退票以及客户信息浏览与票务信息浏览等基本功能。2.系统设计2.1设计目标(1)可以浏览航线信息;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(2)可以浏览已订票客户信息;包括客户姓名、订票数额和舱位等级;(3)可以查询航线;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(4)可以办理订票业务;需提供航班号、所需票数、客户姓名和舱位等级,生成客户座位号;(5)可以办理退票业务;提供航班号和客户姓名,即可退票;(6)可以查看剩余票数;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。2.2设计思想(1)运行环境(软硬件环境):DEV-C++;(2)输入的形式和输入值的范围:由航空公司输入航线情况并以单链表的形式存储在内存里面;(3)输出的形式描述:通过客户的输入,输出相应内容;(4)功能描述:用户可通过本系统实现对航班的查询、订票和退票功能。第3页2.3系统模块划分2.3.1主函数输出菜单界面。输入指令,显示,敲击回车开始工作。2.3.2浏览航线信息编写voidlist()函数实现打印全部航线信息的功能,调用voiddisplay()函数实现打印structairline链表中存储的航线的基本信息的功能。2.3.2浏览已订票客户信息编写voidprtlink()函数实现打印订票乘员名单域的客户名单信息的功能,调用find()函数查询并以指针形式返回。2.3.3查询航线编写voidsearch()函数实现根据客户提出的终点站名输出航线信息的功能。用户输入终点站名,该函数会在航线信息链表中进行查询,并输出该航线信息或提示未找到该航线。2.3.4办理订票业务编写voidorder()函数实现办理订票业务的功能。根据客户提供的航班号,调用find()函数进行查询,如为空,退出该模块;输入客户订票第4页额,若客户订票额末超过余票量,订票成功,调用linklist*insertlink()在订票乘员名单域中添加客户信息,并在该航线的余票量中减掉该客户的订票量,然后依次输出该订票客户的座位号;客户订票额超过余票量总额或满员,询问客户是否需要进行排队等候;若等候,调用linkqueueappendqueue()在排队等候乘员名单域中添加客户信息;否则退出。2.3.5办理退票业务编写voidreturn_tkt()函数实现办理退票业务的功能。根据客户提供的航班号,调用find()函数进行查询,根据客户提供的姓名到订票客户名单域进行查询,若未找到,退出本模块;若信息查询成功,在订票乘员名单域中删除客户信息,并在该航线的余票量中增加该客户的订票量。检查排队等候乘员名单域,找出满足当前条件的排队候补名单域,插入到订票客户名单链表中。循环该步骤直到无满足当前条件的排队候补名单域,退出。2.3.6查看剩余票数编写voidlist()函数实现打印全部航线信息的功能,调用voiddisplay()函数实现打印每条航线的基本信息的功能。3.数据结构与算法描述(1)下述单链表用来存储乘员信息,包括客户姓名、订票量、舱位等级。typedefstructord_ros{charname[10];/*客户姓名*/intord_amt;/*订票量*/intgrade;/*舱位等级*/structord_ros*next;}linklist;(2)下述单链队列用来存储等候替补客户信息,通过队列先进先出的特第5页点,使先排队的客户先订票成功。typedefstructwat_ros/*单链队列存储等候替补客户信息*/{charname[10];/*姓名*/intreq_amt;/*订票量*/structwat_ros*next;}qnode,*qptr;typedefstructpqueue{qptrfront;/*等候替补客户名单域的头指针*/qptrrear;/*等候替补客户名单域的属指针*/}linkqueue;(3)下述结构体存储了航班信息,终点站名、航班号、飞机号、飞行日期、乘员定额和余票量。structairline{charter_name[10];/*终点站名*/charair_num[10];/*航班号*/charplane_num[10];/*飞机号*/chardate[7];/*飞行日期(星期几)*/inttkt_amt;/*乘员定额*/inttkt_sur;/*余票量*/linklist*order;/*乘员名单域,指向乘员名单链表的头指针*/linkqueuewait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/}line;(5)(4)通过修改全局变量MAXSIZE的数值即可改变航线数目,在structairlineair[MAXSIZE]中可修改、增加、删除航线信息。structairline*head;/*初始化航班信息*/structairlineair[MAXSIZE]={第6页{BJS,1,MU5694,JUN1st,50,50},{BJS,2,MU5694,JUN2nd,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}};;4.测试结果与分析(可将测试过程抓图说明)4.1进入航空客运订票系统4.2浏览航线信息(输入指令“1”)第7页4.3浏览已订票客户信息(输入指令“2”)4.4查询航线(输入指令“3”,并根据提示进行相应操作)第8页4.5办理订票业务(输入指令“4”,并根据提示进行相应操作)4.6办理退票业务(输入指令“5”,并根据提示进行相应操作)第9页4.7查看剩余票数(输入指令“6”)4.8退出系统(输入指令“0”)第10页5.总结通过此次的课程设计,将课本上所学习的有关内容应用到实践当中。在调试程序时,首先对整个程序流程有全面的认识,调试过程中需要细心、耐心,在修改时要有耐心,编译出错后必须逐个错误去改正。通过此次课程设计,我感觉到自己在编写比较大的程序时,还是缺乏思路,对程序的整体构架不是很清晰明了,这是我需要攻克的一大难点!编程的过程就是不断学习和掌握的过程,也是对自己学习掌握程度的一个检验过程。6.参考文献(包括书籍、论文、网络资料等)[1]刘振安等.《C++程序设计课程设计》.北京:机械工业出版社,2004.12.[2]苏仕华魏韦巍等《数据结构课程设计》.北京:机械工业出版社,2010.3.[3]严蔚敏吴伟民《数据结构(C语言版)》.北京:清华大学出版社,2016.7.附录程序源代码#includestdio.h#includestdlib.h#includestring.h#includeconio.h//getch#defineMAXSIZE6//定义航线量的最大值*/#defineAMOUNT50/*定义每条航班的总座位数*/typedefstructwat_ros/*单链队列存储等候替补客户信息*/{第11页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];/*飞机号*/chardate[7];/*飞行日期(星期几)*/inttkt_amt;/*乘员定额*/inttkt_sur;/*余票量*/linklist*order;/*乘员名单域,指向乘员名单链表的头指针*/linkqueuewait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/第12页}line;structairline*head;/*初始化航班信息*/structairlineair[MAXSIZE]={{BJS,1,MU5694,JUN1st,50,50},{BJS,2,MU5694,JUN2nd,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}};;voiddisplay(structairline*a)/*打印每条航线的基本信息*/{printf(%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n,a-ter_name,a-air_num,a-plane_num,a-date,a-tkt_amt,a-tkt_sur);}voidlist()/*打印全部航线信息*/{structairline*a;inti=0;a=head;printf(终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n);while(iMAXSIZE){display(a);/*调用dispiay函数来输出*/a++;第13页i++;}printf(\n\n);}voidsearch()/*根据客户提出的终点站名输出航线信息*/{structairline*a,*find();charname[10];inti=0;a=head;printf(请输入终点站名:);scanf(%s,name);while(iMAXSIZE){if(!strcmp(name,a-ter_name))break;a++;i++;}if(i=MAXSIZE)printf(对不起,该航线未找到!\n);else{printf(终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n);display(a);}}structairline*find()/*根据系统提出的航班号查询并以指针形式返回*/{structairline*a;/*在航线信息链表中进行查询*/第14页charnumber[10];inti=0;a=head;printf(请输入航班号:);scanf(%s,number);while(iMAXSIZE){if(!strcmp(number,a-air_num))returna;a++;i++;}printf(对不起,该航线末找到!\n);returnNULL;}voidprtlink()/*打印订票乘员名单域的客户名单信息*/{linklist*p;structairline*a;a=find();p=a-order;if(p!=NULL){printf(客户姓名订票数额舱位等级\n);while(p){printf(%s\t\t%d\t%d\n,p-name,p-ord_amt,p-