航班信息查询与检索系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
课程设计名称:数据结构课程设计
题目:设计并实现一个航班信息查询与检索系统
院系:计算机学院
专业:
班级:
学号:
姓名:
指导教师:
学术诚信声明
本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名: 日期:年月日
目录
1 题目介绍 (5)
2 课程设计要求 (5)
2.1课程设计内容 (5)
2.2课程设计目标 (5)
3 概要设计 (5)
3.1设计思路 (5)
3.2流程图 (5)
4 算法概述 (6)
4.1定义数据类型 (6)
4.2函数描述 (7)
5 测试数据 (10)
附录(关键部分程序清单) (12)
1、题目介绍
设计一个航班信息查询与检索系统。可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
2、课程设计要求
1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。如下表所示:
2、对航班信息进行排序与查找。
3、概要设计
3.1、设计思路
根据题目所要求,程序必须实现航班信息的录入和查询。程序首先定义了一个储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。在查询设计中,使用折半查找法对排好序的航班号数据实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
3.2、流程图
4、算法实现
4.1 . 定义数据类型
根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:
typedef struct {
char start[6]; //起点站
char end[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]; //26个字母指针数组
4.2 . 函数描述
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;
else
sl[e[j]].next=p;
e[j]=p; //将p指向的结点插入到第j个结点}
}
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 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); } }