




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(飞机订票系统)一、需求分析1、本程序中,输入为字符串小写大写字符和整形; 2、以字符串输出;3、本订票系统要能够实现航班情况的录入功能、航班的查询功能、订票功能、退票功能以及管理本系统的功能,具体为:(1)录入功能可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)(2)查询功能可以查询某个航线的情况(如,航班号,查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓);(3)订票功能可以订票,如果该航班不存在,则订票失败;(4)退票功能可以退票并且记录乘客的相关信息以及退票信息;如客户资料:有姓名,证件号,订票航班情况,订单要有编号。4、测试数据:订票正确输入航班号f2
2、009订票人姓名yangyatingID管理员正确密码“5566”错误密码“1234”二、概要设计1、程序包含以下模块:每个模块的算法设计说明如下: (1)录入模块: 查找单链表的链尾,在链尾插入一个“航班信息”的新结点。(2)查询模块:提供两种查方式:按航号和按航线查询,1代表按航号查询,2代表按航线查询。0则表示退出查询。顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。(3)订票模块:查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功,否则失败。(4)退票模块:输入要退票的乘客姓名以及证件号码,查找乘客资料的链表中是否有这位乘客,有则删去此
3、结点,并在空位加上1,无则退票失败。(5)修改模块: 输入密码,确认是否有权限对航班信息进行修改,有则在航班信息链表中查找要修改的结点,进行修改,否则不能修改。流程图飞机订票系统录入航班信息查看航班信息退票修改订票主函数流程图显示功能选项根据N调用模块函数YES 输入N:判断N是否在04之间NO三、详细设计1、航班的信息类型:为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞达到的时间、空座和目的的、票价以及限座七个数据项:航班号起飞时间达到时间目的地限座空座票价hD1D2D3单链表如下:每个结点包括数据域和指针域:数据域指针域C语言描述如下:typ
4、edef struct flightnode char air_num10; /*航班号*/char start_time15; /*起飞时间*/char end_time15; /*到达时间*/char end_place30; /*目的地*/int total; /*限座*/int left; /*空座*/int price; /*票价*/struct flightnode *next; /*指向个结点*/flightnode;基本操作:int CreatFlight(flightnode *l); /生成航班信息链表int InsertFlight(flightnode *p,char
5、*air_num,char *start_time,char *end_place,int total,int left,int price); /插入航班信息的结点flightnode *modefy_airline(flightnode *l,char *air_num); /修改航班信息的函数int BookTicket(flightnode*a,char *air_num,passengernode *c,char *name,char *ID_num); /订票函数int CancelTicket(passengernode *c,flightnode*l,char *name,ch
6、ar *ID_num); /退票函数int SearchFlight(flightnode*head); /查询航班信息函数2、乘客信息类型:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号码、航班号和座位号四个数据项:旅客姓名证件号码航班号座位号每个结点包括数据域和指针域:数据域指针域 C语言描述如下:typedef struct passengernode /*定义乘客资料结点*/char name20;char ID_num20;char air_num20;int seat_num;struct passengernode *next;passengerno
7、de;基本操作:int CreatPassenger(passengernode *l); /生成乘客资料链表int InsertPassenger(passengernode *p,char *name,char *ID_num,char *air_num,int seat_num); /插入乘客资料的结点3、主函数和其他函数的伪码算法void main() /主函数 while () printf(/*主菜单界面*/)switch(ch=getchar()case1:BookTicket;break; case2:CanclelTicket;break; case3:if()SearchF
8、light; else if()SearchPassenger;break; case4:exit;break;flightnode *head_flight() /生成航班头结点passengernode *head_passengernode() /生成乘客资料头结点int CreatFlight(flightnode *l) /生成航班信息链表 /初始化航班信息InsertFlight() /插入航班信息/ CreatFlightint CreatPassenger(passengernode *l) /生成乘客资料链表 /初始化乘客资料 InsertPassenger() /插入乘客资
9、料/ CreatPassengerint InsertFlight() /插入航班信息新结点 /定义指针,动态分配,复制信息流,赋值,next返回指针,循环/航班信息链的尾插 /InsertFlightint InsertPassenger()/插入乘客资料新结点 /定义指针,动态分配,复制信息流,赋值,next返回指针,循环/乘客信息链的尾插 /InsertPassengerflightnode *modefy_airline(flightnode *l,char *air_num) /修改航班信息int BookTicket() /订票 InsertPassenger() / BookTi
10、cketint CancelTicket() /退票 l=modefy_airline(l,air_num);/CancelTicketint SearchFlight(flightnode *head) /查询航班 /输出航班信息/ SearchFlightint SearchPassenger(passengernode *head) /查询乘客 /输出乘客信息/ SearchPassenger四、调试分析1、调试结果:(1) 系统主菜单界面:(2)进入订票的界面:(3)查询信息的界面:选择1,查询航班信息的界面:选择2,输入密码,查询乘客的信息的界面:新增乘客,查询乘客信息:密码错误时:
11、(4)进入退票的界面:名字或者证件错误时:2、时间复杂度分析:本程序运行所耗费的时间主要在于循环语句,for和while语句,其时间复杂度应该为O(n)。3、模块设计和调试时存在问题的思考:原先在信息查询中没有乘客与管理人员的区别,乘客与管理人员都可以看到相同的信息,航班信息和乘客资料,后来,在浏览乘客资料时要求输入管理人员的密码,以确保乘客资料的安全性。4、算法的改进设想:本程序还存在很多缺点,不能完全的实现老师要求的各种功能,特别是在查询功能方面,此程序应该增加一些查询的方式的设计,如可以按照起飞抵达地点查询航班情况。还有票价折扣和航班已无票,提供相关可选航班,订单须有编号的功能没有设计到
12、。五、用户手册1、本程序运行环境是windows操作系统,执行文件是5.exe。2、进行演示程序后,即显示用户界面:3、进入“订票系统Book Ticket”的命令后,即提示输入航班号、订票人姓名、ID号,结束符为“回车符”,该命令执行后输出“已成功订票”“航班号和座位号”的信息。4、进入“退票系统Cancel Ticket”的命令后,即提示输入订票人姓名和ID号,结束符为“回车符”,该命令执行后输出“已成功取消”或者输入错误信息则会输出“无此顾客”的信息。5、进入“查看信息”的命令后,即进入“查看航班信息”和“查看乘客信息”,进入“查看航班信息”则会输出所有的航班信息分别为航班号、起止时间、
13、起止地点、票价、总座、空座。进入“查看乘客信息”则提示输入管理员密码,输入密码之后,即会输出所有订票的乘客信息,分别为姓名、ID、航班号、座位号。6、选择EXIT推出飞机订票系统。六、测试结果1、订票:输入:f2009、yangyating、输出:Successful for Booking ticket. Your flight: f2009 Your seat number: 46输入:f2005、Sujuan、输出:Successful for Booking ticket. Your flight: f2005 Your seat number: 22输入:f2222、sujuan、输
14、出:Sorry,there isnt the plane,please check the airline number!2、查询信息:(1) 查询航班信息:输出: FlightStart_timeArrival_placePriceTotalLeft_seatf200808:00-08:30Changsha-lasa400010023f200909:00-12:00Changsha-Beijing100010055f201012:00-13:00Changsha-deguo700015076f201116:30-19:00Changsha-Shanghai50010025 f201217:0
15、0-20:55Changsha-Sanya9006540 f201321:00-23:45Changsha-Guangdong39910035(2) 查询乘客信息:输入:5566 输出:NameIDFlightSeat_numberSujuan f 200522Donghui f 20062W73f 20079yangyatingf 200946 输入:1234 输出:sorry,the key is wrong3、退票:输入:A、输出:Successful for canceling ticket.输入:yangyating、输出:Successful for canceling ticke
16、t.输入:sujuan、输出:Sorry,there isnt the customer!再查看乘客信息: 输入:5566 输出:NameIDFlightSeat_numberDonghui f 20062W73f 20079 七、附录本系统源程序如下:#include<stdio.h> /标准输入、输出头文件#include<stdlib.h> /包含字符串函数处理头文件#include<string> /定义字符串#include<conio.h>#define OK 1#define ERROR 0typedef struct flight
17、node /定义航班信息结点char air_num10; /航班号char start_time15; /起飞时间char end_time15; /到达时间char end_place30; /目的地int total; /限座int left; /空座int price; /票价struct flightnode *next; /指向个结点flightnode;typedef struct passengernode /定义乘客资料结点char name20; /姓名char ID_num20; /证件号码char air_num20; /航班号int seat_num; /座位号str
18、uct passengernode *next; /指向个结点passengernode;flightnode *head_flight(); /生成航班信息的头结点passengernode *head_passenger(); /生成乘客资料的头结点int CreatFlight(flightnode *l); /生成航班信息链表int CreatPassenger(passengernode *l); /生成乘客资料链表int InsertFlight(flightnode *p,char *air_num,char *start_time,char *end_place,int tot
19、al,int left,int price); /插入航班信息的结点int InsertPassenger(passengernode *p,char *name,char *ID_num,char *air_num,int seat_num); /插入乘客资料的结点flightnode *modefy_airline(flightnode *l,char *air_num); /修改航班信息的函数int BookTicket(flightnode*a,char *air_num,passengernode *c,char *name,char *ID_num); /订票函数int Cance
20、lTicket(passengernode *c,flightnode*l,char *name,char *ID_num); /退票函数int SearchFlight(flightnode*head); /查询航班信息函数int SearchPassenger(passengernode *head); /查询乘客信息函数void main() /主函数int p=2; /p=1时进入主菜单,p=0时退出系统passengernode *cus=head_passenger();flightnode *air=head_flight();char name20,air_num20,ID_n
21、um30,mima20,ch;char t20="5566" /管理员密码system("cls");CreatFlight(&air);CreatPassenger(&cus);while(p=2) /主菜单界面printf("n welcome to the airline system!nn please choose the serves below and press the number:nn");printf(" =nn");printf(" 1 -> Book Tic
22、ket n");printf(" 2 -> Cancel Ticket n");printf(" 3 -> Search Information n");printf(" 4 -> Exit nn");printf(" =n");switch(ch=getchar()case '1':printf("n *-Booking Ticket-*n"); /进入订票功能printf("Please input a airline number an
23、d press enter for OK:");scanf("%s",air_num);printf("Please input your name and press enter for OK:");scanf("%s",name);printf("Please input your ID number and press enter for OK:");scanf("%s",ID_num);BookTicket(air,air_num,cus,name,ID_num);getch(
24、);break;case '2':printf(" *-Canceling Ticket-*n"); /进入退票功能printf("Please input the cancel name for booking ticket:");scanf("%s",name);printf("Please input the ID for booking ticket:");scanf("%s",ID_num);CancelTicket(cus,air,name,ID_num);break
25、;case '3':printf("*-Search Information-*n"); /进入信息查询功能 printf(" 1 -> flight information n" ); printf(" 2 -> passenger informationn "); printf(" other -> exit n"); printf("*-*n"); if(ch=getch()='1') /航班信息查询printf("*- flig
26、ht information -*n");SearchFlight(air);else if(ch='2') /乘客资料查询printf("n please input the key:");scanf("%s",mima); /输入管理员密码if(strcmp(mima,t)=0)printf("n*-passenger information -*nn");SearchPassenger(cus);else printf("sorry,the key is wrong");getch(
27、);break;case '4':getch();p=0; /退出系统break;flightnode *head_flight() /生成航班信息的头结点flightnode *a;a=(flightnode *)malloc(sizeof(flightnode); /动态分配空间给flightnode指针并付给aif(a=NULL)a->next=NULL;return a;passengernode *head_passenger() /生成乘客资料头结点passengernode *c;c=(passengernode*)malloc(sizeof(passeng
28、ernode);/分配if(c=NULL)c->next=NULL;return c;int CreatFlight(flightnode *l) /生成航班信息链表(用单链表存储)flightnode *p=*l; /int i=0;char *air_num6="f2008","f2009","f2010","f2011","f2012","f2013"char *start_time6=" 08:00-08:30","09:00-12
29、:30"," 12:00-13:00"," 16:30-19:00","17:00-20:55","21:00-23:45"char *end_place6="Changsha-lasa","Changsha-Beijing","Changsha-deguo","Changsha-Shanghai","Changsha-Sanya","Changsha-Guangdong",; /初始化
30、航班信息int total6=100,100,150,100,65,100;int price6=4000,1000,7000,500,900,399;int left6=23,55,76,25,40,35;for(i=0;i<6;i+)InsertFlight(&p,air_numi,start_timei,end_placei,totali,lefti,pricei); /插入航班信息return OK;int CreatPassenger(passengernode *l) /生成乘客资料链表(用单链表存储)passengernode *p=*l;int i=0;char
31、*name3="Sujuan","Donghui","W73"char *ID_num3="","","" /初始化乘客资料char *air_num3="f2005","f2006","f2007"int seat_num3=22,2,9;for(i=0;i<3;i+)InsertPassenger(&p,namei,ID_numi,air_numi,seat_numi); /插入乘客资料return
32、 OK;int InsertFlight(flightnode *p,char *air_num,char *start_time,char *end_place,int total,int left,int price) /插入航班信息新结点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=tota
33、l;q->left=left;q->price=price;q->next=NULL;(*p)->next=q;/next返回指针(*p)=(*p)->next; /(循环) 航班信息链的尾插法return OK;int InsertPassenger(passengernode *p,char *name,char *ID_num,char *air_num,int seat_num) /插入乘客资料新结点passengernode *q;q=(passengernode*)malloc(sizeof(passengernode);strcpy(q->na
34、me,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; /乘客资料链表的尾插法return OK;flightnode *modefy_airline(flightnode *l,char *air_num) /修改航班信息flightnode *p;p=l->next;for(;p!=NULL;p=p->next)if(strcmp(air_num,p-
35、>air_num)=0)/比较字符串,相等时值为0p->left+;return l; /printf("NO the airline!");return 0;int BookTicket(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->ne
36、xt)if(strcmp(p->air_num,air_num)=0) /比较字符串if(p->left>0)printf(" nSuccessful for Booking ticket.nn Your flight: %sn Your seat number : %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-; return OK;elseprintf("seat is full");return 0;/*if(strcmp)*/ printf("Sorry,there isn't the plane,please check the airline number!");pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃警察职业学院单招职业倾向性测试题库及答案一套
- 2025年河北省邯郸市单招职业倾向性测试题库及答案一套
- 2025年湖南化工职业技术学院单招职业适应性测试题库及答案1套
- 2025年湖北生物科技职业学院单招职业技能测试题库及参考答案
- 2025年广西城市职业大学单招职业倾向性测试题库汇编
- 中级保育师复习测试有答案
- 2025年怀化职业技术学院单招职业倾向性测试题库及参考答案
- 2025年黑龙江旅游职业技术学院单招职业技能测试题库参考答案
- 2025年湖北省宜昌市单招职业适应性测试题库完整
- 体育收费合同范本
- 2万吨马铃薯深加工(淀粉)项目可行性研究报告
- 服饰品设计PPT完整全套教学课件
- 颅脑横断层解剖09课件
- 2023年同等学力申硕英语真题
- 2023年04月广东深圳市市场监督管理局许可审查中心招考聘用医疗器械注册审评员(员额)笔试参考题库附答案解析
- 安捷伦N9020A频谱仪操作说明
- 孟氏骨折与盖氏骨折
- 我的妹妹-教学设计教案
- GB/T 30512-2014汽车禁用物质要求
- 五年级上册语文阅读理解附答案
- 小学一年级硬笔书法入门25839教学内容
评论
0/150
提交评论