航班信息查询与检索系统Word文档下载推荐.docx
《航班信息查询与检索系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《航班信息查询与检索系统Word文档下载推荐.docx(22页珍藏版)》请在冰点文库上搜索。
![航班信息查询与检索系统Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/9b2e9887-4a96-4a5b-920a-6b869a56dd25/9b2e9887-4a96-4a5b-920a-6b869a56dd251.gif)
课设内容和要求:
对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间
和到达时间等信息进行查询。
要求:
1.设计数据结构
2.选择合适的排序和查找算法
3.设计软件的功能结构
4.采用模块化编程
5.给出现实方法和算法
6.按课程设计规范撰写课程设计报告
参考资料:
[1]严蔚敏、陈文博,数据结构及应用算法教程[M].北京:
清华大学出版社,
[2]张小莉、王苗、罗文劼,数据结构与算法[M].北京:
机械工业出版社,
教研室审核意见:
教研室主任签字:
指导教师(签名)
日
学生(签名)
课程设计总结:
本设计的重点和难点是在于对航班数据的排序和查找,以链式基数排序为主线,用到了二分查找和顺序查找等知识,还有建立静态链表等。
通过这次课程设计,使我对C语言编程有了新的认识。
以前编程只是注重如何编写函数能够完成所需要的功能,只是凭单纯的意识和简单的语句来堆砌出一段程序。
但现在编程感觉完全不同了。
在编写一个程序之前,自己能够综合考虑各种因素,选取自己需要的数据结构,在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当前状况的算法。
这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的原图了。
这样无形中就提高了自己编写的程序的质量。
另外,我还体会到深刻理解数据结构的重要性。
只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。
了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。
1、题目介绍
设计一个航班信息查询与检索系统。
可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
2、课程设计要求
1、每个航班记录包括八项:
航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。
如下表所示:
航班号
起点站
终点站
班期
起飞时间
到达时间
机型
票价
CA1544
合肥
北京
上海
广州
每日
1420
1615
M90
1280
CZ3869
重庆
深圳
、对航班信息进行排序与查找。
3、概要设计
、设计思路
根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一个储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。
在查询设计中,使用折半查找法对排好序的航班号数据实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
、流程图
数据输入、排序
接受查找条件、查找关键字
定义数据类型
显示输出
4、算法实现
.定义数据类型
根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:
typedefstruct{
charstart[6];
函数描述
voiddistribute(slnode*sl,inti,arrtype_nf,arrtype_ne)
{
intj,p;
for(j=0;
j<
10;
j++)
f[j]=e[j]=0;
}
for(p=sl[0].next;
p;
p=sl[p].next)
j=sl[p].keys[i]%48;
ext=p;
e[j]=p;
ext=f[j];
t=e[j];
while(j<
10-1)
for(j=j+1;
10-1&
&
!
f[j];
j++);
}ext=0;
链式基数排序算法
voidradixsort(sllist&
l)
inti;
arrtype_nfn,en;
arrtype_cfc,ec;
for(i=0;
i<
;
i++)
[i].next=i+1;
[].next=0;
ext;
for(i=1;
while(p<
i)
p=[p].next;
q=[p].next;
if(p!
=i)
temp=[p];
[p]=[i];
[i]=temp;
p=q;
折半查找函数定义
intbinsearch(sllistl,charkey[])
intlow,high,mid;
low=1;
high=;
while(low<
=high)
mid=(low+high)/2;
if(strcmp(key,[mid].keys)==0)
returnmid;
elseif(strcmp(key,[mid].keys)<
0)
high=mid-1;
else
low=mid+1;
return0;
5、测试数据
编译后运行,显示:
录入信息^_^
航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价
录入:
CA1544合肥北京 1055 1240 733 960
显示:
是否继续y/n:
y
航班号起点站终点站班期 起飞时间 到达时间 机型 票价
MU5341 上海广州每日 1420 1615 M90 1280
航班号起点站 终点站 班期 起飞时间 到达时间 机型 票价
CZ3869重庆深圳085510357331010
n
录入航班信息后,屏幕显示:
-------------------------------
*航班信息查询系统*
*1.航班号*
*2.起点站*
*3.终点站*
*4.起飞时间*
*5.到达时间*
*0.退出*
-----------------------------
(0-5)号服务项目:
输入要查询的航班号(字母要大写):
航班号 起点站 终点站班期 起飞时间 到达时间 机型 票价
CA1544合肥北京 1055 1240 733 960
2
输入要查询的航班起点站:
附录
源程序:
#include<
>
#definemax100
#definekeylen7
typedefstruct
charstart[6];
charend[6];
charsche[10];
chartime1[5];
chartime2[5];
charmodel[4];
intprice;
}info;
typedefstruct
charkeys[keylen];
infoothers;
intnext;
}slnode;
slnodesl[max];
intkeynum;
intlength;
}sllist;
typedefintarrtype_n[10];
typedefintarrtype_c[26];
voiddistribute(slnode*sl,inti,arrtype_nf,arrtype_ne)
intj,p;
for(j=0;
{
f[j]=e[j]=0;
}
for(p=sl[0].next;
j=sl[p].keys[i]%48;
if(!
f[j])
f[j]=p;
else
sl[e[j]].next=p;
e[j]=p;
voidcollect(slnode*sl,inti,arrtype_nf,arrtype_ne)
intj,t;
sl[0].next=f[j];
t=e[j];
while(j<
for(j=j+1;
if(f[j])
{
sl[t].next=f[j];
t=e[j];
}
sl[t].next=0;
voiddistribute_c(slnode*sl,inti,arrtype_cf,arrtype_ce)
26;
j=sl[p].keys[i]%65;
else
voidcollect_c(slnode*sl,inti,arrtype_cf,arrtype_ce)
26-1)
26-1&
voidradixsort(sllist&
inti;
arrtype_nfn,en;
arrtype_cfc,ec;
for(i=0;
[i].next=i+1;
[].next=0;
for(i=;
i>
=2;
i--)
distribute,i,fn,en);
collect,i,fn,en);
for(i=1;
=0;
distribute_c,i,fc,ec);
collect_c,i,fc,ec);
voidarrange(sllist&
l)
intp,q,i;
slnodetemp;
p=[0].next;
while(p<
p=[p].next;
q=[p].next;
if(p!
{
temp=[p];
[p]=[i];
[i]=temp;
[i].next=p;
p=q;
intlow,high,mid;
low=1;
high=;
while(low<
mid=(low+high)/2;
if(strcmp(key,[mid].keys)==0)
returnmid;
elseif(strcmp(key,[mid].keys)<
high=mid-1;
low=mid+1;
return0;
voidseqsearch(sllistl,charkey[],inti)
intj,k,m=0;
printf("
------------------------------------------------------------\n"
);
航班号起点站终点站班期起飞时间到达时间机型票价\n"
for(j=1;
=;
switch(i)
case2:
k=strcmp(key,[j].;
break;
case3:
case4:
case5:
}
if(k==0)
m=1;
printf("
%-8s%-7s%-7s%-11s%-6s%-6s%5s%4d\n"
[j].keys,[j].,[j].,[j].,[j].,[j].,[j].,[j].;
if(m==0)
无此航班信息,可能是输入错误!
\n"
-------------------------------------------------------\n"
voidsearchcon(sllistl)
charkey[keylen];
inti=1,k;
while(i>
=1&
=5)
printf("
----------------------\n"
*航班信息查询系统*\n"
*1.航班号*\n"
*2.起点站*\n"
*3.终点站*\n"
*4.起飞时间*\n"
*5.到达时间*\n"
*0.退出*\n"
----------------------\n"
(0-5)号服务项目:
"
scanf("
%d"
&
i);
\n"
case1:
printf("
scanf("
%s"
key);
k=binsearch(l,key);
printf("
--------------------------------------------------------------\n"
if(k==0)
printf("
else
{
printf("
%-8s%-7s%-7s%-11s%-6s%-6s%-5s%4d\n"
[k].keys,[k].,[k].,[k].,[k].,[k].,[k].,[k].;
}
break;
case2:
scanf("
seqsearch(l,key,i);
break;
case3:
输入要查询的航班终点站:
case4:
输入要查询的航班起飞时间:
case5:
输入要查询的航班到达时间:
case0:
\n\n宝宝走了\n\n"
voidinputdata(sllist&
inti=++;
charyn='
y'
while(yn=='
||yn=='
Y'
)
信息录入^_^\n\n"
航班号起点站终点站班期起飞时间到达时间机型票价\n"
%s%s%s%s%s%s%s%d"
[i].keys,[i].,[i].,[i].,[i].,[i].,[i].,&
[i].;
++i;
getchar();
radixsort(l);
arrange(l);
是否继续\ny/n:
%c"
yn);
=i-1;
voidmain()
sllistl;
=6;
=0;
inputdata(l);
searchcon(l);