数据结构课程设计航班信息管理系统的设计与调试.docx
- 文档编号:12269581
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:30
- 大小:406.79KB
数据结构课程设计航班信息管理系统的设计与调试.docx
《数据结构课程设计航班信息管理系统的设计与调试.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计航班信息管理系统的设计与调试.docx(30页珍藏版)》请在冰豆网上搜索。
数据结构课程设计航班信息管理系统的设计与调试
《数据结构》课程设计实验报告
二、应用题
航班信息的查询与检索
该设计要求对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
对于本设计,先按关键字对航班记录进行排序,然后利用二分查找法对排好序的航班记录按关键字实现快速查找,注意,满足条件的记录可能有多条。
每个航班记录包括八项,分别是:
航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,假设航班信息表(8条记录)如下表8-1所示。
航班号
起点站
终点站
班期
起飞时间
到达时间
机型
票价
CA1544
合肥
北京
1,2,4,5
1055
1240
733
960
MU5341
上海
广州
每日
1420
1615
M90
1280
CZ3869
重庆
深圳
2,4,6
0855
1035
733
1010
MU3682
桂林
南京
2,3,4,6,7
2050
2215
M90
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
#include
#include
#include
#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
voidadd();//函数声明增加航班信息函数
voidprint();//显示航班信息
intsearch();//查找航班信息
voiddingpiao();//订票
voidtuipiao();//退票
voidread();//读取文件
voidsave();//保存文件
voidoutput();//输出格式
voidinitialize();//系统初始化
voidbuild();//建立数据文件
voidpaixu(intc);//按航班号从小到大排序
intmain()
{
intj;
initialize();//系统初始化判断是否存在原始数据文件
printf("\n");
printf("==============================\n");
printf("==欢迎使用航班信息管理系统!
==\n");
printf("==============================\n");
do
{
printf("====1.增加航班信息====\n"
"====2.浏览航班信息====\n"
"====3.查找航班信息====\n"
"====4.订票业务====\n"
"====5.退票业务====\n"
"====0.退出====\n");
printf("==============================\n");
printf("请在0-6中选择以回车键结束:
");
scanf("%d",&j);
switch(j)
{
case1:
add();
break;
case2:
print();
break;
case3:
search();
break;
case4:
dingpiao();
break;
case5:
tuipiao();
break;
case0:
save();
printf("\n谢谢使用,再见!
");
break;
}
}while(j!
=0);//判断是否调用其他函数
return0;
}
voidinitialize()//定义系统初始化函数
{
if(access("C:
\\hangban.txt",0))//确定文件或文件夹的访问权限。
即检查某个文件的存取方式,比如//说是只读方式、只写方式等。
如果指定的存取方式有效,则函数返回0,否则函数返回-1。
{
build();
}
else
read();
}
voidbuild()//定义建立数据文件函数
{
FILE*fp;
if((fp=fopen("C:
\\hangban.txt","wb"))==NULL)//打开文件并判定是否出错
{
printf("创建文件失败!
");
getchar();
return;
}
printf("=======================\n");
printf("请依次输入航班信息:
\n");
printf("=======================\n");
for(i=0;i { printf("请输入航班号: "); scanf("%s",&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].takeoff); printf("请输入到达时间: "); scanf("%d",&s[i].arrive); printf("请输入航班的机型: "); scanf("%s",s[i].type); printf("请输入航班机票价格: "); scanf("%d",&s[i].price); printf("请输入机票数: "); scanf("%d",&s[i].count); fwrite(&s[i],sizeof(structair),1,fp); m++; printf("\n添加完毕,是否继续添加? 请键入y或n以回车键结束: "); scanf("%s",ii); printf("\n"); if(strcmp(ii,"y")! =0)//判断是否继续添加航班信息 { fclose(fp);//关闭文件 return; } } } voidread()//定义读取文件函数 { FILE*fp; if((fp=fopen("C: \\hangban.txt","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("C: \\hangban.txt","w"))==NULL) { printf("创建文件失败! "); getchar(); return; } for(i=0;i fwrite(&s[i],sizeof(structair),1,fp); fclose(fp); } voidadd()//定义增加航班信息函数 { do{ printf("请依次输入您要增加的航班信息(以回车键结束): \n"); printf("==================\n"); printf("请输入航班号: "); scanf("%s",&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].takeoff); printf("请输入到达时间: "); scanf("%d",&s[m].arrive); printf("请输入航班的机型: "); scanf("%s",s[m].type); printf("请输入航班机票价格: "); scanf("%d",&s[m].price); printf("请输入机票数: "); scanf("%d",&s[m].count); m++; printf("\n添加完毕,是否继续添加? 请键入y或n以回车键结束: "); scanf("%s",ii); }while(! strcmp(ii,"y"));//判断是否继续添加 } voidoutput()//定义输出格式函数 { printf("\n航班号\t\t起始站\t\t终点站\t\t班期\t\t起飞时间\t\t到达时间机型\t\t机票价格\t\t机票数\n"); for(i=0;i printf(PRINT); } voidprint()//定义显示航班信息函数 { printf("\n目前我们有如下航班: \n"); output();//调用输出格式函数 printf("\n请按回车键返回上层菜单"); getchar(); getchar(); } intagain(intc) { intstart=0; intend=m-1; inttime; charn[20]; switch(c) { case1: printf("\n请输入航班号: "); scanf("%s",n);//输入查询的航班号 printf("\n您所查找的航班信息为: \n"); paixu(c);//从小到大排序一次 while(start<=end) { j=(start+end)/2; if(strcmp(s[j].num,n)==0)//二分查找法 { j=start; while(j<=end) { if(strcmp(s[j].num,n)==0) { printf("\n航班号\t\t起始站\t\t终点站\t\t班期\t\t起飞时间\t\t到达时间机型\t\t机票价格\t\t机票数\n"); printf("%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)>0) start=j+1; if(start>end) { printf("对不起,没有您需要的信息! "); break; } } return0; case2: printf("请输入起始站: "); scanf("%s",n); printf("\n您所查找的航班信息为: \n"); paixu(c);//从小到大排序一次 while(start<=end) { i=(start+end)/2; if(strcmp(s[i].start,n)==0)//二分查找法 { i=start; while(i<=end) { if(strcmp(s[i].start,n)==0) { printf("\n航班号\t\t起始站\t\t终点站\t\t班期\t\t起飞时间\t\t到达时间机型\t\t机票价格\t\t机票数\n"); printf(PRINT); }i++; } break; } elseif(strcmp(n,s[i].start)<0) end=i-1; elseif(strcmp(n,s[i].start)>0) start=i+1; if(start>end) { printf("对不起,没有您需要的信息! "); break; } } return0; case3: printf("请输入终点站: "); scanf("%s",n); printf("\n您所查找的航班信息为: \n"); paixu(c);//从小到大排序一次 while(start<=end) { i=(end+start)/2; if(strcmp(s[i].over,n)==0)//二分查找法 { i=start; while(i<=end) { if(strcmp(s[i].over,n)==0) { printf("\n航班号\t\t起始站\t\t终点站\t\t班期\t\t起飞时间\t\t到达时间机型\t\t机票价格\t\t机票数\n"); printf(PRINT); }i++; } break; } elseif(strcmp(n,s[i].over)<0) end=i-1; elseif(strcmp(n,s[i].over)>0) start=i+1; if(start>end) { printf("对不起,没有您需要的信息! "); break; } } return0; case4: printf("请输入起飞时间: "); scanf("%d",&time); printf("\n您所查找的航班信息为: \n"); paixu(c);//从小到大排序一次 while(start<=end) { i=(end+start)/2; if(s[i].takeoff==time)//二分查找法 { i=start; while(i<=end) { if(s[i].takeoff==time) { printf("\n航班号\t\t起始站\t\t终点站\t\t班期\t\t起飞时间\t\t到达时间机型\t\t机票价格\t\t机票数\n"); printf(PRINT); }i++; } break; } elseif(s[i].takeoff>time) end=i-1; elseif(s[i].takeoff
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 航班信息 管理 系统 设计 调试