C语言课程设计报告--飞机订票系统.doc
《C语言课程设计报告--飞机订票系统.doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告--飞机订票系统.doc(21页珍藏版)》请在冰点文库上搜索。
C语言程序设计课程设计
题目:
飞机订票系统
院(系):
专业班级:
学号:
学生姓名:
指导教师:
教师职称:
起止时间:
课程设计(报告)任务及评语
学号
学生姓名
专业班级
程序设计(报告)题目
飞机订票系统
程序设计(报告)任务
程序设计的任务与要求:
(1)掌握C语言编程的基础知识。
(2)较熟练地编写C语言应用程序。
(3)了解C语言的常用标准函数、编程技巧、异常处理。
(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。
(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。
(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。
课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。
正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。
指导教师评语及成绩
成绩:
指导教师签字:
年月日
目录
第1章课程设计的目的与要求 1
1.1课程设计目的 1
1.2课程设计的实验环境 1
1.3课程设计的预备知识 1
1.4课程设计要求 1
第2章课程设计内容 2
2.1程序功能介绍 2
2.2程序整体设计说明 2
2.2.1设计思路 2
2.2.2数据结构设计及用法说明 3
2.2.3程序结构(流程图) 5
2.2.4各模块的功能及程序说明 5
2.2.5程序结果 6
2.3程序源代码及注释 7
第3章课程设计总结 17
参考资料 18
第1章课程设计的目的与要求
1.1课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:
1.巩固和加深学生对C语言课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言解决实际问题的能力
1.2课程设计的实验环境
硬件要求能运行Windows2000/XP操作系统的微机系统。
C语言程序设计及相应的开发环境。
1.3课程设计的预备知识
熟悉C语言及C语言开发工具。
1.4课程设计要求
1.分析课程设计题目的要求
2.写出详细设计说明
3.编写程序代码,调试程序使其能正确运行
4.设计完成的软件要便于操作和使用
5.设计完成后提交课程设计报告
第2章课程设计内容
2.1程序功能介绍
本程序首先输入机票信息,管理员在保存功能中通过密码验证输入机票信息,可以对机票信息进行查询;修改;删除等功能。
一般用户可以使用订票;显示;退票等功能,在订票时用户输入密码在退票时通过验证后成功退票。
假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。
设计一个飞机订票系统,使之能提供下列服务:
1、航班信息录入功能(航班信息用文件保存)
包括航班号、起始站、重点站、机票数等;
2、航班信息浏览功能
3、按航班号排序
4、查询航线:
按航班号查询
5、承办订票和退票业务(可选项)
2.2程序整体设计说明
编写一个飞机订票系统的程序,使该系统能够实现对航班信息的录入、浏览、排序、查询以及订票、退票的功能。
根据题目要求,首先要制作一个主菜单显示出各个操作的提示可供用户选择,进而一步步地深入操作。
根据主菜单的内容再进一步编制具体操作的函数,各个功能均用专门编制的函数来完成。
因为飞机订票系统含有各航班的各项信息,如航班号、航线、飞行时间、机票数目等必要信息,所以就决定用刚学不久的结构体数组来存放航班的各项信息,这就是看到题目后的最初的思路。
2.2.1设计思路
本次设计需要编制初始化、建立数据文件、数据文件保存、增加航班信息、订票、退票业务等内容。
首先需要设立一个初始化函数来得到航班信息。
具体设计是第一次运行程序时自动生成保存航班信息的文件,并输入初始航班信息,待第二次开始就可以直接读取该文件获得已有的航班信息并可直接使用。
运用了access函数判断文件是否存在。
系统初始化后,没有寻找到数据文件,则进行新建数据文件,此函数的作用就是进行新建文件数据的录入。
运用到了文件指针的定义FILE*fp,文件的打开fopen和关闭fclose、成块读写函数中的fwrite;运用for循环进行各组数据的输入,用m++记录下输入的航班数量,并运用if语句判断是否输入下一条航班信息,若不继续则返回主界面。
系统初始化之后,若原始数据文件存在,则进行文件内航班信息的读取,以供接下来程序中的各个函数来使用。
在该函数中同样运用到了文件指针FILE*fp、文件的打开fopen和关闭fclose、成块读写函数中的fread、文件结束检测函数feof同时配合while语句控制文件的读取;m++记录下读取到的航班数量等。
因为在飞机订票系统中涉及到飞机的订票和退票业务,还有按航班号的排序功能,所以我就定义了这个保存函数来保存下每次运行系统后对整个订票系统涉及到的资料的修改。
为了简便程序,我就准备将此函数放在整个系统得推出选项中,这样就只在每次退出系统的时候进行一次保存,将此次对文件修改的所有新信息都一次保存下来。
这样就实现了整个系统运行时进行一次读取,推出时一次保存的设计,大大简便了文件的调用和读取。
保存函数运用到的知识点与读取函数大致相同。
在这个函数中首先调用了search函数查找需要订票的航班。
运用if语句实现订票时的多种情况:
订票数输入不正确、飞机票数不足等情况。
订票成功时运用s[i].count=s[i].count-n;将已被订的机票数减去,以显示新的即时航班信息。
与订票函数相类似,只做稍稍修改就行退票成功是用s[i].count=s[i].count+n;将航班的剩余票数加上去以显示即时航班信息。
2.2.2数据结构设计及用法说明
数据结构设计:
因为飞机订票系统含有各航班的各项信息,如航班号、航线、飞行时间、机票数目等必要信息,所以就决定用刚学不久的结构体数组来存放航班的各项信息,根据题目要求定义如下结构体类型:
#include/﹡标准输入、输出头文件﹡/
#include/﹡包含字符串函数处理头文件﹡/
#include/﹡包含access函数的头文件﹡/
#defineN1000/﹡定义最多的航班数﹡/
#definePRINT"%d\t\t%s\t\t%s\t\t星期%s\t\t%d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count/﹡宏定义输出格式﹡/
structair/﹡定义结构体数组﹡/
{intnum;/﹡定义航班号﹡/
charstart[20];/﹡航班起始站﹡/
charover[20];/﹡终点站﹡/
chartime[10];/﹡飞行时间﹡/
intcount;}/﹡机票数量﹡/
s[N];
inti,m=0;/﹡定义全局变量,记录下航班信息的数量﹡/
chari[10];/*用来选择是否继续的变量*/
用法说明:
1、首先进入程序欢迎界面(对系统的说明,及程序分组名单)停留15s。
再由程序主界面(按数字1---5再回车)进入其他功能。
2、输入密码(第一次设置密码)机票信息管理,并选1进入机票信息录入,选2浏览航班信息。
选3进行查询航班记录。
定票时应查询所有的航班信息。
3、输入正确的航班号,并且输入正确的个人信息。
进入退票系统是否查询所有机票信息。
选择输入信息输入的方式并输入。
退票时的信息显示然后确定。
2.2.3程序结构(流程图)
建立新数据文件
开始
系统初始化
增加航班信息
航班信息浏览
查找航班信息
航班排序
订票业务
退票业务
退出并保存
从已有的数据文件读取
按航班号查找
由小到大或由大到小
2.2.4各模块的功能及程序说明
1、保存模块:
含有机票信息的管理,对机票信息输入,查询,修改,删除。
2、订票模块:
当有机票信息后可以订票,订票时输入航班号(进入时有可以查询所有机票信息)出现航班信息,确定订票后输入个人信息:
姓名,性别,证件号,联系电话,密码(退票时用)。
出现您的个人信息,确定后回车订票结束。
3、显示模块:
含全部;航班号;出发地;目的地等方式查询所有机票信息。
4、退票模块:
当输入姓名或证件号后会显示您定的航班信息,再要求输入密码,当密码正确时会显示您的个人信息,回车再是否确定退票。
5查询模块:
(输入管理密码)输入航班号,显示航班信息和所有乘客个人信息。
6排序模块:
当输入航班信息时,会自动的按航班号从大到小排序。
2.2.5程序结果
①第一次运行程序(输入初始数据)
图表1—主菜单界面
②第二次运行程序(进行航班信息的浏览)
图表2—显示航班信息
③查询航班信息
图表3—查询航班信息
④航班排序
图表4—航班排序
⑤订票业务
图表5—订票业务1
⑥票数不足情况
2.3程序源代码及注释
#include/﹡标准输入、输出头文件﹡/
#include/﹡包含字符串函数处理头文件﹡/
#include/﹡包含access函数的头文件﹡/
#defineN1000/﹡定义最多的航班数﹡/
#definePRINT"%d\t\t%s\t\t%s\t\t星期%s\t\t%d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count/﹡宏定义输出格式﹡/
structair/﹡定义结构体数组﹡/
{intnum;/﹡定义航班号﹡/
charstart[20];/﹡航班起始站﹡/
charover[20];/﹡终点站﹡/
chartime[10];/﹡飞行时间﹡/
intcount;}/﹡机票数量﹡/
s[N];
inti,m=0;/﹡定义全局变量﹡/
chari[10];
voidadd();/﹡函数声明增加航班信息函数﹡/
voidprint();/﹡显示航班信息﹡/
voidsearch();/﹡查找航班信息﹡/
voiddingpiao();/﹡订票业务﹡/
voidtuipiao();/﹡退票﹡/
voidread();/﹡读取文件﹡/
voidsave();/﹡保存文件﹡/
voidoutput();/﹡输出格式﹡/
voidpaixu();/﹡航班排序﹡/
voidchushihua();/﹡系统初始化﹡/
voidbuild();/﹡建立数据文件﹡/
voidpaixu1();/﹡按航班号从小到大排序﹡/
voidpaixu2();/﹡从大到小﹡/
voidmain()/﹡主函数﹡/
{intj;
chushihua();/﹡系统初始化判断是否存在原始数据文件﹡/
printf("O(^_^)O欢迎使用天鑫飞机订票系统(*^__^*)\n");/﹡打印出系统主界面﹡/
do
{printf("================================================================================");
printf("1.增加航班信息\n"
"\t2.浏览航班信息\n"
"\t\t3.查找航班信息(按航班号)\t\t╮(╯_╰)╭\n"
"\t\t\t4.航班排序(按航班号)\n"
"\t\t\t\t5.订票业务\n"
"\to(︶︿︶)o\t\t\t6.退票业务\n"
"\t\t\t\t\t\t0.退出\n");
printf("================================================================================");
printf("请在0-6中选择以回车键结束:
");
scanf("%d",&j);
switch(j)
{case1:
add();/﹡调用增加航班函数﹡/
break;
case2:
print();/﹡调用显示模块﹡/
break;
case3:
search();/﹡调用查找模块﹡/
break;
case4:
paixu();/﹡调用排序函数﹡/
break;
case5:
dingpiao();/﹡调用订票模块﹡/
break;
case6:
tuipiao();/﹡调用退票模块﹡/
break;
case0:
/﹡退出系统﹡/
save();
printf("谢谢使用,再见!
");
break;}}
while(j!
=0);}/﹡判断是否调用其他函数﹡/
voidchushihua()/﹡定义系统初始化函数﹡/
{if(access("hangban.dat",0))
{build();}
else
read();}
voidbuild()/﹡定义建立数据文件函数﹡/
{FILE*fp;/﹡定义文件指针﹡/
if((fp=fopen("hangban.dat","wb"))==NULL)/﹡打开文件并判定是否出错﹡/
{printf("创建文件失败!
");/﹡打印出错提示﹡/
getchar();
return;}
printf("请依次输入航班信息(以回车键结束):
\n");/﹡打印提示信息﹡/
printf("--------------------------------------------------------------------------\n");
for(i=0;i{printf("请输入航班号:
");
scanf("%d",&s[i].num);/﹡输入航班号﹡/
printf("请输入起始站:
");
scanf("%s",s[i].start);/﹡输入起始站﹡/
printf("请输入终点站:
");
scanf("%s",s[i].over);/﹡输入终点站﹡/
printf("请输入时间(星期几):
");
scanf("%s",s[i].time);/﹡输入时间﹡/
printf("请输入机票数:
");
scanf("%d",&s[i].count);/﹡输入机票数﹡/
fwrite(&s[i],sizeof(structair),1,fp);
m++;
printf("添加完毕,是否继续添加?
请键入y或n以回车键结束:
");
scanf("%s",ii);
if(strcmp(ii,"y")!
=0)/﹡判断是否继续添加航班信息﹡/
{fclose(fp);/﹡关闭文件﹡/
return;}}}
voidread()/﹡定义读取文件函数﹡/
{FILE*fp;
if((fp=fopen("hangban.dat","r"))==NULL)
{printf("创建文件失败!
");
getchar();
return;}
i=0;
while(!
feof(fp))
{fread(&s[i],sizeof(structair),1,fp);/﹡逐块读取数据﹡/
i++;
m++;}/﹡计算存在航班数﹡/
m--;
fclose(fp);}
voidsave()/﹡定义保存函数﹡/
{FILE*fp;
if((fp=fopen("hangban.dat","wb"))==NULL)
{printf("创建文件失败!
");
getchar();
return;}
for(i=0;ifwrite(&s[i],sizeof(structair),1,fp);
fclose(fp);}
voidadd()/﹡定义增加航班信息函数﹡/
{do
{printf("请依次输入您要增加的航班信息(以回车键结束):
\n");/﹡打印提示信息﹡/
printf("--------------------------------------------------------------------------\n");
printf("请输入航班号:
");
scanf("%d",&s[m].num);/﹡读取航班号﹡/
printf("请输入起始站:
");
scanf("%s",s[m].start);/﹡读取起始站﹡/
printf("请输入终点站:
");
scanf("%s",s[m].over);/﹡读取终点站﹡/
printf("请输入时间:
");
scanf("%s",s[m].time);/﹡读取时间﹡/
printf("请输入机票数:
");
scanf("%d",&s[m].count);/﹡读取机票数﹡/
m++;
printf("添加完毕,是否继续添加?
请键入y或n以回车键结束:
");
scanf("%s",ii);}
while(!
strcmp(ii,"y"));}/﹡判断是否继续添加﹡/
voidoutput()/﹡定义输出格式函数﹡/
{printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n");/﹡信息标题﹡/
for(i=0;iprintf(PRINT);}/﹡打印出信息﹡/
voidprint()/﹡定义显示航班信息函数﹡/
{printf("\n目前我们有如下航班:
\n");
output();/﹡调用输出格式函数﹡/
printf("\n请按回车键返回上层菜单");
getchar();
getchar();}
voidsearch()/﹡定义查询函数﹡/
{intn;
do
{printf("\n请输入航班号:
");
scanf("%d",&n);/﹡输入查询的航班号﹡/
for(i=0;i{if(s[i].num==n)/﹡按航班号判定输出条件﹡/
{printf("\n您所查找的航班信息为:
\n");
printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n\n");
printf(PRINT);/﹡显示信息﹡/
printf("\n查询完毕,按回车键继续");
getchar();
getchar();
return;}}
printf("\n对不起,没有您需要的信息!
\n");
printf("是否重新查找?
请键入y或n以回车键结束");
scanf("%s",ii);}
while(!
strcmp(ii,"y"));}/﹡判定是否重新查找﹡/
voiddingpiao()/﹡定义订票业务函数﹡/
{intn;
chara[10]="y";
do
{search();/﹡调用查询模块﹡/
if(!
strcmp(ii,"n"))
{printf("对不起!
没有找到您所需要的航班,所以不能订票。
\n");/﹡未查找到所需航班﹡/
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
strcpy(ii,"n");
break;}
do
{printf("请输入您要订的机票数(以回车键结束):
");
scanf("%d",&n);/﹡输入所订机票数﹡/
if(n<=0)/﹡判定机票数是否出错﹡/
{printf("输入错误!
至少需订1张机票。
\n");}
elseif(s[i].count==0)//判定机票是否售完
{printf("对不起,你所选择的航班的机票已售完!
\n");
break;}
elseif(s[i].count!
=0&&s[i].count>=n)/﹡判定机票数是否大于等于订票数﹡/
{s[i].count=s[i].cou