数据结构-航空订票系统_第1页
数据结构-航空订票系统_第2页
数据结构-航空订票系统_第3页
数据结构-航空订票系统_第4页
数据结构-航空订票系统_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、宁波大红鹰学院信息工程学院课程设计报告项目名称:航空订票系统项目组长:白钰琦项目成员:徐程凯、徐海域、项鸿伟班级名称:10计科(1)专业名称:计算机科学与技术完成时间:2012/11/1 信息工程学院制目 录一、案例描述- 1 -1、总体描述- 1 -2、模块描述- 1 -二、设计思路- 1 -三、程序设计- 2 -1、数据结构描述- 2 -2、主函数及其流程图- 3 -3、源程序- 5 -四、调试与分析- 21 -1开始运行程序- 21 -五、设计总结- 24 -1、完成情况- 24 -2、心得体会- 24 -一、案例描述随着时代的进步社会分工的不断细化,各个行业联系的不断密切,人们出行越来

2、越多,出行的方式也是百花齐放,作为空中重要的交通工具,飞机航空系统也在不断地得到优化,其中重要的一项就是飞机航空订票系统,因此好的订票系统关系着人们的日常出行方便与否,设计并编制出符合日常使用的航空订票系统是现在迫切需求。1、总体描述本系统是专为乘坐飞机的乘客准备的,乘客只需输入自己的信息(姓名.出航时间.飞往的目的地),就可以将输入的信息在本系统中查询航班信息和订票信息,系统可以自动显示乘客所要查询的信息,如果航班已满系统会提示乘客是否要候补排队。如果有乘客要退票,那系统会从候补排队的乘客中按顺序选出要订票的乘客。本系统有增加航班模块、查找航班模块、订票模块、退票模块等模块。2、模块描述菜单

3、设计:1、航班信息录入:每个航班信息包括航班号、起飞时间、降落时间、起飞地点、降落地点、飞机号、票价等信息。2、查询航线:根据乘客提出的终点站名输出下列信息:航班号、起飞时间、降落时间、起飞地点、降落地点、飞机号、票价、剩余标题等信息,乘客还可以通过剩余票量来确定该航班是否已满。3、办理订票业务:根据乘客提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为乘客办理订票手续,如果没有系统会给乘客一个预约候补。4、退票业务:根据乘客提供的情况(日期、航班),为乘客退票手续,然后查询该航班是否有人后候排队,首先询问在第一个排队的乘客,若所退票额能满足他的要求,则为他订票手续,否则依次查

4、询其他排队候补乘客。二、设计思路本系统分为4个模块:增加航班模块、查找航班模块、订票模块、退票模块。得到如图所示系统功能模块图。航空订票系统管理员乘客查询航线订票退票查找航线添加航线查看航线乘客管理图 1航空订票系统系统功能模块图三、程序设计1、数据结构描述本程序首先定义了两个结构体作为乘客信息和航班信息的存储媒介,一是乘客信息结构体,定义了姓名,订票数,舱位等级,信息,二是航班信息结构体,定义了学航班终点、航班号、飞机号、飞行日期、总票数、剩余票数、舱位等级。定义如下:乘客信息结构体typedef struct Customerchar Name8; /姓名 Int Amount; /订票数

5、 char Rank; /舱位等级int IDinfor; /信息struct Customer *next;Customer;航班信息结构体typedef struct Flightchar Des_Name10; /航班终点char Flight_No6; /航班号 char Plane_No6; /飞机号 int Week_Day; /飞行日期 int Customer_Amount; /总票数 int Free_Amount; /剩余票数 int Price3; /舱位价格 Customer *Custname; /该航班的已订票乘客名单Customer *Replname; /该航班

6、的候补乘客名单struct Flight *next; /指示下一个航线节点Flight,*PFlight;2、主函数及其流程图登入函数输入用户和密码判断是正确:用户密码正确跳转相应界面结束开始添加航线开始判断航线结点是否为空输入航线信息新建首个航线结束建立航线结点前一个结点指向当前结点订票函数开始判断航线是否为空输入航线号判断航线是否存在输入票数票数够不够输入个人信息结束是否成为候补乘客退票函数开始输入航线号是否存在输入姓名是否存在退票成功结束3、 源程序#include <iostream.h>#include <process.h>#include <str

7、ing.h>#include <conio.h>#include <stdio.h>#include <iomanip.h>#define MAX 60#define NULL 0typedef struct Customer /*乘客信息*/ char Name8; /*姓名*/ int Amount; /*定票数*/ char Rank; /*舱位等级*/ int IDinfor; /*个人信息*/ struct Customer *Next; /*指向下一乘客结点*/ int sum; Customer;typedef struct Flight

8、 /*航线信息*/ char Des_Name10; /*终点站名*/ char Flight_No6; /*航班号*/ char Plane_No6; /*飞机号*/ int Week_Day; /*飞行周日*/ int Customer_Amount; /*乘员定额*/ int Free_Amount; /*剩余票数*/ int Price3; /*舱位等级的价格*/ Customer *CustName; /*该航班的已定票乘客名单*/ Customer *ReplName; /*该航班的候补乘客名单*/ struct Flight *Next; /*指示下一航线结点*/Flight,*

9、PFlight;int Customer_Count=0; /*所有航线的定票乘客总数*/Flight *Head; /*航线头指针*/Flight *p2; /*航线结点指针*/Customer *Custp1MAX; /*各条航线乘客结点指针*/Customer *Replp1MAX; /*各条航线候补结点指针*/int IsEmpty=1; /*是否有定票乘客*/int IsReplace=1; /*是否有候补乘客*/Customer *prior; /*满足要求的定票乘客的前结点,以作删除操作*/int shouldsave=0;/*-询问是否继续的函数-*/char Continue

10、() char answer; while(1) printf("nt 你是否继续(Y/N)?"); scanf(" %c",&answer); if(answer='y'|answer='Y') return 'y' else if(answer='n'|answer='N') return 'n' else printf("nt输入有误,请重新输入!"); /*-操作出错函数-*/void ErrorMess() printf(

11、"nt对不起,您的操作有误!");getch();/*-系统退出函数-*/int ExitSystem() char answer; printf("nt 您是否想要退出系统(Y/N)?"); scanf("%s",&answer); if(answer='y'|answer='Y') return 1; else return 0;/*-航线查找函数-*/int Find_Line(PFlight L,char *key)/*核对航线是否唯一*/ int flag=0; /*该标志位0表示未找

12、到相关信息,反之即找到,以下标志位同理*/ Flight *p1; p1=L; /*赋航线首地址*/ if(p1=p2) /*首航线不作比较*/ return flag; while(p1!=p2&&p1!=NULL) /*本航班号不纳入比较范围,否则会一直提示航线不唯一*/ if(strcmp(p1->Flight_No,key)=0) flag=1; break; p1=p1->Next;/*指向下一航班结点*/ return flag;/*航线查找函数*/int Find_Line(PFlight L,char *key,PFlight &p2,int

13、 &Flight_No) int flag=0; /*该标志位0表示未找到相关信息,反之即找到*/ Flight *p1; p1=L; /*赋航线首结点*/ while(p1!=NULL) if(strcmp(p1->Flight_No,key)=0)/*不包括当前航线*/ flag=1; p2=p1; break; p1=p1->Next; /*指向下一航班结点*/ if(p1!=NULL) /*遇结束符不作统计范围*/ Flight_No+; return flag;/*-航班查找函数-*/void Line_search() Flight *p1; p1=Head;

14、char Desname50;/查询终点站航班关键字 if(Head=NULL) printf("nt没有到达您想要的终点站的航班!");getch(); return; printf("nt请输入终点站名:"); scanf("%s",Desname); printf("nt您所查询的航班的信息:n"); printf("n_n"); while(p1!=NULL) if(strcmp(p1->Des_Name,Desname)=0) printf("Des_Name Flig

15、ht_No Plane_No Week_Day Cust_Num Free_Num 1_Price 2_Price 3_Pricen"); printf("n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day, p1->Customer_Amount,p1->Free_Amount,p1->Price0,p1->Price1,p1->Price2); p1=p1->Next;

16、 printf("n_n"); Continue(); /*-航线添加函数-*/void Line_Add() Flight *p1; /*建立临时航线结点*/ while(1) if(Head=NULL)/*航线为空*/ p1=p2=new Flight; /*建立首个航线*/ Head=p2; else p1=new Flight; /*建立航线结点*/ p2->Next=p1; /*前一航线结点指向当前航班结点*/ p2=p1; /*保留当前航班结点地址*/ printf("nt添加新的航线!n"); printf("nt请输入终点

17、站名:"); scanf("%s",&p2->Des_Name); while(1) /*数据合法性检验*/ printf("nt请输入唯一的航班号:"); scanf("%s",&p2->Flight_No); if(Find_Line(Head,p2->Flight_No) /*存在航班号*/ printf("nt航班号已经存在!n"); else break; printf("nt请输入飞机号:"); scanf("%s",&

18、amp;p2->Plane_No); while(1) printf("nt请输入航班日期(请输入17):"); scanf("%d",&p2->Week_Day); if(p2->Week_Day<1|p2->Week_Day>7) printf("nt输入日期有误,请重新输入!n"); else break; printf("nt请输入座位数量:"); scanf("%d",&p2->Customer_Amount); printf(

19、"nt请输入头等舱的数量:"); scanf("%d",&p2->Price0); printf("nt请输入二等舱的数量:"); scanf("%d",&p2->Price1); printf("nt请输入三等舱的数量:"); scanf("%d",&p2->Price2); p2->Free_Amount=p2->Customer_Amount; /*剩余票数与乘员定额相同*/ p2->CustName=NULL

20、; /*该航线定票乘客头指针为空*/ p2->ReplName=NULL; /*初始候补名单为空 */shouldsave=1; if(Continue()='n') p2->Next=NULL; /*航线的下一结点为空*/system("cls"); return; /*-航线是否为空函数-*/int Empty_Flight() if(Head=NULL) system("cls"); printf("nt对不起,航线不存在,按任意键返回!"); getch(); return 1; else retu

21、rn 0;/*-航线查看函数-*/void Line_See() system("cls"); Flight *p1; p1=Head; if(Empty_Flight() /*航班线为空*/ return; printf("nnt航班信息:n"); printf("n_n"); printf("Des_Name Flight_No Plane_No Week_Day Cust_Num Free_Num 1_Price 2_Price 3_Pricen"); while(p1!=NULL) printf("

22、;n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount,p1->Free_Amount,p1->Price0,p1->Price1,p1->Price2); p1=p1->Next; printf("n_n"); printf("nt按任意键返回!n"); getch();/*-航线管理菜单-*/ void Line

23、manageMenu() char c; system("cls");while(1) printf("ntt航线管理菜单:"); printf("n_nn"); printf("t1.添加新的航线n"); printf("t2.查询航线n"); printf("t3.查看航线n"); printf("t4.返回主菜单n"); printf("n_n"); printf("t请选择您想要的服务:"); scanf(&

24、quot;%s",&c); switch(c) case '1':Line_Add();break;case '2':Line_search();break; case '3':Line_See();break; case '4':return; /*-订票办理函数-*/void bookingMenu() int Ticket_Count,IDinfor,i,flag=0; int Flight_No=0; /*记录满足条件的航线的定票结点*/ Flight *p1; /*记下满足条件的航线结点地址*/ Cus

25、tomer *p2; /*临时性定票乘员结点*/ Customer *p3; /*临时性候补乘员结点*/ char answer7; /*用户输入的航班数据*/ char temp; char c; int tag=0; /*候补乘客标志位*/ int IsRepl=0; /*是否执行候补操作标志位*/ if(Empty_Flight() /*航班线为空*/ return; while(1) printf("nt现在您可以订票!"); flag=0; /*标志位清零以重新作出判断*/ Flight_No=0; tag=0; printf("nt请输入航线号:&qu

26、ot;); scanf("%s",&answer); if(Find_Line(Head,answer,p1,Flight_No) /*调用航线查找函数,若存在则进行以下操作*/ while(1) /*数据合法性检验*/ printf("nt请输入您想要订购的票的数量:"); scanf("%d",&Ticket_Count); if(Ticket_Count=0) printf("nt请再次输入飞机号:n"); getch(); else break; if(p1->Free_Amount&

27、gt;=Ticket_Count) Customer_Count+; /*定票乘客总数增1*/ flag=1; /*表明进入了订票实际操作*/ IsRepl=1; /*定票量满足,无需进入候补操作*/ if(p1->CustName=NULL) /*首个定票乘客,并记录相关属性*/ Custp1Flight_No=p2=new Customer; /*建立该航线的首位乘客结点*/ p1->CustName=Custp1Flight_No; else /*建立该航线的后续乘客结点*/ p2=new Customer; Custp1Flight_No->Next=p2; Cust

28、p1Flight_No=p2; IsEmpty=0; /*定票乘员不为空*/ Custp1Flight_No->Amount=Ticket_Count; /*订票数*/ IDinfor=p1->Customer_Amount-p1->Free_Amount+1; /*算出座位号*/ Custp1Flight_No->IDinfor=IDinfor; /*赋座位号*/ p1->Free_Amount-=Ticket_Count; /*减去定票数*/ printf("nt请输入您的姓名:"); scanf("%s",&C

29、ustp1Flight_No->Name); while(1) /*数据合法性检验*/ printf("nt请输入舱位等级:"); scanf("%s",&Custp1Flight_No->Rank); if(!(Custp1Flight_No->Rank>='1'&&Custp1Flight_No->Rank<='3') printf("nt输入有误,请重新输入!"); getch(); else break; if(Custp1Flight

30、_No->Rank='1')Custp1Flight_No->sum=p1->Price1*Custp1Flight_No->Amount; printf("nt请输入您的ID信息:");scanf("%d",&Custp1Flight_No->IDinfor); if(Ticket_Count<10) /*为显示规整,作相应处理*/ printf("nt"); else printf("nt"); printf("nt恭喜您订票成功!n&quo

31、t;); for(i=1;i<=Ticket_Count;i+) /*打印座位号*/ printf("nt您所预定的座位号是%d",IDinfor+); if(i%10=0) printf("nt"); printf("n"); /*满足定票数*/ else if(p1->Free_Amount=0) printf("nt对不起,票已售完!n"); IsRepl=0; else printf("nt对不起,当前没有多余的票!n"); IsRepl=0; if(!IsRepl) pri

32、ntf("nt您是否想成为候补乘客(Y/N)?"); scanf("%s",&temp); if(temp='y'|temp='Y')/*以下为候补操作*/ if(p1->ReplName=NULL) Replp1Flight_No=p3=new Customer; /*建立该航线的首位候补乘客结点*/ p1->ReplName=Replp1Flight_No; else p3=new Customer; Replp1Flight_No->Next=p3; Replp1Flight_No=p3;

33、IsReplace=0; /*候补乘客不为空*/ tag=1; /*已选择列入候补乘客名单*/ Replp1Flight_No->Amount=Ticket_Count; printf("nt请输入您的姓名:"); scanf("%s",&Replp1Flight_No->Name); Replp1Flight_No->IDinfor=IDinfor; /*候补乘客的座位*/ Replp1Flight_No->Amount=Ticket_Count; /*候补乘客的订票数*/ while(1) /*数据合法性检验*/ pr

34、intf("nt请输入舱位等级:"); scanf("%s",&Replp1Flight_No->Rank); printf("nt请输入您的ID信息:"); scanf("%d",&Replp1Flight_No->IDinfor); if(!(Replp1Flight_No->Rank>='1'&&Replp1Flight_No->Rank<='3') printf("nt输入有误,请重新输入.&quo

35、t;); getch(); else break; printf("nt没有剩余座位!n");/*候补乘客无座提示*/shouldsave=1; /*进入候补名单 */ /*票数满足*/ /*航线存在*/ else printf("nt对不起,航线不存在!n");/*航线不存在*/ if(flag) /*此处不作处理,则会地址溢出*/ Custp1Flight_No->Next=NULL;/*末位定票乘客的指针置空*/ if(tag) Replp1Flight_No->Next=NULL;/*末位候补乘客的指针置空*/ printf(&quo

36、t;nt您已经成功排入候补订票队列中!n"); printf("nt是否退出菜单?:(y/n)"); scanf("%s",&c); if(c='y') return; /*while*/ /*-订票乘客信息-*/void Display_Reserve() system("cls"); Flight *p1; Customer *p2; p1=Head; if(Empty_Flight() return; printf("nt订票乘客信息"); if(IsEmpty) print

37、f("nt对不起,没有订票乘客信息!n"); getch(); return; printf("n_n"); printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_No IDn"); while(p1!=NULL) if(p1->CustName!=NULL) p2=p1->CustName; while(p2!=NULL) printf("n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->

38、Flight_No,p1->Plane_No,p2->Amount,p1->Des_Name,p2->Rank,p2->IDinfor); if(p1->Free_Amount>=1) printf("nnt还有多余的票!n"); else printf("nnt票已售完!n"); p2=p2->Next; p1=p1->Next; printf("nn_n"); printf("nt按任意键返回!"); getch(); return;/*-候补乘客信息-*/

39、void Display_Replace() system("cls"); Flight *p1; Customer *p2; p1=Head; if(Empty_Flight() return; printf("nt候补乘客信息!"); if(IsReplace) printf("nt对不起,没有候补乘客!n"); getch(); return; printf("n_n"); printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_No IDn

40、"); while(p1!=NULL) if(p1->ReplName!=NULL) p2=p1->ReplName; while(p2!=NULL) printf("n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->Amount,p1->Des_Name,p2->Rank,p2->IDinfor); if( p1->Free_Amount>=1) printf("nt还有多余的票!n"

41、;); else printf("nt票已售完!n"); p2=p2->Next; p1=p1->Next; printf("nn_n"); printf("nt按任意键返回!"); getch(); return;/*-退票办理函数-*/void RefundticketMenu() int Flight_No=0,flag=0; /*记录满足条件的航线的定票结点*/ Flight *p1; /*记下满足条件的航线结点地址*/ Customer *p2,*p4; /*临时性定票乘员结点*/ Customer *p3,*p

42、5; /*临时性候补乘员结点*/ char answer7,name7; /*用户输入的航班数据*/ int tag=0; /*若第二乘客满足条件,则它的首地址会发生冲突,注意此处*/ int IDinfor; /*记录座位号*/ if(Empty_Flight() /*航班线为空*/ return; printf("nt现在开始进行退票手续"); if(IsEmpty) printf("nt对不起,乘客不存在!"); getch(); return; while(1) flag=0; tag=0; Flight_No=0; printf("n

43、t请输入航线:"); scanf("%s",&answer); if(Find_Line(Head,answer,p1,Flight_No) /*航线存在*/ p2=p1->CustName; /*指向该航线的乘客名单的首地址 */ printf("nt请输入您的姓名:"); scanf("%s",&name); if(p2=NULL) /*该航线无定票乘客*/ printf("nt对不起,乘客不存在!."); if(Continue()='n')/*是否继续操作*/ return; else while(p2!=NULL)/*查找有无此乘客名*/ if(strcmp(p2->Name,name)=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论