1、报告模本课 程 设 计 报 告课程名称 C语言程序设计 课题名称 飞机订票系统 专 业 计算机科学与技术 班 级 计算机1002 学 号 201003010234 姓 名 吴超 指导教师 冯剑 李珍辉 李杰君 2011年 7 月 5 日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设计 课 题 飞机订票系统 专业班级 计算机1002 学生姓名 吴超 学 号 201003010234 指导老师 冯剑 李珍辉 李杰君 审 批 任务书下达日期 2011 年 6 月 5 日任务完成日期 2011 年 7 月 5 日一、设计内容与设计要求1.课程设计目的:全面熟悉、掌握C语言基本知识,增强对
2、不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为后继课程(数据结构、数据库和汇编语言等课程)的实验以及课程设计打下较扎实的基础。2.课题题目飞机订票系统3.设计要求:掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的中型问题,为将来开发软件积累一些典型的案例处理经验。具体要求如下:设计课题题目:每位同学根据自己学号除以8所得的余数加一选择相应题号的课题。原则上不予换提,私自换题者不记成绩。根据自己对应的课题
3、完成以下主要工作:完成系统需求分析:包括系统设计目的与意义;系统功能需求;输入输出的要求。完成系统概要设计:程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。完成系统详细设计:包括采用C语言定义相关的数据类型;写出各模块的类C码算法;画出函数的调用关系图。调试分析、设计体会、测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。关键源程序(带注释)按规定格式完成课程
4、设计报告,将其打印稿(A4纸)上交给老师存档。不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。二、进度安排第 19 周 星期一 8:3011:30 星期 二 8:3011:30 星期 三 8:3011:30 星期 四 8:3011:30设计课题:飞机订票系统一、问题描述:假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。通过该系统来实现机票的订购问题。二、功能要求:1、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:起飞地、目的地、 航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。2、本系统显示这样的菜单:(1) 输入航班信息(2)
5、输出航班信息(3) 查找航班信息a.显示空座的数量b.显示空座的信息c.显示已订座的信息d.起飞时间(4)订票预约(5)删除订票预约(6)退出系统1、 本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入,并且它们都允许用户收回其输入。2、 查找航班信息既可按线路查,也可按目的地查。4、在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,它首先从该文件读入数据三、算法提示:1、数据结构:结构体类型数组2、数据库结构:下表构成该系统的基本数据库。 航班号起飞时间目的地座次号座次订出与否的标记订票者姓名订票者身份证号码intcharcharintCharcharchar四、测试
6、数据:每架飞机的座位N=12,M=5 五、其它:对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。目 录1. 系统需求分析 12. 总体设计 13. 详细设计 14. 系统调试 15. 结果分析 16. 总结 11系统需求分析系统要求程序能执行以下功能1、输入航班信息2、输出航班信息3、查找航班信息a.显示空座的数量b.显示空座的信息c.显示已订座的信息d.起飞时间4、订票预约5、删除订票预约并要求程序在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,它首先从该文件读入数据1. 总体设计总体结构图管理员可以通过密码验证输入机票信息,可以对机票信息进行查询;修改;删
7、除等功能。一般用户可以使用订票;显示;退票等功能,在输入机票信息时用户输入密码。具体功能如下:1、输入模块:(输入密码)首先输入航班起飞时间,再输入航班添加的人的信息2、输出模块:输出所有航班的所有座位信息。3 查询模块: (1)航班起飞时间 (2)航班空位数 (3)航班空位具体信息 (4) 航班非空位具体信息4 订票模块: 输入航班号,座位号 验证是否有人定,无人定就输入起飞地,目的地,姓名,证件号。5、退票模块: 输入退票的航班号,座位号;验证是否已定,如无人定则输出输入有误请重新输入,否则输出退票成功。2. 详细设计main()input()output()search()tingpia
8、o()tuipiao()input是输入模块output是输出模块search是查询模块dingpiao是订票模块tupiao是退票模块结构体:程序中用到了一个结构体数组,其中用到了结构体的嵌套;结构体定义如下:struct hangban struct zuowei char begin10;/起始地 char end10;/目的地 char flag10;/判断是否有人 char name10;/姓名 char sheng10;/身份证 b12;/表示12个座位; char time10;/航班时间 int kong;/航班空位 a5; /表示五个航班;文件:设置了一个文件用来保存航班的信
9、息;每次运行程序,他自动从文件中读取信息;结束文件是又向文件中保存信息;具体定义如下:FILE *f;模块实现:各个模块实现都比较简单,就不一一解释;void dingpiao()/订票模块 int i,j; char ch; /判断是否继续订票的变量 ch=Y; while (ch=Y) / ch为Y时进行订票 system(cls);/清屏 kaitou();/开头的输出 printf( 请输入航班号及其座位号:); scanf(%d%d,&i,&j); /输入航班号、座位号 if ( strcmp(ai.bj.flag,yes)=0 ) /判断此座位是否被定 printf(此座位可订,请
10、输入乘客的起飞地,目的地,姓名,身份证号码:); scanf(%s%s,ai.bj.begin,ai.bj.end); /输入起飞地,目的地 scanf(%s%s,ai.bj.name,ai.bj.sheng); /输入姓名,身份证 strcpy(ai.bj.flag,no);/把此座位设为已定 ai.kong-;/把航班的空座减一 else printf( 您输入的航班座位已定.); printf(是否继续定票(是请输入Y,否请输入N): ); do scanf(%c,&ch); while (ch!=Y&ch!=N); /直到输入Y或N时退出输入 密码部分: printf(请输入密码:);
11、 scanf(%d,&k); /输入密码,用k保存 if ( k!=666666 ) /设置初始密码为666666,判断输入是否与密码相同 printf(密码有误n); return; /不同则直接退出函数 判断是否退出函数的部分: ch=Y; while (ch=Y)判断是否退出函数 do scanf(%c,&ch); while (ch!=Y&ch!=N);直到输入一个Y或N时才结束输入 直到输入一个Y或N时才结束输入,防止程序随便读入一个回车符或其他字符就进行条件判断。3. 系统调试在开始,出现了不知该如何定义变量的问题,定义的变量不能很好的保存我所用的信息,后面用了一个结构体数组嵌套一
12、个结构体数组;发现问题一下子就解决了。由于文件学的不太好,开始打开文件时,未把打开文件的地址赋值给文件指针,导致程序运行出错。后面加上去了。 在调试时,发现自己已经在运行这程序,却又对它进行编译,就会出现编译错误。后面把在运行程序的窗口关掉时,它就没错误了。运行程序时发现,在运行窗口上出现许多东西,由前面运行的输入输出,由现在运行的输入输出,非常不美观,于是上网查到了一个清屏函数,这下屏幕上美观多了。尽管调试时,也有一些小错误,劈如:少写了一个分号;把某字母大写了;少加了一个大括号等等。但都轻松解决了。4. 结果分析在飞机订票系统中:设计特点:程序比较简单,易懂,能实现设计所给出的要求。设置了
13、一个结构体数组,用它来代表航班信息;且这结构体数组里嵌套了一个结构体数组,用它来代表航班中的座位信息。这样能很好的记录航班信息。定义了一个文件,保存着航班信息;每次运行程序,程序自动从文件中读取航班信息;每次程序结束时;又把这次所输入的信息保存到文件中。不足:程序有些航班信息没进行考虑,譬如没有考虑价格等因素;在很大程度上有待完善。附程序:#include #include #include FILE *f;int n;struct hangban struct zuowei char begin10; char end10; char flag10; char name10; char sh
14、eng10; b12; char time10; int kong; a5;void kaitou() printf(*); printf( 欢迎进入南方航空管理系统n); printf(*);void duqu() int i,k; f=fopen(f,r); for (k=0;k5;k+) for (i=0;i12;i+) fscanf(f,%s,ak.bi.flag); if ( strcmp(ak.bi.flag,no)=0 ) fscanf(f,%s%s,ak.bi.begin,ak.bi.end); fscanf(f,%s%s,ak.bi.name,ak.bi.sheng); el
15、se ak.kong+; fscanf(f,%s,ak.time); fclose(f);void input() int i,j,k,t; char ch; system(cls); kaitou(); printf(请输入密码:); scanf(%d,&k); if ( k!=666666 ) printf(密码有误n); return; system(cls); kaitou(); printf(密码正确!n); printf(请输入需修改的航班时间的数目:); scanf(%d,&k); printf(输入修改的航班及其时间n); for (j=0;jk;j+) scanf(%d,&i
16、); scanf(%s,ai.time); printf(进入下一项输入请输入Y: ); do scanf(%c,&ch); while (ch!=Y); system(cls); kaitou(); printf(n请输入航班添加的人数:); scanf(%d,&k); for (t=0;tk;t+) printf(n请输入航班号及其座位号:); scanf(%d%d,&i,&j); if ( strcmp(ai.bj.flag,yes)=0 ) printf(此座位可订,请输入乘客的起飞地,目的地,姓名,身份证号码:); scanf(%s%s,ai.bj.begin,ai.bj.end);
17、 scanf(%s%s,ai.bj.name,ai.bj.sheng); strcpy(ai.bj.flag,no); ai.kong-; printf(); else printf(此座位不可订,请重新输入!n); k+; printf(返回主菜单请输入Y: ); do scanf(%c,&ch); while (ch!=Y);void output() int i,j; char ch; system(cls); kaitou(); for (i=0;i5;i+) printf(-输出%d号航班的信息:n,i); printf(%d号航班的出发时间: ); printf(%sn,ai.ti
18、me); for (j=0;j12;j+) if ( strcmp(ai.bj.flag,no)=0 ) printf(%d号座乘客的起飞地,目的地,姓名,身份证号码: ,j); printf(%s %s ,ai.bj.begin,ai.bj.end); printf(%s %sn,ai.bj.name,ai.bj.sheng); else printf(%d号座是空位!n,j); printf(返回主菜单请输入Y: ); do scanf(%c,&ch); while (ch!=Y);void search() int i,j,t; char ch; ch=Y; while (ch=Y) s
19、ystem(cls); kaitou(); printf( 请输入要查找的航班: ); scanf(%d,&i); printf( 1:航班的空座数量n); printf( 2:航班空座的具体信息n); printf( 3:航班已订座的具体信息n); printf( 4:航班的起飞时间n); printf( 请选择1-6进入以下菜单:); scanf(%d,&t); system(cls); kaitou(); switch (t) case 1: printf( %d号航班的空座数量: ,i); printf(%dn,ai.kong);break; case 2: printf( %d号航班
20、空座的具体信息:n,i); for (j=0;j12;j+) if ( strcmp(ai.bj.flag,yes)=0 ) printf(%d ,j); printf(n); break; case 3: printf( %d号航班已订座的具体信息:n,i); for (j=0;j12;j+) if ( strcmp(ai.bj.flag,no)=0 ) printf(%d号座乘客的起飞地,目的地,姓名,身份证号码: ,j); printf(%s %s ,ai.bj.begin,ai.bj.end); printf(%s %sn,ai.bj.name,ai.bj.sheng); break;
21、 case 4:printf( %d号航班的起飞时间: ,i); printf(%sn,ai.time); break; printf(是否继续查找航班信息(是的输入Y,否输入N): ); do scanf(%c,&ch); while (ch!=Y&ch!=N); void dingpiao() int i,j; char ch; ch=Y; while (ch=Y) system(cls); kaitou(); printf( 请输入航班号及其座位号:); scanf(%d%d,&i,&j); if ( strcmp(ai.bj.flag,yes)=0 ) printf(此座位可订,请输入
22、乘客的起飞地,目的地,姓名,身份证号码:); scanf(%s%s,ai.bj.begin,ai.bj.end); scanf(%s%s,ai.bj.name,ai.bj.sheng); strcpy(ai.bj.flag,no); ai.kong-; printf(); else printf( 您输入的航班座位已定.); printf(是否继续定票(是请输入Y,否请输入N): ); do scanf(%c,&ch); while (ch!=Y&ch!=N); void tuipiao() int i,j,k; char ch; ch=Y; while (ch=Y) system(cls);
23、 kaitou(); k=1; do printf( 请输入您要退票的航班号与座位号(回车结束): ); scanf(%d%d,&i,&j); if ( strcmp(ai.bj.flag,yes)=0 ) printf( 您的输入有误,请重新输入.); else strcpy(ai.bj.flag,yes); ai.kong+; k=0; while (k); printf( 您已退票成功!); printf(是否需要继续退票(是的输入Y,否输入N): ); do scanf(%c,&ch); while (ch!=Y&ch!=N); void save() int i,k; f=fopen
24、(f,w); for (k=0;k5;k+) for (i=0;i12;i+) fprintf(f,%s ,ak.bi.flag); if ( strcmp(ak.bi.flag,yes)!=0 ) fprintf(f,%s %s ,ak.bi.begin,ak.bi.end); fprintf(f,%s %s ,ak.bi.name,ak.bi.sheng); fprintf(f,%sn,ak.time); fclose(f);void main() int k,i=1; duqu(); do system(cls); kaitou(); printf( 1:输入航班信息n); printf
25、( 2:输出航班信息n); printf( 3:查找航班信息n); printf( 4:订票预约n); printf( 5:删除订票预约n); printf( 6:退出系统n); printf( 请选择1-6进入以下菜单n); scanf(%d,&k); switch (k) case 1:input(); break; case 2:output(); break; case 3:search(); break; case 4:dingpiao(); break; case 5:tuipiao(); break; case 6:i=0; break; while (i); save();5. 总结课程设计心得: 课程设计给我一个学以致用的机会,刚开始的时候还以为学这黑黑的东西没用,只是一些简单的计算。经过了这次的练习我才发现原来的黑屏有它自己的好处,通过学习也发现原来这种黑屏就是那些应用程序的原型,不论你以后学程序开发还是网页的制作都有很好大好处,这些基础是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1