
航班信息查询与检索系统.doc
21页课程设计报告课程设计名称:数据结构课程设计题目:设计并实现一个航班信息查询与检索系统院系:计算机学院专业:班级: 学号: 姓名: 指导教师:指导教师评语; 学术诚信声明本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指—— 导下独立进行设计工作及取得的研究结果 尽我所知,除了文中特别 加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表 或撰写过的研究结果,也不包含其它教育机构使用过的材料与我一 同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说一- 明并表示了谢意报告资料及实验数据若有不实之处,本人愿意接受 本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切 后果本人签名: 日期: 年 月 日课程设计名称数据结构课程设计专业学生姓名班级学号题目名称设计并实现一个航班信息查询与检索系统起止日期2016 年 12 月 18 日起至 2017 年 1 月 4 日止课设内容和要求:对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间 和到达时间等信息进行查询要求:1. 设计数据结构2. 选择合适的排序和查找算法3. 设计软件的功能结构4. 采用模块化编程5•给出现实方法和算法6.按课程设计规范撰写课程设计报告参考资料:[1] 严蔚敏、陈文博,数据结构及应用算法教程 [M].北京:清华大学出版社, 2011.5[2] 张小莉、王苗、罗文劼,数据结构与算法 [M].北京:机械工业出版社,2014.4教研室审核意见: 教研室主任签字:指导教师(签名) 年 月 日学生(签名) 年 月 日课程设计总结:本设计的重点和难点是在于对航班数据的排序和查找, 以链式基数排序为主线,用到了二分查找和顺序查找等知识,还有建立静态链表等。
通过这次课程设 计,使我对C语言编程有了新的认识以前编程只是注重如何编写函数能够完成 所需要的功能,只是凭单纯的意识和简单的语句来堆砌出一段程序但现在编程 感觉完全不同了在编写一个程序之前,自己能够综合考虑各种因素,选取自己 需要的数据结构,在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当 前状况的算法这样,即使在完整的程序还没有写出来之前,自己心中已经有了 明确的原图了这样无形中就提高了自己编写的程序的质量另外,我还体会到 深刻理解数据结构的重要性只有真正理解这样定义数据类型的好处,才能用好 这样一种数据结构了解典型数据结构的性质是非常有用的,它往往是编写程序 的关键2课程设计要求1、 题目介绍设计一个航班信息查询与检索系统可按航班的航班号、起点站、终点站、起飞时间 以及到达时间等信息进行查询2、 课程设计要求1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、至U达时间、 飞机型号、票价如下表所示:航班号起点站终点站班期起飞时间到达时间机型票价CA1544合肥北京10551240733960MU5341上海广州每日14201615M901280CZ3869重庆深圳2.4.60855103573310102、对航班信息进行排序与查找3、概要设计3.1、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一 个储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进 行排序,最后执行数据查询和检索在查询设计中,使用折半查找法对排好序的 航班号数据实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采 用顺序查询方法3.2、流程图4、算法实现4.1 .定义数据类型根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:typedef struct {//起点站〃终点站char start[6];char en d[6];char sche[10]; char time1[5];char time2[5];char model[4];int price;}info;typedef struct{ char keys[keylen]; info others; int next;}slnode;typedef struct{slnode sl[maxspace]; int keynum;int length;}sllist; 为了进行基数排序,需要定typedef int arrtype_n[10];typedef int arrtype_c[26];4.2 . 函数描述//班期//起飞时间//到达时间//机型//票价//航班记录类型//关键字//表结点//关键字长//当前表长//静态链表类型//十进制数字指针数组//26 个字母指针数组void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) {int j,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;elsesl[e[j]].next=p;j 个结点e[j]=p; // 将 p 指向的结点插入到第}}void collect(slnode *sl,int i,arrtype_n f,arrtype_n e){int j,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;}链式基数排序算法void radixsort(sllist &l)//找第一个非空子表//找下一个非空子表//链接两个非空子表int i;arrtype_n fn,en;//将普通的线性表改为静态链表//按最低位优先依次对各关键字进行分配和收集//按指针链表整理静态链表arrtype_c fc,ec;for(i=0;i












