数据结构航空客运订票系统.doc
《数据结构航空客运订票系统.doc》由会员分享,可在线阅读,更多相关《数据结构航空客运订票系统.doc(26页珍藏版)》请在冰豆网上搜索。
《数据结构》
课程设计报告书
题目:
航空客运订票系统
专业:
班级:
学号:
姓名:
完成时间:
一、需求分析
1.1问题描述
设计一个航空客运订票系统,为乘客提供各种航空客运信息服务。
1.2基本要求
每条航线所涉及的信息有:
终点站名、航班号、飞机号、星期几飞行、乘员定额、余票量、订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
已订票客户和预订票客户名单可分别由线性表linklist和队列linkqueue来实现。
为了插入和删除方便,两者皆采用链表作为存储结构。
系统需实现的操作和功能如下。
(1)查询航线:
根据客户提出的终点站名输出如下信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票量。
(2)承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。
若需要,可登记排队候补。
(3)承办退票业务:
根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若退票能满足他人要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
二、概要设计
1.1链表的抽象数据类型定义
ADTList
Data:
D={ai|ai∈ElemtSet,i=1,2,…,n,n≥0}
Relation:
R={|ai-1,ai∈D,i=2,…,n}
Operation:
airline*find_fin()//根据客户提出的终点站名输出航线信息
airline*find_air()//根据客户提出的航班号查询航班信息
airline*find_plane()//根据客户提出的飞机号查询航班信息
airline*find_date()//根据客户提出的飞行日期查询航班信息
voidsearch()//根据客户提出的要求输出航线信息
voidlist()//全部航线的信息
voidbooklist()//订票客户名单
linklist*addlink(linklist*,int,char,int)//增加订票的客户信息
voidsort_ticket()//按剩余票数排序
endADT
1.2队列的抽象数据类型定义
ADTQueue
Data:
D={ai|ai∈ElemtSet,i=1,2,…,n,n≥0}
Relation:
R={|ai-1,ai∈D,i=2,…,n}
Operation:
linkqueueplusqueue(linkqueue,char,int)//增加排队等候的客户名单
endADT
2、本程序包含三个模块
(1)主程序模块:
voidmain()
{初始化;
Do{
输入指令;
处理指令;
}while(指令!
=”退出”);
}
(2)已买票的乘客的链表模块——实行对买票乘客信息的管理
(3)排队买票乘客的队列模快——实行对排队买票乘客信息的管理
3、各模块之间的调用关系
Insertline()
more()
main()
guide()
list()
search()
booklist()
return_ticket()
order()
wait()
addlinkr()+plusqueue()
find_air()
find_fin()
find_date()
find_plane()
三、详细设计
1、为简化问题,本系统假设只有五条航线
#defineMAX5//定义航线量的最大值
2、客户的存储信息:
结点中保存的信息包括姓名,订票量,舱位等级
typedefstructbook
{charname[10];//客户姓名
intamount;//订票量
intlevel;//舱位等级
book*next;
}linklist;
3、航班的存储信息:
结点中保存的信息包括终点站名,航班号,飞机号,飞行日期,乘员定额,余票量。
structairline
{charfin_name[10];//终点站名
charair_name[10];//航班号
charplane_name[10];//飞机号
chardate[10];//飞行日期
intticket_amount;//乘员定额
intticket_left;//余票量
linklist*book;
linkqueuewait;
}linkinfo;
为了方便调用乘员的信息和排队等候的客户信息,设置指针分别指向乘员名单和等候替补的客户名单。
4、根据客户提出的要求查询航班信息
structairline*find_fin()//根据客户提出的终点站名输出航线信息
{structairline*info;
charname[10];
inti=0;
info=start;
cout<<"请输入终点站名:
";
cin>>name;
while(i<=MAX)
{if(strcmp(name,info->fin_name)){info++;i++;}
elsebreak;
}
if(i>MAX)
cout<<"对不起,该航线未找到!
\n";
else
{cout<<"终点站名"<<"\t"<<"航班号"<<"\t"<<"飞机号"<<"\t"<<"飞行日期"<<"\t"<<"乘员定额"<<"\t"<<"余票量\n";
show(info);}
return0;
}
按照输入的终点站名从第一条航线开始依次比较对应的链表结点存储的信息(info->fin_name),若有相同的则输出该条航线的信息,若没有则返回。
structairline*find_air()//根据客户提出的航班号查询航班信息
{structairline*info;
charnumber[10];
inti=0;
info=start;
cout<<"请输入航班号:
";
cin>>number;
while(i<=MAX)
{if(strcmp(number,info->air_name)){info++;i++;}
else{returninfo;}
}
cout<<"对不起,该航线未找到\n";
return0;
}
structairline*find_plane()//根据客户提出的飞机号查询航班信息
{structairline*info;
chara[10];
inti=0;
info=start;
cout<<"请输入飞机号:
";
cin.getline(a,10);
while(i<=MAX)
{if(strcmp(a,info->plane_name)){info++;i++;}
elsereturninfo;
}
cout<<"对不起,该航线未找到\n";
return0;
}
structairline*find_date()//根据客户提出的飞行日期查询航班信息
{structairline*info;
chara[10];
inti;
info=start;
cout<<"请输入飞行日期:
";
cin.getline(a,10);
{if(strcmp(a,info->date)){info++;i++;}
elsereturninfo;
}
cout<<"对不起,该航线未找到\n";
return0;
}
5、办理订票业务
voidorder()//办理订票业务
{structairline*info;
charname[10];
intamount,level;
info=start;
intflag=0;
inti;
cout<<"请输入查询航班的方式:
\n";
选择航线查找方式查找航线;
cout<<"请输入你订票所需要的数量:
";
cin>>amount;
if(票数满足)将客户信息添加到已定票客户名单;
else若满员或余票额少于订票额,询问客户是否需要进行排队等候
}
根据客户提出的要求先找到航班(search()),再根据客户的订票量与结点中所存储的信息(info->ticket_amount)比较,符合要求,则进行订票,询问客户的姓名,舱位等级,在订票乘员名单域(addlink())中添加客户信息,得到该客户的座位号后,该航线余票量(info->ticket_left)应为之前的余票量减去该客户的订票量。
6、办理退票业务
voidreturn_ticket()//退票
{structairline*info;
node*t,*back,*m,*n;
intlevel;
linklist*p1,*p2,*head;
charname[10];
intflag=0;
inti;
cout<<"请输入查询航班的方式:
\n";
选择航线查找方式查找航线;
head=info->book;
p1=head;
cout<<"请输入你的姓名(退票客户):
";
cin>>name;
while(p1)
{if(!
strcmp(name,p1->name))break;
p2=p1;p1=p1->next;
}
if(没找到该客户的信息L)
{cout<<"对不起,你没有订过票!
\n";return;}//未找到该订票客户,退出
else//若信息查询成功
{删除订票客户名单该订票客户的信息}
info->book=head;//将航线名单域指向订票单链表的头指针