数据结构实验报告飞机订票系统Word文档下载推荐.docx
《数据结构实验报告飞机订票系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告飞机订票系统Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。
目的地
限座
空座
票价
单链表如下:
每个结点包括数据域和指针域:
数据域
指针域
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<
>
#defineOK1
#defineERROR0
typedefstructflightnode{/*定义航班信息结点*/
flightnode*head_flight();
/*生成航班信息的头结点*/
passengernode*head_passenger();
/*生成乘客资料的头结点*/
intCreatFlight(flightnode**l);
/*生成航班信息链表*/
intCreatPassenger(passengernode**l);
/*生成乘客资料链表*/
intInsertFlight(flightnode**p,char*air_num,char*start_time,char*end_place,inttotal,intleft,intprice);
/*插入航班信息的结点*/
intInsertPassenger(passengernode**p,char*name,char*ID_num,char*air_num,intseat_num);
/*插入乘客资料的结点*/
flightnode*modefy_airline(flightnode*l,char*air_num);
/*修改航班信息的函数*/
intBookTicket(flightnode*a,char*air_num,passengernode*c,char*name,char*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\npleasechoosetheservesbelowandpressthenumber:
\n\n"
);
================================================================\n\n"
1->
BookTicket\n"
2->
CancelTicket\n"
3->
SearchInformation\n"
4->
Exit\n\n"
================================================================\n"
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:
PleaseinputtheIDforbookingticket:
CancelTicket(cus,air,name,ID_num);
};
3'
*---------------SearchInformation---------------------*\n"
/*进入信息查询功能*/
printf("
flightinformation\n"
);
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]);
/*插入航班信息*/
returnOK;
intCreatPassenger(passengernode**l)
passengernode*p=*l;
char*name[3]={"
liming"
Ximing"
Chongliang"
char*ID_num[3]={"
52"
54"
51"
/*初始化乘客资料*/
intseat_num[3]={12,5,8};
InsertPassenger(&
p,name[i],ID_num[i],air_num[i],seat_num[i]);
/*插入乘客资料*/
intInsertFlight(flightnode**p,char*air_num,char*start_time,char*end_place,inttotal,intleft,intprice)
{flightnode*q;
q=(flightnode*)malloc(sizeof(flightnode));
strcpy(q->
air_num,air_num);
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;
intBookTicket(flightnode*a,char*air_num,passengernode*c,char*name,char*ID_num)
{flightnode*p=a;
passengernode*q=c->
p=a->
next!
q=q->
next);
{if(strcmp(p->
air_num,air_num)==0){
if(p->
left>
0)
\nSuccessfulforBookingticket.\n\nYourflight:
%s\nYourseatnumber:
%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!
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!
\n*--------------------------------------------------------*"
returnERROR;
intSearchFlight(flightnode*head)
{flightnode*p=head->
FlightStart_timeArrival_placePriceTotalLeft_seat\n\n"
%s%-10s%-9s%-7d%-6d%-6d\n"
air_num,p->
start_time,p->
end_place,p->
price,p->
total,p->
left);
\n"
}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);
\n*----------------------------------------------------------*"
【调试分析】
1、调试结果:
(1)系统主菜单界面:
(2)进入订票的界面:
(3)查询信息的界面:
选择1,查询航班信息的界面:
选择2,输入密码,查询乘客的信息的界面:
新增乘客,查询乘客信息:
密码错误时:
(4)进入退票的界面:
名字或者证件错误时:
2、时间复杂度分析:
本程序运行所耗费的时间主要在于循环语句,for和while语句,其时间复杂度应该为O(n)。
3、模块设计和调试时存在问题的思考:
原先在信息查询中没有乘客与管理人员的区别,乘客与管理人员都可以看到相同的信息,航班信息和乘客资料,后来,在浏览乘客资料时要求输入管理人员的密码,以确保乘客资料的安全性。
4、算法的改进设想:
本程序还存在很多缺点,不能完全的实现老师要求的各种功能,特别是在查询功能方面,此程序应该增加一些查询的方式的设计,如可以按照终点地查询等。