《数据结构课程设计--航班信息查询与检索系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计--航班信息查询与检索系统.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构课程设计报告题目:航班信息查询与检索专业:班级:学号:姓名:任课老师:2022年12月26日 for(p=slf().next;p;p=slfpl.next)(j=slp.keysi%48;BEelseslejj.next=p;ej=p;)void collect(slnode *sl,int i,arrtype_n f,arrtype_n e) (intj,t;for(j=0;!fj;j+);slO.next=fj;t=ej;while(jradix_n-1)(for(j=j+1 ;jradix_n-1 &!fj;j+);(sltj.next=fj;t=ej;)slft.next=0
2、;void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e) (intj,p;for(j=0;jradix_c;j+)(f(j=ej=O;)for(p=slfO.next;p;p=slp.next)(j=slp.keysi%65;if(!fU)f|j=P;elseslej.next=p;ej=p;void collect_c(slnode *sl,int i,arrtype_c f,arrtype c e)( 一 一for(j=0;!fTj;j+);slO.next=fj;while(jradix_c-l)for(j=j+ l;jra
3、dix_c-l &!fj;j+);ifW)(slt.next=fj;)slt.next=0;void radixsort(sllist &1) (int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i=2;i-) (distribute(Lsi,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);void arrange(sllist &1) (int p,q,i;slnode temp;p=Lsl 0.n
4、ext;for(i=l;il.length;i+) while(pi)p=l.sl pj.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;)int binsearch(sllist 1,keytype key)(int low,high,mid;low=l;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
5、.slmid.keys)O)high二mid-1;elselow=mid+l;)return 0;)void seqsearch(sllist 1,keytype key J, int i)(int j,k,m=0;航班号起点站终点站航班期起飞时间到达时间机型票价 for(j= 1 ;j= 1 &i=5)航班信息查询系统L航班号2 .起点站3 .终点站4 .起飞时间5 .到达时间6 .退出系统请选择switch(i)输入要查询的航班号(字母要大写k二binsearch (l,key);if(k=O)无此航班信息,可能是输入错误! else(航班号起点站终点站航班期起飞时间到达时间机型票价k.o
6、thers.end,Lsl k.others.sche,l.sl k.others.timel,l.sl k.others.time2J.slLkJ.others.modelJ.sl kj.others.price); )break;输入要查询的航班起点站名seqsearch(l,key,i); break;输入要查询的航班终点站名seqsearch(l,key,i);break;输入要查询的航班起飞时间seqsearch(l,key,i); break;输入要查询的航班到达时间seqsearch(l,key,i); break;再见) ) )void inputdata(sllist &1)
7、(int i=+l.length;char yn=,y,;while(yn=y | |yn=Y)航班号起点站终点站航班期起飞时间到达时间机型票价LiJ.others.scheJ.sl “.others.time 1,1.si lij.others.time2,l.sl LiJ.others.model,&Lsli.others.price);+i; getchar();radixsort(l);arrange (1);继续输入吗l.length=i-l;) void main() (sllist 1;Lkeynum=6;l.length=(); inputdata(l); searchcon(
8、l);)目录一、设计题目1二、设计要求2三、概要设计21 .设计思路22 .流程图2四、详细设计31.定义数据类型32算法实现3五、测试数据61.录入航班信息62航班信息查询7六、收获与体味8一、设计题目设计一个航班信息查询与检索系统。可按航班的航班号、起点站、终点站、起飞时间 以及到达时间等信息进行查询。二、设计要求1、每一个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、 飞机型号、票价。如下表所示:航班信息表航班号起点站终点站航班期起飞时机到达时间机型票价CA1544合肥北京1.2.5105512407339602、要有输入模块。3、对航班信息进行排序与查找。三、概要
9、设计1、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。程序首先定义了一 个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数 据进行排序,最后执行数据查询和检索。在查询设计中,使用二分查找法对排好 序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间 查找的则采用顺序查询方法。2、流程图四、详细设计1 ,定义数据类型根据设计要求,设计中所用到的数据记录惟独航班信息,因此要定义相关的数据类型:typedef struct char start6;char end6;char sche10;char time 1 5;char time25;char
10、 model 4;int price; infotype;typedef struct keytype keyskeylen;infotype others;int next;slnode;typedef struct slnode slfmaxspace;int key num;int length;sllist;/起点站/终点站/航班期/起飞时间/到达时间/机型票价 瀛班记录类型/关键字/表结点播态链表,sl0为头结点/关键字长/当前表长/静态链表类型为了进行基数排序,需要定义在分配和采集操作时用到的指针数组:typedef int arrtype_n10;typedef int arrt
11、ype_c26;2 .算法实现/十进制数字指针数组26个字母指针数组(1 ) 一趟分配算法void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) intj,p;for(j=();jradix_n;j+)(fj=ej=O;)for(p=sl0.next;p;p=slp.next)(j=slpj.keysli%48;将数字字符转化为对应的数值型数字else/将p指向的结点插入到第j个结点slej.next=p; ej二 p;)(2 )一趟采集算法void collect(slnode *sl,int i,arrtype_n f,arrty
12、pe_n e)(intj,t;for(j=0;!fj;j+4-);/找第一个非空子表slO.next=fj;t=ej;while(jradix_n-1)(for(j 弓+1 ;j Vradix_n-1 &! fj ;j+)/;/找下一个非空子表if(fUD链接两个非空子表slt.next=0;(3 )链式基数排序算法 void radixsort(sllist &1) int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i=2;i)distribute(l.sl,i,fn,en);collect(l.sl,i,fn,en);for(i=l;i=0;i)d
13、istribute_c(l.sl,i,fc,ec); collect_c(l.sl,i,fc,ec);)void arrange(sllist &1)按指针链表整理静态链表int p,q,i;slnode temp;p=l.sl 0.next;for(i= 1 ;il.length;i+)while(pi)p=Lsl p.next; q=Lsl p.next; if(p!=i)temp=l.sl fp; l.sl p=l.sl i;/交换记录l.sl i=temp; Lsl i.next=p;p二q;(4 )4分查找函数定义int binsearch(sllist 1, key type ke
14、yf)(int low,high,mid;low=l;high=l.length;while(Iow=high)(mid=(low+high)/2;if(strcmp(key,Lsl mid.keys)=0) return mid;else if(strcmp(key,l.slmid.keys) kL k! k! kL* k! k!* 1.航班号* 2.起点站* 3,终点站* 4 .起飞时间* 5 .到达时间* 0.退出系统*17, 17, 7, k.j k17, 7,kA 7, 7,k1、4、*T请选择(0-5):A: 1显示:输入要查询的航班号(字母要大写):录入:MU4594显示:航班号
15、 起点站 终点站 航班期 起飞时间 到达时间 机型 票价-328MU4594-昆明-西安 -1.3.5.6 -1015 -1140-1160录入:2显示:输入要查询的航班起点站名:录入:青岛显示:航班号 起点站 终点站 航班期起飞时间 到达时间 机型票价SC7425 -青岛-海口 -136 -1920-2120 -DH4-16302显示:输入要查询的航班起点站名:录入:广州显示:*无此航班信息,可能是输入错误! *六、收获与体味本设计的重点和难点是在于对航班数据的排序和查找,以链式基数排序为 主线,用到了二分查找和顺序查找等知识,还有建立静态链表等。通过这次课程 设计,使我对C语言编程有了新的
16、认识。以前编程只是注重如何编写函数能够 完成所需要的功能,只是凭单纯的意识和简单的语句来堆砌出一段程序。但现在 编程感觉彻底不同了。在编写一个程序之前,自己能够综合考虑各种因素,选取 自己需要的数据结构,在编写每一个函数之前,可以子细斟酌比对,挑选出最适 合当前状况的算法。这样,即使在完整的程序还没有写出来之前,自己心中已经 有了明确的原图了。这样无形中就提高了自己编写的程序的质量。此外,我还体 会到深刻理解数据结构的重要性。惟独真正理解这样定义数据类型的好处,才干 用好这样一种数据结构。了解典型数据结构的性质是非常实用的,它往往是编写 程序的关键。附录源程序清单:#include #incl
17、ude #define maxspace 100#define keylen 7define radix_n 10#define radix_c 26typedef char keytype;typedef struct(char start6;char end6;char sche10J;char timel5;char time25;char model 14;int price; infotype;typedef struct(keytype keysfkeylen;infotype others;int next;Jslnode;typedef struct(slnode si maxspace;int keynum;intlength;Jsllist;typedef int arrtype_nradix_n;typedef int arrtype_clradix_c;void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) (intj,p;for(j=0;j radix_n ;j+) (fj=ej=O;
限制150内