航班信息查询系统分析
航班信息查询系统
当今乘飞机的人越来越多,人们需要关心了解各类航班的班次、
时间、价格、机型等信息,设计一个航班信息查询系统,可供人们查
询航班信息,该查询系统可按一个或者多个条件查询,航班信息表的
部分内容如下:
一、需求分析(余子轩、包灵美)
制作一个航班信息查询系统,能够完整显示航班信息可以通过
航班号、机型、起点站、到达站、起飞时间中的一个或多个条件查询
并显示航班动态。
要求进入查询系统后,可以按要求选择需要更新的操作,并按提
速输入要更新的航班数据,更新操作完成后返回初始界面。在选择查
询时,能显示输入查询条件的界面并提示输入信息(航班号、起点站、
航班号起点站终点站起飞时间机型票价
CA1544合肥北京10:55733960
MU5341上海重庆14:20M901280
CZ3869广州南京08:557331010
MU3682深圳桂林20:50M901060
HUI1863昆明西安10:157381250
终点站、班期、起飞时间、到达时间、飞机型号及票价),若输入的
信息符合要求则显示相对应的航班信息,否则显示“没有相关航班”
并返回输入界面。如果主要想实现查询功能,就可以采用顺序的存储
结构;想实现更新操作,采用链式存储结构;相比之下,这次主要想
实现的功能是查询功能,因此采用顺序存储结构。考虑到此航班信息
查询系统查询功能用到的比较多而更新操作使用的比较少,为了使操
作简便,程序利用效率高,使用顺序表来存储航班信息。本系统采用
二分查找法、基数排序法、最高位优先法。
二分查找法也称为折半查找法:将n个元素分成个数大致相同的
两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算
(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数
组a的右半部继续搜索x。
基数排序法:其时间复杂度为O(nlog(r)m),其中r为所采取
的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比
较性排序法。
最高位优先法:先按k1排序分组,同一组中记录,关键码k1相
等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样
的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连
接起来,便得到一个有序序列。
需要注意到的是:在整个航班信息查询系统当中,需要对所要查
询的信息进行一定的判断,看是否存在乘客所要查询的航班信息,以
及在进行关键字查询时出现错误输入等。
二、概要设计(黄飞)
1.系统的功能:
本任务要求对飞机航班信息进行排序和查找。可按航班的航班号、
起点站、到达站、起飞时间、飞机型号及票价等信息进行查询。本设计
主要是对航班信息存储、排序以及查找等概念进行综合练习。以链式基
数排序为主线,用到二分查找和顺序查找等知识,还有建立静态链表等
相关概念,本系统使用dos界面实现。
2.系统模块分析:
(1)航班排序对输入系统内的航班首先要进行排序,我们采用的
按航班号排序,从低位到高位依次对关键字进行分配和收集,分两段实
现其算法。
输入信息:MU5341上海重庆14:20M901280
CZ3869广州南京08:557331010
排序之后:CZ3869广州南京08:557331010
MU5341上海重庆14:20M901280
(2)按航班号查找航班的信息。
输入航班号:MU5341
显示:MU5341上海重庆14:20M9012
(3)按航班起始站查找航班的信息。
输入起始站:广州
显示:CZ3869广州南京08:557331010
(4)按航班终点站查找航班的信息。
输入起始站:南京
显示:CZ3869广州南京08:557331010
(5)根据航班的起飞时间查找航班的信息。
输入起飞时间:08:55
显示:CZ3869广州南京08:557331010
(6)根据航班的机型查找航班的信息。
输入飞机机型:733
显示:CZ3869广州南京08:557331010
(7)根据航班的票价查找航班的信息。
输入飞机票价:1010
显示:CZ3869广州南京08:557331010
三、详细分析(包灵美、陈足萍)
根据题目所述,程序必须实现对航班信息的录入和查询,应该首
先定义一个用于存储航班信息数据类型,再由管理员录入航班数据,
将数据进行整理后,实现通过按照关键字搜索项目,有下面几种情况:
按航班号查询
按起飞时间查询
按到机型查询
按出发地查询
按目的地查询
退出系统
系统功能图:(包灵美)
定义数据类型
//tydedefstruct{
//charstart[6];//起点站
//charend6];//终点站
//charStime[5];//起飞时间
//charmodel[4];//机型
//intprice;//票价
}infotype;//航班记录类型
tydedefstruct{
keytypekeys[keylen];//关键字
infotypeothers;
航班信息查询系统
按
航
班
号
查
询
退
出
系
统
输入航班信息
按
起
点
站
查
询
按
终
点
站
查
询
按
机
型
查
询
按
起
飞
时
间
查
询
intnext;
}slnode;//表结点
typedefstruct{
slnodesl[maxspace];
intkeynum;//关键字长
intlength;//当前表长
}sllist;//静态链表类型
typedefintarrtype_n[10];//十进制数字指针组
typedefintarrtype_c[26];//26个字母指针数组
各函数说明
1.一趟分配函数
voiddistribute_c(slnode*sl,inti,arrtype_cf,arrtype_ce)
{//一趟字母分配字符函数
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]%65;
if(!f[j])
f[j]=p;
else
sl[e[j]].next=p;
e[j]=p;
}
}
2.一趟收集函数
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
{
for(j=j+1;j
if(f[j])
{
sl[t].next=f[j];
t=e[j];
}
}
sl[t].next=0;
}
3.链式基数排序
voidradixsort(sllist&l)//链式基数排序函数
{
inti;
arrtype_nfn,en;
arrtype_cfc,ec;
for(i=0;i<;i++)
[i].next=i+1;
[].next=0;
for(i=-1;i>=2;i--)
{
distribute(,i,fn,en);
collect(,i,fn,en);
}
for(i=1;i>=0;i--)
{
distribute_c(,i,fc,ec);
collect_c(,i,fc,ec);
}
}
4.二分法查找函数
intbinsearch(sllistl,keytypekey[])
{
intlow,high,mid;
low=1;
high=;
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(key,[mid].keys)==0)
returnmid;
elseif(strcmp(key,[mid].keys)<0)
high=mid-1;
else
low=mid+1;
}
return0;
}
本文发布于:2023-02-16 00:20:20,感谢您对本站的认可!
本文链接:http://www.yoguilin.com/write/167647802026584.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |