数据结构实验报告飞机订票系统Word格式.docx
《数据结构实验报告飞机订票系统Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告飞机订票系统Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
勺链表如下
D1
D2
—i
D3
每个结点包括数据域和指针域:
数据域
指针域
C语言描述如下:
typedefstructflightnode{
charair_num[10];
/*航班号*/
charstart_time[15];
/*起飞时间*/
charend_time[15];
/*到达时间*/
charend_place[30];
/*目的地*/
inttotal;
/*限座*/
intleft;
/*空座*/
intprice;
/*票价*/
structflightnode*next;
/*指向个结点*/
}flightnode;
(2)旅客的资料:
为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素
包括姓名、证件号码、航班号和座位号四个数据项:
旅客姓名
证件号码
座位号
C语言描述如下:
typedefstructpassengernode{/*定义乘客资料结点*/charname[20];
charID_num[20];
charair_num[20];
intseat_num;
structpassengernode*next;
}passengernode;
【详细设计】
本系统源程序如下:
#include<
stdio.h>
stdlib.h>
#defineOK1
#defineERROR0
typedefstructflightnode{/*定义航班信息结点*/charair_num[10];
structflightnode*next;
}flightnode;
typedefstructpassengernode{/*定义乘客资料结点*/
charname[20];
flightnode*head_flight();
/*生成航班信息的头结点*/
passengernode*head_passenger();
/*生成乘客资料的头结点*/
intCreatFlight(flightnode**l);
/*生成航班信息链表*/
intCreatPassenger(passengernode**l);
/*生成乘客资料链表*/
intInsertFlight(flightnode**p,char*air_num,char*start_time,char*end_place,int
total,intleft,intprice);
/*插入航班信息的结点*/
intInsertPassenger(passengernode**p,char*name,char*ID_num,char*air_num,int
修改航班信息的函数*/
seat_num);
/*插入乘客资料的结点*/flightnode*modefy_airline(flightnode*l,char*air_num);
/*
退票函
choosethe
*ID_num);
/*订票函数*/
intCancelTicket(passengernode*c,flightnode*l,char*name,char*ID_num);
数*/
intSearchFlight(flightnode*head);
/*查询航班信息函数*/
intSearchPassenger(passengernode*head);
/*查询乘客信息函数*/
voidmain()/*主函数*/
{
intp=2;
/*p==1时进入主菜单,p==0时退出系统*/
passengernode*cus=head_passenger();
flightnode*air=head_flight();
charname[20],air_num[20],ID_num[30],mima[20],ch;
chart[20]="
zhengjianze"
;
/*管理员密码*/
clrscr();
CreatFlight(&
air);
CreatPassenger(&
cus);
while(p==2)
printf("
\nwelcometotheairlinesystem!
\n\npleaseservesbelowandpressthenumber:
\n\n"
);
1
->
BookTicket
\n"
2
CancelTicket
3
SearchInformation
4
Exit
switch(ch=getch()){
进入订票功能
case'
1'
:
{printf("
\n*BookingTicket*\n"
*/
PleaseinputaairlinenumberandpressenterforOK:
"
scanf("
%s"
air_num);
PleaseinputyournameandpressenterforOK:
name);
PleaseinputyourIDnumberandpressenterforOK:
ID_num);
BookTicket(air,air_num,cus,name,ID_num);
getch();
};
break;
2'
*CancelingTicket*\n"
/*进
入退票功能*/
Pleaseinputthecancelnameforbookingticket:
scanf("
PleaseinputtheIDforbookingticket:
CancelTicket(cus,air,name,ID_num);
};
3'
*SearchInformation*\n"
/*进入信
息查询功能*/
1->
flightinformation\n"
);
2->
passengerinformation\n"
other->
exit\n"
**\n"
if((ch=getch())=='
)/*航班信息查询*/
*flightinformation*\n"
SearchFlight(air);
}
elseif(ch=='
){/*乘客资料查询*/
\npleaseinputthekey:
mima);
/*输入管理员密码*/
if(strcmp(mima,t)==0){printf("
\n*passengerinformation
*\n\n"
SearchPassenger(cus);
}elseprintf("
sorry,thekeyiswrong"
}}break;
4'
{getch();
/*退出系统*/
p=0;
}break;
}}flightnode*head_flight()
flightnode*a;
a=(flightnode*)malloc(sizeof(flightnode));
if(a==NULL)
a->
next=NULL;
returna;
passengernode*head_passenger()
passengernode*c;
c=(passengernode*)malloc(sizeof(passengernode));
if(c==NULL)
c->
returnc;
intCreatFlight(flightnode**l)
flightnode*p=*l;
inti=0;
char*air_num[3]={"
flight01"
"
flight02"
flight03"
char*start_time[3]={"
08:
00"
12:
16:
30"
/*初始化航班信息*/
/*插入航
char*end_place[3]={"
Guangzhou"
Shenzhen"
Shantou"
inttotal[3]={100,100,100};
intprice[3]={300,200,250};
intleft[3]={23,54,76};
for(i=0;
i<
3;
i++)
InsertFlight(&
p,air_num[i],start_time[i],end_place[i],total[i],left[i],price[i]);
班信息*/
intCreatPassenger(passengernode**l)
passengernode*p=*l;
char*name[3]={"
liming"
Ximing"
Chongliang"
char*ID_num[3]={"
3105006052"
3105006054"
3105006051"
*/
intseat_num[3]={12,5,8};
InsertPassenger(&
p,name[i],ID_num[i],air_num[i],seat_num[i]);
returnOK;
/*初始化乘客资料
/*插入乘客资料*/
intInsertFlight(flightnode**p,char*air_num,char*starttotal,intleft,intprice)
{flightnode*q;
q=(flightnode*)malloc(sizeof(flightnode));
strcpy(q->
air_num,air_num);
time,char*end_place,int
strcpy(q->
start_time,start_time);
end_place,end_place);
q->
total=total;
left=left;
price=price;
(*p)->
next=q;
(*p)=(*p)->
next;
/*航班信息链的尾插法*/
intInsertPassenger(passengernode**p,char*name,char*ID_num,char*air_num,intseat_num)
{passengernode*q;
q=(passengernode*)malloc(sizeof(passengernode));
name,name);
ID_num,ID_num);
seat_num=seat_num;
/*乘客资料链表的尾插法*/
flightnode*modefy_airline(flightnode*l,char*air_num)
flightnode*p;
p=l->
for(;
p!
=NULL;
p=p->
next)
if(strcmp(air_num,p->
air_num)==0)
p->
left++;
returnl;
NOtheairline!
return0;
}}
*name,char
intBookTicket(flightnode*a,char*air_num,passengernode*c,char
*ID_num)
{flightnode*p=a;
passengernode*q=c->
p=a->
next!
q=q->
next);
next){if(strcmp(p->
air_num,air_num)==0){
if(p->
left>
0)
\nSuccessfulforBookingticket.\n\nYourflight:
%s\nYour
seatnumber:
%d"
p->
air_num,(p->
total-p->
left+1));
\n
**"
q,name,ID_num,air_num,p->
left+1);
left--;
returnOK;
else
seatisfull"
}/*if(strcmp)*/}
Sorry,thereisn'
ttheplane,pleasechecktheairlinenumber!
**n\.
intCancelTicket(passengernode*c,flightnode*l,char*name,char*ID_num){
passengernode*p,*pr;
pr=c;
p=pr->
while(p!
=NULL)
if(strcmp(p->
name,name)==0&
&
strcmp(p->
ID_num,ID_num)==0){
strcpy(air_num,p->
air_num);
l=modefy_airline(l,air_num);
pr->
next=p->
successfulforcancelingticket."
\n**"
pr=pr->
tthecustomer!
returnERROR;
intSearchFlight(flightnode*head){flightnode*p=head->
FlightStart_timeArrival_placePriceTotalLeft_seat\n\n"
for(;
%s%-10s%-9s%-7d%-6d%-6d\n"
air_num,p->
start_time,p->
end_place,p->
price,p->
total,p->
left);
}printf("
**\n\n"
intSearchPassenger(passengernode*head)
{structpassengernode*q=head->
NameIDFlightSeat_number\n\n"
q!
%-12s%-8s%-5s%d\n"
q->
name,q->
ID_num,q->
air_num,q->
seat_num);
【调试分析】
1、调试结果:
(1)系统主菜单界面:
~C:
\WINDOWS\systeml2kmd.exe
ueleonetotheairlinesvsteof
pieaceehoosetrlieesbeLouandpre-EMC-±
hienumlbie"
1->
Bookriclcet
2CancelTicket
3—>
SearchInfurnat丄ui*
4->
(2)进入订票的界面:
寅C:
\WINDOWS\system32kmd,exe
口x
(3)查询信息的界面:
盲C:
\WINDOWS\system-32kmd,exe
ueIcometotheairlinesysten?
piercechioosetheeemueebeIduandpremie-ntimljei*"
—>
&
«
dFChInforn«
tlui»
^(^=====二=耳===・一[fifot%°
乩=二==============』耳二==彌
flierhtinformation
2一〉passengfeririforiniation
ot;
hei«
—》exit
选择1,查询航班信息的界面:
选择2,输入密码,查询乘客的信息的界面:
新增乘客,查询乘客信息:
WINDOWS\sys1em32kmd,exe
4—>
Se-aj*cliInfoi'
nation——*
1—>
FligihtinfDima,ticm
2—>
informalion
other->
cxiit
丄nputtJi
-passenjferinfoi*matinn
Name
rn
Flivht
Se*t_n«
mbtp
liming
f丄ightUL
12
Xhning
310SQH6054
fll9ht02
£
■CliongJLlan
310SS0G0E1
Jlitfht33
6
zhengjianze
31050B&
053
flight32
4?
密码错误时:
(4)进入退票的界面:
Bookricket
Cancel1'
icliet
^eavehInfcvnatu>
n
*CancelingIicket*
Pleaseinputl;
hec^nce1nameforhockingticket:
zFen^Jianzeric«
iif«
inputL}*hIVfurbookingLiuFoC:
31050^6053successfulfopcAncelinqrticket.
uelcametotheairlinesysten?
pleasechoosetheservesbelau是n就pressthenumber
1->
Bdo1<
ricket
3—>
CancelTicFet
SearchInfarnation
名字或者证件错误时:
2、时间复杂度分析:
本程序运行所耗费的时间主要在于循环语句,for和while语句,其时间复杂度应该为O(n)。
3、模块设计和调试时存在问题的思考:
原先在信息查询中没有乘客与管