总裁的二手新妻乔苏:求航空客运订票系统的算法(数据结构)

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 04:09:06
为简化问题,假设有3架飞机,并且每架飞机有5张票,每天有到一个地点的1架飞机。
#define m 4 //3架飞机
#define n 5 //每架飞机5张票
节点中保存的信息包括姓名,ID,班机号,座位号,时间
struct node
{
char name[21];
char id[21];
int seat,plane,date;
node *next,*pre;
};
每架飞机设置一表头节点head1,head2,head3.
为方便编程,再设置一数组用来保存每架飞机机票的销售情况
struct piao
{
int seat[n+1];
};
并将链表信息保存至information.dat,将票的信息保存至piao.dat两个文件中。
每次运行程序都对这两个文件进行读写。
将等候的队列保存在wait..txt中
struct wait
{
char name[21];
char id[21];
char phone[8];
int seat,plane,date;
wait *next,*pre;
};

初始化由两部分组成。
先进行机票的初始化,例如1 0 0 0 0 1 2 0 1 1 0 0前面六个数字表示第一架飞机情况,已定1张票,是第五号,后六个数字是地二架飞机的信息,2,3两张票被预定。
接下来进行乘客信息的初始化。根据机票初始化决定储存每架飞机信息的链表从information.dat中读取多少个数据块。按照上面的例子,head1将从information中读取一个长度为node的struct类型数据,head2将读取2个。
2 程序主体
初始化后将进入主程序,主程序包括以下函数来实现必要功能:

void makenull(); //初始化,包括三部分
void makenull_piao(); //从文件中读入票的信息
void makenull_information(); //从文件中读入乘客信息
void makenull_wait(); //从文件中读入排队信息
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 show_wait(); //实现显示队列中人名的功能
void add_wait(int x,int y); //实现插队的功能
void search_delete(int x); //参数x=0实现查找,x=1时实现删

void write_to_file(); //将票和各链表的信息写入文件中
bool comp(node *x,node*y); //判断是否匹配
在主程序的循环中选择相应的操作,进入相应的函数实现想要的功能。
3 程序的特点
i. 自动生成程序所需的.dat或.txt文件。运行程序时,若找不到初始化所需文件,程序将视所有数据为空,即所有班机的机票都未被预定。例如,首次运行该程序,不采取任何操作或加入若干信息后退出,将生成piao.dat和wait.txt两个文件。
ii. 部分匹配的检索。输入完整的乘客信息将得到唯一的结果,若输入的乘客信息不完整,将列出所有与关键词符合的资料。在删除乘客信息的时候也采用了这种方式。例如,已经存在两个乘客:ivan ivanpank,查找时输入ivanpank,将列出ivanpank的信息,并输出“检索结束”字样,若输入iva,则依次列出ivan ivanpank的信息。删除时输入iva,将列出每个含有iva的乘客信息,并询问是否删除。
iii. 及时存储,程序中只要对链表的内容进行了改动,就立即写入文件,从而加大了程序的安全性,减小了对各种不安全因素可能引起的损失。
可以对暂时无法订票的客户进行排队,生成wait.txt文件储存客户信息,当有人退票时,判断是否符合排队客户的要求,如果符合,则自动对排队的人进行订票,同时删除此人在队列中的信息。并显示通过电话联系本人。