飞机订票系统实验报告修改版.docx
- 文档编号:26435557
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:32
- 大小:77.43KB
飞机订票系统实验报告修改版.docx
《飞机订票系统实验报告修改版.docx》由会员分享,可在线阅读,更多相关《飞机订票系统实验报告修改版.docx(32页珍藏版)》请在冰豆网上搜索。
飞机订票系统实验报告修改版
一、需求分析………………………………………………2
二、概要设计………………………………………………3
三、详细设计………………………………………………4
四、调试分析………………………………………………8
五、用户使用说明…………………………………………8
六、测试结果………………………………………………9
七、附录……………………………………………………10
一、需求分析
1、每条航线所涉及的信息有:
终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
2、系统能实现的操作和功能如下:
1)查询航线:
根据客户提出的终点站名输出如下信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
2)承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
若需要,可登记排队候补;
3)承办退票业务:
根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
3、实现提示:
两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。
由于预约人数无法预计,队列也应以链表作为存储结构。
二、概要设计
revise()
飞机订票系统是我编的第一个程序,所以花的时间比较多,刚开始想的是用链表或者数组,再三衡量后,还是决定用链表,这样方便申请空间,在整个程序来说也比较方便,用数组的话,编写程序相对简单,但是弊端比较明显。
该程序主要也以两个链表为主要思想的,即飞机链和客户链;
creat()输入飞机链表的信息;
order()在此函数中,不但有输入客户链表的信息,而且还得随时修改飞机链表中的信息,相对creat()复杂;
seek()不需修改链表中的信息,而quit(),revise()都要修改链表中的输入,复杂程度高一些。
程序也有一些需要改动的地方,在输入起始和抵达城市时不能输入空格,在订票时,一个客户资料中,只能定一架航班的票;改进后,一个客户资料中可以根据需要定不同架飞机的票。
心得:
在编程中,主要的不是写程序,而是建立思想和算法,写抽象数据类型,来解决系统中的任务。
三、详细设计
(1)menu函数流程图
Y
Y
Y
Y
Y
Y
Y
N
N
N
N
N
N
n=1
N
N
Y
Y
N
结束
enter
browse
menu1
book
back
save
load
n=8
n=7
n=6
n=5
n=4
n=3
n=2
n<1||n>8
输入系数到变量n
输出所有主目录
清屏
定义n,w1
开始
w1=0
w1=1
w1==1
(2)enter函数流程图
Y
N
调用input
i 开始 Inti 清屏 输入记录个数 i=0 输出: 请输入第%d航班记录 i++ 返回主目录menu() 结束 (3)input函数流程图 ti[i].num=0 ti[i].num=0 输入price 输入max 输入max 输入date 定义i 开始 输出: 请输入航班代号 输入ID 输出: 请输入起飞地点 输入BePlace 输出: 请输入降落地点 输入EnPlace 输出: 请输入起飞时间 输出: 请输入航班最大载客人数 输出: 请输入航班票价 返回函数enter 结束 (4)browse函数流程图 N 开始 换行 调用printf_one() Y i i=0 输出菜单 清屏 定义i 输入横线回车 i++ 返回主目录menu() 结束 (5)menu1函数流程图 Y Y Y Y N N N N 结束 menu() search_end() order() search_time() n=4 n=3 n=2 n=1 Y N N w1=1 w1=0 Y w1=1 n<1||n>4 键入数字n 输出: Choiceyournumber(1-4): [] 输入菜单 清屏 定义n,w1 开始 (6)order函数流程图 调用browse 结束 i++ N Y j++ ti[i]=s ti[i]=ti[j] s=ti[i] Y ti[i].data>ti[j].data N j N i=0 j=i+1 Y i 清屏 定义结构s 定义i,j 开始 (7)search_time函数流程图 i=0 输出对应航班信息 输入出发时间 定义i,m=0 清屏 定义结构体s 开始 i N Y s.data==ti[i].data N Y m++ (m! =0)&&(m%10==0) Y 分屏显示 N 调用printf_one(i) i++ 返回主菜单menu1 结束 (8)serch_end函数流程图 清屏 定义结构体s 定义i,m=0 开始 i i=0 输出对应航班信息 输入目的地 分屏显示 调用printf_one(i) (m! =0)&&(m%10==0) m++ N Y N Y Y ti[i].EndPlace==s.EndPlace N 结束 返回主菜单menu1 i++ (9)search函数流程图 开始 定义i,j,k 定义结构体s k=1 清屏 输入起飞地 输入目的地 输入起飞时间 i=1 N i Y s.BePlace==ti[i]BePlace&&s.EnPlace==ti[i].EnPlace&&s.data==ti[i].data i++ N Y k=i Y 调用printf_one(k) N k==-1 Y i++ 输出: NOexist! 函数返回k值 函数返回值-1 结束 (10)book函数流程图 定义i 清屏 开始 i=search() 输出: 欢迎进入售票窗口 N i! =-1 Y ti[i].num>=ti[i].max N Y 输出: 该趟航班不存在 ti[i].num++ 输出: 该趟航班票已售完 输出: 订票成功 返回主目录menu() 返回主目录 结束 (11)back函数流程图 开始 定义i,k=-1 定义结构体s 清屏 输出: 欢迎进入退票窗口 输入航班代号ID i=0 N i i++ Y N s.ID==ti[i].ID Y k=i 输出: NOexist! k==-1 调用printf_one(k) N Y ti[i].num-- 输出: 退票成功 返回主目录menu() 结束 (12)save函数流程图 开始 定义w=1,*fp,i 清屏 N (fp=fopen(“\\ticket.txt”,”wt”))==NULL Y 输出: Cannotopenfile i=0 N i Y N fwrite(&ti[i],sizeof(structplane),1,fp)! =1 Y 输出: filewriteerror w=0 i++ N w==1 Y 输出: filesaveok! fclose(fp) 返回主目录menu() 结束 (13)load函数流程图 开始 定义*fp,i,w=1 清屏 N (fp=fopen(“\\ticket.txt”,”rt”))==NULL Y 输出: Cannotopenfile w=0 n=0 i=0 ! feof(fp) N Y fread(&ti[i],sizeof(structplane),1,fp) n++ i++ n=n-1 fclose(fp) N w==1 Y 输出: Loadfileok! 1 结束 返回主目录menu() 四、数据调试 1.creat()/*输入航班信息*/ 2、seek() 4、quit()/*退票*/ 五、源程序 #include #include #include #defineN1000 typedefstructplane { charID[10];/*航班代号*/ charBePlace[10];/*飞机起飞地点*/ charEnPlace[10];/*飞机降落终点*/ chardata[15];/*飞机起飞时间*/ intmax;/*飞机最大乘客人数*/ intprice;/*飞机票价*/ intnum;/*飞机已售票数*/ }PLANE; PLANEti[N]; intn;/*当前的航班数目*/ voidmenu(); voidmenu1(); voidinput(inti) { printf("请输入航班代号: \n"); scanf("%s",ti[i].ID); printf("请输入起飞地点: \n"); scanf("%s",ti[i].BePlace); printf("请输入降落地点: \n"); scanf("%s",ti[i].EnPlace); printf("请输入起飞时间: \n"); scanf("%s",ti[i].data); printf("请输入航班的最大载客人数: \n"); scanf("%d",&ti[i].max); printf("请输入航班的票价: \n"); scanf("%d",&ti[i].price); ti[i].num=0; } voidenter() { inti; system("cls"); printf("请输入航班的数目(0-%d)? : ",N); scanf("%d",&n);/*要输入的记录个数*/ printf("\n请输入数据\n\n"); for(i=0;i { printf("\n请输入第%d航班记录.\n",i+1); input(i);/*调用输入函数*/ } getchar(); menu(); } voidprintf_one(inti)/*显示一个记录的函数*/ { printf("%11s%6s%10s%6s%6d%6d%6d",ti[i].ID,ti[i].BePlace,ti[i].EnPlace,ti[i].data,ti[i].price,ti[i].max,ti[i].num); } voidbrowse() { inti; system("cls"); puts("\n--------------------------------------------------------------------"); printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n"); for(i=0;i { printf_one(i); printf("\n"); } getchar(); getchar(); menu(); } voidorder()/*排序模块(按平均成绩)*/ { inti,j; structplanes; system("cls"); for(i=0;i { for(j=i+1;j if(strcmp(ti[i].data,ti[j].data)>0) { s=ti[i]; ti[i]=ti[j]; ti[j]=s;} } browse(); } voidsearch_time() { inti,m=0; structplanes; system("cls"); printf("\n\nEnterthetime: "); scanf("%s",s.data);/*输入出发的时间*/ puts("\n--------------------------------------------------------------------"); printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n"); for(i=0;i { if(strcmp(s.data,ti[i].data)==0) { m++; if((m! =0)&&(m%10==0))/*目的是分屏显示*/ { printf("\n\nPressanykeytocontiune..."); getchar(); puts("\n\n"); } printf_one(i); printf("\n"); /*调用显示一个记录的函数*/ } } puts("\n--------------------------------------------------------------------"); getchar();/*按任意健*/ getchar(); menu1(); } voidserch_end() { inti,m=0; structplanes; system("cls"); printf("\n\nEntertheendPlace: "); scanf("%s",s.EnPlace);/*输入要到达的地方*/ puts("\n--------------------------------------------------------------------"); printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n"); for(i=0;i { if(strcmp(ti[i].EnPlace,s.EnPlace)==0) { m++; if((m! =0)&&(m%10==0))/*目的是分屏显示*/ { printf("\n\nPressanykeytocontiune..."); getchar(); puts("\n\n"); } printf_one(i); printf("\n"); /*调用显示一个记录的函数*/ } } puts("\n--------------------------------------------------------------------"); getchar();/*按任意健*/ getchar(); menu1(); } voidmenu1() { intn,w1; do { system("cls");/*清屏*/ puts("\t\t\t\t飞机售票操作! \n\n"); puts("\t\t*********************MENU*********************\n\n"); puts("\t\t\t\t1.按照时间排序"); puts("\t\t\t\t2.按照时间查找航班"); puts("\t\t\t\t3.按照地点查找航班"); puts("\t\t\t\t4.返回主菜单"); puts("\n\n\t\t**********************************************\n"); printf("Choiceyournumber(1-4): []\b\b"); scanf("%d",&n); if(n<1||n>4)/*对选择的数字作判断*/ { w1=1; printf("yourchoiceisnotbetween1and4,Pleaseinputagain: "); getchar(); getchar(); } elsew1=0; }while(w1==1); /*选择功能*/ switch(n) { case1: order();break; case2: search_time();break; case3: serch_end();break; case4: menu();break; } } intsearch()/*查找模块*/ { inti,k; structplanes; k=-1; system("cls"); printf("\n\n请输入要订票的起飞地点: "); scanf("%s",s.BePlace);/*输入要到达的地方*/ printf("\n\n请输入要订票的降落地点: "); scanf("%s",s.EnPlace); printf("\n\n请输入要订票的起飞时间: "); scanf("%s",s.data);/*输入出发的时间*/ for(i=0;i { if(strcmp(s.BePlace,ti[i].BePlace)==0&&strcmp(s.EnPlace,ti[i].EnPlace)==0&&strcmp(s.data,ti[i].data)==0) { k=i;/*找到要修改的记录*/ printf_one(k); break;/*调用显示一个记录的函数*/ } } if(k==-1) { printf("\n\nNOexist! "); return-1; } else returnk; } voidbook() { inti; system("cls"); printf("欢迎进入售票窗口! \n"); i=search(); if(i! =-1) { if(ti[i].num>=ti[i].max) { printf("\n该趟航班票已售完! "); } else { ti[i].num++; printf("\n订票成功! \n"); } } else printf("该航班不存在! \n"); getchar(); getchar();/*按任意健*/ menu(); } voidback() { inti,k=-1; structplanes; system("cls"); printf("欢迎进入退票窗口! \n"); printf("\n\n输入航班代号: "); scanf("%s",s.ID);/*输入要到达的地方*/ for(i=0;i { if(strcmp(s.ID,ti[i].ID)==0) { k=i;/*找到要修改的记录*/ printf_one(k); break;/*调用显示一个记录的函数*/ } } if(k==-1) { printf("\n\nNOexist! "); } else { ti[i].num--; printf("\n退票成功! \n"); } getchar();/*按任意健*/ getchar();/*按任意健*/ menu(); } voidsave() { intw=1; FILE*fp; inti; system("cls"); if((fp=fopen("D: \\我的文档\\桌面\\ticket.txt","wt"))==NULL)/*以输出打开方式,在此前的记录被覆盖*/ { printf("\nCannotopenfile\n"); return; } for(i=0;i if(fwrite(&ti[i],sizeof(structplane),1,fp)! =1) { printf("filewriteerror\n"); w=0; } if(w==1) { printf("filesaveok! \n"); } fclose(fp); getchar(); getchar(); menu(); } voidload() { FILE*fp; inti,w; w=1; system("cls"); if((fp=fopen("D: \\我的文档\\桌面\\ticket.txt","rt"))==NULL) { printf("\nCannotopenfile\n"); w=0; return; } n=0; for(i=0;! feof(fp);i++) { fread(&ti[i],sizeof(structplane),1,fp); n++; } n=n-1; fclose(fp); if(w==1) printf("Loadfileok! "); getchar(); getchar(); menu(); } voidmenu() { intn,w1; do { system("cls");/*清屏*//*清屏*/ puts("\t\t\t\t飞机售票管理系统! \n\n"); puts("\t\t*********************MENU*********************\n\n"); puts("\t\t\t\t1.输入新航班"); puts("\t\t\t\t2.浏览"); puts("\t\t\t\t3.航班操作"); puts("\t\t\t\t4.订票"); puts("\t\t\t\t5.退票"); puts("\t\t\t\t6.保存"); puts("\t\t\t\t7.载入"); puts("\t\t\t\t8.退出"); puts("\n\n\t\t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 飞机 订票 系统 实验 报告 修改