为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

飞机订票系统

2012-03-13 22页 doc 337KB 60阅读

用户头像

is_591844

暂无简介

举报
飞机订票系统(飞机订票系统) 一、需求分析 1、本程序中,输入为字符串小写大写字符和整形; 2、以字符串输出; 3、本订票系统要能够实现航班情况的录入功能、航班的查询功能、订票功能、退票功能以及管理本系统的功能,具体为: (1)录入功能 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) (2)查询功能 可以查询某个航线的情况(如,航班号,查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓); (3)订票功能 可以订票,如果该航班不存在,则订票失败; (4)退票功能 可以退票并且记录乘客的相关信息以及退票信息...
飞机订票系统
(飞机订票系统) 一、需求分析 1、本程序中,输入为字符串小写大写字符和整形; 2、以字符串输出; 3、本订票系统要能够实现航班情况的录入功能、航班的查询功能、订票功能、退票功能以及管理本系统的功能,具体为: (1)录入功能 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) (2)查询功能 可以查询某个航线的情况(如,航班号,查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓); (3)订票功能 可以订票,如果该航班不存在,则订票失败; (4)退票功能 可以退票并且记录乘客的相关信息以及退票信息;如客户资料:有姓名,证件号,订票航班情况,订单要有编号。 4、测试数据:订票正确输入航班号‘f2009’订票人姓名‘yangyating’ID‘0841919204’管理员正确密码“5566”错误密码“1234” 二、概要设计 1、程序包含以下模块: 每个模块的算法设计说明如下: (1)录入模块: 查找单链表的链尾,在链尾插入一个“航班信息”的新结点。 (2)查询模块: 提供两种查方式:按航号和按航线查询,1代表按航号查询,2代表按航线查询。0则表示退出查询。 顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。 (3)订票模块: 查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功,否则失败。 (4)退票模块: 输入要退票的乘客姓名以及证件号码,查找乘客资料的链表中是否有这位乘客,有则删去此结点,并在空位加上1,无则退票失败。 (5)修改模块: 输入密码,确认是否有权限对航班信息进行修改,有则在航班信息链表中查找要修改的结点,进行修改,否则不能修改。 图 主函数流程图 三、详细设计 1、航班的信息类型:为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞达到的时间、空座和目的的、票价以及限座七个数据项: 航班号 起飞时间 达到时间 目的地 限座 空座 票价 单链表如下: 每个结点包括数据域和指针域: 数据域 指针域 C语言描述如下: typedef struct flightnode{ char air_num[10]; /*航班号*/ char start_time[15]; /*起飞时间*/ char end_time[15]; /*到达时间*/ char end_place[30]; /*目的地*/ int total; /*限座*/ int left; /*空座*/ int price; /*票价*/ struct flightnode *next; /*指向个结点*/ }flightnode; 基本操作: int CreatFlight(flightnode **l); //生成航班信息链表 int InsertFlight(flightnode **p,char *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,char *ID_num); //退票函数 int SearchFlight(flightnode*head); //查询航班信息函数 2、乘客信息类型:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号码、航班号和座位号四个数据项: 旅客姓名 证件号码 航班号 座位号 每个结点包括数据域和指针域: 数据域 指针域 C语言描述如下: typedef struct passengernode{ /*定义乘客资料结点*/ char name[20]; char ID_num[20]; char air_num[20]; int seat_num; struct passengernode *next; }passengernode; 基本操作: 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()) {case’1’:BookTicket;break; case’2’:CanclelTicket;break; case’3’:if(){SearchFlight;} else if(){SearchPassenger;};break; case’4’:exit;break;}}} flightnode *head_flight() { //生成航班头结点 } passengernode *head_passengernode() { //生成乘客资料头结点 } int CreatFlight(flightnode **l) //生成航班信息链表 { //初始化航班信息 InsertFlight() //插入航班信息 }// CreatFlight int CreatPassenger(passengernode **l) //生成乘客资料链表 { //初始化乘客资料 InsertPassenger() //插入乘客资料 }// CreatPassenger int InsertFlight() //插入航班信息新结点 { //定义指针,动态分配,复制信息流,赋值,next返回指针,循环 //航班信息链的尾插 } //InsertFlight int InsertPassenger()//插入乘客资料新结点 { //定义指针,动态分配,复制信息流,赋值,next返回指针,循环 //乘客信息链的尾插 } //InsertPassenger flightnode *modefy_airline(flightnode *l,char *air_num) {} //修改航班信息 int BookTicket() //订票 { … InsertPassenger() }// BookTicket int CancelTicket() //退票 { … l=modefy_airline(l,air_num); }//CancelTicket int SearchFlight(flightnode *head) //查询航班 { //输出航班信息 }// SearchFlight int SearchPassenger(passengernode *head) //查询乘客 { //输出乘客信息 }// SearchPassenger 四、调试分析 1、调试结果: (1) 系统主菜单界面: (2)进入订票的界面: (3)查询信息的界面: 选择1,查询航班信息的界面: 选择2,输入密码,查询乘客的信息的界面: 新增乘客,查询乘客信息: 密码错误时: (4)进入退票的界面: 名字或者证件错误时: 2、时间复杂度分析: 本程序运行所耗费的时间主要在于循环语句,for和while语句,其时间复杂度应该为O(n)。 3、模块设计和调试时存在问题的思考: 原先在信息查询中没有乘客与管理人员的区别,乘客与管理人员都可以看到相同的信息,航班信息和乘客资料,后来,在浏览乘客资料时要求输入管理人员的密码,以确保乘客资料的安全性。 4、算法的改进设想: 本程序还存在很多缺点,不能完全的实现老师要求的各种功能,特别是在查询功能方面,此程序应该增加一些查询的方式的设计,如可以按照起飞抵达地点查询航班情况。 还有票价折扣和航班已无票,提供相关可选航班,订单须有编号的功能没有设计到。 五、用户手册 1、本程序运行环境是windows操作系统,执行文件是5.exe。 2、进行演示程序后,即显示用户界面: 3、进入“订票系统Book Ticket”的命令后,即提示输入航班号、订票人姓名、ID号,结束符为“回车符”,该命令执行后输出“已成功订票”“航班号和座位号”的信息。 4、进入“退票系统Cancel Ticket”的命令后,即提示输入订票人姓名和ID号,结束符为“回车符”,该命令执行后输出“已成功取消”或者输入错误信息则会输出“无此顾客”的信息。 5、进入“查看信息”的命令后,即进入“查看航班信息”和“查看乘客信息”,进入“查看航班信息”则会输出所有的航班信息分别为航班号、起止时间、起止地点、票价、总座、空座。进入“查看乘客信息”则提示输入管理员密码,输入密码之后,即会输出所有订票的乘客信息,分别为姓名、ID、航班号、座位号。 6、选择EXIT推出飞机订票系统。 六、测试结果 1、订票: ①输入:f2009、yangyating、0841919204 输出:Successful for Booking ticket. Your flight: f2009 Your seat number: 46 ②输入:f2005、Sujuan、0841919205 输出:Successful for Booking ticket. Your flight: f2005 Your seat number: 22 ③输入:f2222、sujuan、0841919107 输出:Sorry,there isn’t the plane,please check the airline number! 2、查询信息: (1) 查询航班信息:输出: Flight Start_time Arrival_place Price Total Left_seat f2008 08:00-08:30 Changsha-lasa 4000 100 23 f2009 09:00-12:00 Changsha-Beijing 1000 100 55 f2010 12:00-13:00 Changsha-deguo 7000 150 76 f2011 16:30-19:00 Changsha-Shanghai 500 100 25 f2012 17:00-20:55 Changsha-Sanya 900 65 40 f2013 21:00-23:45 Changsha-Guangdong 399 100 35 (2) 查询乘客信息: ①输入:5566 输出: Name ID Flight Seat_number Sujuan 0841919205 f 2005 22 Donghui 0841919206 f 2006 2 W73 0841919207 f 2007 9 yangyating 0841919204 f 2009 46 ②输入:1234 输出:sorry,the key is wrong 3、退票: ①输入:A、0841919205 输出:Successful for canceling ticket. ②输入:yangyating、0841919204 输出:Successful for canceling ticket. ③输入:sujuan、0841919107 输出:Sorry,there isn’t the customer! 再查看乘客信息: 输入:5566 输出: Name ID Flight Seat_number Donghui 0841919206 f 2006 2 W73 0841919207 f 2007 9 七、附录 本系统源程序如下: #include //标准输入、输出头文件 #include //包含字符串函数处理头文件 #include //定义字符串 #include #define OK 1 #define ERROR 0 typedef struct flightnode{ //定义航班信息结点 char air_num[10]; //航班号 char start_time[15]; //起飞时间 char end_time[15]; //到达时间 char end_place[30]; //目的地 int total; //限座 int left; //空座 int price; //票价 struct flightnode *next; //指向个结点 }flightnode; typedef struct passengernode{ //定义乘客资料结点 char name[20]; //姓名 char ID_num[20]; //证件号码 char air_num[20]; //航班号 int seat_num; //座位号 struct 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 total,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 CancelTicket(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 name[20],air_num[20],ID_num[30],mima[20],ch; char t[20]="5566"; //管理员密码 system("cls"); CreatFlight(&air); CreatPassenger(&cus); while(p==2) //主菜单界面 { printf("\n welcome to the airline system!\n\n please choose the serves below and press the number:\n\n"); printf(" ================================================================\n\n"); printf(" 1 -> Book Ticket \n"); printf(" 2 -> Cancel Ticket \n"); printf(" 3 -> Search Information \n"); printf(" 4 -> Exit \n\n"); printf(" ================================================================\n"); switch(ch=getchar()){ case '1':{printf("\n *-------------Booking Ticket-------------*\n"); //进入订票功能 printf("Please input a airline number and 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();} ;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; case '3':{printf("*---------------Search Information---------------------*\n"); //进入信息查询功能 printf(" 1 -> flight information \n" ); printf(" 2 -> passenger information\n "); printf(" other -> exit \n"); printf("*------------------------------------------------------*\n"); if((ch=getch())=='1') //航班信息查询 {printf("*------------------ flight 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 ---------------*\n\n"); SearchPassenger(cus);} else printf("sorry,the key is wrong");getch();}}break; case '4':{getch();p=0; //退出系统 }break; } }} flightnode *head_flight() //生成航班信息的头结点 { flightnode *a; a=(flightnode *)malloc(sizeof(flightnode)); //动态分配空间给flightnode指针并付给a if(a==NULL) a->next=NULL; return a; } passengernode *head_passenger() //生成乘客资料头结点 { passengernode *c; c=(passengernode*)malloc(sizeof(passengernode));//分配 if(c==NULL) c->next=NULL; return c; } int CreatFlight(flightnode **l) //生成航班信息链表(用单链表存储) { flightnode *p=*l; // int i=0; char *air_num[6]={"f2008","f2009","f2010","f2011","f2012","f2013"}; char *start_time[6]={" 08:00-08:30","09:00-12:30"," 12:00-13:00"," 16:30-19:00","17:00-20:55","21:00-23:45"}; char *end_place[6]={"Changsha-lasa","Changsha-Beijing","Changsha-deguo","Changsha-Shanghai","Changsha-Sanya", "Changsha-Guangdong",}; //初始化航班信息 int total[6]={100,100,150,100,65,100}; int price[6]={4000,1000,7000,500,900,399}; int left[6]={23,55,76,25,40,35}; for(i=0;i<6;i++) InsertFlight(&p,air_num[i],start_time[i],end_place[i],total[i],left[i],price[i]); //插入航班信息 return OK; } int CreatPassenger(passengernode **l) //生成乘客资料链表(用单链表存储) { passengernode *p=*l; int i=0; char *name[3]={"Sujuan","Donghui","W73"}; char *ID_num[3]={"0841919205","0841919206","0841919207"}; //初始化乘客资料 char *air_num[3]={"f2005","f2006","f2007"}; int seat_num[3]={22,2,9}; for(i=0;i<3;i++) InsertPassenger(&p,name[i],ID_num[i],air_num[i],seat_num[i]); //插入乘客资料 return 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=total; 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->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; //乘客资料链表的尾插法 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->air_num)==0)//比较字符串,相等时值为0 { p->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->next) {if(strcmp(p->air_num,air_num)==0){ //比较字符串 if(p->left>0) {printf(" \nSuccessful for Booking ticket.\n\n Your flight: %s\n 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;} else {printf("seat is full");return 0;} }/*if(strcmp)*/ } printf("Sorry,there isn't the plane,please check the airline number!");printf("\n *-----------------------------------------*"); } int CancelTicket(passengernode *c,flightnode *l,char *name,char *ID_num) //退票 { passengernode *p,*pr; char air_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("successful for canceling ticket."); printf("\n *-----------------------------------------------------------------*"); return OK; } pr=pr->next; p=pr->next; } printf("Sorry,there isn't the customer!"); printf("\n *--------------------------------------------------------*"); return ERROR; } int SearchFlight(flightnode *head) //查询航班 {flightnode *p=head->next; printf(" Flight Start_time Arrival_place Price Total Left_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"); return OK; } int SearchPassenger(passengernode *head) //查询乘客 {struct passengernode *q=head->next; printf(" Name ID Flight Seat_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 *----------------------------------------------------------*"); return OK;} � NO 输入N:判断N是否在0~4之间 YES � 根据N调用模块函数 显示功能选项 订票 修改 退票 查看航班信息 录入航班信息 飞机订票系统 D3 D2 D1 h
/
本文档为【飞机订票系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索