好文档 - 专业文书写作范文服务资料分享网站

航班信息查询与检索系统方案

天下 分享 时间: 加入收藏 我要投稿 点赞

. . .

课程设计报告

课程设计名称:数据结构课程设计

题目:设计并实现一个航班信息查询与检索系统

院系:计算机学院 专业: 班级: 学号: 姓名: 指导教师:

专业资料.

学术诚信声明

本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。

本人签名: 日期: 年 月 日

2

3

课程设计名称 数据结构课程设计 学生姓名 题目名称 起止日期 专业 学号 班级 设计并实现一个航班信息查询与检索系统 2016 年 12 月 18 日起至 2017 年 1 月 4 日止 课设内容和要求: 对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间 和到达时间等信息进行查询。 要求: 1. 设计数据结构 2. 选择合适的排序和查找算法 3. 设计软件的功能结构 4. 采用模块化编程 5. 给出现实方法和算法 6. 按课程设计规范撰写课程设计报告 参考资料: [1] 严蔚敏、陈文博,数据结构及应用算法教程[M].北京:清华大学出版社,2011.5 [2] 张小莉、王苗、罗文劼,数据结构与算法[M].北京:机械工业出版社,2014.4 教研室审核意见: 教研室主任签字: 指导教师(签名) 学 生(签名) 年 年 月 月 日 日 4

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

目 录

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

6

1、题目介绍

设计一个航班信息查询与检索系统。可按航班的航班号、起点站、终点站、起飞时间

以及到达时间等信息进行查询。

2、课程设计要求

1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。如下表所示: 航班号 CA1544 MU5341 CZ3869

起点站 合肥 上海 重庆 终点站 北京 广州 深圳 班期 1.2.4.5 每日 2.4.6 起飞时间 到达时间 机型 1055 1420 0855 1240 1615 1035 733 M90 733 票价 960 1280 1010 2、对航班信息进行排序与查找。

3、概要设计

3.1、设计思路

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

3.2、流程图

定义数据类型 数据输入、排序 显示输出 接受查找条件、查找关键字 7

按航班号查询 开 始 录入信息提示 信息录入 查询菜单显示 输入查询序号 判断符号是否合法

按起飞时间查询 按到达时间查询 按起点站查询 按终点站查询 输出查询结果 结 束 8

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个字母指针数组

9

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]H; //将数字字符转化为对应的数值型

数字

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

10

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

11

将普通的线性表改为静态链表 按最低位优先依次对各关键字

进行分配和收集

void arrange(sllist &l) //按指针链表整理静态链表 {

int p,q,i; slnode temp; p=l.sl[0].next; for(i=1;i

while(p

temp=l.sl[p]; l.sl[p]=l.sl[i];

l.sl[i]=temp; //l.sl[i].next=p; } p=q; } }

折半查找函数定义

int binsearch(sllist l,char key[]) {

int low,high,mid; low=1; high=l.length; while(low<=high) {

mid=(low+high)/2;

12

交换记录

if(strcmp(key,l.sl[mid].keys)==0) return mid;

else if(strcmp(key,l.sl[mid].keys)<0) high=mid-1; else

low=mid+1; } return 0; }

5、测试数据

编译后运行,显示: 录入信息^_^

航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价 录入:CA1544合肥 北京 1.2.4.5 1055 1240 733 960

显示:是否继续?y/n: 录入:y

显示:航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价 录入:MU5341 上海 广州 每日 1420 1615 M90 1280

显示:是否继续?y/n: 录入:y

显示:航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价 录入:CZ3869 重庆 深圳 2.4.6 0855 1035 733 1010

显示:是否继续?y/n:

13

录入:n

录入航班信息后,屏幕显示: ------------------------------- * 航班信息查询系统 *

------------------------------- * 1.航 班 号 * * 2.起 点 站 * * 3.终 点 站 * * 4.起飞时间 * * 5.到达时间 * * 0.退出 *

----------------------------- (0-5)号服务项目: 录入:1

显示:输入要查询的航班号(字母要大写): 录入:CA1544

显示:航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价 CA1544合肥 北京 1.2.4.5 1055 1240 733 960

14

录入:2

显示:输入要查询的航班起点站: 录入:合肥

显示:航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价 显示:CA1544合肥 北京 1.2.4.5 1055 1240 733 960

15

录入:2

显示:输入要查询的航班起点站: 录入:广州 显示:

16

附录

源程序:

#include #include #define max 100 #define keylen 7

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[max];

17

int keynum; int length;

}sllist;

typedef int arrtype_n[10]; typedef int arrtype_c[26];

void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) { }

void collect(slnode *sl,int i,arrtype_n f,arrtype_n e) {

int j,p;

for(j=0;j<10;j++) { }

for(p=sl[0].next;p;p=sl[p].next) { }

j=sl[p].keys[i]H; if(!f[j]) f[j]=p; else

sl[e[j]].next=p; e[j]=p; f[j]=e[j]=0;

int j,t;

for(j=0;!f[j];j++); sl[0].next=f[j];

18

}

t=e[j]; while(j<10-1) { }

sl[t].next=0;

for(j=j+1;j<10-1&&!f[j];j++);

if(f[j]) { }

sl[t].next=f[j]; t=e[j];

void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e) { }

19

int j,p;

for(j=0;j<26;j++) { }

for(p=sl[0].next;p;p=sl[p].next) {

j=sl[p].keys[i]e; if(!f[j]) f[j]=p; f[j]=e[j]=0;

else }

sl[e[j]].next=p; e[j]=p;

void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e) { int j,t;

for(j=0;!f[j];j++); sl[0].next=f[j]; t=e[j]; while(j<26-1) { for(j=j+1;j<26-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[l.length].next=0;

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

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

20

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

}

}

void arrange(sllist &l) { int p,q,i; slnode temp; p=l.sl[0].next; for(i=1;i

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

}

21

int binsearch(sllist l,char key[]) { }

void seqsearch(sllist l,char key[],int i) {

int low,high,mid; low=1; high=l.length; while(low<=high) { } return 0;

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;

else

low=mid+1;

int j,k,m=0;

printf(\printf(\航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价 \\n\for(j=1;j<=l.length;j++) {

switch(i) {

case 2:k=strcmp(key,l.sl[j].others.start);break; case 3:k=strcmp(key,l.sl[j].others.end);break;

22

}

case 4:k=strcmp(key,l.sl[j].others.time1);break; case 5:k=strcmp(key,l.sl[j].others.time2);break;

if(k==0) {

m=1;

printf(\

\\n\sl[j].others.time1,l.sl[j].others.time2,l.sl[j].others.model,l.sl[j].others.price); }

void searchcon(sllist l) {

}

}

if(m==0)

printf(\无此航班信息,可能是输入错误! \\n\

printf(\

char key[keylen]; int i=1,k; while(i>=1&&i<=5) {

printf(\printf(\航班信息查询系统 *\\n\printf(\printf(\航 班 号 *\\n\

23

printf(\起 点 站 *\\n\printf(\终 点 站 *\\n\printf(\起飞时间 *\\n\printf(\到达时间 *\\n\printf(\退出 *\\n\printf(\printf(\号服务项目:\scanf(\printf(\switch(i) {

case 1:printf(\输入要查询的航班号(字母要大写):\

scanf(\k=binsearch(l,key);

printf(\

if(k==0)

printf(\无此航班信息,可能是输入错误! \\n\

else {

printf(\航班号 起点站 终点站 班期 起飞时间 到达时间 机

型 票价 \\n\

printf(\

\\n\sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price);

}

printf(\

break;

24

}

} }

case 2:printf(\输入要查询的航班起点站:\

scanf(\seqsearch(l,key,i); break;

case 3:printf(\输入要查询的航班终点站:\

scanf(\seqsearch(l,key,i); break;

case 4:printf(\输入要查询的航班起飞时间:\

scanf(\seqsearch(l,key,i); break;

case 5:printf(\输入要查询的航班到达时间:\

scanf(\seqsearch(l,key,i); break;

case 0:printf(\宝宝走了\\n\\n\

void inputdata(sllist &l) {

25

int i=++l.length; char yn='y';

while(yn=='y'||yn=='Y') {

printf(\信息录入^_^\\n\\n\

printf(\航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价\\n\

scanf(\

sl[i].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&l.sl[i].others.price); ++i; getchar(); radixsort(l); arrange(l);

printf(\是否继续?\\ny/n:\

scanf(\

}

l.length=i-1;

}

void main() { sllist l; l.keynum=6; l.length=0; inputdata(l); searchcon(l);

}

欢迎您的光临,Word文档下载后可修改编辑双击可删除页眉页脚谢谢!希望您提出您宝贵的意见,你的意见是我进步的动力。赠语; 1、如果我们做与不做都会有人笑,如果做不好与做得好还会有人笑,那么我们索性就做得更好,来给人笑吧! 2、现在你不玩命的学,以后命玩你。、我不知道年少轻狂,我只知道胜者为王。、不要做金钱、权利的奴隶;应学会做“金钱、权利”的主人。、什么

赏的风景,是自己奋斗的足迹。、压力不是有人比你努力,而是那些比你牛×几倍的人依然比你努力。26

时候离光明最近?那就是你觉得黑暗太黑的时候。、最值得欣

航班信息查询与检索系统方案

...课程设计报告课程设计名称:数据结构课程设计题目:设计并实现一个航班信息查询与检索系统院系:计算机学院专业:班级:学号:姓名:指导教师:
推荐度:
点击下载文档文档为doc格式
1g0n997mdt7z7sh75m1a072ie1yi3600n36
领取福利

微信扫码领取福利

微信扫码分享