C语言课程设计飞机订票系统说明书第二个人Word文件下载.docx
《C语言课程设计飞机订票系统说明书第二个人Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计飞机订票系统说明书第二个人Word文件下载.docx(22页珍藏版)》请在冰点文库上搜索。
![C语言课程设计飞机订票系统说明书第二个人Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/f8279c3b-e83d-40e9-8691-0d3f82dca058/f8279c3b-e83d-40e9-8691-0d3f82dca0581.gif)
structair//定义结构体数组
{
intnum;
//定义航班号
charstart[20];
//航班起始站
charover[20];
//航班终点站
chartime[10];
//飞行时间
intcount;
//机票数量
}s[N];
inti,m=0;
//定义全局变量,记录下航班信息的数量
charii[10];
//用来选择是否继续的变量
以上就是我的总体设计思路。
(三)
详细设计:
在本次的课程设计中我负责编制的是增加航班信息、显示航班信息、输出格式、查找航班信息、按航班号排序的函数的编写。
以下是我的负责部分的详细设计内容:
1)定义增加航班信息函数
第二次运行系统开始,由于在第一次运行时输入了一些航班信息,所以就直接进入系统的主界面了,如果还想增加航班信息的话就要用到这个add
函数。
在此函数中我依然是应用了for循环控制输入信息个数和do…while来控制循环、判断是否继续输入,m++记录航班数。
2)定义显示航班信息和输出格式函数
因为在这个不算小的系统中将多次运用到输出航班信息这项功能,所以就定义一个输出格式函数output()这样每次只要调用它就可以了;
而显示航班信息函数print()就是针对航班信息浏览功能设计的。
还运用到了宏定义的功能:
s[i].num,s[i].start,s[i].over,s[i].time,s[i].count
3)定义航班信息查找函数
运用if语句寻找是否存在用户输入的航班号相同的信息,有就将它输出,若不存在则提示用户,并提示用户是否重新搜索,用do…while控制循环。
4)定义排序函数
根据题目要求的排序功能,设计按航班号的从小到大或从大到小的排序函数。
排序运用到了教材一维数组那学习到的简单选择法进行排序。
并设计一个排序主界面供用户选择,分别定义一个函数进行从小到大和从大到小的排序。
5)定义主函数
主函数主要就是提供系统的主菜单界面供用户选择。
运行主函数时首先调用chushihua函数判定数据文件是否存在、是否要进行初始航班信息输入;
若已存在则进入主界面菜单供用户选择,运用swich语句对用户的不同选择来调用各功能的函数。
并用do…while语句循环实现能够让用户进行多次的选择。
(四)
调试与测试
调试过程中曾经遇到过一些问题,但是也不多,遇到过:
订票或退票的时候不能将剩余的票数加上和减去。
后来经过详细的检查与对照课本知识点找出了相应的错误点,经过修改加入票数加减语句,再经过与保存函数的配合后实现了题目要求的功能。
调试成功。
(五)核心源程序清单和执行结果:
a)源程序清单:
//终点站
//飞行时间
//机票数量
//定义全局变量
voidadd();
//函数声明增加航班信息函数
voidprint();
//显示航班信息
voidsearch();
//查找航班信息
voiddingpiao();
//订票业务
voidtuipiao();
//退票
voidread();
//读取文件
voidsave();
//保存文件
voidoutput();
//输出格式
voidpaixu();
//航班排序
voidchushihua();
//系统初始化
voidbuild();
//建立数据文件
voidpaixu1();
//按航班号从小到大排序
voidpaixu2();
//从大到小
voidmain()//主函数
intj;
chushihua();
//系统初始化判断是否存在原始数据文件
printf("
O(^_^)O欢迎使用天鑫飞机订票系统(*^__^*)\n"
);
//打印出系统主界面
do
{
================================================================================"
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"
请在0-6中选择以回车键结束:
scanf("
%d"
&
j);
switch(j)
case1:
add();
//调用增加航班函数
break;
case2:
print();
//调用显示模块
case3:
search();
//调用查找模块
case4:
paixu();
//调用排序函数
case5:
dingpiao();
//调用订票模块
case6:
tuipiao();
//调用退票模块
case0:
//退出系统
save();
printf("
谢谢使用,再见!
}
}while(j!
=0);
//判断是否调用其他函数
voidchushihua()//定义系统初始化函数
if(access("
hangban.dat"
0))
{
build();
else
read();
}
voidbuild()//定义建立数据文件函数
FILE*fp;
//定义文件指针
if((fp=fopen("
"
wb"
))==NULL)//打开文件并判定是否出错
printf("
创建文件失败!
//打印出错提示
getchar();
return;
请依次输入航班信息(以回车键结束):
\n"
//打印提示信息
--------------------------------------------------------------------------\n"
for(i=0;
i<
N;
i++)
请输入航班号:
scanf("
s[i].num);
//输入航班号
请输入起始站:
%s"
s[i].start);
//输入起始站
请输入终点站:
s[i].over);
//输入终点站
请输入时间(星期几):
s[i].time);
//输入时间
请输入机票数:
s[i].count);
//输入机票数
fwrite(&
s[i],sizeof(structair),1,fp);
m++;
添加完毕,是否继续添加?
请键入y或n以回车键结束:
"
ii);
if(strcmp(ii,"
y"
)!
=0)//判断是否继续添加航班信息
{
fclose(fp);
//关闭文件
return;
}
}
voidread()//定义读取文件函数
r"
))==NULL)
i=0;
while(!
feof(fp))
fread(&
//逐块读取数据
i++;
//计算存在航班数
m--;
fclose(fp);
voidsave()//定义保存函数
))==NULL)
m;
i++)//逐块保存数据
voidadd()//定义增加航班信息函数
do{
请依次输入您要增加的航班信息(以回车键结束):
\n"
printf("
scanf("
s[m].num);
//读取航班号
s[m].start);
//读取起始站
s[m].over);
//读取终点站
请输入时间:
s[m].time);
//读取时间
s[m].count);
//读取机票数
m++;
}while(!
strcmp(ii,"
));
//判断是否继续添加
voidoutput()//定义输出格式函数
航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n"
//信息标题
for(i=0;
printf(PRINT);
//打印出信息
voidprint()//定义显示航班信息函数
\n目前我们有如下航班:
output();
//调用输出格式函数
\n请按回车键返回上层菜单"
getchar();
voidsearch()//定义查询函数
intn;
\n请输入航班号:
n);
//输入查询的航班号
{
if(s[i].num==n)//按航班号判定输出条件
{
\n您所查找的航班信息为:
\n"
航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n\n"
printf(PRINT);
//显示信息
\n查询完毕,按回车键继续"
getchar();
return;
}
\n对不起,没有您需要的信息!
是否重新查找?
请键入y或n以回车键结束"
//判定是否重新查找
voiddingpiao()//定义订票业务函数
chara[10]="
;
search();
//调用查询模块
if(!
n"
))
对不起!
没有找到您所需要的航班,所以不能订票。
//未查找到所需航班
getchar();
strcpy(ii,"
do
请输入您要订的机票数(以回车键结束):
//输入所订机票数
if(n<
=0)//判定机票数是否出错
{
输入错误!
至少需订1张机票。
elseif(s[i].count==0)//判定机票是否售完
对不起,你所选择的航班的机票已售完!
break;
elseif(s[i].count!
=0&
&
s[i].count>
=n)//判定机票数是否大于等于订票数
s[i].count=s[i].count-n;
订票成功!
elseif(s[i].count<
n)//判定机票数是否小于订票数
对不起,你所选择的航班只剩%d张机票\n"
s[i].count);
是否需要重新输入机票数?
请输入y或n以回车键结束:
//判定是否重新输入订票数
scanf("
a);
}while(!
strcmp(a,"
是否需要订其他航班的机票?
//判定是否继续订票
voidtuipiao()//定义退票函数
chara[10];
//调用查询函数
没有找到您所需要的航班,所以不能退票。
请输入您要退的机票数目:
//输入所退票数
if(n<
=0)//判定票数是否有效
至少需退1张机票。
else
s[i].count=s[i].count+n;
退票成功!
}
是否继续?
请键入y或n以回车键结束:
//判定是否继续退票
//判定并跳出循环
voidpaixu()//定义排序函数
\n********************************************************************************"
1.按航班号从小到大排序\n"
\t2.按航班号从大到小排序\n"
********************************************************************************"
请在1-2中选择以回车键结束:
//输入排序方式
switch(n)
paixu1();
//调用从小到大排序函数
paixu2();
//调用从大到小排序函数
排序后的航班信息为:
//显示排序后航班信息
voidpaixu1()//定义从小到大排序函数
intk,j;
structairt;
i++)//选择法排序
k=i;
for(j=i+1;
j<
j++)
if(s[k].num>
s[j].num)
k=j;
if(i!
=k)
t=s[k];
s[k]=s[i];
s[i]=t;
voidpaixu2()//定义从大到小排序函数
if(s[k].num<
以上即为我们的源程序清单。
b)执行结果:
程序最终运行情况如所贴图表。
1)第一次运行程序(输入初始数据)
界面提示输入原始数据:
请输入航班号→请输入起始站→请输入终点站→请输入飞行时间→请输入机票数。
我按照提示一次输入了4个航班信息后按提示输入“n”则不再继续输入,系统显示出了主菜单界面。
接着按0退出程序,显示“谢谢使用,再见。
”
图表1—主菜单界面
2)第二次运行程序(进行航班信息的浏览)
运行程序就不再显示输入航班信息了,而是直接显示出了主菜单界面(如图表1)。
在提示中输入“2”→显示航班信息。
输出如下航班信息(如图表2),确实显示出输入的4个航班信息。
图表2—显示航班信息
3)查询航班信息
在主菜单界面输入3→请输入航班号→输入“1010”→显示出所查找的信息(如图表3)
图表3—查询航班信息
4)航班排序
在主菜单界面输入4→按照提示输入“2”(按航班号从大到小排序)→显示出排序后的航班信息(如图表4)
图表4—航班排序
5)订票业务
在主菜单输入5→提示输入航班号→输入1010→显示出该航班信息并提示输入订票数:
输入3→“订票成功”(如图表5)
图表5—订票业务1
票数不足情况(如图表6):
图表6—订票业务2
(六)仍存在的问题:
系统只是按照题目的要求做的,虽然是很好地完成了题目要求的所有模块,但是在整个编程过程中我们也曾尝试增加我们感兴趣的功能,但是失败了。
(七)心得体会:
通过这次课程设计,使我了解到自己对知识的掌握和综合运用情况,养成严谨的科学态度和良好的程序设计习惯,也使我认识到自己的知识缺陷