航班信息的查询与检索实验报告.docx

上传人:b****5 文档编号:8512518 上传时间:2023-01-31 格式:DOCX 页数:10 大小:140.46KB
下载 相关 举报
航班信息的查询与检索实验报告.docx_第1页
第1页 / 共10页
航班信息的查询与检索实验报告.docx_第2页
第2页 / 共10页
航班信息的查询与检索实验报告.docx_第3页
第3页 / 共10页
航班信息的查询与检索实验报告.docx_第4页
第4页 / 共10页
航班信息的查询与检索实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

航班信息的查询与检索实验报告.docx

《航班信息的查询与检索实验报告.docx》由会员分享,可在线阅读,更多相关《航班信息的查询与检索实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

航班信息的查询与检索实验报告.docx

航班信息的查询与检索实验报告

参考文献

1概述

1.1问题描述

随着科技与经济的发展,当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、时间、价格及机型等信息。

在这个飞机航班数据的模型中,航班号是关键字,而且是具有结构特点的一类关键字。

通过关键字的输入,你将获得你所需要的航班的所有信息。

程序必须实现航班信息的录入和查询。

程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。

在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。

航班信息的查询与检索

1.2基本要求

1、每个航班包括8项基本要求:

航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。

2、要有输入模块。

3、对航班信息进行排序与查找。

2系统分析

2.1功能需求分析

(1)输入航班信息

(2)按不同类型查询航班信息:

输入航班号,显示相应信息

输入起点站,显示相应信息

输入终点站,显示相应信息

输入起飞时间,显示相应信息

输入到达时间,显示相应信息

2.2设计要求

该设计要求对航班信息进行排序和查询。

可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。

对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他关键字的查找可采用最简单的顺序查找方法进行,因为它们用的较少。

每个航班记录包括八项,分别是:

航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等。

航班号

起点站

终点站

班期

起飞时间

到达时间

机型

票价

CA1544

合肥

北京

1.2.4.5

1055

1240

733

960

MU5341

上海

广州

每日

1420

1615

M90

1280

CZ3869

重庆

深圳

2.4.6

0855

1035

733

1010

MU1836

桂林

南京

2.3.4.6.7

2050

2215

M90

1380

HU1836

上海

北京

每日

0940

1120

738

1250

CZ3528

成都

厦门

1.3.4.5.7

1510

1650

CRJ

1060

MU4594

昆明

西安

1.3.5.6

1015

1140

328

1160

SC7425

青岛

海口

1.3.6

1920

2120

DH4

1630

3概要设计

3.1各函数说明

(1)一趟数字字符分配函数

voidDistribute(SLNode*sl,inti,ArrType_nf,ArrType_ne)

(2)一趟数字字符收集函数

voidCollect(SLNode*sl,inti,ArrType_nf,ArrType_ne)

(3)一趟字母字符分配函数

voidDistribute_c(SLNode*sl,inti,ArrType_cf,ArrType_ce)

(4)一趟字母字符收集函数

voidCollect_c(SLNode*sl,inti,ArrType_cf,ArrType_ce)

(5)链式基数排序函数

voidRadixSort(SLList&L)

(6)按指针链重新整理静态链表

voidArrange(SLList&L)//重新整理

(7)二分查找函数

intBinSearch(SLListL,KeyTypekey[])

(8)顺序查找函数

voidSeqSearch(SLListl,KeyTypekey[],inti)

(9)显示航班记录函数

voidDisplay(SLListL,inti)

(10)查询检索菜单控制程序

searchcon(SLListL)

(11)录入航班数据函数

voidInputData(SLList&L)

(11)主函数

voidmain()

4详细设计

4.1数据类型定义模块

结构体内包括六个字符数组和一个整型变量,六个字符数组中分别存放航班信息的起点站、终点站、班期、起飞时间、到达时间、飞机型号等信息,整型变量中存放航班的票价。

然后再定义全局变量:

一个结构体数组并初始化,用来存放各个航班信息。

一个指向结构体变量的指针数组。

typedefstruct

{charstart[6];//起点

charend[6];//终点

charsche[10];//班期

chartime1[5];//起飞时间

chartime2[5];//到达时间

charmodel[4];//机型

intprice;//票价

}infotype;//航班记录类型

typedefstruct{

keytypekeys[keylen];//关键字(航班号)

infotypeothers;

intnext;

}slnode;//静态链表结点类型

typedefstruct{

slnodesl[maxspace];//静态链表,s1[0]为头结点

intkeynum;//记录当前关键字字符个数

intlength;//当前表长

}sllist;//静态链表类型

typedefintarrtype_n[radix_n];//十进制数字指针数组

typedefintarrtype_c[radix_c];//26个字母指针数组

4.2实现排序的各函数模块

4.2.1一趟分配函数模块

voiddistribute(slnode*sl,inti,arrtype_nf,arrtype_ne)

{intj,p;

for(j=0;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;

e[j]=p;}}

4.2.2一趟搜集函数模块

voidcollect(slnode*sl,inti,arrtype_nf,arrtype_ne)

{intj,t;

for(j=0;!

f[j];j++)//找第一个非空子表

sl[0].next=f[j];t=e[j];//s1[0].next指向第一个非空子表中的一个结点

while(j

{for(j=j+1;j

f[j];j++)//找下一个非空子表

if(f[j]){sl[t].next=f[j];t=e[j];}}

sl[t].next=0;}

4.2.3链式基数排序函数模块

基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法,其是通过“分配”和“收集”两种操作对相应关键字进行排序。

算法思路是按照排序关键字的每一位字符进行排序。

排序前,先定义一个队列数组,每个队列数组与某个关键字位对应,某队列中只能存放与该关键字位对应的元素。

首先先从关键字的最后一位字符进行判断,根据关键字位,把这个元素放入相应的队列中去,这就是“分配”过程。

等到所有元素均被分配到相应队列中之后,在把各个队列中的元素,按照队列数组顺序,依次重新放回原元素数组中,这就是“收集”过程。

经过“分配”和“收集”后,一次排序完成。

接着再以关键字的倒数第二位字符作为关键字位进行上述排序过程,直到按照关键字的所有位全部进行排序过后,整个序列就成为有序序列,排序完成。

voidradixsort(sllist&l)//链式

{arrtype_nfn,en;

arrtype_cfc,ec;

for(i=0;i

l.sl[i].next=i+1;//0号单元仅存放指针,不存储内容

l.sl[l.length].next=0;//将普通的线性表改造为静态链表

for(i=l.keynum-1;i>=2;i--)

{//按最低位优先次序对各关键字进行分配和收集,先做低4位数字部分

distribute(l.sl,i,fn,en);

collect(l.sl,i,fn,en);}

for(i=1;i>=0;i--)

{//对高位的2位大写字母进行分配和收集

distribute_c(l.sl,i,fc,ec);

collect_c(l.sl,i,fc,ec);}}

//按指针链重新整理静态链表

voidarrange(sllist&l)//重新整理

{p=l.sl[0].next;//p指向第一个记录的当前位置

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;}

4.2.4二分查找函数模块

二分查找是对有序序列进行快速查找的一种有效方法。

它的基本思想是,每次都与这个有序序列的中间元素进行比较,若找到,则输出元素信息,若没找到,则判断这个中间元素比待查找的元素大还是小,如果大,那么查找工作继续在该有序序列的前半段进行;反之,则继续查找该有序序列的后半段。

如此一直查找,直到找到该元素或者查找到只剩下一个元素而这个元素与待查找元素不相符时,查找结束。

前一种情况找到了待查找元素,输出该元素,后一种没有找到,输出相应提示信息。

intbinsearch(sllistl,keytypekey[])

{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;

elselow=mid+1;}

return0;}

4.2.5主控函数模块

在主函数中,依然是以while循环的方式列出该程序的操作清单。

该程序的菜单是请用户选择以什么作为查找关键字来查找航班信息。

查找菜单如下:

1.航班号,2.起点站,3.终点站,4.班期,5.起飞时间,6.到达时间,7.机型,8.票价,9.退出。

选择不同菜单项,将会提示不同信息让用户输入,然后程序根据各自的查找方法进行查找。

voidmain()

{sllistl;

l.keynum=6;l.length=0;//输入航班记录

inputdata(l);//基数排序

searchcon(l);}

5运行与测试

在VC++6.0环境下编译连接生成可执行文件。

编译程序无错,继续执行!

无错,程序运行成功。

5.1航班信息输入

5.2航班信息查询

5.3退出航班信息系统

6总结与心得

在细节问题的分析上,较以往有了很大的提高。

在寻求最优解的问题上,也能够找到多种解决方案来使自己的程序收放自如。

在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪等等。

对于航班系统的查询与检索这个实验,使我们更好地融入生活中,把所学到的知识点恰当地运用到生活中,达到学以致用的目的。

此外,这次的课程设计进一步加强了我们运用C语言进行编程,调试,处理问题的能力,加深了我们对算法及数据结构的认识。

同时我也意识到,开发程序的早期计划要做的充分,以免出现程序完成后发现不足而带来的修改麻烦。

虽然这只是一个小小的软件,但对我们之后的影响确实很大的。

参考文献

《数据结构课程设计》舒仕华机械工业出版社

《数据结构》(C语言版)严蔚敏清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1