1、航空客运订票系统程序设计姓 名:潘强辉专 业:计算机科学与技术班 级: 0203108指导教师:毕建东目录一、 背景和问题的抽象及分析 31、问题的背景2、问题的抽象3、时间复杂度分析二、 关键字 . 4三、 数据结构设置 . 5四、 程序的实现和特点 . 71、程序的实现2、程序的特点五、 结论 10六、 参考文献 11七、 致谢 12背景和问题的抽象及分析1 问题的背景飞机场每天要接受大量的订票退票服务,还有互联 网上的异地订票等。对这些数量巨大的数据,需要一个专门的软件来进行管理和操作。软件至少需要具备的基本功能包括:接受订票,处理退票,查询乘客信息,查询航班信息等等。2 问题的抽象从问
2、题的提出可以看到,我们需要的只是能实现对数据的插入 ,删除,检索这样一个软件。由于乘客的数量较大并且不固定,因此选择用链表来保存乘客的基本信息:包括乘客的姓名,身份证号,搭乘班机的航班号,以及预定的座位号(假设座位预先订号)。为了将这些信息保存起来以备下次程序运行时调用,将必需的信息写入文件中,在程序的初始化时读入。综合一下来看,我们需要做的是建立一个可以插入和删除节点的链表,并能检索这个链表,在必要的时候将链表的内容保存到文件中。3 时间复杂度分析因为用的是链表和队列的操作,所以时间复杂度是 O(n)目录关键字飞机信息 包括乘客的基本信息,班机剩余的机票等。部分匹配检索被检索的内容只要和关键
3、字有部分匹配就认为是符合条件的结果。例如:搜索 ivan, 则包含 ivan的乘客都被列出。文件操作为防止意外死机,断电等不稳定因素,只要在程序中链表的内容作了修改就将链表重新写入文件中。目录数据结构设置为简化问题,假设有 3架飞机,并且每架飞机有 5张票,每天有到一个地点的 1架飞机。#define m 4 /3架飞机#define n 5 /每架飞机 5张票节点中保存的信息包括姓名, ID, 班机号,座位号,时间struct node char name21;char id21;int seat,plane,date;node *next,*pre;每架飞机设置一表头节点 head1,he
4、ad2,head3.为方便编程,再设置一数组用来保存每架飞机机票的销售情况struct piao目录数据结构设置int seatn+1;并将链表信息保存至 information.dat,将票的信息保存至 piao.dat两个文件中。每次运行程序都对这两个文件进行读写。将等候的队列保存在 wait.txt中struct waitchar name21;char id21;char phone8;int seat,plane,date;wait *next,*pre;目录程序的实现和特点1 初始化初始化由两部分组成。先进行机票的初始化,例如 1 0 0 0 0 1 2 0 1 1 0 0前面六个
5、数字表示第一架飞机情况,已定 1张票,是第五号,后六个数字是地二架飞机的信息, 2, 3两张票被预定。接下来进行乘客信息的初始化。根据机票初始化决定储存每架飞机信息的链表从 information.dat中读取多少个数据块。按照上面的例子, head1将从information中读取一个长度为 node的 struct类型数据, head2将读取 2个。目录程序的实现和特点2 程序主体初始化后将进入主程序,主程序包括以下函数来实现必要功能:void makenull(); /初始化,包括两部分void makenull_piao(); /从文件中读入票的信息void makenull_info
6、rmation(); /从文件中读入乘客信息void list_menu(); /显示主菜单void list_piao(); /显示指定班机的余票void list_information(); /选择要察看的班机void plane_information(node *head); /显示指定班机中所有乘客信息void book(); /实现订票的功能void add_information(node *head,int x,int y); /订票后将乘客信息加入相应的链表void search_delete(int x); /参数 x=0实现查找, x=1时实现删除void write_
7、to_file(); /将票和各链表的信息写入文件中bool comp(node *x,node*y); /判断是否匹配在主程序的循环中选择相应的操作,进入相应的函数实现想要的功能。目录程序的实现和特点3 程序的特点i. 自动生成程序所需的 .dat文件。运行程序时,若找不到初始化所需的两个文件,程序将视所有数据为空,即所有班机的机票都未被预定。例如,首次运行该程序,不采取任何操作或加入若干信息后退出,将生成 piao.dat和information.dat两个文件。ii. 部分匹配的检索。输入完整的乘客信息将得到唯一的结果,若输入的乘客信息不完整,将一一列出所有与关键词符合的资料。在删除乘客
8、信息的时候也采用了这种方式。例如,已经存在两个乘客: ivan ivanpank, 查找时输入 ivanpank, 将列出 ivanpank的完整信息,并输出 “检索结束 ”字样,若输入 iva, 则依次列出 ivan ivanpank的完整信息。删除时输入 iva, 将列出每个含有 iva的乘客信息,并询问是否删除。iii. 及时存储,程序中只要对链表的内容进行了改动,就立即写入文件,从而加大了程序的安全性,减小了对各种不安全因素可能引起的损失。 可以对暂时无法订票的客户进行排队,生成 wait.txt文件储存客户信息,当有人退票时,判断是否符合排队客户的要求,如果符合,则自动对排队的人进行订票,同时删除此人在队列中的信息。并显示通过电话联系本人。目录结论基本上能安全的运行,具备的功能符合题目的要求。用了文件的操作,是此程序的最大优点。程序写的还算简练,结构清晰,各个模块的分工和功能明确。整个程序用了 475行,大小 9.87kb。目录