航空客运订票系统方案Word文档格式.docx
《航空客运订票系统方案Word文档格式.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统方案Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
3.6存储结构设计7
4.调试分析7
5.用户使用说明8
6.测试结果10
7.心得体会12
8.附录13
1.需求分析
航空客运订票的业务活动包括:
查询航线、客票预订和办理退票等。
试设讣一个航空客运订票系统,以使上述业务可以借助计算机来完成。
【基本要求】
(1)每条航线所涉及的信息有:
终点站名、航班号、飞机号、飞行周日(星期儿)、乘员定额、余票量、已订票的客户(包括、订票量、舱位等级1,2或3)以及等候替补的客户(包括、所需票量);
(2)系统能实现的操作和功能如下:
1录入:
可以录入航班情况,全部数据可以只放在存中,最好存储在文件中;
2查询航线:
根据旅客提出的终点站名输出下列信息:
航班号、飞机号、星期儿飞行,最近一天航班的日期和余票额;
3承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;
若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补;
4承办退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
初始化航班信息如下:
终点站
航班号
飞机号
飞行周日
余票屋
hunan
001
1111111
3
120
shanghai
002
2222222
2
jiangsu
003
3333333
1
通过输入0~5这六个数字选择相应的操作,如:
查询航班,订票,退票等操作;
2.概要设计
两个客户可分别山线性表和队列实现。
为查找方便,已订票客户的线性表应按客户有序,并且,为插入和删除方便,应以链表作存储结构。
由于预约人数无法预计,队列也应以链表作存储结构。
整个系统需汇总各条航线的情况登录在一线性表上,山于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。
每条航线是这表上的一个记录,包含上述8个域、其中乘员域为指向乘员链表的头指针,等候替补的
客户域为分别指向队头和队尾的指针。
注:
由于“航线”可只用一条单链表记录,故釆用全局变量,减少参数的传递。
2.1定义“航线”类型
ADTLairline{
数据对象:
D={aidiW航线链表集,i=l,2,3,n,n>
=0}
数据关系:
Rl={<
ai-1,ai>
ai~l,aiGD,
基本操作:
Lairlinesearch^line()
Lairlinesearch_plane()
Lairlinesearch_date()
Lairlinesearch_addr()
voidboundary()
voidinsert_line()
voidprint_customer(airline*p)
voidbook()
voidwaited(airline*p)
voidRefund()
voidsearch()
voidInitLine()
voidPrintline()
}ADTLairline;
i=l,2,3,n}
//按航班号查找航班〃按飞机号查找航班
//按飞行日期查找航班
//按航班终点查找航班
〃主菜单界面
〃插入新航班
//显示航班客户信息
〃订票系统
//排队订票系统
〃退票系统
//航班查询系统
〃初始化航线信息
〃显示所有航班信息
2.2主函数
voidmain()
{初始化;
do{接受命令;
处理命令(调用相应函数);
}while(“命令”!
二"
退出”);
}
2.3调用关系
3.详细分析
3.1航线和客户的存储结构
客户存储结构体
typedefstmctcustomer
{charname[20];
//
intnum;
〃订票数量
intlevel;
〃舱位等级
customer*next;
〃指向后继乘客
}customer,*Lcustoiner;
航线存储结构体
typedefstructairline
{charter_address[20];
charline_num[10];
〃终点站
〃航班号
charplane_num[10];
intdate;
inttotal;
〃飞机型号
〃飞行日期
〃总人数
intremain;
〃余票数
customer*booked;
〃已定客户信息
customer*wait;
//替补客户信息
airline*next;
〃指向后继航线
}airline,*Lairline;
3.2各个系统模块
(1)浏览航线模块:
定义voidprint_custonier(airline水p),显示成员的信息;
调用voidprintline()函数输出全部航线信息。
(2)浏览订票客户信息模块:
定义订票客户信息的结构体customer,根据输入航班号调用search。
函数寻找客户信息。
(3)査询航线模块:
顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。
(4)订票模块:
查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功,否则失败。
(5)退票模块:
输入要退票的乘客,查找乘客资料的链表中是否有这位乘客,有则删去此节点,并在空位上加1,无则退票失败。
如果此时余票额大于等于候补客户的订票数量,那么候补客户订票成功。
3.3算法设计
1.按照航班查找
Lairlinesearch_line()
{
chara[10];
airline*p:
p=L->
next;
P(HPleaseinputthenumberofline:
H);
S(H%sM,a);
for(;
p;
p=p->
next)
if(!
strcmp(a,p->
line_num))break;
returnp;
通过建立节点p实现链表的遍历,利用for循环挨个查找,直到找到为止,再返回找到的这个节点,实现传递。
2.订票系统
{inti;
intflag=O;
air!
ine*p;
customer*cst,*c;
P(nPleasechoosethewayofviewing:
\nH);
〃查询方式选择
P(HThenumberoftheflight====================>
1\n"
);
P(MTheaddressofthefinaldestination================
P(HThedateoftheflight======================:
!
flag;
)//flag为0时一直在循环
{S(”%d”,&
i);
switch⑴〃三种方式查询航班
{case1:
p=search_line();
flag=l;
break;
case2:
p=search_address();
flag=l;
case3:
p=search_date();
default:
P(MWrong!
IPleaseinputagain!
\nu);
)
输入1,2,3选择操作方式,先进行查询,在通过调用函数实现购票。
3.初始化航线
voidInitLine()〃初始化航线信息
{初始化航线,先建立3条航线方便测试;
4.航班查询
voidsearch()
{inti;
airline*p;
PC'
Pleaseinputthewayofviewingtheflight:
\nH);
P("
Thenumberoftheflight>
l\n"
〃航班号
P(HThenumberoftheplane>
2\nH);
〃飞机
Thedateoftheflight>
3\n”);
〃航班日期
Thefinaladdressoftheflight-一一>
4\n”);
〃航班终点
S(“%d”,&
switch(i)〃按照选择项进行操作
{case1:
p=search」ine();
flag二1;
p=search_plane();
flag=1:
flag=1;
break:
case4:
flag-=1;
default:
P(MWrong,inputagain!
}if(P)
{P(”终点站航班号飞机号飞行周日余票量\n“);
P(n%-9s%9s%13s%1Od%15d\n,\p->
ter_address,p->
line_num,p->
plane_num,p->
date,p->
remain);
P(MBookingthetickets?
(Sure,pleaseinputl;
Elseinputanynumber!
)”);
S(”%cT,&
if(i==l)book();
ElseP(n\n\n\n\nH;
boundary();
ElseP("
Theflightisnotexist!
、(丿_Yr\n\n\n"
}
voidprintline()
{intflag;
airline*p;
P(“终点站航班号飞机号飞行周日余票量\n“);
{P(n%s%s%s%d%d\n,\p->
plane_num,p->
date,p->
P(n\n\n\n\n\nH);
boundary();
通过输入123,4进行选择查询的方式,分别为飞机型号,航班号,目的地位置,飞行日期进行查询。
3.4主函数功能
intflag=l;
boundary();
InitLine();
do
{switch(getchar())
caseT:
pi・irHline();
〃显示所有航线
senrch();
book();
Refimd();
bwak;
case