航班信息的查询与检索系统.doc_第1页
航班信息的查询与检索系统.doc_第2页
航班信息的查询与检索系统.doc_第3页
航班信息的查询与检索系统.doc_第4页
航班信息的查询与检索系统.doc_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

航班信息查询与检索一、 问题描述 实现对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。航班信息表的样式如下:航班号起点站终点站班期起飞时间到达时间机型票价CA1544合肥北京1、2、4、510:5512:40733960MU5341上海广州每日14:2016:15M901280CZ3869重庆深圳2、4、608:5510:357331010其中航班号一项的格式为:前两个大写字母表示航空公司的名称,后4位为航班编号。基本要求: (1)对飞机航班信息进行排序; (2)采用折半查找思想完成查找。可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。测试数据要求: 测试的数据不得少于10个,不得有重复的航班。 二、 设计思想根据题目所要求,程序必须实现航班信息的录入和查询。程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。三、 数据描述typedef struct node char numberMAXN; /航班号 time start; /起飞时间 time end; /到达时间 char start_stationMAXN; /起点站 char end_stationMAXN; /终点站 char typeMAXN; /飞机型号 char priceMAXN; /票价 struct node*link;NODE;四、 算法描述1、二分查找int binSearch(NODE* n,char *strinput,int low, int high)/ 二分查找 int i; int middle = (high+low)/2; if (high number) 0) low = middle; else i = middle; return i; binSearch(getindex(n,middle),strinput,low,high);int bisect(char a,int n,char sMAXN)/二分查找 int i,j,m; i=0; j=n-1; while(i link; return counti;五、 源代码#include #include #include #define MAXN 100typedef struct char hourMAXN; char minuteMAXN; time;typedef struct node char numberMAXN; /航班号 time start; /起飞时间 time end; /到达时间 char start_stationMAXN; /起点站 char end_stationMAXN; /终点站 char typeMAXN; /飞机型号 char priceMAXN; /票价 struct node*link;NODE;NODE *create_link_list(int n) int i; NODE *head,*p,*q; if(n=0)return(NULL); head=(NODE*)malloc(sizeof(NODE); for(i=0;i numberi=0; head-start.houri=0; head-start.minutei=0; head-end.houri=0; head-end.minutei=0; head-start_stationi=0; head-end_stationi=0; head-typei=0; head-pricei=0; p=head; for(i=1;i number); printf(请输入起飞时间(时 分):); scanf(%s %s,&(p-start.hour),&(p-start.minute); printf(请输入达到时间(时 分):); scanf(%s %s,&(p-end.hour),&(p-end.minute); printf(请输入起点站 终点站:); scanf(%s %s,&(p-start_station),&(p-end_station); printf(请输入飞机型号:); scanf(%s,&(p-type); printf(请输入票价:); scanf(%s,&(p-price); printf(n); q=(NODE*)malloc(sizeof(NODE); p-link=q; p=q; printf(请输入航班号:); scanf(%s,&(p-number); printf(请输入起飞时间(时 分):); scanf(%s %s,&(p-start.hour),&(p-start.minute); printf(请输入达到时间(时 分):); scanf(%s %s,&(p-end.hour),&(p-end.minute); printf(请输入起点站 终点站:); scanf(%s %s,&(p-start_station),&(p-end_station); printf(请输入飞机型号:); scanf(%s,&(p-type); printf(请输入票价:); scanf(%s,&(p-price); printf(n); getchar(); p-link=NULL; return(head);void insert(NODE *p_head,NODE *q) NODE *p; if(*p_head=NULL) *p_head=q; else p=*p_head; while(p!=NULL&p-link!=NULL) p=p-link; p-link=q;unsigned int countit(NODE* n)/计算链表长度 unsigned int counti = 0; while(n!=NULL) counti+,n=n-link; return counti;NODE* getindex(NODE* head, int num);NODE* getindex(NODE* head, int num)/取得index为num 的节点! if(numcountit(head) return NULL; NODE* rn = head; while(-num0) rn = rn-link; return rn;int binSearch(NODE* n,char *strinput,int low, int high)/ 二分查找 int i; int middle = (high+low)/2; if (high number) 0) low = middle; else i = middle; return i; binSearch(getindex(n,middle),strinput,low,high);int bisect(char a,int n,char sMAXN)/二分查找 int i,j,m; i=0; j=n-1; while(i start_station,&v0);head=head-link); return(head);NODE *search2(NODE *head,char wMAXN)/到达站顺序查找 for(;head!=NULL&strcmp(head-end_station,&w0);head=head-link); return(head);NODE *search3(NODE *head,char xMAXN,char yMAXN)/起飞时间顺序查找 for(;head!=NULL&(strcmp(head-start.hour,&x0) | strcmp(head-start.minute,&y0);head=head-link); return(head);NODE *search4(NODE *head,char tMAXN,char uMAXN)/到达时间顺序查找 for(;head!=NULL&(strcmp(head-end.hour,&t0) | strcmp(head-end.minute,&u0);head=head-link); return(head);void output(NODE *p) while(p!=NULL) printf(航班信息:n); printf(航班号:%sn,p-number); printf(起飞时间:%s点%s分,p-start.hour,p-start.minute); printf(到达时间:%s点%s分n,p-end.hour,p-end.minute); printf(起点站:%s,p-start_station); printf(到达站:%sn,p-end_station); printf(飞机型号:%s ,p-type); printf(票价:%s元nn,p-price); p=p-link; NODE *rank( NODE *head) NODE *q=0,*p=0,*t,*h1; h1=head-link; head-link=NULL; while(h1!=NULL) t=h1; h1=h1-link; p=head; q=head; while( p!=NULL & strcmp(t-number, p-number)0 ) q=p; p=p-link; if(q = p) t-link=p; head=t; else t-link=p; q-link=t; return head;int main(int argc, char* argv) NODE *p,*q,*r; int a,b,i,j,n; int count=0; char oMAXN; char sMAXN; char vMAXN; char wMAXN; char xMAXN; char yMAXN; char tMAXN; char uMAXN; for(i=0;i MAXN;i+) oi=0; si=0; vi=0; wi=0; xi=0; yi=0; ti=0; ui=0; while(true) printf(【航班信息的查询与检索】n); printf(*n); printf( 1.建立航班信息n); printf( 2.插入航班信息n); printf( 3.按航班号进行排序 n); printf( 4.航班信息查询n); printf( 5.显示航班信息n); printf( 0.退出本系统n); printf(*n); printf(请输入你的选择:); scanf(%d,&a); getchar(); switch(a) case 1: printf(请输入你所要建立的航班信息个数:); scanf(%d,&n); p=create_link_list(n); break; case 2: q=create_link_list(1); insert(&p,q); break; case 3: p = rank(p); break; case 4: printf(n1、按照航班号查询.n); printf(2、按照起点站查询.n); printf(3、按照到达站查询.n); printf(4、按照起飞时间查询.n); printf(5、按照到达时间查询.n); scanf(%d,&b); getchar(); switch(b) case 1: p=rank(p); printf(请输入您所要找的航班号:); scanf(%s,s); if( binSearch(p,s,1, countit(p) ) printf(scuess!n);break; case 2: printf(请输入起点站); scanf(%s,&vMAXN); if(search1(p,&vMAXN)!=NULL) printf(查询成功!n); r=search1(p,&vMAXN); output(r); else printf(查询失败,该信息录中没有该起点站!n); break; case 3: printf(请输入到达站); scanf(%s,&wMAXN); if(search2(p,&wMAXN)!=NULL) printf(查询成功!n); r=search2(p,&wMAXN); output(r); else printf(查询失败,该信息录中没有该到达站!n); break; case 4: printf(请输入起飞时间(时 分); scanf(%s %s,&xMAXN,&yMAXN); if(search3(p,&xMAXN,&yMAXN)!=NULL) printf(查询成功!n); r=search3(p,&xMAXN,&yMAXN); output(r); else printf(查询失败,该信息录中没

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论