航班信息查询与检索系统.docx
- 文档编号:14407497
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:24
- 大小:329.57KB
航班信息查询与检索系统.docx
《航班信息查询与检索系统.docx》由会员分享,可在线阅读,更多相关《航班信息查询与检索系统.docx(24页珍藏版)》请在冰点文库上搜索。
航班信息查询与检索系统
课程设计报告
课程设计名称:
数据结构课程设计
题目:
设计并实现一个航班信息查询与检索系统
院系:
计算机学院
专业:
班级:
学号:
姓名:
指导教师:
学术诚信声明
本人声明:
所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。
与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名:
日期:
年月日
课程设计名称
数据结构课程设计
专业
学生姓名
班级
学号
题目名称
设计并实现一个航班信息查询与检索系统
起止日期
2016
年
12
月
18
日起至
2017
年
1
月
4
日止
课设内容和要求:
对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间
和到达时间等信息进行查询。
要求:
1.设计数据结构
2.选择合适的排序和查找算法
3.设计软件的功能结构
4.采用模块化编程
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
733
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;//表结点
typedefstruct{
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;
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;
}
链式基数排序算法
voidradixsort(sllist&l)
{
inti;
arrtype_nfn,en;
arrtype_cfc,ec;
for(i=0;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;i>=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; for(i=1;i { while(p 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; else low=mid+1; } return0; } 5、测试数据 编译后运行,显示: 录入信息^_^ 航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价 录入: CA1544合肥北京1.2.4.5 1055 1240 733 960 显示: 是否继续? y/n: 录入: y 显示: 航班号起点站终点站班期 起飞时间 到达时间 机型 票价 录入: MU5341 上海广州每日 1420 1615 M90 1280 显示: 是否继续? y/n: 录入: y 显示: 航班号起点站 终点站 班期 起飞时间 到达时间 机型 票价 录入: CZ3869重庆深圳2.4.6085510357331010 显示: 是否继续? y/n: 录入: n 录入航班信息后,屏幕显示: ------------------------------- *航班信息查询系统* ------------------------------- *1.航班号* *2.起点站* *3.终点站* *4.起飞时间* *5.到达时间* *0.退出* ----------------------------- (0-5)号服务项目: 录入: 1 显示: 输入要查询的航班号(字母要大写): 录入: CA1544 显示: 航班号 起点站 终点站班期 起飞时间 到达时间 机型 票价 CA1544合肥北京1.2.4.5 1055 1240 733 960 录入: 2 显示: 输入要查询的航班起点站: 录入: 合肥 显示: 航班号 起点站 终点站班期 起飞时间 到达时间 机型 票价 显示: CA1544合肥北京1.2.4.5 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 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;i>=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; for(i=1;i { while(p 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; else low=mid+1; } return0; } voidseqsearch(sllistl,charkey[],inti) { intj,k,m=0; printf("------------------------------------------------------------\n"); printf("航班号起点站终点站班期起飞时间到达时间机型票价\n"); for(j=1;j<=l.length;j++) { switch(i) { case2: k=strcmp(key,l.sl[j].others.start);break; case3: k=strcmp(key,l.sl[j].others.end);break; case4: k=strcmp(key,l.sl[j].others.time1);break; case5: k=strcmp(key,l.sl[j].others.time2);break; } 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) 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",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); } 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=++l.length; charyn='y'; while(yn=='y'||yn=='Y') { printf("信息录入^_^\n\n"); printf("航班号起点站终点站班期起飞时间到达时间机型票价\n"); scanf("%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); printf("是否继续? \ny/n: "); scanf("%c",&yn); } l.length=i-1; } voidmain() { sllistl; l.keynum=6; l.length=0; inputdata(l); searchcon(l); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航班信息 查询 检索系统