数据结构课程设计航班信息管理系统的设计与调试Word格式.docx
《数据结构课程设计航班信息管理系统的设计与调试Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计航班信息管理系统的设计与调试Word格式.docx(30页珍藏版)》请在冰点文库上搜索。
2050
2215
1380
HU1836
0940
1120
738
1250
CZ3528
成都
厦门
1,3,4,5,7
1510
1650
CRJ
1060
MU4594
昆明
西安
1,3,5,6
1015
1140
328
1160
SC7425
青岛
海口
1,3,6
1920
2120
DH4
1630
其中航班号一项的格式为:
CZ3869,其中CZ是航空公司的别称,用两个大写字母表示,后4位为航班编号,这种航班号关键字可分成两段,即字母和数字。
其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串型即可。
可增加订票管理模块。
一、需求分析
为达到题目的设计要求,选用文件读取方式来存储和读取航班信息。
因此可分为以下几个板块设计系统。
voidadd();
//函数声明增加航班信息函数
voidprint();
//显示航班信息
intsearch();
//查找航班信息
voiddingpiao();
//订票
voidtuipiao();
//退票
voidread();
//读取文件
voidsave();
//保存文件
voidoutput();
//输出格式
voidchushihua();
//系统初始化
voidbuild();
//建立数据文件
voidpaixu(intc);
//按航班号从小到大排序
二、环境说明
计算机品牌:
戴尔7520
计算机系统:
windows7
计算机硬件配置:
处理器Inteli7-3612QMCPU
内存8.00GB
系统类型64位操作系统
编译软件:
C-free5、VisualC++6.0
三、详细设计:
算法说明:
子函数add()声明增加航班信息函数
子函数print()显示航班信息
子函数search()功能为查找航班信息,使用二分查找法查找所需航班信息,使用关键字查找方法
子函数dingpiao实现订票功能
子函数tuipiao()实现退票功能
子函数read()可从文件中读取数据
子函数save()保存数据到文件中
子函数output()输出航班信息
子函数initialize()判断是否已有存储航班信息的文件
子函数build()如没有航班信息则新建立数据文件
子函数paixu()用选择排序法实现排序功能,按航班号从小到大排序
存储结构:
本设计在程序中将航班信息用结构数组进行存储,程序结束后使用文本文件进行信息的读入存储。
在下一次运行程序时可以再次读取该文件信息,并在程序中进行修改。
流程图:
没有文件信息
有文件信息
源代码及程序说明:
#include<
stdio.h>
string.h>
process.h>
//包含access函数的头文件
conio.h>
#defineN100//定义最多的航班数
#definePRINT"
%s\t\t%s%s星期%s\t\t%d\t\t%d\t\t%s\t\t%d\t\t%d\n"
s[i].num,s[i].start,s[i].over,s[i].time,s[i].takeoff,s[i].arrive,s[i].type,s[i].price,s[i].count
structair
{
charnum[20];
//航班号
charstart[20];
//起始站
charover[20];
//终点站
chartime[40];
//班期
inttakeoff;
//起飞时间
intarrive;
//到达时间
chartype[10];
//机型
intprice;
//机票价格
intcount;
//机票数量
}s[N];
inti,m=0,j;
//定义全局变量,m为航班数
charii[10];
//操作判断yes或no
//订票
//读取文件
//保存文件
voidinitialize();
//按航班号从小到大排序
intmain()
intj;
initialize();
//系统初始化判断是否存在原始数据文件
printf("
\n"
);
==============================\n"
==欢迎使用航班信息管理系统!
==\n"
do
{
====1.增加航班信息====\n"
"
====2.浏览航班信息====\n"
====3.查找航班信息====\n"
====4.订票业务====\n"
"
====5.退票业务====\n"
====0.退出====\n"
==============================\n"
请在0-6中选择以回车键结束:
scanf("
%d"
&
j);
switch(j)
{
case1:
add();
break;
case2:
print();
case3:
search();
case4:
dingpiao();
case5:
tuipiao();
case0:
save();
\n谢谢使用,再见!
"
}
}while(j!
=0);
//判断是否调用其他函数
return0;
}
voidinitialize()//定义系统初始化函数
if(access("
C:
\\hangban.txt"
0))//确定文件或文件夹的访问权限。
即检查某个文件的存取方式,比如//说是只读方式、只写方式等。
如果指定的存取方式有效,则函数返回0,否则函数返回-1。
build();
else
read();
}
voidbuild()//定义建立数据文件函数
FILE*fp;
if((fp=fopen("
"
wb"
))==NULL)//打开文件并判定是否出错
printf("
创建文件失败!
getchar();
return;
=======================\n"
请依次输入航班信息:
for(i=0;
i<
N;
i++)
请输入航班号:
scanf("
%s"
s[i].num);
请输入起始站:
s[i].start);
请输入终点站:
s[i].over);
请输入班期(星期几):
s[i].time);
请输入起飞时间:
s[i].takeoff);
请输入到达时间:
s[i].arrive);
请输入航班的机型:
s[i].type);
请输入航班机票价格:
s[i].price);
请输入机票数:
s[i].count);
fwrite(&
s[i],sizeof(structair),1,fp);
m++;
\n添加完毕,是否继续添加?
请键入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()//定义保存函数
w"
))==NULL)
m;
i++)//逐块保存数据
voidadd()//定义增加航班信息函数
do{
请依次输入您要增加的航班信息(以回车键结束):
\n"
==================\n"
s[m].num);
s[m].start);
s[m].over);
s[m].time);
s[m].takeoff);
s[m].arrive);
s[m].type);
s[m].price);
s[m].count);
m++;
请键入y或n以回车键结束:
}while(!
strcmp(ii,"
));
//判断是否继续添加
voidoutput()//定义输出格式函数
\n航班号\t\t起始站\t\t终点站\t\t班期\t\t起飞时间\t\t到达时间机型\t\t机票价格\t\t机票数\n"
for(i=0;
printf(PRINT);
voidprint()//定义显示航班信息函数
\n目前我们有如下航班:
output();
//调用输出格式函数
\n请按回车键返回上层菜单"
getchar();
intagain(intc)
intstart=0;
intend=m-1;
inttime;
charn[20];
switch(c)
\n请输入航班号:
n);
//输入查询的航班号
\n您所查找的航班信息为:
\n"
paixu(c);
//从小到大排序一次
while(start<
=end)
j=(start+end)/2;
if(strcmp(s[j].num,n)==0)//二分查找法
j=start;
while(j<
if(strcmp(s[j].num,n)==0)
printf("
\n航班号\t\t起始站\t\t终点站\t\t班期\t\t起飞时间\t\t到达时间机型\t\t机票价格\t\t机票数\n"
%s\t\t%s\t\t%s\t\t星期%s\t\t%d\t\t%d\t\t%s\t\t%d\t\t%d\n"
s[j].num,s[j].start,s[j].over,s[j].time,s[j].takeoff,s[j].arrive,s[j].type,s[j].price,s[j].count);
ii=='
n'
;
i=j;
j++;
break;
}
elseif(strcmp(n,s[j].num)<
0)
end=j-1;
elseif(strcmp(n,s[j].num)>
start=j+1;
if(start>
end)
对不起,没有您需要的信息!
break;
}
return0;
i=(start+end)/2;
if(strcmp(s[i].start,n)==0)//二分查找法
i=start;
while(i<
if(strcmp(s[i].start,n)==0)
printf(PRINT);
}i++;
elseif(strcmp(n,s[i].start)<
end=i-1;
elseif(strcmp(n,s[i].start)>
start=i+1;
i=(end+start)/2;
if(strcmp(s[i].over,n)==0)//二分查找法
if(strcmp(s[i].over,n)==0)
elseif(strcmp(n,s[i].over)<
elseif(strcmp(n,s[i].over)>
请输入起飞时间:
time);
if(s[i].takeoff==time)//二分查找法
if(s[i].takeoff==time)
elseif(s[i].takeoff>
time)
elseif(s[i].takeoff<
请输入到达时间:
if(s[i].arrive==time)//二分查找法
if(s[i].arrive==time)
elseif(s[i].arrive>
elseif(s[i].arrive<
intsearch()//定义查询函数
intc;
\n请选择查询方式:
====1.按航班号查询====\n"
====2.按起始站查询====\n"
====3.按终点站查询====\n"
====4.起飞时间====\n"
====5.到达时间====\n"
);
c);
again(c);
是否重新查找?
请键入y或n以回车键结束"
//判定是否重新查找
voiddingpiao()//定义订票业务函数
intn;
intc=1;
chara[10]="
n"
if(!
))
对不起!
没有找到您所需要的航班,所以不能订票。
//未查找到所需航班
getchar();
strcpy(ii,"
do
请输入您要订的机票数(以回车键结束):
scanf("
n);
//输入所订机票数
if(n<
=0)//判定机票数是否出错
{
printf("
输入错误!
至少需订1张机票。
}
elseif(s[i].count==0)