航空客运订票系统课程设计数据结构文档格式.docx
《航空客运订票系统课程设计数据结构文档格式.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统课程设计数据结构文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
intbnum;
//bnum记录某人买的票数
structPassenger*next;
};
typedefstructAir//记录飞机信息
{
intticket;
//飞机票数
chardes[20];
//des记录飞机的终点
charflight[8];
//flight记录航班号
intnum;
//记录飞机号
Passenger*wait;
Passenger*book;
Timetime;
structAir*next;
}AirPlane;
3.详细设计和编码
3.1.主菜单
进入主菜单,必须先录入航班信息,客户可以根据自己需要选择,选择自己想要的航班,然后进行一系列自己选择的操作,具体菜单流程图如下所示
图3-1主菜单功能模块图
3.2.录入航空信息
录入航空信息包括终点站名、航班号、飞机号、飞行时间、乘员定额,根据用户的需要选择航班,输出航班信息,如果可以再进行订票操作,录入航空信息的流程图如下
图3-2录入航空信息流程图
3.3输出航空信息
客户可以根据自己的需要选择是按目的地查询还是按航班查询,如果按航班查询,必须要知道航班号,如果按目的地查询,只需输入终点站,如果一个终点站有多个航班,客户可以根据自己的需要选择一个航班进行操作,具体流程图如下。
图3-3按航班输出信息的流程图
图3-4按目的输出航空信息的流程图
3.4订票
在客户订票前需要先查询航班是否存在,所以在订票的模块中会要求客户输入航班信息,再调用航班查询的函数,查询是否存在这个航班,如果存在这个航班,则客户可以订票,客户在订票的时候,如果所需票量超过剩余票数,则会提示客户是否需要排队候票,如果不排队候票,则选择要么重新输入所需票量,要么退出订票。
订票流程图如下
图3-5订票流程图
3.5退票
客户在退票操作时,也是要先输入是否存在那个航班,如果存在,就查询这个航班是否存在这个客户,如果不存在,就退票失败,如果存在,则可以退票,退票后,再查看是否满足候票数,如果满足则把票补给候票人,如果不满足,就继续排队候补。
退票流程图如下
图3-6退票流程图
4.实验结果
4.1菜单函数的功能测试
系统运行后就会自动显示菜单1.录入航班,2.查询航班,3.订票,4,退票,当用户选择相应的代号就进入相应的功能模块
图4-1菜单函数的截图
4.2录入函数的功能测试
进入当这个录入模块,用户需要先录入航班的信息,包括航班号,总的票数,目的地,起飞时间,和飞机号,当录入一个航班信息,会提示是否继续录入
图4-2录入航空信息的截图
4.3查询航班函数的功能测试
用户可以选择是按目的地查询信息或者是按航班查询信息,一个目的地可能有几个不同的航班,但是一个航班只能到一个目的地
图4-3查询航班的截图
4.4订票功能地测试
用户在订票时需要输入航班,然后再查询是否存在这个航班,如果存在,则可以订票,否则不能订票,在订票的时候如果余票足够,则可以成功订票,否则提示用户是否需要排队候补
如图4-4,订票成功可以将客户信息输出,图4-5,是余票不足,提示用户是否需要排队候补,图4-6,客户选择候补,则会将客户信息输出
图4-4订票成功的截图
图4-5余票不足的截图
图4-6候补成功的截图
4.5退票函数的功能测试
用户在退票的时候需要输入航班,查找这个航班是否存在,如果存在,再查看退票信息是否正确,输出客户信息,退票后查询这个航班的剩余票数是否变化,是否足够候补人所需要的票数图4-7是查询这个航班的客户信息,图4-8是找到要退票的客户且输出客户信息,图4-9退票后查询这个航班,是否退票成功
图4-7查询客户的截图
图4-8找到要退票的客户的信息
图4-9查询是否退票成功的截图
5.体会
这次课程设计我用链表设计的,我之前的想法是用一个结构体存储航班信息,再用一个结构体存储已经订票的客户信息,再用一个结构体存储候补的客户信息,然后在已经订票的客户信息中定义一个指针存储已经订票的客户的航班,在候补的客户中定义一个指针存储已经排队候补的客户的航班,用这个指针和航班信息联系起来,再进行操作,可是在退票中链表就出现问题了,只要有人候补,那么已经订票的客户信息就输不出来,好不容易把候补搞好了,可是订票模块就出现问题了,总的来说是结构的问题,所以我就重新写了,用了十字链表的思想,不过在退票后,把退票给候补的客户有问题,就没有写这个了。
这次课程设计写完后,我发现我对于指针是越来越糊涂了,原来在写作业的时候还有点清楚指针的指向,现在时越来越不清楚了。
所以在存储空间上总是出现问题,叫同学帮我改了指针的指向,才会好的,所以这次放假一定要把指针弄清楚,然后进一步完善这个程序。
致谢
感谢XX老师的耐心指导,感谢XXX老师的悉心教导,感谢XXX同学的帮助。
感谢在课程设计中对我帮助过得同学,谢谢你们对我的帮助,让我感受到到同学的友谊和老师对我的关爱
参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版).北京:
清华大学出版社,1997.
[2]刘大有,唐海鹰,等.数据结构.北京:
高等教育出版社,2001.
[3]黄扬铭.数据结构.北京:
科学出版社,2001.
[4]黄刘生.数据结构.北京:
科学经济出版社,2000.
附录:
源程序清单
#include<
iostream.h>
malloc.h>
stdio.h>
stdlib.h>
iomanip.h>
string.h>
structTime//定义飞机的起飞时间
charyear[8],month[8],day[8],hour[8],minute[8],second[8];
voidInputDate(Time&
time)//输入飞机的起飞时间
cout<
<
"
Pleaseinputthedate(yearmonthdayhourminute):
endl;
cin>
>
time.year>
time.month>
time.day>
time.hour>
time.minute>
time.second;
}
voidPrintDate(constTimetime)//输出飞机的起飞时间
time.year<
'
.'
time.month<
time.day<
<
time.hour<
:
time.minute<
voidPassengerCpy(Passenger*&
d,Passenger*s)
strcpy(d->
name,s->
name);
voidPrintPassenger(constPassenger*p)
*************************************"
姓名订票量"
p->
name<
"
bnum<
voidWaitticket(Passenger*&
p)//输入候补乘客的信息
Passenger*w=p;
Passenger*s=newPassenger;
pleaseinputthepassenger:
;
s->
name;
pleaseinputtheticketthepassengerneedwait:
bnum;
voidDisplayWait(Passenger*passenger)//输出要候补的乘客的信息
Passenger*q=passenger->
next;
if(!
q)
return;
while(q)
{
cout<
NameBNum"
setiosflags(ios:
left)<
setw(10)<
q->
q=q->
}
intInputPassenger(Passenger*&
passenger,AirPlane*flight)//输入订票的乘客的信息
Passenger*p=passenger;
Passenger*q=newPassenger;
Passenger*s=flight->
wait;
Passenger*w;
intchioce;
Pleaseinputthepassengername:
pleaseinputtheticketthepassengerneedbook:
if(q->
bnum>
flight->
ticket)
现在航班中还有:
ticket<
张票!
if(flight->
{
cout<
请选择:
1.将差票转为候补票2.只定剩余票3.取消订票"
cin>
chioce;
if(chioce==1)
{
w=newPassenger;
q->
next=p->
p->
next=q;
PassengerCpy(w,q);
w->
next=s->
s->
next=w;
bnum=q->
bnum-flight->
ticket;
bnum=flight->
flight->
ticket=0;
}
elseif(chioce==2)
{
else
returnNULL;
}
else
q->
s->
else
q->
p->
flight->
ticket-=q->
voidDisplayClient(Passenger*p)//输出已经订票的乘客信息
Passenger*q=p->
voidCreatFlight(AirPlane*&
flight)//创建一个空的结点
AirPlane*s=newAirPlane;
s->
next=NULL;
flight=s;
Passenger*p=newPassenger;
p->
flight->
book=p;
Passenger*w=newPassenger;
w->
wait=w;
AirPlane*Displayflight(AirPlane*flight,charf[])//按航线输出航班
AirPlane*p=flight->
intflag=0;
while(p)
if(strcmp(p->
flight,f)==0)
system("
cls"
);
**********************************************************"
NumDestinationFlightTicketTime"
num<
des
<
flight<
PrintDate(p->
time);
\n**********************************************************"
*****************************已定乘客*********************"
DisplayClient(p->
book);
*****************************候补乘客*********************"
wait);
returnp;
p=p->
returnNULL;
voidDisplaydes(AirPlane*flight,chard[])//按目的地输出航班
AirPlane*p=newAirPlane;
p=flight;
des,d)==0)
flag=1;
<
PrintDate(p->
if(flag==0)
Sorry!
notfindtheinformation!
voidCreat(AirPlane*&
flight)//录入航班
AirPlane*p;
AirPlane*s=flight;
Passenger*b,*w;
charch;
do
p=newAirPlane;
b=newPassenger;
w=newPassenger;
b->
w->
book=b;
system("
pleaseinputtheflight:
cin>
flight;
pleaseinputtheallticketoftheflight:
pleaseinputthedestination:
des;
InputDate(p->
pleaseinputthenumberoftheairplane:
num;
ifcontinue,pleasechoose('
y'
/'
Y'
),ifnot,pleaseinputchoose('
N'
n'
):
ch;
pause"
s->
next=p;
}while(ch=='
||ch=='
voidDisplay(AirPlane*flight)//输出航线
intn;
1.按终点查询2.按航班查询"
pleaseinputyourchoice:
n;
if(n==1)
chard[20];
pleaseinputthedestinationyouwouldlookup:
d;
Displaydes(flight,d);
elseif(n==2)
charf[20];
f;
Displayflight(flight,f);
inputiserror!
system("
pause>
null"
voidBook(AirPlane*&
flight)//订票
AirPlane*p=newAirPlane,*f=NULL;
charline[20];
line;
f=Displayflight(flight,line);
//查找乘客要订的航班是否存在
if(f)
InputPassenger(f->
book,f);
Displayflight(flight,line);
Notfindtheflight!
voidReturnTicket(AirPlane*&
flight)//退票
Passenger*p=f->
book->
Passenger*q=f->
book;
intflag=0;
Pleaseinputthepassengernameyouneedback:
while(p)
if(!
strcmp(p->
name,name))
flag=1;
break;
p=p->
q=q->
if(flag==1)
PrintPassenger(p);
intvote;
do
cout<
Pleaseinputthevoteyouneedback:
cin>
vote;
if(vote>
bnum)
cout<
最大退票量为:
while(vote>
bnum);
if(vote=