数据结构大作业航空公司订票系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构大作业航空公

司订票系统

文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-

航空公司订票系统

一、我的认识和设计思路

1.我充分利用数据结构课程设计,利用几种典型数据结构(链表,队列,线性表等结构),结合上学期学习的程序设计语言(C/C++语言),链表是实现存储空间动态管理的链式存储结方式,而队是一种操作受限的线性表。使用大量指针,来实现一个比较完整的应用系统的设计与开发。

2.我通过课程设计一些程序的调试(比如背包问题,病人看病模拟程序,停车场管理程序),通过比较系统的分析、编程和不断调试,进一步理解和掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。基本上达到了复习的要求。

3.我将知识应用于实际的方法,联想到售票系统的使用,也可以提高综合能力。所以我选择了航空订票系统,也可以应用于其他售票系统。

航空空订票系统所涉及的知识:

(1)熟练掌握链表存储结构及其建立过程和常用操作;

(2)熟练掌握队列的建立过程和常用操作;

(3)学会自己调试程序。

4. 通过上网查询和结合实际可知,航空客运订票的业务活动包括:查询航线、客票预订和办理退票等等。设计了一个航空公司订票系统,以使上述业务可以借助计算机来完成。

下面是一些程序功能设想:

1.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);

2.全部数据可以只放在内存中;

3.系统能实现的操作和功能如下:

a) 查询航线:

根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;

b) 承办订票业务:

根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,

输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。若需要,可登记排队候补;

c) 退票业务:

根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。

功能系统图:

实现的功能模块说明

(1)显示全部航线的信息;

(2)查询订票客户的信息;

(3)根据客户提供的终点站,调用find()函数进行查找,调用list()函数输出航线信息;

(4)办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。

(5)办理退票业务:调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。退票成功后,重新将航线名单域指向订票单链表的头指针。根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。

(6)退出本系统

二、我进行了以下改进:

(1)主函数的表达方式。菜单界面的的改进:

三、详细设计及运行结果

(1)显示已初始化的全部航线信息

(2)浏览已订票客户信息

(3)查询航线(4)办理订票业务

(5)办理退票业务

四、改进后的运行结果:(窗口反而变得简单,明了)

1、浏览航线信息:

2、查询航线:

3、办理退票手续:

4办理订票和查询客户信息:

五、总结和体会

总体的思路和过程

我在编译和调试的时候,选择Visual C++6.0,因为实验室的工具有些欠缺,通过上网和同学交流,进行了改进,在自己的计算机上更改了入径之后,该工具比较稳定,在使用调试这个强大工具时才发现上学期的遗留问题,还不是很熟悉。这需要今后进一步的练习。验证了一句话:代码是敲出来的,不是看出来的。

在一周半的时间里,我不断地对程序各模块进行修改、编译、调试、运行,其间遇到很多问题:在编写的时候我只会使用相对较为简单的基础语言,凭借C语言的基础,代替了相对较为复杂的语言,降低了运行效率。其中在程序的主函数switch语句的使用中得到验证。不同的表示会有不同的效果。

源程序会经常出现溢出错误,而且不只一处。比如队空队满的判断,函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了一些不必要的错误。而我又认识了几种函数应用,比如:(1)getch()和getchar()在使用是功能相同的,但getch()并非标准C中的函数,不存在C语言中,它所在头文件是conio.h。所以在使用的时候要注意程序的可移植性。也只有国内C语言新手常常使用getch();来暂停程序且不知道此函数来源,建议使用getchar();在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n).用getch();会等待你按下任意键,再继续执行下面的语句;(2)也知道了exit(0)://正常结束程序运行【exit(非0):非正常结束程序运行】(3)函数strcpy(lnew->name,name); 是把name指向的字符串复制给lnew->name中去;strcmp(name,info->ter_name)// 比较字符串name和info-

>ter_name的大小(4)

测试用例具有一定的广泛性。运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果。说明程序具有一定的可靠性和稳定性,可以应用于其他一些系统中。

加深了自己对c语言的规范使用。例如,调用函数时,数组只需要传递数组名即可;字符‘0’和整形的0是不同的文明不可以直接对其画等号。并且在调试的过程中,我也发现使用结构体数组来存储存编译的字符,编译代码时通过结构体数组来实现要优于使用链表。

学习体会

这次的大作业,是我更加认识了数据结构,对调试掌握的也更加熟练了一些,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,理解了调试的目的和意义,意识到了程序语言的规范性以及我们在编程时要耐心,要严谨,同时在写程序时多多加些注释,既增加了程序的可读性,也可以使自己在读程序时更容易,更清楚。可以说在这次实践中我对c语言又进行了一次重温,对认识了一些函数库,利用互联网,我找出了他们的真正妙处,当然结构是让人很兴奋的。我也觉得原来大作业的意义是让我们真正认识了程序,对程序有了新的感觉。虽然课结束了,可知识永无止境的,相信自己的认识也得到了提高。

相关文档
最新文档