数据结构与算法课程设计报告——航班信息查询系统(C++)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构与算法课程设计报告
计算机学院
软件工程
摘要 (3)
第一章绪论 (4)
1.1课程设计选题 (4)
1.1.1选题描述 (4)
1.1.2选题要求 (4)
第二章系统需求分析 (4)
2.1输入/输出形式和输出值 (4)
2.2功能需求 (4)
2.3数据流图 (5)
2.4用户特点 (5)
2.4假定和约束 (5)
第三章概要设计 (5)
3.1设计思想 (5)
3.2基本设计概念和处理流程 (6)
3.3存储结构设计 (8)
第四章详细设计 (9)
4.1程序设计说明 (9)
4.2算法设计与分析 (9)
4.2.1基数排序: (9)
4.2.2二分查找 (9)
4.3算法实现 (10)
4.4函数说明 (10)
第五章测试 (11)
5.1核心算法复杂性分析 (11)
5.2测试数据及结果 (11)
第六章总结 (11)
摘要
本课程设计目的在于检验数据结构及算法设计与分析两门课程的学习成果,从而加深对所学的知识的进一步理解与巩固。
本次课程设计过程中本人主要根据课本中的理论与算法编写程序,体现以课本知识的应用为主,在学习了数据结构的基础上,以能够更加熟练的应用所学知识,并能结合一些著名算法来实现对一些实际问题的应用,从而更为深刻理解数据结构与算法的内涵。
本次课程设计利用C++语言编写程序,实现对飞机航班信息进行排序和查找。
第一章绪论
随着信息产业的飞速发展,信息化管理及查询已经引入并应用到各行各业,影响着人们的价值观念与生活方式。因此,要提升企业竞争力,就要大力推进企业信息化建设,利用先进的办公自动化系统来实现企业内部信息管理、共享及交流,从而提高企业综合实力。1.1课程设计选题
1.1.1选题描述
该设计要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
1.1.2选题要求
(1)每个航班记录包括8项,分别是:航班号、起点站、终点站、航班期、起飞时间、到达时间、机型以及票价,如下给出一个航班记录的例子:
航班号起点站终点站航班期起飞时间到达时间机型票价
CA1544 合肥北京 1.2.4.5 1055 1240 M90 960
(2)从键盘输入各记录。
(3)采用基数排序方法对飞机航班号进行排序,然后利用二分查找的方法对排好序的航班记录按航班号实现快速查找。
(4)按其它次关键字的查找可采用最简单的顺序查找方法进行,因为它们用得较少。
第二章系统需求分析
2.1输入/输出形式和输出值
进入系统后,首先提示输入航班信息,包括:航班号、起点站、终点站、航班期、起飞时间、到达时间、票价。除票价为整型外,其他均为字符型。每个信息以回车键输入。
当输入完一个航班信息后,会提示是否继续输入,若要继续输入则重复上述步骤,否则显示主菜单。
根据主菜单输入功能序号,若用户输入的值超过给定范围,则提示错误并要求重新输入。
2.2功能需求
(1)输入航班信息
(2)按不同类型查询航班信息:输入航班号,显示相应信息;
输入起点站,显示相应信息;
输入终点站,显示相应信息;
输入起飞时间,显示相应信息;
输入到达时间,显示相应信息;
(3)退出系统
2.3数据流图
2.4 用户特点
本系统的最终用户是航空公司,操作人员只需具备基本的计算机操作技巧即可。
2.4 假定和约束
本系统在开发过程中,由于技术原因可能会影响到系统的某方面,如有错误或未实现的功能,可以另选其他可行方案。
第三章概要设计
3.1设计思想
对航班信息实现基数排序,利用折半查找(二分查找)的方法根据航班号实现查询,利
用顺序查找的方法对根据其他信息实现查询。
3.2基本设计概念和处理流程
3.3存储结构设计
本系统采用链式存储的存储结构,分别定义三个结构体。typedef struct//定义航班信息的结构体,静态链表类型
{
char terminal[6]; //定义起点站
char end[6]; //定义终点站
char flightNo[10]; //定义航班期
char startTime[5]; //定义起飞时间
char endTime[5]; //定义到达时间
char type[10]; //定义机型
int price; //定义票价
}infotype;
typedef struct
{
keytype keys[keylen]; //航班号,动态链表
infotype others;
int next;
}slnode;
typedef struct//定义存储信息的结构体
{
slnode sl[MAX];
int keynum; //信息数量,最大表长
int length; //信息长度,当前表长
}sllist; //顺序表类型
第四章详细设计
4.1程序设计说明
1、利用起点站、终点站、起飞时间、到达时间为关键字来查询航班信息。该查找算法使用最简单的顺序查找方法进行。即按照航班信息的结构体数组依次与被查找信息作比较,若找到,则输出结果即可。若没找到,则输出相关提示信息。
2、利用航班号作为关键字进行查询
由于设计内容要求使用基数排序对这组航班信息进行排序,并利用二分查找法对排好序的航班记录按航班号实现快速查找,因此次算法设计需包括基数排序和二分查找。
4.2算法设计与分析
4.2.1基数排序:
基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法,其是通过“分配”和“收集”两种操作对相应关键字进行排序。算法思路是按照排序关键字的每一位字符进行排序。排序前,先定义一个队列数组,每个队列数组与某个关键字位对应,某队列中只能存放与该关键字位对应的元素。首先先从关键字的最后一位字符进行判断,根据关键字位,把这个元素放入相应的队列中去,这就是“分配”过程。等到所有元素均被分配到相应队列中之后,在把各个队列中的元素,按照队列数组顺序,依次重新放回原元素数组中,这就是“收集”过程。经过“分配”和“收集”后,一次排序完成。接着再以关键字的倒数第二位字符作为关键字位进行上述排序过程,直到按照关键字的所有位全部进行排序过后,整个序列就成为有序序列,排序完成。
4.2.2二分查找
二分查找是对有序序列进行快速查找的一种有效方法。它的基本思想是,每次都与这个有序序列的中间元素进行比较,若找到,则输出元素信息,若没找到,则判断这个中间元素比待查找的元素大还是小,如果大,那么查找工作继续在该有序序列的前半段进行;反之,则继续查找该有序序列的后半段。如此一直查找,直到找到该元素或者查找到只剩下一个元素而这个元素与待查找元素不相符时,查找结束。前一种情况找到了待查找元素,输出该元素,后一种没有找到,输出相应提示信息。