当前位置:首页 >> 其它课程 >> 航班信息的查询与检索

航班信息的查询与检索


紫金学院 数据结构课程设计

课 系 班 学 姓

程: 别: 级: 号: 名:

数据结构课程设计 计算机系

航班信息的查询与检 选题名称: 索 起止时间: 指导教师: 2012.6.4~2012.6.13

2012 年

6 月

紫金学院 数据结构课程设计

2010 级软件工程

一. 问题描述
设计一个航班信息查询与检索系统。可按航班的航班号、起点站、终点站、起飞时间以及 到达时间等信息进行查询。

二. 基本要求
1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、 飞机
型号、票价。如下表所示: 航班信息表 航班号 CA1544 起点站 合肥 终点站 北京 航班期 1.2.4.5 起飞时间 到达时间 1055 1240 机型 733 票价 960

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

三. 需求分析
要对飞机航班信息进行排序和查找。可按航班的航班号、起点站、到达站、起飞时间 以及到达时间等信息进行查询。 (1)航班信息输入:编译运行后,首先进行系统初始化,然后进入输入子系统。当输 入结束之后系统自动进入排序处理子系统,对输入的航班信息记录进行链式基数排序,排 序完成后,自动进入下一步。 (2)航班信息查询:当进入查询子系统之后,立即会显示出菜单供用户选择,若查找 到,即会显示该航班记录的相关信息,现实之后,回到查询主控菜单。如果选择 2,在系 统提示下输入要查找的起点站名:南昌之后,系统会显示:“很抱歉,无此航班信息”, 而后返回查询主控菜单。其他项的查询操作都基本一样,先假设选择 0,系统退出并结束 整个查询系统。

四. 概要设计
1、设计思路
根据题目所要求, 程序必须实现航班信息的录入和查询。 程序首先定义了一个用于 储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序, 最后执行数据查询和检索。 在查询设计中, 使用二分查找法对排好序的航班数据按航班 号实现快速查找, 按起点站、 终点站、 起飞时间、 到达时间查找的则采用顺序查询方法。

2、流程图
1

紫金学院 数据结构课程设计

2010 级软件工程

定义数据类型

数据输入、排序

接受查找条件、查找 关键字

输出查找结果

3、主要函数说明
(1)#include <iostream>
#include <string.h> #include <conio.h> #include <windows.h> /* 宏定义 */ #define MaxSpace 100 #define keylen 6 #define RADIX_n 10 #define RADIX_c 26 #define SHOW_MSG_ERROR "\n 错误信息:航班号须由 2 位大写字母和 4 位数字组成。\n 输入数据错误,程序终止执行!\n" typedef char KeyType; /* 航班记录数据结构描述 */ typedef struct { char start[6]; //起点 char end[6]; //终点 char sche[6]; //班期 char time1[6]; //起飞时间 char time2[6]; //到达时间 char model[3]; //机型 int price; //票价 }InfoType; //航班记录类型 /* 静态链表结点类型 */
2

紫金学院 数据结构课程设计

2010 级软件工程

typedef struct { KeyType keys[keylen]; InfoType others; int next; }SLNode; /* 静态链表类型 */ typedef struct { SLNode sl[MaxSpace]; int keynum; int length; }SLList; typedef int ArrType_n[RADIX_n]; typedef int ArrType_c[RADIX_c];

//关键字(航班号)

//静态链表,sl[0]为头结点 //记录当前关键字字符个数 //当前表长 //十进制数字指针数组 //26 个字母指针数组

(2)/* 15. 主函数 */
int main( ) { SLList L; L.keynum=6;L.length=0; if(!InputData(L)) { printf(SHOW_MSG_ERROR); return 1; } searchcon(L); return 0; }

//初始化 //信息录入,并作输入效验

//执行相关查询

(3)/* 功能函数声明 */
void void void void void void int void void void void void bool bool Distribute(SLNode *sl, int i, ArrType_n &f, ArrType_n &e); Collect(SLNode *sl, int i, ArrType_n f, ArrType_n e); Distribute_c(SLNode *sl, int i, ArrType_c &f, ArrType_c &e); Collect_c(SLNode *sl, int i, ArrType_c f, ArrType_c e); RadixSort(SLList &L); Arrange(SLList &L); BinSearch(SLList L, KeyType key[]); SeqSearch(SLList L, KeyType key[],int i); DisplayStyle(int i, char *s); Display(SLList L, int i); searchcon(SLList L); Prompt( ); InputData(SLList &L); Check_HangBanHao(char *HangBanHao);

五. 详细设计
3

紫金学院 数据结构课程设计

2010 级软件工程

1 . 定义数据类型
根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据 类型: typedef struct { char start[6]; //起点站 char end[6]; //终点站 char sche[10]; //航班期 char time1[5]; //起飞时间 char time2[5]; //到达时间 char model[4]; //机型 int price; //票价 }infotype; //航班记录类型 typedef struct{ keytype keys[keylen]; //关键字 infotype others; int next; }slnode; //表结点 typedef struct{ slnode sl[maxspace]; //静态链表,s1[0]为头结点 int keynum; //关键字长 int length; //当前表长 }sllist; //静态链表类型 为了进行基数排序,需要定义在分配和收集操作时用到的指针数组: typedef int arrtype_n[10]; //十进制数字指针数组 typedef int arrtype_c[26]; //26 个字母指针数组

2 . 算法实现
(1)一趟分配算法
void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) { int j,p; for(j=0;j<radix_n;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 个结点 }

4

紫金学院 数据结构课程设计

2010 级软件工程

}

(2)一趟收集算法
void Collect(SLNode *sl, 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<RADIX_n-1) { for(j=j+1;j<RADIX_n-1 && !f[j];j++); if(f[j]) } } sl[t].next=0; } {sl[t].next=f[j];t=e[j]; //找下一个非空子表 //链接到主链表 //找第一个非空子表 //将 sl[0].next 指向第一个非空子表的第一个结点

(3)链式基数排序算法
void RadixSort(SLList &L) { int i; ArrType_n fn,en; ArrType_c fc,ec; for(i=0; i<L.length;i++) //将线性表改造为静态链表 L.sl[i].next=i+1; L.sl[L.length].next=0; //"0"表示空指针 //按最低位优先依次对各关键字进行分配和收集 for(i=L.keynum-1;i>=2;i--) //对低四位数字部分进行分配和收集 { Distribute(L.sl,i,fn,en); Collect(L.sl,fn,en); } for(i=1;i>=0;i--) //对高位的 2 位字母进行分配和收集 { Distribute_c(L.sl,i,fc,ec); Collect_c(L.sl,fc,ec); } }

(4)二分查找函数定义
int BinSearch(SLList L, KeyType key[]) { int low,high,mid; low=1; high=L.length; while(low<=high){ mid=(low+high)/2; if(strcmp(key,L.sl[mid].keys)==0) return mid; else if(strcmp(key,L.sl[mid].keys)<0) high=mid-1;
5

紫金学院 数据结构课程设计

2010 级软件工程

else low=mid+1; } return 0; }

六. 调试分析
首先,要实现所要的功能需用什么数据结构的问题,比如排序问题究竟用哪一种,在上网搜寻 资料之后发现,采用对排序最符合。 其次, 遇到的问题是在输入航班信息的过程中非常容易产生差错, 信息的混淆和信息的不完整, 初期的制作中由于输出程序的错误导致在输出长度较长的班期数据是产生了乱码, 即班期以及班期 以后的起飞时间,到达时间,机型,票价等等的数据发生了错误,数据混在一起,使得数据产生错 误。而后发现只要修改一下定义的数组元素的个数,就不会再出现这样的问题。 最后,由于航班号的数据中又有大写字母,又有数字,即选用 CHAR 型数据,同时机型之中, 即有数字,又有字母。在制作程序的过程之中,若是添加一项添加班次的选项,使得若有添加的航 班数据的话,使用者可以方便的再次输入,而不是重新打开。

七. 用户使用说明
1、录入航班信息 编译后运行,显示: 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 录入:MU4594 昆明 显示:继续输入吗?y/n: 录入:y↙ 显示:航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 录入:SC7425 青岛 显示:继续输入吗?y/n: 录入:n↙ 2、航班信息查询 录入航班信息后,屏幕显示: ******************** * 航班信息查询系统 * ******************** * * * * * * 1.航 班 号 2.起 点 站 3.终 点 站 4.起飞时间 5.到达时间 0.退出系统 * * * * * * 海口 1.3.6 1920 2120 DH4 1630↙ 西安 1.3.5.6 1015 1140 328 1160↙

********************
6

紫金学院 数据结构课程设计

2010 级软件工程

请选择(0-5): 录入:1↙ 显示:输入要查询的航班号(字母要大写): 录入:MU4594↙ 显示:航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 MU4594-昆明 录入:2↙ 显示:输入要查询的航班起点站名: 录入:青岛↙ 显示:航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 SC7425 录入:2↙ 显示:输入要查询的航班起点站名: 录入:广州↙ 显示:很抱歉,无此航班信息 -青岛 -海口 -1.3.6 -1920 -2120 -DH4 -1630↙ -西安 -1.3.5.6 -1015 -1140 -328 -1160

八.测试结果

7

紫金学院 数据结构课程设计

2010 级软件工程

8

紫金学院 数据结构课程设计

2010 级软件工程

9

紫金学院 数据结构课程设计

2010 级软件工程

10

紫金学院 数据结构课程设计

2010 级软件工程

九. 课程设计总结
本设计的重点和难点是在于对航班数据的排序和查找,以链式基数排序为主线,用到了 二分查找和顺序查找等知识,还有建立静态链表等。通过这次课程设计,使我对编程有了新 的认识。以前编程只是注重如何编写函数能够完成所需要的功能,只是凭单纯的意识和简单 的语句来堆砌出一段程序。但现在编程感觉完全不同了。在编写一个程序之前,自己能够综 合考虑各种因素,选取自己需要的数据结构,在编写每一个函数之前,可以仔细斟酌比对, 挑选出最适合当前状况的算法。这样,即使在完整的程序还没有写出来之前,自己心中已经 有了明确的原图了。这样无形中就提高了自己编写的程序的质量。另外,我还体会到深刻理 解数据结构的重要性。 只有真正理解这样定义数据类型的好处, 才能用好这样一种数据结构。 了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。

十. 参考文献
[1] 严蔚敏,吴伟民.数据结构(C 语言版)[M]. 北京 清华大学出版社,2007 [2] 谭浩强.C 程序设计(第三版) [M]. 北京 清华大学出版社,2007

11


更多相关文档:

航班信息的查询与检索

11 目录 1 概述 1.1 课程设计名称航班信息的查询与检索 1.2 课程设计目的通过本次实验,掌握数据结构中的几种排序算法和查找算法,了解静态链表的运用,利用上述 ...

航班信息的查询与检索

航班信息查询与检索系统 *\n"); printf("***\n"); printf(" * 1.按航班号查询 *\n"); printf(" * 2.按起点站查询 *\n"); printf(" * 3.按...

航班信息的查询与检索

问题描述设计一个航班信息查询与检索系统。可按航班的航班号、起点站、终点站、起飞时间以及 到达时间等信息进行查询。 二. 基本要求 1、每个航班记录包括八项:航班...

数据结构 实验报告六 航班信息查询与检索系统

11 一、 概述:设计一个航班信息查询与检索系统。可事先按要求录入航班信息、删除航班 信息、查看全部航班信息及按航班的航班号、起点站、终点站、起飞时间、以及 ...

数据结构课程设计--航班信息查询与检索系统

7 航班信息查询 六、收获与体会……….8 收获与体会 2 一、设计题目设计一个航班信息查询与检索系统。可按航班的航班号、起点站、终点站、起飞时间 以及到达时间...

数据结构课程设计航班信息查询与检索

学院名称 《数据结构》课程设计报告题目——航班信息查询与检索 班 级: 姓 名: 时 间: 2012/12/29---2013/1/5 二○一二年十二月二十九日 课程设计任务...

航班信息的查询与检索的程序设计模版

航班信息的查询与检索的程序设计模版_IT/计算机_专业资料。用VC++MFC做文本编辑器《数据结构》课程设计报告 《数据结构》 数据结构》课程设计报告设计题目 专班姓学...

航班信息的查询和检索.

题目:航班信息的查询与检索设计一个实用的航班信息查询和检索系统,要求能对飞机航班信息进行排 序和查询。可按航班的航班号、起点站、到达站、起飞时间以及到达时间...

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

航班信息的查询与检索实验报告_计算机软件及应用_IT/计算机_专业资料。数据结构实验...2 系统分析 2.1 功能需求分析(1)输入航班信息 (2)按不同类型查询航班信息:...

航班信息的查询与检索

航班信息的查询与检索_计算机软件及应用_IT/计算机_专业资料。C 课程设计 设计题目: 航班信息的查询与检索 院 系 信息学院 班级 学生姓名 学号 职称 讲师、讲师 ...
更多相关标签:
航班信息查询与检索 | 航班查询 | 飞常准 | 湖北汽车工业学院 | 商标检索查询 | sci检索查询 | 检索号如何查询 | sci检索号查询 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com