数据结构实验报告飞机订票系统.docx

上传人:b****1 文档编号:2400693 上传时间:2023-05-03 格式:DOCX 页数:14 大小:22.20KB
下载 相关 举报
数据结构实验报告飞机订票系统.docx_第1页
第1页 / 共14页
数据结构实验报告飞机订票系统.docx_第2页
第2页 / 共14页
数据结构实验报告飞机订票系统.docx_第3页
第3页 / 共14页
数据结构实验报告飞机订票系统.docx_第4页
第4页 / 共14页
数据结构实验报告飞机订票系统.docx_第5页
第5页 / 共14页
数据结构实验报告飞机订票系统.docx_第6页
第6页 / 共14页
数据结构实验报告飞机订票系统.docx_第7页
第7页 / 共14页
数据结构实验报告飞机订票系统.docx_第8页
第8页 / 共14页
数据结构实验报告飞机订票系统.docx_第9页
第9页 / 共14页
数据结构实验报告飞机订票系统.docx_第10页
第10页 / 共14页
数据结构实验报告飞机订票系统.docx_第11页
第11页 / 共14页
数据结构实验报告飞机订票系统.docx_第12页
第12页 / 共14页
数据结构实验报告飞机订票系统.docx_第13页
第13页 / 共14页
数据结构实验报告飞机订票系统.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构实验报告飞机订票系统.docx

《数据结构实验报告飞机订票系统.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告飞机订票系统.docx(14页珍藏版)》请在冰点文库上搜索。

数据结构实验报告飞机订票系统.docx

数据结构实验报告飞机订票系统

一、订票系统

【需求分析】

本订票系统要能够实现航班情况的录入功能、航班的查询功能、订票功能、退票功能以及管理本系统的功能即能够修改航班信息。

具体分析如下:

1、录入功能

可以录入航班信息,如录入航班号,到达城市,起飞时间,飞机票数,票价。

2、查询功能

可以查询航班的各项信息,如可以查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓,航班号。

3、订票功能

可以订票并且记录下乘客的相关信息如记录下乘客姓名,身份证号码,所订航班的航班号以及所订的票数。

4、退票功能

可以退票并且记录乘客的相关信息以及退票信息。

5、修改功能

可以根据需要由管理员对航班信息进行修改更正。

【概要设计】

1、算法设计:

每个模块的算法设计说明如下:

(1)录入模块:

查找单链表的链尾,在链尾插入一个“航班信息”的新结点。

(2)查询模块:

提供两种查方式:

按航号和按航线查询,1代表按航号查询,2代表按航线查询。

0则表示退出查询。

顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。

(3)订票模块:

查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功,否则失败。

(4)退票模块:

输入要退票的乘客姓名以及证件号码,查找乘客资料的链表中是否有这位乘客,有则删去此结点,并在空位加上1,无则退票失败。

(5)修改模块:

输入密码,确认是否有权限对航班信息进行修改,有则在航班信息链表中查找要修改的结点,进行修改,否则不能修改。

2.存储结构设计:

(1)航班的信息:

为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞达到的时间、空座和目的的、票价以及限座七个数据项:

航班号

起飞时间

达到时间

目的地

限座

空座

票价

单链表如下:

 

每个结点包括数据域和指针域:

数据域

指针域

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<>

#include<>

#defineOK1

#defineERROR0

typedefstructflightnode{/*定义航班信息结点*/

charair_num[10];

charstart_time[15];

charend_time[15];

charend_place[30];

inttotal;

intleft;

intprice;

structflightnode*next;

}flightnode;

typedefstructpassengernode{/*定义乘客资料结点*/

charname[20];

charID_num[20];

charair_num[20];

intseat_num;

structpassengernode*next;

}passengernode;

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");

printf("================================================================\n\n");

printf("1->BookTicket\n");

printf("2->CancelTicket\n");

printf("3->SearchInformation\n");

printf("4->Exit\n\n");

printf("================================================================\n");

switch(ch=getch()){

case'1':

{printf("\n*-------------BookingTicket-------------*\n");/*进入订票功能*/

printf("PleaseinputaairlinenumberandpressenterforOK:

");

scanf("%s",air_num);

printf("PleaseinputyournameandpressenterforOK:

");

scanf("%s",name);

printf("PleaseinputyourIDnumberandpressenterforOK:

");

scanf("%s",ID_num);

BookTicket(air,air_num,cus,name,ID_num);getch();}

;break;

case'2':

{printf("*-----------------------CancelingTicket--------------------*\n");/*进入退票功能*/

printf("Pleaseinputthecancelnameforbookingticket:

");

scanf("%s",name);printf("PleaseinputtheIDforbookingticket:

");scanf("%s",ID_num);

CancelTicket(cus,air,name,ID_num);

};break;

case'3':

{printf("*---------------SearchInformation---------------------*\n");/*进入信息查询功能*/

printf("1->flightinformation\n");

printf("2->passengerinformation\n");

printf("other->exit\n");

printf("*------------------------------------------------------*\n");

if((ch=getch())=='1')/*航班信息查询*/

{printf("*------------------flightinformation-----------------*\n");

SearchFlight(air);}

elseif(ch=='2'){/*乘客资料查询*/

printf("\npleaseinputthekey:

");scanf("%s",mima);/*输入管理员密码*/

if(strcmp(mima,t)==0){printf("\n*---------------passengerinformation---------------*\n\n");

SearchPassenger(cus);}

elseprintf("sorry,thekeyiswrong");getch();}}break;

case'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->next=NULL;

returnc;

}

intCreatFlight(flightnode**l)

{

flightnode*p=*l;

inti=0;

char*air_num[3]={"flight01","flight02","flight03"};

char*start_time[3]={"08:

00","12:

00","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;

inti=0;

char*name[3]={"liming","Ximing","Chongliang"};

char*ID_num[3]={"52","54","51"};/*初始化乘客资料*/

char*air_num[3]={"flight01","flight02","flight03"};

intseat_num[3]={12,5,8};

for(i=0;i<3;i++)

InsertPassenger(&p,name[i],ID_num[i],air_num[i],seat_num[i]);/*插入乘客资料*/

returnOK;

}

 

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);

strcpy(q->start_time,start_time);

strcpy(q->end_place,end_place);q->total=total;

q->left=left;

q->price=price;

q->next=NULL;

(*p)->next=q;

(*p)=(*p)->next;/*航班信息链的尾插法*/

returnOK;

}

intInsertPassenger(passengernode**p,char*name,char*ID_num,char*air_num,intseat_num)

{passengernode*q;

q=(passengernode*)malloc(sizeof(passengernode));

strcpy(q->name,name);

strcpy(q->ID_num,ID_num);

strcpy(q->air_num,air_num);

q->seat_num=seat_num;

q->next=NULL;

(*p)->next=q;

(*p)=(*p)->next;/*乘客资料链表的尾插法*/

returnOK;

}

flightnode*modefy_airline(flightnode*l,char*air_num)

{

flightnode*p;

p=l->next;

for(;p!

=NULL;p=p->next)

{

if(strcmp(air_num,p->air_num)==0)

{

p->left++;

returnl;

}

printf("NOtheairline!

");

return0;

}}

intBookTicket(flightnode*a,char*air_num,passengernode*c,char*name,char*ID_num)

{flightnode*p=a;

passengernode*q=c->next;

p=a->next;

for(;q->next!

=NULL;q=q->next);

for(;p!

=NULL;p=p->next)

{if(strcmp(p->air_num,air_num)==0){

if(p->left>0)

{printf("\nSuccessfulforBookingticket.\n\nYourflight:

%s\nYourseatnumber:

%d",p->air_num,(p->total-p->left+1));printf("\n*-----------------------------------------*");

InsertPassenger(&q,name,ID_num,air_num,p->total-p->left+1);

p->left--;returnOK;}

else

{printf("seatisfull");return0;}

}/*if(strcmp)*/}

printf("Sorry,thereisn'ttheplane,pleasechecktheairlinenumber!

");printf("\n*-----------------------------------------*");

}

 

intCancelTicket(passengernode*c,flightnode*l,char*name,char*ID_num)

{

passengernode*p,*pr;

charair_num[20];

pr=c;

p=pr->next;

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->next;

p=pr->next;

printf("successfulforcancelingticket.");

printf("\n*-----------------------------------------------------------------*");

returnOK;

}

pr=pr->next;

p=pr->next;

}

printf("Sorry,thereisn'tthecustomer!

");

printf("\n*--------------------------------------------------------*");

returnERROR;

}

 

intSearchFlight(flightnode*head)

{flightnode*p=head->next;

printf("FlightStart_timeArrival_placePriceTotalLeft_seat\n\n");

for(;p!

=NULL;p=p->next)

{

printf("%s%-10s%-9s%-7d%-6d%-6d\n",p->air_num,p->start_time,p->end_place,p->price,p->total,p->left);printf("\n");

}printf("*----------------------------------------------------------*\n\n");

returnOK;

}

 

intSearchPassenger(passengernode*head)

{structpassengernode*q=head->next;

printf("NameIDFlightSeat_number\n\n");

for(;q!

=NULL;q=q->next)

{

printf("%-12s%-8s%-5s%d\n",q->name,q->ID_num,q->air_num,q->seat_num);printf("\n");

}

printf("\n*----------------------------------------------------------*");

returnOK;}

 

【调试分析】

1、调试结果:

(1)系统主菜单界面:

 

(2)进入订票的界面:

 

(3)查询信息的界面:

 

选择1,查询航班信息的界面:

 

选择2,输入密码,查询乘客的信息的界面:

 

新增乘客,查询乘客信息:

 

密码错误时:

 

(4)进入退票的界面:

 

名字或者证件错误时:

 

2、时间复杂度分析:

本程序运行所耗费的时间主要在于循环语句,for和while语句,其时间复杂度应该为O(n)。

3、模块设计和调试时存在问题的思考:

原先在信息查询中没有乘客与管理人员的区别,乘客与管理人员都可以看到相同的信息,航班信息和乘客资料,后来,在浏览乘客资料时要求输入管理人员的密码,以确保乘客资料的安全性。

4、算法的改进设想:

本程序还存在很多缺点,不能完全的实现老师要求的各种功能,特别是在查询功能方面,此程序应该增加一些查询的方式的设计,如可以按照终点地查询等。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2