1、目 录课程设计评语2目 录3一课程论文题目4二程序设计思路4三详细设计5四程序代码12五程序运行结果19六编程中遇到的困难及解决方法、心得体会23七致谢23一、课程论文题目:飞机订票系统【要求】假定某名航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员定额。试设计一民航订票系统,能提供下列服务。(1) 航班信息录入功能(航班信息用文件保存)。(2) 航班信息浏览功能。(3) 查询航线:(至少一种查询方式)。 按航班号查询。 按起点站查询。 按终点站查询。 按飞行时间查询。二、程序设计思路【需求分析】航班信息用文件保存:航班信息浏览功能需要
2、提供显示操作:要查询航线需要提供查找功能,可提供按照航班号、起点站、终点站和飞行时间查询;另外要提供键盘式选择菜单以实现功能选择。 根据需求分析,可将这个系统的设计分为如下五个模块:输入航班信息,保存航班信息,浏览航班信息,查询航班信息,退出。飞机订票系统输入航班信息保存航班信息浏览航班信息查询航班信息退出三、详细设计1.结构体设计 建立航班结构体,结构体成员包括航班号、起点站、终点站和飞行时间(星期几),剩余机票数。struct air /定义结构体数组int num;/定义航班号char start20;/航班起始站char over20;/终点站char time10;/飞行时间int
3、count;/机票数量sN; /*sN中每个数组元素依次对应一个航班信息*/注意 sN中的N为航班个数,程序中采用宏定义的方式,可以随时在源程序宏定义中改。本程序宏定义#define N 1000.2.主函数显示一系列功能选项根据N的值调用各功能模块函数YES 输入N,判断N是否是0-3NO主要程序:void main()/主函数int j; chushihua();/系统初始化判断是否存在原始数据文件printf( -欢迎使用地大飞机订票系统-n);/打印出系统主界面do printf(= ); printf(1.增加航班信息nn 2.浏览航班信息nn 3.查找航班信息nn 0.退出nn);
4、printf(= ); printf(请在0-3中选择以回车键结束:nn);scanf(%d,&j);switch(j)case 1: add();/调用增加航班函数break;case 2:print();/调用显示模块break;case 3:search();/调用查找模块break;case 0:/退出系统break;while(j!=0); /判断是否调用其他函数 printf(谢谢使用,再见! ); 3.各功能模块设计(1)输入、保存航班信息模块(包括初始信息和后增加新信息)调用建立数据文件函数增加航班信息函数,输入初始航班信息;调用保存函数save()输出航班信息n(输入完毕)y
5、(继续输入)主要程序:void chushihua()/定义系统初始化函数int access(const char *filenpath, int mode); if(access(hangban.dat,0)build();elseread();void build()/定义建立数据文件函数FILE *fp;/定义文件指针if(fp=fopen(hangban.dat,wb)=NULL)/打开文件并判定是否出错 printf(创建文件失败! );/打印出错提示getchar();return;printf(请依次输入航班信息(以回车键结束):n); /打印提示信息printf(- n);f
6、or(i=0;iN;i+)printf(请输入航班号: ); scanf(%d,&si.num);/输入航班号printf(请输入起始站: );scanf(%s,si.start);/输入起始站printf(请输入终点站: );scanf(%s,si.over);/输入终点站printf(请输入时间(星期几): );scanf(%s,si.time);/输入时间printf(请输入机票数: );scanf(%d,&si.count);/输入机票数fwrite(&si,sizeof(struct air),1,fp);m+;printf(添加完毕,是否继续添加?请键入y或n以回车键结束:);sc
7、anf(%s,ii);if(strcmp(ii,y)!=0)/判断是否继续添加航班信息fclose(fp);/关闭文件return;void read()/定义读取文件函数FILE *fp;if(fp=fopen(hangban.dat,r)=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
8、,wb)=NULL) printf(创建文件失败! );getchar();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.start);/读取起始站printf(请输入终点站: );scanf(%s,
9、sm.over);/读取终点站printf(请输入时间: );scanf(%s,sm.time);/读取时间printf(请输入机票数: );scanf(%d,&sm.count);/读取机票数m+;printf(添加完毕,是否继续添加?请键入y或n以回车键结束:);scanf(%s,ii);while(!strcmp(ii,y);/判断是否继续添加void output()/定义输出格式函数printf(航班号tt起始站tt终点站tt时间tt机票数n);/信息标题 for(i=0;im;i+)printf(PRINT);/打印出信息void print()/定义显示航班信息函数printf(
10、n目前我们有如下航班:n);output();/调用输出格式函数printf(n请按回车键返回上层菜单 );getchar();getchar();(2)浏览航班信息模块打开文件,并判断是否出错输出出错提示从文件中读取信息关闭文件主要程序:void read()/定义读取文件函数FILE *fp;if(fp=fopen(hangban.dat,r)=NULL)printf(创建文件失败! );getchar();return;i=0;while(!feof(fp)fread(&si,sizeof(struct air),1,fp);/逐块读取数据i+;m+;/计算存在航班数m-;fclose(
11、fp);void output()/定义输出格式函数printf(航班号tt起始站tt终点站tt时间tt机票数n);/信息标题 for(i=0;im;i+)printf(PRINT);/打印出信息void print()/定义显示航班信息函数printf(n目前我们有如下航班:n);output();/调用输出格式函数printf(n请按回车键返回上层菜单 );getchar();getchar();(3)航线查询模块显示查询方式菜单选择查找方式显示查询结果输入要求信息是否继续查找退出NY主要程序:void search()/定义查询函数char name120;char name220;ch
12、ar ii10;char ctime10;int n,no;doprintf(请选择一种你想要查找的方式:nn);printf(1.根据航班号查找nn2.根据终点站查找nn3.根据起点站查找nn4.根据飞行时间查找nn0.返回nn);printf(请在0-4之间选择一个整数:nn);scanf(%d,&n);if(n=0)break;switch(n)case 1: printf(请输入航班号:n); scanf(%d,&no); break;case 2:printf(请输入终点站:n);scanf(%s,name2);break;case 3:printf(请输入起点站:n); scanf
13、(%s,name1);break;case 4:printf(请输入飞行时间:n);scanf(%s,ctime);break;read();for(i=0;im;i+)if(strcmp(si.start,name1)=0|strcmp(si.over,name2)=0)printf(n成功查到了航班信息!n);printf(航班号tt起点站tt终点站tt时间tt票数n);printf(PRINT); printf(n查询完毕,按回车键继续); getchar();getchar();return;if(si.num=no)printf(n成功查到了航班信息!n); printf(航班号tt
14、起点站tt终点站tt时间tt票数n); printf(PRINT); printf(n查询完毕,按回车键继续); getchar();getchar();return; if(strcmp(si.time,ctime)=0)printf(n成功查到了航班信息!n);printf(航班号tt起点站tt终点站tt时间tt票数n);printf(PRINT); printf(n查询完毕,按回车键继续);getchar();getchar();return; no=0;printf(n不能找到您所需要的信息!nn); printf(您还需要继续服务,请输入Y或者N,然后再按Enter返回上一级菜单 n
15、);scanf(%s,ii);while(strcmp(ii,Y)!=0);四、程序代码#include/标准输入、输出头文件#include/包含字符串函数处理头文件#include/包含access函数的头文件#define N 1000/定义最多的航班数#define PRINT %dtt%stt%stt星期%stt%dn,si.num,si.start,si.over,si.time,si.count /宏定义输出格式struct air /定义结构体数组int num;/定义航班号char start20;/航班起始站char over20;/终点站char time10;/飞行时间
16、int count;/机票数量sN;int i,m=0;/定义全局变量char ii10;void add();/函数声明增加航班信息函数void print(); /显示航班信息void search();/查找航班信息void read();/读取文件void save();/保存文件void chushihua();void build();void main()/主函数int j; chushihua();/系统初始化判断是否存在原始数据文件printf( -欢迎使用地大飞机订票系统-n);/打印出系统主界面do printf(= ); printf(1.增加航班信息nn 2.浏览航班
17、信息nn 3.查找航班信息nn 0.退出nn);printf(= ); printf(请在0-3中选择以回车键结束:nn);scanf(%d,&j);switch(j)case 1: add();/调用增加航班函数save();break;case 2:print();/调用显示模块break;case 3:search();/调用查找模块break;case 0:/退出系统break;while(j!=0); /判断是否调用其他函数 printf(谢谢使用,再见! ); void chushihua()/定义系统初始化函数int access(const char *filenpath, i
18、nt mode); if(access(hangban.dat,0)build();elseread();void build()/定义建立数据文件函数FILE *fp;/定义文件指针if(fp=fopen(hangban.dat,wb)=NULL)/打开文件并判定是否出错 printf(创建文件失败! );/打印出错提示getchar();return;printf(请依次输入航班信息(以回车键结束):n); /打印提示信息printf(- n);for(i=0;iN;i+)printf(请输入航班号: ); scanf(%d,&si.num);/输入航班号printf(请输入起始站: );
19、scanf(%s,si.start);/输入起始站printf(请输入终点站: );scanf(%s,si.over);/输入终点站printf(请输入时间(星期几): );scanf(%s,si.time);/输入时间printf(请输入机票数: );scanf(%d,&si.count);/输入机票数fwrite(&si,sizeof(struct air),1,fp);m+;printf(添加完毕,是否继续添加?请键入y或n以回车键结束:);scanf(%s,ii);if(strcmp(ii,y)!=0)/判断是否继续添加航班信息fclose(fp);/关闭文件return;void r
20、ead()/定义读取文件函数FILE *fp;if(fp=fopen(hangban.dat,r)=NULL)printf(创建文件失败! );getchar();return;i=0;m=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(创建文件失败! );getchar();return;for(i=0;im;i+)/逐块保存数据fw
21、rite(&si,sizeof(struct air),1,fp);fclose(fp);void add()/定义增加航班信息函数doprintf(请依次输入您要增加的航班信息(以回车键结束): n); /打印提示信息printf(- n);printf(请输入航班号: ); scanf(%d,&sm.num);/读取航班号printf(请输入起始站: );scanf(%s,sm.start);/读取起始站printf(请输入终点站: );scanf(%s,sm.over);/读取终点站printf(请输入时间: );scanf(%s,sm.time);/读取时间printf(请输入机票数:
22、 );scanf(%d,&sm.count);/读取机票数m+;printf(添加完毕,是否继续添加?请键入y或n以回车键结束:);scanf(%s,ii);while(!strcmp(ii,y);/判断是否继续添加void output()/定义输出格式函数printf(航班号tt起始站tt终点站tt时间tt机票数n);/信息标题 for(i=0;im;i+)printf(PRINT);/打印出信息void print()/定义显示航班信息函数printf(n目前我们有如下航班:n);output();/调用输出格式函数printf(n请按回车键返回上层菜单 );getchar();getc
23、har(); void search()/定义查询函数char name120;char name220;char ii10;char ctime10;int n,no; int find=0; /定义一个find,作为判定最后的结果选择输出doprintf(= );printf(请选择一种你想要查找的方式:nn);printf(1.根据航班号查找nn2.根据终点站查找nn3.根据起点站查找nn4.根据飞行时间查找nn0.返回nn);printf(请在0-4之间选择一个整数:nn);scanf(%d,&n);if(n=0)break;switch(n)case 1: printf(请输入航班号
24、:n); scanf(%d,&no); break;case 2:printf(请输入终点站:n);scanf(%s,name2);break;case 3:printf(请输入起点站:n); scanf(%s,name1);break;case 4:printf(请输入飞行时间:n);scanf(%s,ctime);break;/read();/此处不需调用read函数,因为数据已经被读到数组中了for(i=0;im;i+)if(strcmp(si.start,name1)=0|strcmp(si.over,name2)=0)find=1;printf(n成功查到了航班信息!n);print
25、f(航班号tt起点站tt终点站tt时间tt票数n);printf(PRINT);/printf(n查询完毕,按回车键继续);/getchar();/getchar();/return;if(si.num=no)find=1;printf(n成功查到了航班信息!n);printf(航班号tt起点站tt终点站tt时间tt票数n);printf(PRINT);/printf(n查询完毕,按回车键继续); /getchar();/getchar();/return; if(strcmp(si.time,ctime)=0)find=1;printf(n成功查到了航班信息!n);printf(航班号tt起
26、点站tt终点站tt时间tt票数n);printf(PRINT);/printf(n查询完毕,按回车键继续);/getchar(); /return;if(find) /用if语句选择输出结果 printf(n查询完毕,按回车键返回主菜单n);getchar();getchar();else/no=0;printf(n没能找到您所需要的信息!nn); printf(请按Enter返回主菜单 n); getchar(); getchar();return(0);while(strcmp(ii,Y)!=0);五、程序运行结果1.输入初始数据2. 增加航班信息3.浏览航班信息4.查找航班信息1).根据
27、航班号查找2).根据终点站查找3).根据起点站查找4).根据飞行时间查找 六、在试验中遇到的困难及心得体会我这次在C语言程序设计课程中,做的是“飞机订票系统”。充分应用了所学的C语言的知识,粗略设计出并成功的运行起该系统。这次实验其中,不乏一些简单的基础性的错误,如经常输入错误的字母,使程序无法运行,但通过这次专业性的练习,相信在以后会有所减少。而关键性问题经常出现在一些函数的使用上,由于对一些函数调用的正确使用不够熟悉,往往也会造成程序无法运行,出现错误。七、致谢这次的C语言程序设计课程中,遇到了很多问题和困难,在这里要特别感谢我的课程设计导师刘文中老师。每次在编程过程中遇到了不清楚的东西向老师请教,老师总会耐心细致的帮我分析程序,找出问题的所在,给了我很大的帮助。有了老师的指导,我才能在规定的时间内完成课程设计的要求。我还要感谢我的C语言导师朱丽老师,是老师一个学期来的悉心教导,让我初步具备了C语言编程的能力,为我以后的学习打下了坚实的基础。22