飞机订票系统课程设计报告.docx
《飞机订票系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《飞机订票系统课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。
飞机订票系统课程设计报告
飞机订票系统课程设计报告
指导老师:
班级:
学生姓名:
学号:
完成日期:
计算机科学与技术系
飞机订票系统课程设计报告
一、系统分析。
1.1根据飞机订票系统的设计目的,设计内容和设计要求。
本团队对飞机订票系统这一基础管理系统的业务进行了细致的分析讨论。
最终我们决定将整个系统分成7个主要模块。
采用结构体这一数据结构来存放教师的信息。
首先是信息录入模块,接下来输出模块,即浏览,查询,排序信息三个模块,最后是订票,退票模块。
为降低操作难度,以及出错率,决定使用全局数组及变量进行操作。
1.2飞机订票系统简易图
二、系统设计
2.1总体设计(主要功能)
本程序包含六大主要模块①添加信息模块;②浏览信息模块;
③信息查询模块;④信息排序模块;⑤订票模块;⑥退票模块。
整体程序采用全局数组fj(飞机)进行存储,全局变量pd(判断)作为标识变量。
宏定义输出格式。
采用Y,N的方式进行操作回退或继续操作的选择。
航班信息包括:
航班号,起点,终点,票价,数量及订票标志量(隐藏信息)。
输入模块,使用分条输入,以减少错误率并方便操作。
浏览,查询及排序模块,组合成输出模块。
多方式输出更便于观察并方便记录,同时为后续模块的执行提供操作基础。
订,退票模块调用查询模块实现其功能。
2.2软件、硬件环境
软件环境VC2009
硬件环境处理器Intel(R)Core(TM)i5-3210MCPU@2.50GHz2.50GHz;显卡GTX650。
内存4.0GB
操作系统Windows7
2.3主要数据结构和程序的关系说明
主要数据结构是结构体
structhbxx//定义结构体数组,航班信息
{
inthbh;//定义航班号
charqd[20];//起点站
charzd[20];//终点站
floatpj;//票价
intsl;//机票数量
intdcp;//订票标志量
}fj[N];
2.4界面设计
本程序开始运行的界面,共7个选项,简洁而大方。
接下来是添加信息的界面。
采用分条添加,清晰而明朗。
浏览信息的界面,将所有航班信息显示在屏幕上。
查询航班信息界面,根据用户输入的航班号,显示其航班信息。
便于用户使用,查找。
航班排序界面,将所有航班根据航班号进行排序,可由用户选择是由大到小,还是由小到大。
订票界面,由用户输入需要订票的航班号,在进行订票操作。
退票界面。
2.5函数模块设计(函数功能说明和入口参数的说明)
voidxxtj();//信息添加的函数
voidxianshi();//显示航班信息
voidchazhao();//查找航班信息
voiddingpiao();//订票业务
voidtuipiao();//退票业务
voidduqu();//读取文件
voidbaocun();//保存文件
voidscgs();//输出格式函数
voidpaixu();//航班排序
voidchushihua();//系统初始化
voidjianli();//建立数据文件
voidpaixu1();//按航班号从小到大排
voidpaixu2();//从大到小
三、系统实现
主要代码
//飞机订票系统
//头文件
#include//标准输入,输出函数
#include//包含字符串处理的头文件
#include//包含access的头文件,用于系统初始化
#defineN9999//定义最大航班数
#definePRINT"%d\t\t%s\t\t%s\t\t%.2f\t\t%d\n",fj[i].hbh,fj[i].qd,fj[i].zd,fj[i].pj,fj[i].sl
//宏定义输出格式▲
structhbxx//定义结构体数组,航班信息
{
inthbh;//定义航班号
charqd[20];//起点站
charzd[20];//终点站
floatpj;//票价
intsl;//机票数量
intdcp;//订票标志量
}fj[N];
inti,m=0;//定义全局变量
charpd[10]="y";
//函数声明
voidxxtj();//信息添加的函数——芦杰
voidxianshi();//显示航班信息——祁海鹏
voidchazhao();//查找航班信息——祁海鹏
voiddingpiao();//订票业务——李平
voidtuipiao();//退票业务——李平
voidduqu();//读取文件——蔡晓宏
voidbaocun();//保存文件——蔡晓宏
voidscgs();//输出格式函数——祁海鹏
voidpaixu();//航班排序——李平
voidchushihua();//系统初始化——芦杰
voidjianli();//建立数据文件——芦杰
voidpaixu1();//按航班号从小到大排——蔡晓宏
voidpaixu2();//从大到小——蔡晓宏
//主函数
voidmain()//主函数———李平
{
intj;
chushihua();//系统初始化判断是否存在原始的数据文件
printf("欢迎使用飞机订票系统\n");//打印出系统主界面
do
{
printf("=============================================================================\n"
"\t\t\t1.添加航班信息。
\n"
"\t\t\t2.浏览航班信息。
\n"
"\t\t\t3.查询航班信息。
\n"
"\t\t\t4.航班信息排序。
\n"
"\t\t\t5.订票业务。
\n"
"\t\t\t6.退票业务。
\n"
"\t\t\t0.退出。
\n"
"===============================================================================\n");
printf("请在0-6中选择以回车键结束:
");
scanf("%d",&j);
switch(j)
{
case1:
xxtj();break;//调用信息添加函数
case2:
xianshi();break;//调用显示模块
case3:
chazhao();break;//调用查找模块
case4:
paixu();break;//调用排序函数
case5:
dingpiao();break;//调用订票模块
case6:
tuipiao();break;//调用退票模块
case0:
{baocun();
printf("谢谢使用,再见!
\n");}
break;
default:
printf("输入有误!
\n");break;
}
}while(j!
=0);//判断是否调用其他函数
}
voidchushihua()//定义系统初始化函数——卢杰
{
if(access("fjdpxt.dat",0))
{
jianli();
}
else
{
duqu();
}
}
voidjianli()//定义建立数据文件函数——卢杰
{
FILE*fp;
if((fp=fopen("fjdpxt.dat","wb"))==NULL)//打印文件判断是否出错
{
printf("创建文件失败!
");//打印出错提示
getchar();
return;
}
printf("请依次输出航班信息(以回车键结束):
\n");//打印提示信息
printf("-----------------------------------------------------------------------------\n");
for(i=0;i{
printf("请输入航班号:
");
scanf("%d",&fj[i].hbh);
printf("请输入起始站:
");
scanf("%s",fj[i].qd);
printf("请输入终点站:
");
scanf("%s",fj[i].zd);
printf("请输入票价:
");
scanf("%f",&fj[i].pj);
printf("请输入机票数:
");
scanf("%d",&fj[i].sl);
fwrite(&fj[i],sizeof(structhbxx),1,fp);
m++;
printf("添加完毕,是否继续添加?
请键入y或n以回车键结束:
");
scanf("%s",pd);
if(strcmp(pd,"y")!
=0)//判断是否继续添加航班信息
{
fclose(fp);//关闭文件
return;
}
}
}
voidduqu()//定义读取文件函数——蔡晓宏
{
FILE*fp;
if((fp=fopen("fjdpxt.dat","r"))==NULL)
{
printf("创建文件失败!
");
getchar();
return;
}
i=0;
while(!
feof(fp))//判断是否遇到文件结束,
fread(&fj[i],sizeof(structhbxx),1,fp);//逐块读取数据
i++;
m++;//计算存在的航班数
}
m--;
fclose(fp);
}
voidbaocun()//定义保存函数——蔡晓宏
{
FILE*fp;
if((fp=fopen("fjdpxt.dat","wb"))==NULL)
{
printf("创建文件失败!
");
getchar();
return;
}
for(i=0;ifwrite(&fj[i],sizeof(structhbxx),1,fp);
fclose(fp);
}
voidxxtj()//定义添加航班信息函数——卢杰
{
do
{
printf("请依次输入您要添加的航班信息(以回车键结束):
\n");//打印提示信息
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("请输入航班号:
");
scanf("%d",&fj[m].hbh);
printf("请输入起点站:
");
scanf("%s",fj[m].qd);
printf("请输入终点站:
");
scanf("%s",fj[m].zd);
printf("请输入票价:
");
scanf("%f",&fj[m].pj);
printf("请输入机票数:
");
scanf("%d",&fj[m].sl);
m++;
printf("添加完毕,是否继续添加?
请键入y或者n以回车键结束:
");
scanf("%s",pd);
}while(!
strcmp(pd,"y"));//判断是否继续添加
}
voidscgs()//定义输出格式——祁海鹏
{
printf("航班号\t\t起始站\t\t终点站\t\t价格\t\t机票数\n");//信息标题
for(i=0;iprintf(PRINT);//打印出信息
}
voidxianshi()//定义显示航班信息函数——祁海鹏
{
printf("\n目前我们有如下航班:
\n");
scgs();//调用输出格式函数
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
}
voidchazhao()//定义查询函数——祁海鹏
{
intn;
do
{
printf("\n请输入航班号:
");
scanf("%d",&n);//输入查询的航班号
for(i=0;i{
if(fj[i].hbh==n)//按航班号判定输出条件
{
printf("\n您所查找的航班信息为:
\n");
printf("航班号\t\t起始站\t\t终点站\t\t票价\t\t机票数\n\n");
printf(PRINT);//显示信息
strcpy(pd,"y");
printf("\n查询完毕,按回车键继续");
getchar();
getchar();
return;
}
}
printf("\n对不起,没有您需要的信息!
\n");
printf("是否重新查找?
请键入y或n以回车键结束:
");
scanf("%s",pd);
}while(!
strcmp(pd,"y"));//判断是否重新查找
}
voiddingpiao()//定义订票业务函数——李平
{
chara[10]="y";
do
{
chazhao();//调用查询模块
if(strcmp(pd,"y"))
{
printf("对不起!
没有找到您所需要的航班,所以不能订票。
\n");
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
strcpy(pd,"y");
break;
}
do
{
printf("请输入您要订的机票数(以回车结束):
");
scanf("%d",&fj[i].dcp);//输入所定机票数
if(fj[i].dcp<=0)//判断机票数是否出错
{
printf("输入错误!
至少需订1张机票。
\n");
}
elseif(fj[i].sl==0)//判断机票是否手售完
{
printf("对不起,你所选择的航班的机票已售完!
\n");
break;
}
elseif(fj[i].sl!
=0&&fj[i].sl>=fj[i].dcp)//判断机票数是否大于等于订票数
{
fj[i].sl=fj[i].sl-fj[i].dcp;
printf("订票成功!
");
break;
}
elseif(fj[i].sl{
printf("对不起,您所选择的航班只剩%d张机票\n",fj[i].sl);
printf("是否需要重新输入机票数?
请输入y或n以回车键结束:
");//判断是否重新输入订票数
scanf("%s",a);
}
}while(!
strcmp(a,"y"));
printf("是否需要订其他航班的机票?
请输入y或n以回车键结束:
");
scanf("%s",a);
}while(!
strcmp(a,"y"));//判断是否继续订票
}
voidtuipiao()//定义退票函数——李平
{
chara[10];
do
{
intn=0;
chazhao();//调用查找函数
if(strcmp(pd,"y"))
{
printf("对不起!
没有找到你所需要的航班,所以不能退票。
\n");
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
strcpy(pd,"n");
break;
}
printf("请输入您要退的机票数目:
");
scanf("%d",&n);//输入所退票数
if(n<=0)//判断票数是否有效
printf("输入错误!
至少需退1张机票。
\n");
elseif(n>=fj[i].dcp)
{
printf("输入错误,退票量大于售出量。
\n");
}
else
{
fj[i].sl=fj[i].sl+n;
printf("退票成功!
");
}
printf("是否继续?
请键入y或n以回车键结束:
");//判断是否继续退票
scanf("%s",a);
}while(!
strcmp(a,"y"));//判定并跳出循环
}
voidpaixu()//定义排序函数——李平
{
intn;
printf("\n**************************************************************\n");
printf("1.按航班号从小到大排序\n"
"2.按航班号从大到小排序\n");
printf("*****************************************************************");
printf("请在1-2中选择以回车键结束:
");
scanf("%d",&n);//输入排序方式
switch(n)
{
case1:
paixu1();break;//调用从小到大排序函数
case2:
paixu2();break;//调用从大到小排序函数
default:
printf("输入有误!
按默认输出。
\n");
}
printf("排序后的航班信息为:
\n");
scgs();//显示排序后的航班信息
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
}
voidpaixu1()//定义从小到大排序函数
{
intk,j;
structhbxxt;
for(i=0;j{
k=1;
for(j=1;j{if(fj[k].hbh>fj[j].hbh)
k=j;}
if(i!
=k)
{
t=fj[k];
fj[k]=fj[i];
fj[i]=t;
}
}
}
voidpaixu2()//定义从大到小排序函数
{
intk,j;
structhbxxt;
for(i=0;j{
k=1;
for(j=1;j{if(fj[k].hbhk=j;}
if(i!
=k)
{
t=fj[k];
fj[k]=fj[i];
fj[i]=t;
}
}
}
四、程序调试结果,测试过程中遇到的主要问题及采取的解决措施
拿到课题,我们感觉不知该从那一步开始,制定了好多方案,想使用链表实现系统功能,查询资料自学链表知识,但是总是一知半解无法实现功能。
然后我们决定使用指针,并且成功编完了程序,但是错误太多,经过修改仍无法完成调试。
讨论决定果断放弃,采用全局结构体数组。
这一决定,大幅度降低了编程的难度,我们完成了调试。
但是运行中总是执行中断。
查找资料,说可能是系统空间的问题,使用文件存储可以解决。
但是文件方面的知识掌握得很不扎实,只能一手拿书一手查资料,展开工作。
并且成功完成了调试运行,进行测试中发现有好多的BUG,比如订票系统首次使用会报错,退票系统可退比订票量还多得票等等。
我们一条一条修复。
最终完成程序。
五、总结
经过本次程序设计,暴露出本团对的很多问题,首先是知识掌握水平不一,作为组长因自身英语水平不高,果断决定所有变量及函数名采用拼音缩写。
然后是队员编出的程序无法完美兼容,显示出我们沟通的缺乏。
同时也表现出我们知识的欠缺,对于链表,指针及文件的使用,掌握的是在有限,仍需要不断学习,书本上的东西跟本无法完成一个程序。
每次报错我们需要根据错误修改,改不了的就上网查找原因。
还有好多好多的瑕疵。
但是不得不承认,经过本次课题设计,也表现出队员们的很多优点,思维缜密,查漏补缺,集体的力量是伟大,通过大家的讨论,总能得到一个好的解决方案。