飞机订票系统课程设计报告Word下载.docx
《飞机订票系统课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《飞机订票系统课程设计报告Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
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<
stdio.h>
//标准输入,输出函数
string.h>
//包含字符串处理的头文件
process.h>
//包含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//定义结构体数组,航班信息
inti,m=0;
//定义全局变量
charpd[10]="
y"
;
//函数声明
//信息添加的函数——芦杰
//显示航班信息——祁海鹏
//查找航班信息——祁海鹏
//订票业务——李平
//退票业务——李平
//读取文件——蔡晓宏
//保存文件——蔡晓宏
//输出格式函数——祁海鹏
//航班排序——李平
//系统初始化——芦杰
//建立数据文件——芦杰
//按航班号从小到大排——蔡晓宏
//从大到小——蔡晓宏
//主函数
voidmain()//主函数———李平
intj;
chushihua();
//系统初始化判断是否存在原始的数据文件
printf("
欢迎使用飞机订票系统\n"
);
//打印出系统主界面
do
{
printf("
=============================================================================\n"
"
\t\t\t1.添加航班信息。
\n"
\t\t\t2.浏览航班信息。
\t\t\t3.查询航班信息。
\t\t\t4.航班信息排序。
\t\t\t5.订票业务。
\t\t\t6.退票业务。
\t\t\t0.退出。
===============================================================================\n"
请在0-6中选择以回车键结束:
"
scanf("
%d"
&
j);
switch(j)
{
case1:
xxtj();
break;
//调用信息添加函数
case2:
xianshi();
//调用显示模块
case3:
chazhao();
//调用查找模块
case4:
paixu();
//调用排序函数
case5:
dingpiao();
//调用订票模块
case6:
tuipiao();
//调用退票模块
case0:
{baocun();
printf("
谢谢使用,再见!
}
break;
default:
printf("
输入有误!
}
}while(j!
=0);
//判断是否调用其他函数
voidchushihua()//定义系统初始化函数——卢杰
if(access("
fjdpxt.dat"
0))
jianli();
}
else
duqu();
voidjianli()//定义建立数据文件函数——卢杰
FILE*fp;
if((fp=fopen("
"
wb"
))==NULL)//打印文件判断是否出错
创建文件失败!
//打印出错提示
getchar();
return;
请依次输出航班信息(以回车键结束):
//打印提示信息
-----------------------------------------------------------------------------\n"
for(i=0;
i<
N;
i++)
请输入航班号:
fj[i].hbh);
请输入起始站:
%s"
fj[i].qd);
请输入终点站:
fj[i].zd);
请输入票价:
%f"
fj[i].pj);
请输入机票数:
fj[i].sl);
fwrite(&
fj[i],sizeof(structhbxx),1,fp);
m++;
添加完毕,是否继续添加?
请键入y或n以回车键结束:
pd);
if(strcmp(pd,"
)!
=0)//判断是否继续添加航班信息
fclose(fp);
//关闭文件
return;
voidduqu()//定义读取文件函数——蔡晓宏
r"
))==NULL)
i=0;
while(!
feof(fp))//判断是否遇到文件结束,
fread(&
//逐块读取数据
i++;
//计算存在的航班数
m--;
fclose(fp);
voidbaocun()//定义保存函数——蔡晓宏
m;
i++)//逐块保存数据
voidxxtj()//定义添加航班信息函数——卢杰
请依次输入您要添加的航班信息(以回车键结束):
//打印提示信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
请输入航班号:
fj[m].hbh);
请输入起点站:
fj[m].qd);
fj[m].zd);
fj[m].pj);
fj[m].sl);
请键入y或者n以回车键结束:
}while(!
strcmp(pd,"
));
//判断是否继续添加
voidscgs()//定义输出格式——祁海鹏
航班号\t\t起始站\t\t终点站\t\t价格\t\t机票数\n"
//信息标题
for(i=0;
printf(PRINT);
//打印出信息
voidxianshi()//定义显示航班信息函数——祁海鹏
\n目前我们有如下航班:
scgs();
//调用输出格式函数
\n请按回车键返回上层菜单"
getchar();
voidchazhao()//定义查询函数——祁海鹏
intn;
\n请输入航班号:
n);
//输入查询的航班号
if(fj[i].hbh==n)//按航班号判定输出条件
{
printf("
\n您所查找的航班信息为:
航班号\t\t起始站\t\t终点站\t\t票价\t\t机票数\n\n"
printf(PRINT);
//显示信息
strcpy(pd,"
\n查询完毕,按回车键继续"
getchar();
return;
}
\n对不起,没有您需要的信息!
是否重新查找?
//判断是否重新查找
voiddingpiao()//定义订票业务函数——李平
chara[10]="
chazhao();
//调用查询模块
))
printf("
对不起!
没有找到您所需要的航班,所以不能订票。
getchar();
strcpy(pd,"
break;
do
请输入您要订的机票数(以回车结束):
scanf("
fj[i].dcp);
//输入所定机票数
if(fj[i].dcp<
=0)//判断机票数是否出错
输入错误!
至少需订1张机票。
elseif(fj[i].sl==0)//判断机票是否手售完
对不起,你所选择的航班的机票已售完!
break;
elseif(fj[i].sl!
=0&
&
fj[i].sl>
=fj[i].dcp)//判断机票数是否大于等于订票数
fj[i].sl=fj[i].sl-fj[i].dcp;
订票成功!
elseif(fj[i].sl<
fj[i].dcp)//判断机票数是否小于订票数
对不起,您所选择的航班只剩%d张机票\n"
fj[i].sl);
是否需要重新输入机票数?
请输入y或n以回车键结束:
//判断是否重新输入订票数
scanf("
a);
}while(!
strcmp(a,"
是否需要订其他航班的机票?
请输入y或n以回车键结束:
//判断是否继续订票
voidtuipiao()//定义退票函数——李平
chara[10];
intn=0;
//调用查找函数
没有找到你所需要的航班,所以不能退票。
n"
请输入您要退的机票数目:
//输入所退票数
if(n<
=0)//判断票数是否有效
至少需退1张机票。
elseif(n>
=fj[i].dcp)
输入错误,退票量大于售出量。
else
fj[i].sl=fj[i].sl+n;
退票成功!
是否继续?
//判断是否继续退票
//判定并跳出循环
voidpaixu()//定义排序函数——李平
\n**************************************************************\n"
1.按航班号从小到大排序\n"
"
2.按航班号从大到小排序\n"
*****************************************************************"
请在1-2中选择以回车键结束:
scanf("
//输入排序方式
switch(n)
case1:
paixu1();
//调用从小到大排序函数
case2:
paixu2();
//调用从大到小排序函数
default:
按默认输出。
排序后的航班信息为:
//显示排序后的航班信息
voidpaixu1()//定义从小到大排序函数
intk,j;
structhbxxt;
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()//定义从大到小排序函数
{if(fj[k].hbh<
四、程序调试结果,测试过程中遇到的主要问题及采取的解决措施
拿到课题,我们感觉不知该从那一步开始,制定了好多方案,想使用链表实现系统功能,查询资料自学链表知识,但是总是一知半解无法实现功能。
然后我们决定使用指针,并且成功编完了程序,但是错误太多,经过修改仍无法完成调试。
讨论决定果断放弃,采用全局结构体数组。
这一决定,大幅度降低了编程的难度,我们完成了调试。
但是运行中总是执行中断。
查找资料,说可能是系统空间的问题,使用文件存储可以解决。
但是文件方面的知识掌握得很不扎实,只能一手拿书一手查资料,展开工作。
并且成功完成了调试运行,进行测试中发现有好多的BUG,比如订票系统首次使用会报错,退票系统可退比订票量还多得票等等。
我们一条一条修复。
最终完成程序。
五、总结
经过本次程序设计,暴露出本团对的很多问题,首先是知识掌握水平不一,作为组长因自身英语水平不高,果断决定所有变量及函数名采用拼音缩写。
然后是队员编出的程序无法完美兼容,显示出我们沟通的缺乏。
同时也表现出我们知识的欠缺,对于链表,指针及文件的使用,掌握的是在有限,仍需要不断学习,书本上的东西跟本无法完成一个程序。
每次报错我们需要根据错误修改,改不了的就上网查找原因。
还有好多好多的瑕疵。
但是不得不承认,经过本次课题设计,也表现出队员们的很多优点,思维缜密,查漏补缺,集体的力量是伟大,通过大家的讨论,总能得到一个好的解决方案。