航班信息查询与检索系统课程设计报告Word文档下载推荐.docx
- 文档编号:16183906
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:28
- 大小:335.19KB
航班信息查询与检索系统课程设计报告Word文档下载推荐.docx
《航班信息查询与检索系统课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《航班信息查询与检索系统课程设计报告Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
5.给出现实方法和算法
6.按课程设计规范撰写课程设计报告
参考资料:
[1]严蔚敏、陈文博,数据结构及应用算法教程[M].北京:
清华大学出版社,2011.5
[2]张小莉、王苗、罗文劼,数据结构与算法[M].北京:
机械工业出版社,2014.4
教研室审核意见:
教研室主任签字:
指导教师(签名)
日
学生(签名)
课程设计总结:
本设计的重点和难点是在于对航班数据的排序和查找,以链式基数排序为主线,用到了二分查找和顺序查找等知识,还有建立静态链表等。
通过这次课程设计,使我对C语言编程有了新的认识。
以前编程只是注重如何编写函数能够完成所需要的功能,只是凭单纯的意识和简单的语句来堆砌出一段程序。
但现在编程感觉完全不同了。
在编写一个程序之前,自己能够综合考虑各种因素,选取自己需要的数据结构,在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当前状况的算法。
这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的原图了。
这样无形中就提高了自己编写的程序的质量。
另外,我还体会到深刻理解数据结构的重要性。
只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。
了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。
1、题目介绍
设计一个航班信息查询与检索系统。
可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
2、课程设计要求
1、每个航班记录包括八项:
航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。
如下表所示:
航班号
起点站
终点站
班期
起飞时间
到达时间
机型
票价
CA1544
合肥
北京
1.2.4.5
1055
1240
733
960
MU5341
上海
广州
每日
1420
1615
M90
1280
CZ3869
重庆
深圳
2.4.6
0855
1035
1010
2、对航班信息进行排序与查找。
3、概要设计
3.1、设计思路
根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一个储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。
在查询设计中,使用折半查找法对排好序的航班号数据实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
3.2、流程图
4、算法实现
4.1.定义数据类型
根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:
typedefstruct{
charstart[6];
//起点站
charend[6];
//终点站
charsche[10];
//班期
chartime1[5];
//起飞时间
chartime2[5];
//到达时间
charmodel[4];
//机型
intprice;
//票价
}info;
//航班记录类型
typedefstruct{
charkeys[keylen];
//关键字
infoothers;
intnext;
}slnode;
//表结点
slnodesl[maxspace];
intkeynum;
//关键字长
intlength;
//当前表长
}sllist;
//静态链表类型
为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:
typedefintarrtype_n[10];
//十进制数字指针数组
typedefintarrtype_c[26];
//26个字母指针数组
4.2.函数描述
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;
//将p指向的结点插入到第j个结点
voidcollect(slnode*sl,inti,arrtype_nf,arrtype_ne)
intj,t;
!
f[j];
j++);
//找第一个非空子表
sl[0].next=f[j];
t=e[j];
while(j<
10-1)
for(j=j+1;
10-1&
&
//找下一个非空子表
if(f[j])
sl[t].next=f[j];
}//链接两个非空子表
sl[t].next=0;
链式基数排序算法
voidradixsort(sllist&
l)
inti;
arrtype_nfn,en;
arrtype_cfc,ec;
for(i=0;
i<
l.length;
i++)
l.sl[i].next=i+1;
l.sl[l.length].next=0;
//将普通的线性表改为静态链表
for(i=l.keynum-1;
i>
=2;
i--)//按最低位优先依次对各关键字进行分配和收集
distribute(l.sl,i,fn,en);
collect(l.sl,i,fn,en);
for(i=1;
=0;
i--)
distribute_c(l.sl,i,fc,ec);
collect_c(l.sl,i,fc,ec);
voidarrange(sllist&
l)//按指针链表整理静态链表
intp,q,i;
slnodetemp;
p=l.sl[0].next;
while(p<
i)
p=l.sl[p].next;
q=l.sl[p].next;
if(p!
=i)
temp=l.sl[p];
l.sl[p]=l.sl[i];
l.sl[i]=temp;
//交换记录
l.sl[i].next=p;
p=q;
折半查找函数定义
intbinsearch(sllistl,charkey[])
intlow,high,mid;
low=1;
high=l.length;
while(low<
=high)
mid=(low+high)/2;
if(strcmp(key,l.sl[mid].keys)==0)
returnmid;
elseif(strcmp(key,l.sl[mid].keys)<
0)
high=mid-1;
low=mid+1;
return0;
5、测试数据
编译后运行,显示:
录入信息^_^
航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价
录入:
CA1544合肥北京1.2.4.5 1055 1240 733 960
显示:
是否继续?
y/n:
y
航班号起点站终点站班期 起飞时间 到达时间 机型 票价
MU5341 上海广州每日 1420 1615 M90 1280
航班号起点站 终点站 班期 起飞时间 到达时间 机型 票价
CZ3869重庆深圳2.4.6085510357331010
n
录入航班信息后,屏幕显示:
-------------------------------
*航班信息查询系统*
*1.航班号*
*2.起点站*
*3.终点站*
*4.起飞时间*
*5.到达时间*
*0.退出*
-----------------------------
(0-5)号服务项目:
输入要查询的航班号(字母要大写):
航班号 起点站 终点站班期 起飞时间 到达时间 机型 票价
CA1544合肥北京1.2.4.5 1055 1240 733 960
2
输入要查询的航班起点站:
附录
源程序:
#include<
stdio.h>
string.h>
#definemax100
#definekeylen7
typedefstruct
charstart[6];
charend[6];
charsche[10];
chartime1[5];
chartime2[5];
charmodel[4];
intprice;
typedefstruct
charkeys[keylen];
infoothers;
intnext;
slnodesl[max];
intkeynum;
intlength;
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]=p;
else
sl[e[j]].next=p;
e[j]=p;
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;
l.sl[i].next=i+1;
l.sl[l.length].next=0;
for(i=l.keynum-1;
distribute(l.sl,i,fn,en);
collect(l.sl,i,fn,en);
for(i=1;
distribute_c(l.sl,i,fc,ec);
collect_c(l.sl,i,fc,ec);
l)
intp,q,i;
slnodetemp;
p=l.sl[0].next;
while(p<
p=l.sl[p].next;
q=l.sl[p].next;
if(p!
{
temp=l.sl[p];
l.sl[p]=l.sl[i];
l.sl[i]=temp;
l.sl[i].next=p;
p=q;
intlow,high,mid;
low=1;
high=l.length;
while(low<
mid=(low+high)/2;
if(strcmp(key,l.sl[mid].keys)==0)
returnmid;
elseif(strcmp(key,l.sl[mid].keys)<
high=mid-1;
low=mid+1;
return0;
voidseqsearch(sllistl,charkey[],inti)
intj,k,m=0;
printf("
------------------------------------------------------------\n"
);
航班号起点站终点站班期起飞时间到达时间机型票价\n"
for(j=1;
=l.length;
switch(i)
case2:
k=strcmp(key,l.sl[j].others.start);
break;
case3:
k=strcmp(key,l.sl[j].others.end);
case4:
k=strcmp(key,l.sl[j].others.time1);
case5:
k=strcmp(key,l.sl[j].others.time2);
}
if(k==0)
m=1;
printf("
%-8s%-7s%-7s%-11s%-6s%-6s%5s%4d\n"
l.sl[j].keys,l.sl[j].others.start,l.sl[j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others.time2,l.sl[j].others.model,l.sl[j].others.price);
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"
l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l.sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price);
}
break;
case2:
scanf("
seqsearch(l,key,i);
break;
case3:
输入要查询的航班终点站:
case4:
输入要查询的航班起飞时间:
case5:
输入要查询的航班到达时间:
case0:
\n\n宝宝走了\n\n"
voidinputdata(sllist&
inti=++l.length;
charyn='
y'
;
while(yn=='
||yn=='
Y'
)
信息录入^_^\n\n"
航班号起点站终点站班期起飞时间到达时间机型票价\n"
%s%s%s%s%s%s%s%d"
l.sl[i].keys,l.sl[i].others.start,l.sl[i].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&
l.sl[i].others.price);
++i;
getchar();
radixsort(l);
arrange(l);
是否继续?
\ny/n:
%c"
yn);
l.length=i-1;
voidmain()
sllistl;
l.keynum=6;
l.length=0;
inputdata(l);
searchcon(l);
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航班信息 查询 检索系统 课程设计 报告