1、飞机订票系统C语言课设C语言程序设计课程设计评语:考勤(10)纪律(10)过程(40)设计报告(30)答辩(10)总成绩(100)专 业:电气工程及其自动化(卓越)班 级: 电气1301 姓 名: 王思远 学 号:指导教师: 王黎 兰州交通大学自动化与电气工程学院2014年7月12日综合题3.1引言设计目的是解决如下实际问题:3.1.1问题描述:假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。通过 该系统来实现机票的订购问题。3.1.2功能要求:本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括: 起飞地、目的地 航班号、座次号码、座次订出与否标记、订座者的姓名和订座
2、者的身份证号码。本系统显示这样的菜单:1) 输入航班信息2) 输出航班信息3) 查找航班信息a.显示空座的数量b.显示空座的信息c.显示已订座的信息d.起飞时间4) 订票预约5) 删除定票预约6) 退出系统本系统成功执行菜单的每个信息,选项 4)和5)将要求额外的输入,并且 它们都允许用户收回其输入。查找航班信息既可按线路查,也可按目的地查。在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,它 首先从该文件读入数据.3.1.3算法提示:数据结构:结构体类型数组 数据库结构:下表构成该系统的基本数据库。航班号起飞时间目的地座次号座次订出与否的标记订票 者姓订票者身份 证号码名int
3、charcharintCharcharchar3.1.4测试数据:每架飞机的座位N=12, M=53.1.5其它:对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。 选择的设计方法是使用C语言利用计算机解决问题。3.2设计设计思路:对于这种大型的程序,必须现有一个整体的规划,生成出一个流程图,流程 图负责规划总体,而程序最主要的就是飞机航班订票各个功能, 每个功能都作为 一个模块,每一个模块划分任务,每个功能都作为一个模块,并且还得按照题目 要求,将信息保存在文件中,而且信息都将被输入到事先定义的结构体数组中, 实现在内存单元中的信息的分类存放,之后将其输出。主函数流程图如5所
4、示(合):开始调用读取文件功能输入选择功能序号图5输入信息函数流程图如图6所示:开始输入航班信息输入航班号输入起飞地输入终点站输入终点站输入余量返回主程序输出信息函数流程图如图7所示:查找航班信息的流程图如图8所示:输入航班号输出航班信息返回主函数订票预约的流程图如图9所示:开始订票预约输入航班号输入订票者信息系统分配座位返回主函数删除订票预约的流程图如图10:开始删除订票功能输入航班号输入座位号返回主函数图10源代码:#include#includestruct zuociint haoma;/座次数int biaoji;/座位订出的标记char xi ngmi ng20; 订座者姓名cha
5、r zhe ngjia n30;订座者的身份证号码;struct planeint no;/航班号char qidia n 30;/ 起飞地char zho ngdia n 30;/ 目的地char time30; 起飞时间int left;/ 余票struct zuoci zuowei12; 座位订出信息plane888;/888 个航班容量int num=0,i,j,t;/定义外部变量(全局变量)void read()读取文件的功能FILE *fp;if(fp=fopen(file.dat,rb)=NULL)/rb 打开二进制文件printf(出错);getchar();i=0;while
6、(!feof(fp)/ 文件是否结尾位置,不是结尾就继续 fread(&planei,sizeof(struct plane),1,fp);/二进制读入i+;num+;num-;fclose(fp);void save() /保存到文件的功能FILE *fp;if(fp=fopen(file.dat,wb)=NULL)/第一次运行无指定,就会建立新文件 file.datprintf( 出错); getchar();for(i=0;inum;i+)fwrite(&planei,sizeof(struct plane),1,fp); /二进制输出fclose(fp);void shuru() /输
7、入航班的功能 char c;printf( 请输入您要增加的航班信息 :n);printf(请输入航班号:n);scanf(%d,&planenum.no);printf( 请输入起飞地 n);scanf(%s,planenum.qidian);printf( 请输入目的地 n);scanf(%s,planenum.zhongdian);printf( 请输入起飞时间 n);scanf(%s,planenum.time);printf( 请输入航班余量 n);scanf(%d,&planenum.left);for(i=0;iplanenum.left;i+)/ 订出标记planenum.zu
8、oweii.biaoji=0;num+;getchar();/启继续void shuchu() /输出航班信息的功能printf( 目前航班 :n);printf(航班号tt起飞地tt目的地tt起飞时间tt票数n);for(i=0;inum;i+) printf(%dtt%stt%stt%sttt%dn,planei.no,planei.qidian,planei.zhongd ian,planei.time,planei.left);getchar();/继续void chazhao() /查找航班信息的功能printf( 请输入您要查询的航班号 :);scanf(%d,&t);for(i=
9、0;inum;i+)/先查找航班if(t=planei.no)printf( 航班的空座数量为: %dn,planei.left);printf( 空座号: );for(j=0;j12;j+)if(planei.zuoweij.biaoji!=1)printf(%d 号 ,j+1);/ 输出航班号printf(n);printf( 已订座位的信息: n);for(j=0;j12;j+)if(planei.zuoweij.biaoji=1)printf( 座位号: %dn,j+1);printf( 订座者姓名: );puts(planei.zuoweij.xingming);printf( 订座
10、者身份证号码: );puts(planei.zuoweij.zhengjian); /12 个座位查询范围printf( 航班起飞时间: );puts(planei.time);getchar();/继续void dingpiao() /订票的功能int n;printf( 请输入订票的航班号: n); scanf(%d,&n);for(i=0;inum;i+)if(planei.no=n) break; printf( 余票: %dn,planei.left); for(j=0;planei.zuoweij.biaoji=1;j+); printf( 请输入姓名拼音: );scanf(%s,
11、planei.zuoweij.xingming); printf( 请输入身份证号码: );scanf(%s,planei.zuoweij.zhengjian); printf( 分配给座位是 :%d 号 n,j+1);planei.zuoweij.biaoji=1;planei.left-;getchar();/继续void cancel() /删除订票的功能int n,m;char judge;printf( 请输入删除的订票航班号: ); scanf(%d,&n);for(i=0;in);printf(输入选择功能序号:); scanf(%d,&menu);switch(menu)cas
12、e 1: shuru();break;case 2: shuchu();break;case 3: chazhao();break;case 4: dingpiao();break;case 5: cancel();break;case 6: save();break; /如果没有符合的序号,则不执行,流转下一条getchar();子函数配合输入继续 /循环体位置while(menu!=6); /判断条件实现注释:程序的要求进行了实现,在基础要求之外没有完成其他功能3.3调试报告在读取二进制文件,没有创建,但在写入时,写入,保存了数据:在进行输出时, 制表位与数据位不对齐,于是检查了制表符;因
13、为定义的座位数组为12所以只能 查找12个座位的信息。3.4运行及结果测试如图11所示图 11-1图 11-2图 11-3图 11-4图 11-5图 11-63.5总结本程序实现了题中飞机订票系统的所有功能, 完成了题中所给的要求。大程序 的编写,让我们基本了解的程序软件的编写过程。在一开始,利用流程图,可以 对程序规划,而使用功能模块,可以对程序进行任务的细分。在流程图的规划下, 程序做的还是比较顺畅,一开始较好的规划,减少了不必要的错误的产生,在以 前的C语言学习和实践中,只用到了运行数据从终端的输入输出和内存单元的存 取,这个程序则需要实现内存的单元到硬盘文件的的输入输出, 这是时下流行
14、的软件都采用的方式。我认为这些应该就是实践和实习的意义。参考文献1谭浩强著.C程序设计(第四版)北京:清华大学出版社,2010.附录 源程序代码 :#include#includestruct zuociint haoma;/座次数int biaoji;/座位订出的标记char xi ngmi ng20; 订座者姓名char zhe ngjia n30;订座者的身份证号码;struct planeint no;/航班号char qidia n 30;/ 起飞地char zho ngdia n 30;/ 目的地char time30; 起飞时间 int left;/ 余票struct zuoci
15、 zuowei12; 座位订出信息plane888;/888 个航班容量int num=0,i,j,t;/定义外部变量(全局变量)void read()读取文件的功能FILE *fp;if(fp=fopen(file.dat,rb)=NULL)/rb 打开二进制文件printf(出错);getchar();i=0;while(!feof(fp)/ 文件是否结尾位置,不是结尾就继续 fread(&planei,sizeof(struct plane),1,fp);/二进制读入i+;num+;num-;fclose(fp);void save() /保存到文件的功能FILE *fp;if(fp=f
16、open(file.dat,wb)=NULL)/第一次运行无指定,就会建立新文件 file.datprintf( 出错); getchar();for(i=0;inum;i+)fwrite(&planei,sizeof(struct plane),1,fp); /二进制输出fclose(fp);void shuru() /输入航班的功能 char c;printf( 请输入您要增加的航班信息 :n);printf(请输入航班号:n);scanf(%d,&planenum.no);printf( 请输入起飞地 n);scanf(%s,planenum.qidian);printf( 请输入目的地
17、 n);scanf(%s,planenum.zhongdian);printf( 请输入起飞时间 n);scanf(%s,planenum.time);printf( 请输入航班余量 n);scanf(%d,&planenum.left);for(i=0;iplanenum.left;i+)/ 订出标记planenum.zuoweii.biaoji=0; num+;getchar();/启继续void shuchu() /输出航班信息的功能printf(目前航班:n);printf(航班号tt起飞地tt目的地tt起飞时间tt票数n); for(i=0;inum;i+)printf(%dtt%s
18、tt%stt%sttt%dn,planei.no,planei.qidian,planei.zhongd ian,planei.time,planei.left);getchar();/继续void chazhao() /查找航班信息的功能printf( 请输入您要查询的航班号 :); scanf(%d,&t);for(i=0;inum;i+) /先查找航班if(t=planei.no)printf( 航班的空座数量为: %dn,planei.left);printf(空座号:);for(j=0;j12;j+)if(planei.zuoweij.biaoji!=1)printf(%d 号 ,j
19、+1);/ 输出航班号printf(n);printf( 已订座位的信息: n); for(j=0;j12;j+) if(planei.zuoweij.biaoji=1) printf( 座位号: %dn,j+1);printf( 订座者姓名: );puts(planei.zuoweij.xingming);printf( 订座者身份证号码: );puts(planei.zuoweij.zhengjian); /12 个座位查询范围printf( 航班起飞时间: );puts(planei.time);getchar();/继续void dingpiao() /订票的功能int n;print
20、f( 请输入订票的航班号: n); scanf(%d,&n);for(i=0;inum;i+)if(planei.no=n) break; printf( 余票: %dn,planei.left); for(j=0;planei.zuoweij.biaoji=1;j+); printf( 请输入姓名拼音: );scanf(%s,planei.zuoweij.xingming); printf( 请输入身份证号码: );scanf(%s,planei.zuoweij.zhengjian); printf( 分配给座位是 :%d 号 n,j+1);planei.zuoweij.biaoji=1;p
21、lanei.left-;getchar();/继续void cancel() /删除订票的功能int n,m;char judge;printf( 请输入删除的订票航班号: ); scanf(%d,&n);for(i=0;in);printf(输入选择功能序号:); scanf(%d,&menu);switch(menu)case 1: shuru();break;case 2: shuchu();break;case 3: chazhao();break;case 4: dingpiao();break;case 5: cancel();break;case 6: save();break; /如果没有符合的序号,则不执行,流转下一条getchar();子函数配合输入继续 /循环体位置while(menu!=6); /判断条件
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1