1、第一章 绪论1.1:项目背景描述1、课程设计性质和目标:C语言程序设计是一门实践性很强课程。C程序课程设计是学习C语言程序设计很关键实践步骤,经过本课程设计使学生深入巩固课堂所学,全方面熟悉,掌握C语言程序设计基础方法和技巧,深入提升编写程序、分析程序及上机操作、调试程序能力,让学生加深了解,提升动手操作能力及分析问题和处理问题能力。2、课程设计包含知识点:1掌握并熟练利用C语言基础数据类型和多种表示式,程序步骤控制语句。2掌握数组基础概念。掌握一维数组和二维数组使用,掌握字符数组和字符串关系。3熟练掌握指针、地址、指针类型概念及其使用。掌握指针变量定义和初始化、指针间接访问和表示式,掌握指针
2、和数组、函数、字符串联络4掌握函数定义,函数返回值,函数调用,函数申明,函数形式参数和实际参数之间关系,了解函数作用区间。5掌握结构体概念,结构体类型定义,结构体变量定义和初始化,结构体组员表示。结构体和指针、函数关系。第二章 可行性分析一、问题描述:假设某航空企业只有N架X个座位飞机,每架飞机天天飞行一趟。经过该系统来实现机票订购问题。二、功效要求:1、本系统采取一个包含N个数据结构体数组,每个数据结构应该包含:起飞地、目标地 航班号、航班定额。2、本系统显示这么菜单:1.)录入: 能够录入航班情况(数据能够存放在一个数据文件中)2.)浏览:航班信息浏览功效需要提供显示操作; 1、 查询:可
3、提供根据航班号、起点站、终点站、飞行时间、查询,能够查询某个航线情况(如,输入航班号,起飞抵达城市,确定航班是否满仓);另外要提供键盘式选择菜单以实现功效选择。(1) 输入航班信息(2) 输出航班信息(3) 查找航班信息(4)订票预约(5)删除定票预约(6)退出系统2、 本系统成功实施菜单每个信息,选项4)和5)将要求额外输入,而且它们全部许可用户收回其输入。3、 查找航班信息既可按线路查,也可按目标地查。4、在两次运行之间,数据被保留于一个文件里,当本程序重新开始时候,它首先从该文件读入数据三、算法提醒:1、数据结构:结构体类型数组2、数据库结构:下表组成该系统基础数据库。航班号起点终点起飞
4、时间intcharcharchar 四、测试数据:录入北京到上海星期一起飞航班,假设其定额为30,上海到南京航班起飞时间为星期二。五、其它:在实现系统基础功效后,完善系统其它功效。在测试数据是发觉退票系统出现问题,退票数会超出定额,在加上一个限定条件后成功。基于本系统能够尝试输出所定票用户完整信息,包含姓名,身份证号等个人信息,因为时间有限,还未添加。第三章 总体设计3.1 课程设计题目:航班订票系统3.2. 内容摘要:假设某航空企业只有M架N个座位飞机,每架飞机天天飞行一趟。经过该系统来实现机票订购问题。3.3. 关键字:函数 数组 结构体 文件 循环语句 多分支结构3.4总体设计方案选定:
5、程序功效要求:1、本系统采取一个包含N个数据结构体数组,每个数据结构应该包含:起飞地、目标地 航班号、座次号码、座次订出是否标识、订座者姓名和订座者身份证号码。2、本系统显示这么菜单:(4) 输入航班信息(5) 输出航班信息(6) 查找航班信息a.显示空座数量b.显示空座信息c.显示已订座信息d.起飞时间(4)订票预约(5)删除定票预约(6)退出系统4、 本系统成功实施菜单每个信息,选项4)和5)将要求额外输入,而且它们全部许可用户收回其输入。5、 查找航班信息既可按航班号来实现。4、在两次运行之间,数据被保留于一个文件里,当本程序重新开始时候,它首先从该文件读入数据 第四章 具体设计4.1采
6、取自定向下,逐步细化思想,将该系统分解成各个相对独立且能够运行模块。在文件开始定义出本系统中将会用到全部变量和对各个模块调用,将作为头文件使各个组员能够使用。以下所表示:hangban.h#include/标准输入、输出头文件#include/包含字符串函数处理头文件#define N 9999/定义最多航班数#define PRINT %dtt%stt%stt星期%stt%dn ,si.num,si.qidian,si.zhongdian,si.time,si.count /宏定义输出格式struct air /定义结构体数组int num;/定义航班号char qidian20;/航班起始
7、站char zhongdian20;/终点站char time10;/飞行时间int count;/机票数量sN;int i,m=0;/定义全局变量char hangbanhao10;void add();/函数申明增加航班信息函数void print(); /显示航班信息void search();/查找航班信息void dingpiao();/订票业务void tuipiao();/退票void read();/读取文件void save();/保留文件void output();/输出格式void paixu();/航班排序void build();/建立数据文件void paixu1(
8、);/按航班号从小到大排序void paixu2();/从大到小4.2系统总体结构4.3航班信息录入步骤图4.4订票系统步骤图在有航班信息情况下能够进行订票操作。开始查询全部 是否输入航班号显示航班信息确定订票否保留4.5查询结构代码void search()/定义查询函数int n;doprintf(n请输入航班号: );scanf(%d,&n);/输入查询航班号for(i=0;im;i+) if(si.num=n)/按航班号判定输出条件 printf(n您所查找航班信息为:n );printf(航班号tt起始站tt终点站tt时间tt机票数 nn);printf(PRINT);/显示信息 p
9、rintf(n查询完成,按回车键继续);getchar();getchar();return; printf(n对不起,没有您需要信息!n );printf(是否重新查找?请键入y或n以回车键结束 );scanf(%s,hangbanhao);while(!strcmp(hangbanhao,y);/判定是否重新查找4.6订票业务代码void dingpiao()/定义订票业务函数int n;char a10=y;dosearch();/调用查询模块doprintf(请输入您要订机票数(以回车键结束): );scanf(%d,&n);/输入所订机票数if(n=n)/判定机票数是否大于等于订票数
10、si.count=si.count-n;printf(订票成功! );break;else if(si.countn)/判定机票数是否小于订票数 printf(对不起,你所选择航班只剩 %d张机票n, si.count);printf(是否需要重新输入机票数?请输入y或n以回车键结束: );/判定是否重新输入订票数scanf(%s,a);while(!strcmp(a,y);printf(是否需要订其它航班机票?请输入y或n以回车键结束: );scanf(%s,a);while(!strcmp(a,y);/判定是否继续订票4.7退票业务代码void tuipiao()/定义退票函数int n;
11、char a10;dosearch();/调用查询函数printf(请输入您要退机票数目: );scanf(%d,&n);/输入所退票数if(n=0)/判定票数是否有效printf(输入错误!最少需退1张机票。 );else si.count=si.count+n;printf(退票成功! );printf(是否继续? 请键入y或n以回车键结束: );/判定是否继续退票scanf(%s,a);while(!strcmp(a,y);/判定并跳出循环 第五章 总结一周C语言课程设计立即结束,经过此次课程设计也学会综合利用理论知识来分析和处理实际问题能力、养成严谨科学态度和良好程序设计习惯实现由知识
12、向智能初步转化学会循软件开发过程基础规范利用结构化程序设计方法根据课程设计题目要求并能够完成设计、编写、调试和测试应用程序及编写文档任务 程序整体上运行和题目要求很吻合算法大多比较通用各个函数模块正确性、完备性、对输入容错能力和算法深入改善在设计中全部有表述这道题使我熟悉了文件输入输出操作真切感受到了fprintf和fwrite函数区分。回顾起此次课程设计至今我仍感慨颇多从理论到实践在整整半个月日子里我学到很多很多东西不仅巩固了以前所学过知识而且学到了很多在书本上所没有学到过内容。经过这次课程设计使我知道了理论和实际相结合是很关键只有理论知识是远远不够只有把所学理论知识和实践相结合起来从理论中
13、得出结论才是真正知识才能提升自己实际动手能力和独立思索能力。在设计过程碰到了多种多样问题同时在设计过程中发觉了自己不足之处对以前所学过知识了解得不够深刻掌握得不够牢靠经过这次课程设计把以前所学过知识重新温故巩固了所学知识。 在编写程序过程中受到了其它同学指点可能在一些程序方面会和有同学想类似不过老师在我编程序过程中也起到了很大作用我们在C语言这门课上还会继续走下去以后还会常常碰到我会努力。附1: 源代码#include/标准输入、输出头文件#include/包含字符串函数处理头文件#define N 9999/定义最多航班数#define PRINT %dtt%stt%stt星期%stt%dn
14、 ,si.num,si.qidian,si.zhongdian,si.time,si.count /宏定义输出格式struct air /定义结构体数组int num;/定义航班号char qidian20;/航班起始站char zhongdian20;/终点站char time10;/飞行时间int count;/机票数量sN;int i,m=0;/定义全局变量char hangbanhao10;void add();/函数申明增加航班信息函数void print(); /显示航班信息void search();/查找航班信息void dingpiao();/订票业务void tuipiao
15、();/退票void read();/读取文件void save();/保留文件void output();/输出格式void paixu();/航班排序void build();/建立数据文件void paixu1();/按航班号从小到大排序void paixu2();/从大到小void main()/主函数int j; read(); printf(ntt欢迎使用航班订票系统!n); printf(*n); printf( 1.增加航班信息n); printf( 2.浏览航班信息n); printf( 3.查找航班信息n); printf( 4.航班排序(按航班号)n); printf(
16、5.办理订票业务n); printf( 6.办理退票业务n); printf( 0.退出系统(exit)n); printf(*n); printf(请在0-6中选择以回车键结束: );scanf(%d,&j);switch(j)case 1: add();/调用增加航班函数break;case 2:print();/调用显示模块break;case 3:search();/调用查找模块break;case 4:paixu();/调用排序函数break;case 5:dingpiao();/调用订票模块break;case 6:tuipiao();/调用退票模块break; case 0:sa
17、ve(); /退出系统printf(谢谢使用,再见! );break; void read()/定义读取文件函数FILE *fp;if(fp=fopen(hangban.dat,rb)=NULL)printf(创建文件失败! );getchar();return;i=0;while(!feof(fp)fread(&si,sizeof(struct air),1,fp);/逐块读取数据i+;m+;/计算存在航班数m-;fclose(fp);void save()/定义保留函数FILE *fp;if(fp=fopen(hangban.dat,wb)=NULL) printf(创建文件失败! );g
18、etchar();return;for(i=0;im;i+)/逐块保留数据fwrite(&si,sizeof(struct air),1,fp);fclose(fp);void add()/定义增加航班信息函数doprintf(请依次输入您要增加航班信息(以回车键结束): n); /打印提醒信息printf(- n);printf(请输入航班号: ); scanf(%d,&sm.num);/读取航班号printf(请输入起始站: );scanf(%s,sm.qidian);/读取起始站printf(请输入终点站: );scanf(%s,sm.zhongdian);/读取终点站printf(请输
19、入时间: );scanf(%s,sm.time);/读取时间printf(请输入机票数: );scanf(%d,&sm.count);/读取机票数m+;printf(添加完成,是否继续添加?请键入y或n以回车键结束:);scanf(%s,hangbanhao);while(!strcmp(hangbanhao,y);/判定是否继续添加void output()/定义输出格式函数printf(航班号tt起始站tt终点站tt时间tt机票数n);/信息标题 for(i=0;im;i+)printf(PRINT);/打印出信息void print()/定义显示航班信息函数printf(n现在我们有以下
20、航班:n);output();/调用输出格式函数printf(n请按回车键返回上层菜单 );getchar();getchar(); void search()/定义查询函数int n;doprintf(n请输入航班号: );scanf(%d,&n);/输入查询航班号for(i=0;im;i+) if(si.num=n)/按航班号判定输出条件 printf(n您所查找航班信息为:n );printf(航班号tt起始站tt终点站tt时间tt机票数 nn);printf(PRINT);/显示信息 printf(n查询完成,按回车键继续);getchar();getchar();return;pri
21、ntf(n对不起,没有您需要信息!n );printf(是否重新查找?请键入y或n以回车键结束 );scanf(%s,hangbanhao);while(!strcmp(hangbanhao,y);/判定是否重新查找 void dingpiao()/定义订票业务函数int n;char a10=y;doprintf(请输入您要订机票数(以回车键结束): );scanf(%d,&n);/输入所订机票数if(n=n)/判定机票数是否大于等于订票数si.count=si.count-n;printf(订票成功! );break;else if(si.countn)/判定机票数是否小于订票数 prin
22、tf(对不起,你所选择航班只剩 %d张机票n, si.count);printf(是否需要重新输入机票数?请输入y或n以回车键结束: );/判定是否重新输入订票数scanf(%s,a);printf(是否需要订其它航班机票?请输入y或n以回车键结束: );scanf(%s,a);while(!strcmp(a,y);/判定是否继续订票void tuipiao()/定义退票函数int n;char a10;dosearch();/调用查询函数printf(请输入您要退机票数目: );scanf(%d,&n);/输入所退票数if(n=0)/判定票数是否有效printf(输入错误!最少需退1张机票。
23、 );else si.count=si.count+n;printf(退票成功! );printf(是否继续? 请键入y或n以回车键结束: );/判定是否继续退票scanf(%s,a);while(!strcmp(a,y);/判定并跳出循环 void paixu()/定义排序函数int n;printf(n* ); printf(1.按航班号从小到大排序n t2.按航班号从大到小排序n);printf(* ); printf(请在1-2中选择以回车键结束: );scanf(%d,&n);/输入排序方法switch(n)case 1:paixu1();/调用从小到大排序函数break;case
24、2:paixu2();/调用从大到小排序函数break;printf(排序后航班信息为:n);output();/显示排序后航班信息printf(n请按回车键返回上层菜单 ); getchar(); getchar();void paixu1()/定义从小到大排序函数int k,j;struct air t;for(i=0;im;i+)/选择法排序k=i;for(j=i+1;jsj.num)k=j;if(i!=k)t=sk;sk=si;si=t;void paixu2()/定义从大到小排序函数int k,j;struct air t;for(i=0;im;i+)k=i;for(j=i+1;jm;j+)if(sk.numsj.num)k=j;if(i!=k)t=sk;sk=si;si=t;附2 参考资料C程序设计 (第四版) 谭浩强 著 清华大学出版社