《数据结构大作业航空公司订票系统.pdf》由会员分享,可在线阅读,更多相关《数据结构大作业航空公司订票系统.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、航空公司订票系统航空公司订票系统一、我的一、我的认识认识和和设计思路设计思路1 我充分利用数据结构课程设计,利用几种典型数据结构(链表,队列,线性表等结构),结合上学期学习的程序设计语言(C/C+语言),链表链表是实现存储空间动态管理的链式存储结方式,而队队是一种操作受限的线性表。使用大量指针,来实现一个比较完整的应用系统的设计与开发。2 我通过课程设计一些程序的调试(比如背包问题,病人看病模拟程序,停车场管理程序),通过比较系统的分析、编程和不断调试,进一步理解和掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。基本上达到了复习的要求。3 我将知识应用于实际的方
2、法,联想到售票系统的使用,也可以提高综合能力。所以我选择了航空订票系统,也可以应用于其他售票系统。航空空订票系统所涉及的知识:(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序。4.通过上网查询和结合实际可知,航空客运订票的业务活动包括:查询航线、客票预订和办理退票等等。设计了一个航空公司订票系统,以使上述业务可以借助计算机来完成。下面是一些程序功能设想:1 1 每条航线所涉及的信息有每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2 或 3)以及
3、等候替补的客户名单(包括姓名、所需票量);2 2 全部数据可以只放在内存中;全部数据可以只放在内存中;3 3 系统能实现的操作和功能如下系统能实现的操作和功能如下:a)查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;b)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。若需要,可登记排队候补;c)退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额
4、能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。功能系统图:功能系统图:主函数浏览航线信息浏览已订票客户信息查询航线办理订票业务办理退票业务退出系统按剩余票数排序实现的功能模块说明实现的功能模块说明(1)显示全部航线的信息;(2)查询订票客户的信息;(3)根据客户提供的终点站,调用find()函数进行查找,调用list()函数输出航线信息;(4)办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该
5、客户的订票信息。(5)办理退票业务:调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。退票成功后,重新将航线名单域指向订票单链表的头指针。根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。(6)退出本系统二、我进行了以下改进:二、我进行了以下改进:(1)主函数的表达方式。菜单界面的的改进:menu();menu();int menu_select()int menu_select()/*菜单界面*/int c;char s20;printf(ntt 航空客运订票系统n);printf(*n);printf(1.浏览航线信
6、息:n);/添加的功能 printf(2.查询客户信息:n);printf(3.查询航线n);printf(4.办理订票业务:n);printf(5.办理退票业务:n);printf(6.退出系统n);printf(*n);do printf(请选择:);scanf(%s,s);c=atoi(s);/while(c7);return c;printf(printf(请选择菜单请选择菜单:n);:n);i=5;i=5;scanf(%d,&i);scanf(%d,&i);switch(i)case 1:printf(请输入要查询的线:n);scanf(%s,airline);printf(航线n)
7、;printf(起点 -终点飞机号航班号 飞行周日乘员定额余票数 n);lookup(airline,LF);break;case 2:printf(请输入要预定的航班号:n);scanf(%d,&number);book(number,LF);break;case 3:printf(请输入要退票的航班号:n);scanf(%d,&number);void main()void main()struct airlineairMAXSIZE=beijing,1,k6643,SUN,3,3,hainan,2,k850,MON,2,2,xingjiang,3,b2282,FRI,1,1;/*初始化航
8、线信息*/*clrscr();*/start=air;for(;)switch(menu_select()case 1:list();break;back_ticket(number,LF);break;case 4:printf(查看客户资料,输入客户的航班号n);scanf(%d,&number);GetElem(LF,number);break;case 5:drop_out=-1;break;case 2:prtlink();break;case 3:search();break;case 4:order();break;default:printf(选择有误n);case 5:ret
9、urn_tkt();break;case 6:printf(n欢迎使用本系统,再见!n);exit(0);printf(nPress any key to continue!n);getch();/三、详细设计及运行结果详细设计及运行结果(1)显示已初始化的全部航线信息显示已初始化的全部航线信息开始初始化iMAXSIZE?调用 find()函结束(2)浏览已订票客户信息开始调用 find()函数P=NULL?该航线没有P不为空输出客户信息客户信息结束开始初始化iter_name)info+,i+未找到i=MAXSIZE调用函数输出结束(3)查询航线查询航线(4)办理订票业务办理订票业务开始初始
10、化!(info=find()客户订票额不超过乘员定不超过乘员定票总额,票总额,登记信息在排队等候乘员名单域中添加客户信息加到客户名单域结束(5)办理退票业务办理退票业务开始调用 find 函对航线搜索数p1!=NULLp1!=NULL删除客户信息重新将航线名单域指向订票单链表的头指针,重新将航线名单域指向订票单链表的头指针,r 指向排队等候名单队列的尾结点头结点t 不为空将客户信息插到订票客户名单链表将客户信息插到订票客户名单链表结束四、改进后的运行结果:四、改进后的运行结果:(窗口反而变得简单,明了)1 1、浏览航线信息:、浏览航线信息:2 2、查询航线:、查询航线:3 3、办理退票手续:、
11、办理退票手续:4 4 办理订票和查询客户信息:办理订票和查询客户信息:五、总结和体会五、总结和体会总体的思路和过程总体的思路和过程我在编译和调试的时候,选择 Visual C+6.0,因为实验室的工具有些欠缺,通过上网和同学交流,进行了改进,在自己的计算机上更改了入径之后,该工具比较稳定,在使用调试这个强大工具时才发现上学期的遗留问题,还不是很熟悉。这需要今后进一步的练习。验证了一句话:代码是敲出来的,不是看出来的。在一周半的时间里,我不断地对程序各模块进行修改、编译、调试、运行,其间遇到很多问题:在编写的时候我只会使用相对较为简单的基础语言,凭借 C 语言的基础,代替了相对较为复杂的语言,降
12、低了运行效率。其中在程序的主函数 switch 语句的使用中得到验证。不同的表示会有不同的效果。源程序会经常出现溢出错误,而且不只一处。比如队空队满的判断,函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了一些不必要的错误。而我又认识了几种函数应用,比如:(1 1)getch()getch()和和 getchar()getchar()在使用是功能相同的,但getch()并非标准 C中的函数,不存在 C 语言中,它所在头文件是 conio.h。所以在使用的时候要注意程序的可移植性。也只有国内 C 语言新手常常使用 getch();来暂停程序且不知道此函数来源,建议使用get
13、char();在不同平台,输入回车,getch()将返回不同数值,而 getchar()统一返回 10(即n).用 getch();会等待你按下任意键,再继续执行下面的语句;(2 2)也知道了 exit(0):/正常结束程序运行【exit(非 0):非正常结束程序运行】(3 3)函数 strcpystrcpy(lnew-name,name);是把 name 指向的字符串复制给 lnew-name 中去;strcmpstrcmp(name,info-ter_name)/比较字符串name 和 info-ter_name 的大小(4 4)测试用例具有一定的广泛性。运行程序时输入了多种不同字符信息,
14、经过多次修改结果达到了预期效果。说明程序具有一定的可靠性和稳定性,可以应用于其他一些系统中。加深了自己对 c 语言的规范使用。例如,调用函数时,数组只需要传递数组名即可;字符0和整形的 0 是不同的文明不可以直接对其画等号。并且在调试的过程中,我也发现使用结构体数组来存储存编译的字符,编译代码时通过结构体数组来实现要优于使用链表。学习体会学习体会这次的大作业,是我更加认识了数据结构,对调试掌握的也更加熟练了一些,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,理解了调试的目的和意义,意识到了程序语言的规范性以及我们在编程时要耐心,要严谨,同时在写程序时多多加些注释,既增加了程序的可读性,也可以使自己在读程序时更容易,更清楚。可以说在这次实践中我对 c 语言又进行了一次重温,对认识了一些函数库,利用互联网,我找出了他们的真正妙处,当然结构是让人很兴奋的。我也觉得原来大作业的意义是让我们真正认识了程序,对程序有了新的感觉。虽然课结束了,可知识永无止境的,相信自己的认识也得到了提高。