《语c言课程设计航空售票系统--大学毕设论文.doc》由会员分享,可在线阅读,更多相关《语c言课程设计航空售票系统--大学毕设论文.doc(27页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、C语言程序设计课程设计C语言程序设计课程设计评语:考勤(10)纪律(10)过程(40)设计报告(30)答辩(10)总成绩(100)专 业: 轨道交通信号与控制 班 级: 信号1402 姓 名: 牛志强 学 号: 201409217 指导教师: 张振海 兰州交通大学自动化与电气工程学院2015 年 7 月 22 日一、基础题1、题目 有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一个人为止。问此人原来的位置是多少号。 2、解题分析 利用结构体数组中加入指针构成循环链模拟进行报数,并加入标志,表示此人是否离开游戏。游戏开始,报数等于三的倍数的人离开
2、,直到淘汰16个玩家为止,则剩余一人为胜利者,输出该游戏者的结构体数组位置即是此人原来的位置。3、流程图图1基础题流程图4、 源程序#includestruct Signint no_out;/出局标志int nextp;/指针指向下一个元素,形成圈形链表sign17;main()printf(有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一个人为止。问此人原来的位置是多少号。n);int i, j, k,l;for (i = 0; i 17; i+)/循环链表赋初值signi.no_out = 1;signi.nextp = i + 1;si
3、gn16.nextp = 0;printf(初始队列情况(Y代表存在,N代表出局):);for (i = 0; i 17; i+)printf(%c%c, signi.no_out ? Y : N,(i+1)%17!=0?0:n);j = 16;for (i = 0; i 16; i+)/淘汰16个人为止for (k = 0;)if (k % 3 != 0 | k = 0)/不是3的倍数指向下一个j = signj.nextp;k += signj.no_out;else/3的倍数出局,标志改为0signj.no_out = 0;break;printf(第%d个人第%d号淘汰后:,i+1,j
4、);/每淘汰一个人就输出,模拟真实的游戏过程for (l= 0; l 17; l+)printf(%c%c, signl.no_out ? Y : N,(l + 1) % 17 != 0 ? 0 : n);for (i = 0; i 17;i+)if (signi.no_out)printf(最后剩余一人原来号码为%dn,i);5、 测试数据及运行结果图2基础题运行图二、改错题1、题目 下列给定程序中,函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构。 程序如下:
5、 #include #define N 20void fun(int a,int n) int i,j,t,p; for (j=0;jn-1;j+) p=j for (i=j;i,n;i+) if (aiap) p=j; t=ap;ap=aj;aj=t; main() int aN=9,6,8,3,-1,i,m=5; printf(排序前的数据:); for (i=0;im;i+) printf(%d,ai); printf(n); fun(a,m); printf(排序后的数据:); for (i=0;im;i+) printf(%d,ai); printf(n);2、程序功能把数组中的数按
6、从小到大依次排序。3、错误分析(1)第8行:“p=j”改为“p=j;”构成语句。(2)第9行:“i=j;”改为“i=j+1;”,使得小排序次数依次减1。(3)第9行:“i,n;”改为“in;”使条件正确。(4)第11行:“p=j;”改为“p=i;”使能够正确交换数进行排序。4、流程图图3改错题流程图5、改正过的程序#include #define N 20void fun(int a,int n)int i,j,t,p;for (j=0;jn-1;j+)p = j;/ 末尾加“;”for (i = j+1; in; i+) /j改为j + 1 ;“,”改为“”if (aiap)p = i; /
7、j改为it = ap; ap = aj; aj = t;main()int aN = 9, 6, 8, 3, -1 , i, m = 5;printf(排序前的数据:);for (i = 0; im; i+)printf(%d, ai);printf(n);fun(a, m);printf(排序后的数据:);for (i = 0; im; i+) printf(%d, ai);printf(n); 6、测试数据及运行结果图4改错题运行图三、综合题1、题目飞机订票系统 :一、问题描述:假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。通过该系统来实现机票的订购问题。二、功能要求:1.
8、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:起飞地、目的地 航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。2. 本系统显示这样的菜单: (1) 输入航班信息 (2) 输出航班信息 (3) 查找航班信息 a.显示空座的数量 b.显示空座的信息 c.显示已订座的信息 d.起飞时间 (4)订票预约 (5)删除定票预约 (6)退出系统 3. 本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入,并且它们都允许用户收回其输入。4. 查找航班信息既可按线路查,也可按目的地查。 5. 在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,它首先从
9、该文件读入数据。三、算法提示:1. 数据结构:结构体类型数组2. 数据库结构:下表构成该系统的基本数据库。航班号起飞时间目的地座次号座次订出与否的标记订票者姓名订票者身份证号码intcharcharintcharcharchar四、测试数据:每架飞机的座位N=12,M=5五、其它:对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。2、解题分析利用工程化思想解决,将程序功能模块化,每个模块完成一项功能,每人完成一部分,主函数做成菜单,各种功能调用子函数完成,有利于系统的运行和维护,且便于拓展功能。飞机订票系统,有M架飞机,每架飞机有N个座位,将数据类型做成结构体数组的嵌套,方便管
10、理,且将M,N作为宏定义,这样后续就可以通过改宏定义的值就可以扩大系统的适用范围。在这个程序中,特别的加入一个自建的头文件,里面包含了输入输出等头文件,结构体数组等,使得每个小组成员更方便的使用调用全局变量和一些参数。3、 流程图图5综合题main函数流程图 图6综合题func1函数流程图 图7综合题func2函数流程图图8综合题func3函数流程图图9综合题func31函数流程图 图10综合题func311函数流程图 图11综合题func312函数流程图 图12综合题func313函数流程图 图13综合题func314函数流程图 图14综合题func4函数流程图 图15综合题func5函数流
11、程图 图16综合题func6函数流程图 图17综合题func7函数流程图4、源程序头文件:bag.h:#include/自定义头文件包含各个函数常用和必要部分#include#include#include#define M 5/飞机数宏定义#define N 12/座位数宏定义struct Infor/自定义Infor信息结构体int snum;/seat number座位号(数字表示)char sign;/标记(用Y和N表示)char name20;/姓名(汉字英文均可)char id20;/身份证号(由于有人身份证号末尾为X所以类型采用cahr)inforN;struct Flight/
12、自定义Flight航班信息结构体int fnum;/flight number航班号(数字表示)char time12;/例如2015/07/20,20150720,2015-07-20或20150720均可char offg20;/off ground起飞地(汉字英文均可)char des20;/destination目的地(汉字英文均可)struct Infor inforN;/Infor信息结构体数组从属于Flight航班信息结构体数组,结构体数组的嵌套flightM;FILE *fp;/文件指针源文件:main.c:#includebag.h/主函数void main()int fun
13、c1();int func2();int func3();void func4();void func5();void func6();int func7();int i,x;if (fp = fopen(D:Flight.txt, a+) = NULL)/a+方式打开文件,存在则读写指向文件末尾,不存在新建printf(打开文件失败!n);fseek(fp, 0, SEEK_SET);/使文件内部指针指向文件开头,以便读取记录for (i = 0; i M;i+)fread(&flighti, sizeof(struct Flight), 1, fp);/sizeof()运算要读入数据的大小
14、fclose(fp);printf(t*nntt 欢迎使用航空订票系统!nt Welcome to Airline Reservation System!nt Oficial Version Powefr by SuperGroup.nttttBuild 1.2.150716nnt*n);printf(注意:首次运行本系统请先选择初始化系统,以防发生未知错误!n);printf(提示:n1.航班号用数字表示n2.起飞时间输入例如2015/07/20,20150720,2015-07-20或20150720均可n3.订座标记为英文大写字母Y(已定出)和N(空座)nn);for (;)/for循环
15、使程序只有一个出口,即退出系统printf(菜单:n1.输入航班信息n2.输出航班信息n3.查找航班信息n4.订票预约n5.删除订票预约n6.退出系统n7.初始化系统n请输入相应操作选项数字:n);scanf(%d,&x);getchar();/接收回车,以防对后续输入造成干扰switch (x)case 1:system(cls); func1(); system(cls); break;case 2:system(cls); func2(); system(cls); break;case 3:system(cls); func3(); system(cls); break;case 4:
16、system(cls); func4(); system(cls); break;case 5:system(cls); func5(); system(cls); break;case 6:system(cls); func6();case 7:system(cls); func7(); system(cls); break;default:system(cls); printf(输入错误,请重新输入!n); system(pause);func1.c:#includebag.h/输入航班信息一级子函数int func1()int i;printf(您已选择1.输入航班信息。n);print
17、f(共有%d架飞机,请选择要输入飞机的序号1%d(输入0返回上一菜单)。n,M,M);for (;)/for循环使程序只有一个出口,即输入0返回上一菜单scanf(%d, &i);getchar();if (i = 0)return 0;if (i = M)system(cls);printf(请输入%d号飞机的航班号:n, i);scanf(%d,&flighti-1.fnum);getchar();printf(请输入%d号飞机的起飞时间:n,i);scanf(%s, flighti - 1.time);getchar();printf(请输入%d号飞机的起飞地:n, i);scanf(%
18、s, flighti - 1.offg);getchar();printf(请输入%d号飞机的目的地:n, i);scanf(%s, flighti - 1.des);getchar();printf(%d号飞机航班信息输入完毕,请选择其他1%d飞机或0返回上一菜单!n, i,M);elseprintf(输入错误,请重新输入!n);func2.c:#includebag.h/输出航班信息一级子函数int func2()int i;struct Flight *p;/结构体指针system(cls);printf(您已选择2.输出航班信息。nn);p = flight;/结构体指针赋初值for
19、(i = 0; i M; i+)/for循环使程序只有一个出口,即输入0返回上一菜单printf(%d号飞机的航班号:%dn, i+1, (*(p + i - 1).fnum);printf(%d号飞机的起飞时间:%sn, i+1, (*(p + i - 1).time);printf(%d号飞机的起飞地:%sn, i+1, (*(p + i - 1).offg);printf(%d号飞机的目的地:%snn, i+1, (*(p + i - 1).des);printf(按0返回上一菜单!n);scanf(%d, &i);getchar();if (i = 0)return 0;func3.c
20、:#includebag.h/查找航班信息一级子函数int func3()int func31(int x);int i, j, fnum;char a20, b20;printf(您已选择3.查找航班信息。n);for (;)fnum = 1;printf(请选择查找航班信息方式(0返回菜单):n1.按航班号查找n2.按线路查找n3.按目的地查找n);scanf(%d, &i);getchar();system(cls);if (i = 0)return 0;else if (i = 1)for (;)if (fnum = 0)break;printf(您已选择1.按航班号查找。n);pri
21、ntf(请输入航班号:n);scanf(%d, &fnum);getchar();for (j = 0; j M; j+)if (fnum = flightj.fnum)func31(j);break;elseif (j = M - 1)printf(查找失败,请核对航班号后按任意数字继续查找或按0用其他方式查找!n);scanf(%d, &fnum);getchar();system(cls);break;else if (i = 2)for (;)if (fnum = 0)break;printf(您已选择2.按线路查找。n);printf(请输入查询线路的起点和目的地:n);printf
22、(请输入起点:n);scanf(%s, a);getchar();printf(请输入目的地:n);scanf(%s, b);getchar();for (j = 0; j M; j+)if (strcmp(a, flightj.offg) = (strcmp(b, flightj.des) = 0)func31(j);break;elseif (j = M - 1)printf(查找失败,请核对线路后按任意数字继续查找或按0用其他方式查找!n);scanf(%d, &fnum);getchar();system(cls);if (fnum = 0)break;else if (i = 3)f
23、or (;)if (fnum = 0)break;printf(您已选择3.按目的地查找。n);printf(请输入目的地:n);scanf(%s, a);getchar();for (j = 0; j M; j+)if (strcmp(a, flightj.des) = 0)func31(j);break;elseif (j = M - 1)printf(查找失败,请核对目的地后按任意数字继续查找或按0用其他方式查找!n);scanf(%d, &fnum);getchar();system(cls);if (fnum = 0)break;elseprintf(输入错误,请重新输入!n);sy
24、stem(pause);system(cls);return 0;func31.c:#includebag.h/查找航班信息二级子函数int func31(int x)int func311( int x);int func312( int x);int func313( int x);int func314( int x);int i;system(cls);printf(成功匹配到%d航班。n, flightx.fnum);for (;)printf(请选择查询选项(0返回菜单):n1.显示空座的数量n2.显示空座的信息n3.显示已订座的信息n4.显示起飞时间n);scanf(%d, &i
25、);getchar();switch (i)case 0:return 0;case 1:system(cls); func311(x); system(cls); break;case 2:system(cls); func312(x); system(cls); break;case 3:system(cls); func313(x); system(cls); break;case 4:system(cls); func314(x); system(cls); break;default:printf(输入错误,请重新输入!n);func311.c:#includebag.h/查找航班信
26、息三级子函数之一显示空座数量int func311( int x)int i, k=0;for (i = 0; i N; i+)if (flightx.infori.sign = N)k += 1;printf(%d航班剩余%d个空座n, flightx.fnum, k);system(pause);return 0;func312.c:#includebag.h/查找航班信息三级子函数之二显示空座信息int func312( int x)int i;printf(%d航班剩余空座有:n, flightx.fnum);for (i = 0; i N; i+)if (flightx.infori
27、.sign = N)printf(%d号座%c, flightx.infori.snum, (i + 1) % 5 = 0 ? n : t);system(pause);return 0;func313.c:#includebag.h/查找航班信息三级子函数之三显示已订座的信息int func313( int x)int i;printf(航班号:%dn起飞时间:%sn起飞地:%sn目的地:%snn, flightx.fnum, flightx.time, flightx.offg, flightx.des);for (i = 0; i N; i+)if (flightx.infori.sig
28、n != N)printf(姓名:%sn座号:%dn身份证号:%snn, flightx.infori.name, flightx.infori.snum, flightx.infori.id);system(pause);return 0;func314.c:#includebag.h/查找航班信息三级子函数之四显示起飞时间int func314(int x)printf(航班号:%dn起飞时间:%sn, flightx.fnum, flightx.time);system(pause);return 0;func4.c:#includebag.h/订票预约一级子函数void func4()
29、int func312(int x);/为预约航班方便列出航班号供选择int i,fnum,snum;system(cls);printf(请选择要预约的航班号:n);printf(共%d个航班,航班号分别为:n, M);for (i = 0; i M; i+)printf(%d.%d%c, i+1, flighti.fnum, (i + 1) % 5 = 0 ? n : t);scanf(%d, &fnum);getchar();for (i = 0; i M; i+)if (fnum = flighti.fnum)func312(i);printf(n请输入要预约的座位号:n);scanf
30、(%d, &snum);getchar();printf(请输入预约人的姓名:n);scanf(%s,flighti.inforsnum-1.name);getchar();printf(请输入预约人身份证号:n);scanf(%s, flighti.inforsnum-1.id);getchar();flighti.inforsnum - 1.sign = Y;system(cls);printf(%s已成功预定%d航班%d号座位!n, flighti.inforsnum-1.name, flighti.fnum, flighti.inforsnum-1.snum);system(pause
31、);break;func5.c:#includebag.h/删除订票预约一级子函数void func5()int func313(int x);/为删除预约航班方便列出航班号供选择调用func313()int i, fnum, snum,x;system(cls);printf(共%d个航班,航班号分别为:n,M);for (i = 0; i M; i+)printf(%d.%d%c, i+1,flighti.fnum,(i+1)%5=0?n:t);printf(请选择要删除预约的航班号:n);scanf(%d, &fnum);getchar();for (i = 0; i M; i+)sys
32、tem(cls);if (fnum = flighti.fnum)func313(i);printf(请输入要删除预约的座位号:n);scanf(%d, &snum);getchar();printf(确定删除%s预定的%d航班%d号座位?n1.确定n2.取消n, flighti.inforsnum - 1.name, flighti.fnum, flighti.inforsnum - 1.snum);/防误删再次征询意见scanf(%d, &x);getchar();if (x = 1)/删除预约,则该infor的记录初始化flighti.inforsnum - 1.sign = N;str
33、cpy(flighti.inforsnum - 1.name, None);strcpy(flighti.inforsnum - 1.id, None);system(cls);printf(已成功删除%s预定的%d航班%d号座位!n, flighti.inforsnum - 1.name, flighti.fnum, flighti.inforsnum - 1.snum);system(pause);elsesystem(cls);printf(已取消删除!n);system(pause);break;func6.c:#includebag.h/退出系统一级子函数void func6()in
34、t i;if (fp = fopen(D:Flight.txt, w) = NULL)/a+方式打开文件,存在则读写指向文件末尾,不存在新建printf(打开文件失败!n);fseek(fp, 0, SEEK_SET);for (i = 0; i M; i+)fwrite(&flighti, sizeof(struct Flight), 1, fp);/保存记录fclose(fp);/关闭打开的文件,释放内存printf(已成功保存文件!n);system(pause);printf(t*nntt 感谢使用航空订票系统!ntt Airline Reservation System!nttOfi
35、cial Version Powefr by SuperGroup.nttttBuild 1.2.150716nnt*n);exit(0);/程序唯一出口func7.c:#includebag.h/初始化系统一级子函数int func7()int i,j;printf(系统初始化不可逆转,确定初始化?n1.确定n2.取消n);/防误操作再次征询意见scanf(%d, &i);getchar();if (i = 1)for (i = 0; i M; i+)flighti.fnum = 0;strcpy(flighti.time, None);/strcpy()函数对字符串赋值strcpy(flighti.offg, None);strcpy(flighti.des, None);for (j = 0; j N; j+)flighti.inforj.snum = j+1;flighti.inforj.sign = N;strcpy(flighti.inforj.name , None);strcpy(flighti.inforj.id ,None);printf(系统初始化完成!n);system(pause);elseprintf(已取消系统初始化!n);system(pause);return 0;5、 测试数据及运行结果
限制150内