航班信息查询与检索系统.docx
- 文档编号:23700652
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:19
- 大小:56.67KB
航班信息查询与检索系统.docx
《航班信息查询与检索系统.docx》由会员分享,可在线阅读,更多相关《航班信息查询与检索系统.docx(19页珍藏版)》请在冰豆网上搜索。
航班信息查询与检索系统
课程设计报告
课程设计名称:
数据结构课程设计
题目:
设计并实现一个航班信息查询与检索系统
院系:
计算机学院
专业:
班级:
学号:
姓名:
指导教师:
学术诚信声明
本人声明:
所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。
与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名:
日期:
年月日
课程设计名称
数据结构课程设计
专业
学生姓名
班级
学号
题目名称
设计并实现一个航班信息查询与检索系统
起止日期
2016
年
12
月
18
日起至
2017
年
1
月
4
日止
课设内容和要求:
对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间
和到达时间等信息进行查询。
要求:
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;j<10-1&&!
f[j];j++);ext=f[j];
t=e[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;i<;i++)
{
while(p
p=[p].next;
q=[p].next;
if(p!
=i)
{
temp=[p];
[p]=[i];
[i]=temp;ext=p;
}
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
显示:
是否继续?
y/n:
录入:
y
显示:
航班号起点站 终点站 班期 起飞时间 到达时间 机型 票价
录入:
CZ3869重庆深圳085510357331010
显示:
是否继续?
y/n:
录入:
n
录入航班信息后,屏幕显示:
-------------------------------
*航班信息查询系统*
-------------------------------
*1.航班号*
*2.起点站*
*3.终点站*
*4.起飞时间*
*5.到达时间*
*0.退出*
-----------------------------
(0-5)号服务项目:
录入:
1
显示:
输入要查询的航班号(字母要大写):
录入:
CA1544
显示:
航班号 起点站 终点站班期 起飞时间 到达时间 机型 票价
CA1544合肥北京 1055 1240 733 960
录入:
2
显示:
输入要查询的航班起点站:
录入:
合肥
显示:
航班号 起点站 终点站班期 起飞时间 到达时间 机型 票价
显示:
CA1544合肥北京 1055 1240 733 960
录入:
2
显示:
输入要查询的航班起点站:
录入:
广州
显示:
附录
源程序:
#include<>
#include<>
#definemax100
#definekeylen7
typedefstruct
{
charstart[6];
charend[6];
charsche[10];
chartime1[5];
chartime2[5];
charmodel[4];
intprice;
}info;
typedefstruct
{
charkeys[keylen];
infoothers;
intnext;
}slnode;
typedefstruct
{
slnodesl[max];
intkeynum;
intlength;
}sllist;
typedefintarrtype_n[10];
typedefintarrtype_c[26];
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;
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;
for(j=0;!
f[j];j++);
sl[0].next=f[j];
t=e[j];
while(j<10-1)
{
for(j=j+1;j<10-1&&!
f[j];j++);
if(f[j])
{
sl[t].next=f[j];
t=e[j];
}
}
sl[t].next=0;
}
voiddistribute_c(slnode*sl,inti,arrtype_cf,arrtype_ce)
{
intj,p;
for(j=0;j<26;j++)
{
f[j]=e[j]=0;
}
for(p=sl[0].next;p;p=sl[p].next)
{
j=sl[p].keys[i]%65;
if(!
f[j])
f[j]=p;
else
sl[e[j]].next=p;
e[j]=p;
}
}
voidcollect_c(slnode*sl,inti,arrtype_cf,arrtype_ce)
{
intj,t;
for(j=0;!
f[j];j++);
sl[0].next=f[j];
t=e[j];
while(j<26-1)
{
for(j=j+1;j<26-1&&!
f[j];j++);
if(f[j])
{
sl[t].next=f[j];
t=e[j];
}
}
sl[t].next=0;
}
voidradixsort(sllist&l)
{
inti;
arrtype_nfn,en;
arrtype_cfc,ec;
for(i=0;i<;i++)
[i].next=i+1;
[].next=0;
for(i=;i>=2;i--)
{
distribute,i,fn,en);
collect,i,fn,en);
}
for(i=1;i>=0;i--)
{
distribute_c,i,fc,ec);
collect_c,i,fc,ec);
}
}
voidarrange(sllist&l)
{
intp,q,i;
slnodetemp;
p=[0].next;
for(i=1;i<;i++)
{
while(p
p=[p].next;
q=[p].next;
if(p!
=i)
{
temp=[p];
[p]=[i];
[i]=temp;
[i].next=p;
}
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;
}
voidseqsearch(sllistl,charkey[],inti)
{
intj,k,m=0;
printf("------------------------------------------------------------\n");
printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");
for(j=1;j<=;j++)
{
switch(i)
{
case2:
k=strcmp(key,[j].;break;
case3:
k=strcmp(key,[j].;break;
case4:
k=strcmp(key,[j].;break;
case5:
k=strcmp(key,[j].;break;
}
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)
printf("无此航班信息,可能是输入错误!
\n");
printf("-------------------------------------------------------\n");
}
voidsearchcon(sllistl)
{
charkey[keylen];
inti=1,k;
while(i>=1&&i<=5)
{
printf("----------------------\n");
printf("*航班信息查询系统*\n");
printf("----------------------\n");
printf("*1.航班号*\n");
printf("*2.起点站*\n");
printf("*3.终点站*\n");
printf("*4.起飞时间*\n");
printf("*5.到达时间*\n");
printf("*0.退出*\n");
printf("----------------------\n");
printf("(0-5)号服务项目:
");
scanf("%d",&i);
printf("\n");
switch(i)
{
case1:
printf("输入要查询的航班号(字母要大写):
");
scanf("%s",key);
k=binsearch(l,key);
printf("--------------------------------------------------------------\n");
if(k==0)
printf("无此航班信息,可能是输入错误!
\n");
else
{
printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");
printf("%-8s%-7s%-7s%-11s%-6s%-6s%-5s%4d\n",[k].keys,[k].,[k].,[k].,[k].,[k].,[k].,[k].;
}
printf("--------------------------------------------------------------\n");
break;
case2:
printf("输入要查询的航班起点站:
");
scanf("%s",key);
seqsearch(l,key,i);
break;
case3:
printf("输入要查询的航班终点站:
");
scanf("%s",key);
seqsearch(l,key,i);
break;
case4:
printf("输入要查询的航班起飞时间:
");
scanf("%s",key);
seqsearch(l,key,i);
break;
case5:
printf("输入要查询的航班到达时间:
");
scanf("%s",key);
seqsearch(l,key,i);
break;
case0:
printf("\n\n宝宝走了\n\n");
}
}
}
voidinputdata(sllist&l)
{
inti=++;
charyn='y';
while(yn=='y'||yn=='Y')
{
printf("信息录入^_^\n\n");
printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");
scanf("%s%s%s%s%s%s%s%d",[i].keys,[i].,[i].,[i].,[i].,[i].,[i].,&[i].;
++i;
getchar();
radixsort(l);
arrange(l);
printf("是否继续?
\ny/n:
");
scanf("%c",&yn);
}
=i-1;
}
voidmain()
{
sllistl;
=6;
=0;
inputdata(l);
searchcon(l);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航班信息 查询 检索系统
![提示](https://static.bdocx.com/images/bang_tan.gif)