数据结构课程设计航班信息查询与检索
数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)
算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:按站点查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#include<>#include<>#include<>#define N 6 =NULL; queue[i].e=NULL; ==NULL) queue[k].f=p; ->next=p; =p; p=p->next;}i=0;while(queue[i].f==NULL) i++; ; head=queue[i].f; !=NULL){ p->next=queue[i].f; p=queue[i].e; } light_number;cout<<" "<<F[i].start_time;cout<<" "<<F[i].arrived_time;cout<<" "<<F[i].start_address;cout<<" "<<F[i].arrived_address;cout<<" "<<F[i].work_date;cout<<" "<<F[i].FlightType;cout<<" "<<F[i].fare<<"元"<<endl;}light_number,p->;strcpy(F[i].start_time,p->;strcpy(F[i].arrived_time,p->;strcpy(F[i].start_address,p->;strcpy(F[i].arrived_address,p->;strcpy(F[i].work_date,p->;strcpy(F[i].FlightType,p->;F[i].fare=p->;p=p->next;}}show the mainmenu (显示主菜单)\n"<<endl;cout<<" 1. Find by flight number(按航班号查询)\n"<<endl;cout<<" 2. Find by start time(按起飞时间查询)\n"<<endl;cout<<" 3. Find by arrived time(按到达时间查询)\n"<<endl;cout<<" 4. Find by start address(按起飞地点查询)\n"<<endl;cout<<" 5. Find by arrived address(按目的地点查询)\n"<<endl;cout<<" 6. Find by the fare(按票价范围查询)\n"<<endl;cout<<" ----其他键退出"<<endl;cout<<" ===========================================================\n"<<endl;while(1){cout<<"请输入服务命令:";cin>>y;switch(y){case 0: mainmenu();break;case 1:F_By_FN(Flight);break;case 2:F_By_Time(Flight,1);break;case 3:F_By_Time(Flight,2);break;case 4:F_By_Address(Flight,1);break;case 5:F_By_Address(Flight,2);break;case 6:F_By_fare(Flight);break;default :cout<<" 谢谢惠顾!"<<endl;break;}cout<<"是否退出(Y/N):";cin>>ch;if(ch=='Y'||ch=='y') break;}}light_number)==0) {Cout_info2_2(F,mid);break;}else if(strcmp(Num,F[mid].flight_number)<0) high=mid-1;else low=mid+1;}cout<<" *************对不起,没有您要查找的航班号********** "<<endl; }tart_time)==0) Cout_info2_2(F,i);}if(Time==2) rrived_time)==0) Cout_info2_2(F,i);}}cout<<" *******对不起,该时间没有航班******* "<<endl;}tart_address)==0) Cout_info2_2(F,i);}if(AD==2) rrived_address)==0) Cout_info2_2(F,i);}}cout<<" ********对不起,该站点不存在******** "<<endl;}are && T2>=F[i].fare) Cout_info2_2(F,i);}cout<<" *******对不起,没有适合您的航班,请修改您的票价范围********" <<endl;}ext=&element[i+1];element[10].next=NULL;radixSort(&p, D, R);我们对链表、队列、结构体的应用更娴熟,为我们更好的了解课本内容,改进不足提供了件。
数据结构课程设实验报告
《数据结构程序设计》实验报告专业**********学号 ******* 姓名****************学院****年**月一.实验名称:航班信息的查询与检索【问题描述】排序和查找是在数据信息处理中使用频度极高的操作。
为了加快查找的速度,需要先对数据记录按关键字排序。
当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、时间、价格及机型等信息。
在这个飞机航班数据的信息模型中,航班号是关键字,而且是具有结构特点的一类关键字。
因为航班号是字母数字混编的,例如CZ3869,这种记录集合是一个适合于多关键字排序的例子。
系统总体功能程序流程图:详细设计:#include<stdio.h>#include<stdlib.h>#include<string.h>int i,j;int max=0;struct airplane{char num[10];char start[10];char final[10];char day[10];char on[10];char off[10];char mode[10];char ticket[10];}air[10]={0};struct airplane_num{int a;char b[5];int c;}air_num[10];void Input();void Search();void Print();void Menu();int Two_Devide(int x); void Menu_Choose();void main(){air_num[0].a=1544;air_num[1].a=1836;air_num[2].a=3528;air_num[3].a=3682;air_num[4].a=3869;air_num[5].a=4594;air_num[6].a=5341;air_num[7].a=7425; strcpy(air_num[0].b,"CA"); strcpy(air_num[1].b,"HU"); strcpy(air_num[2].b,"CZ"); strcpy(air_num[3].b,"MU"); strcpy(air_num[4].b,"CZ"); strcpy(air_num[5].b,"MU"); strcpy(air_num[6].b,"MU"); strcpy(air_num[7].b,"SC");air_num[0].c=0;air_num[1].c=4;air_num[2].c=5;air_num[3].c=3;air_num[4].c=2;air_num[5].c=6;air_num[6].c=1;air_num[7].c=7;Input();for(i=0;i<8;i++)printf("\n\n\n");Menu_Choose();getchar();}void Input(){strcpy(air[0].num,"CA1544"); strcpy(air[0].start,"HeFei"); strcpy(air[0].final,"BeiJing"); strcpy(air[0].day,"1-2-4-5"); strcpy(air[0].on,"1055");strcpy(air[0].off,"1240");strcpy(air[0].mode,"733"); strcpy(air[0].ticket,"960"); strcpy(air[1].num,"MU5341"); strcpy(air[1].start,"ShangHai"); strcpy(air[1].final,"GuangZhou"); strcpy(air[1].day,"full");strcpy(air[1].on,"1420");strcpy(air[1].off,"1615");strcpy(air[1].mode,"M90"); strcpy(air[1].ticket,"1280"); strcpy(air[2].num,"CZ3869"); strcpy(air[2].start,"ChongQing"); strcpy(air[2].final,"ShenZhen"); strcpy(air[2].day,"2-4-6"); strcpy(air[2].on,"1035");strcpy(air[2].off,"1035");strcpy(air[2].mode,"733");strcpy(air[2].ticket,"1010");strcpy(air[3].num,"MU3682");strcpy(air[3].start,"GuiLin");strcpy(air[3].final,"NanJing");strcpy(air[3].day,"2-3-4-6-7");strcpy(air[3].on,"2050");strcpy(air[3].off,"2215");strcpy(air[3].mode,"M90");strcpy(air[3].ticket,"1380");strcpy(air[4].num,"HU1836");strcpy(air[4].start,"ShangHai");strcpy(air[4].final,"BeiJing");strcpy(air[4].day,"full");strcpy(air[4].on,"0940");strcpy(air[4].off,"1120");strcpy(air[4].mode,"738");strcpy(air[4].ticket,"1250");strcpy(air[5].num,"CZ3528");strcpy(air[5].start,"ChenDu");strcpy(air[5].final,"ShaMeng");strcpy(air[5].day,"1-3-4-5-7");strcpy(air[5].on,"1510");strcpy(air[5].off,"1650"); strcpy(air[5].mode,"CRJ"); strcpy(air[5].ticket,"1060");strcpy(air[6].num,"MU4594");strcpy(air[6].start,"KunMing");strcpy(air[6].final,"XiAn");strcpy(air[6].day,"1-3-5-6"); strcpy(air[6].on,"1015"); strcpy(air[6].off,"1140"); strcpy(air[6].mode,"328"); strcpy(air[6].ticket,"1160");strcpy(air[7].num,"SC7425");strcpy(air[7].start,"QIngDao");strcpy(air[7].final,"HaiKou");strcpy(air[7].day,"1-3-6"); strcpy(air[7].on,"1920"); strcpy(air[7].off,"2120"); strcpy(air[7].mode,"DH4"); strcpy(air[7].ticket,"1630");}void Print(){printf("********************MENU*********** **********\n\n");printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");printf("%6s%11s%11s%11s%7s%9s%10s%7s\n",air[i ].num,air[i].start,air[i].final,air[i].day,air[i].on,air[i].of f,air[i].mode,air[i].ticket);}void sort(){int i,j,flag;airplane t[10];airplane temp;for(i=0;i<10;i++){flag=0;for(j=0;j<10-1;j++)if(t[j].num>t[j+1].num){flag=1;strcpy(temp.num,t[j].num);strcpy(temp.start,t[j].start);strcpy(temp.final,t[j].final);strcpy(temp.day,t[j].day);strcpy(temp.on,t[j].on);strcpy(temp.off,t[j].off);strcpy(temp.mode,t[j].mode);strcpy(temp.ticket,t[j].ticket);strcpy(t[j].num,t[j+1].num);strcpy(t[j].start,t[j+1].start);strcpy(t[j].final,t[j+1].final);strcpy(t[j].day,t[j+1].day);strcpy(t[j].on,t[j+1].on);strcpy(t[j].off,t[j+1].off);strcpy(t[j].mode,t[j+1].mode);strcpy(t[j].ticket,t[j+1].ticket);strcpy(t[j+1].num,temp.num);strcpy(t[j+1].start,temp.start);strcpy(t[j+1].final,temp.final);strcpy(t[j+1].day,temp.day);strcpy(t[j+1].on,temp.on);strcpy(t[j+1].off,temp.off);strcpy(t[j+1].mode,temp.mode);strcpy(t[j+1].ticket,temp.ticket);}if(flag==0)break;}}void Menu(){printf("******************菜单*****************************\n");printf("1.按航班号查询:\n");printf("2.按起点站查询:\n");printf("3.按终点站查询:\n");printf("4.按起飞时间查询:\n");printf("5.按到达时间查询:\n");printf("6.按机型查询:\n");printf("7.按票价查询:\n");printf("8.按航班号排序显示:\n");printf("************************************* ***************\n");printf("输入1-8选择:\n");}int Two_Devide(int x){int low=0,high=7,mid;printf("%d\n",x);while(low<=high){mid=(low+high)/2;if(x>air_num[mid].a) low=mid+1;if(x<air_num[mid].a) high=mid-1;if(x==air_num[mid].a) return mid;}}void Search(){int a; char b[5]; int y,z;scanf("%s",b);scanf("%d",&a);y=Two_Devide(a);if(strcmp(b,air_num[y].b)==0){z=air_num[y].c; i=z; Print();}} void Menu_Choose(){int key,key2;charnum[10],start[10],final[10],on[10],off[10],mode[10],ti cket[10];do{Menu();scanf("%d",&key);switch(key){case 1:scanf("%s",num); for(i=0;i<8;i++){if(strcmp(num,air[i].num)==0)Print();} break;case 2:scanf("%s",start); for(i=0;i<8;i++){if(strcmp(start,air[i].start)==0)Print();} break;case 3:scanf("%s",final); for(i=0;i<8;i++){if(strcmp(final,air[i].final)==0) Print();} break;case 4:scanf("%s",on); for(i=0;i<8;i++){if(strcmp(on,air[i].on)==0) Print();} break;case 5:scanf("%s",off); for(i=0;i<8;i++){if(strcmp(off,air[i].off)==0) Print();} break;case 6:scanf("%s",mode); for(i=0;i<8;i++){if(strcmp(mode,air[i].mode)==0) Print();} break;case 7:scanf("%s",ticket); for(i=0;i<8;i++){if(strcmp(ticket,air[i].ticket)==0) Print();} break;case 8:sort();printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");for(i=0;i<10-1;i++)printf("%6s%11s%11s%11s%7s%9s%10s%7s\n",air[i ].num,air[i].start,air[i].final,air[i].day,air[i].on,air[i].of f,air[i].mode,air[i].ticket);break;}printf("按任意数字继续:\n");scanf("%d",&key2);}while(key2!=0);}调试分析:显示功能调试:航班号查询测试选择1,然后输入航班号,例如MU4594起点站查询测试:选择2,然后输入起点站,例如KunMing终点站查询测试:选择3,然后输入终点站,例如XiAn起飞时间查询测试:选择4,然后输入起飞时间,例如1015(10点15分)到达时间查询测试:选择5,然后输入到达时间,例如1140(11点40分)机型查询测试:选择6,然后输入机型,例如328票价查询测试:选择7,然后输入票价,例如1160航班号排序显示测试:选择8课程总结:通过做这次的课程设计我自学到很多新的东西,而且对以前所学的知识有了更深的理解:1.设计图对程序的作用,至今才真正体会到。
航班信息查询课程设计
航班信息查询 课程设计一、课程目标知识目标:1. 学生能理解航班信息查询的基本概念和重要性。
2. 学生掌握航班信息查询的基本步骤和所需的关键信息。
3. 学生了解航班信息查询中涉及到的地理、数学和时间知识。
技能目标:1. 学生能够熟练运用计算机及相关软件进行航班信息查询。
2. 学生能够分析航班信息,准确判断航班的状态(如延误、取消等)。
3. 学生能够运用所学知识解决实际生活中的航班信息查询问题。
情感态度价值观目标:1. 培养学生对航班信息查询的兴趣,激发学生学习信息技术的热情。
2. 培养学生的团队协作意识,让学生在合作中共同解决问题。
3. 引导学生树立正确的价值观,尊重信息,遵循道德规范进行信息查询。
本课程针对年级:初中二年级课程性质:信息技术与地理、数学等学科的交叉课程,以实用性为主,注重培养学生的实际操作能力和解决问题的能力。
学生特点:具有一定的计算机操作基础,对新鲜事物充满好奇,具备一定的合作能力。
教学要求:结合学生的年龄特点和知识水平,通过实际操作、案例分析等教学方法,使学生在轻松愉快的氛围中掌握航班信息查询的方法,提高学生的信息技术素养。
同时,关注学生的情感态度价值观的培养,使学生在学习过程中形成正确的价值观和积极的学习态度。
教学过程中,将目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 航班信息查询的基本概念- 航班的定义与分类- 航班信息的组成要素2. 航班信息查询的步骤与方法- 航班查询的常用网站与软件介绍- 航班查询的基本步骤- 航班信息的筛选与解读3. 航班信息查询中的实用技巧- 如何快速查找航班信息- 如何判断航班状态- 如何应对航班延误或取消4. 航班信息查询在实际生活中的应用- 案例分析:出行计划制定- 案例分析:航班延误或取消的应对策略教学内容安排与进度:第一课时:航班信息查询的基本概念与分类第二课时:航班信息查询的步骤与方法第三课时:航班信息查询中的实用技巧第四课时:航班信息查询在实际生活中的应用教材关联:本教学内容与《信息技术》课本第八章“网络应用”相关,涉及航班信息查询的实践操作和案例分析。
数据结构课程设计航班查询与检索
数据结构课程设计航班查询与检索航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时刻查询:按站点查询:二分法查询:二:算法分析:程序要紧采纳结构体链表顺序表队列要紧算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#include<iostream.h>#include<string.h>#include<stdio.h>#define N 6 //航班数//航班信息typedef struct flight{char flight_number[10]; //航班号char start_address[10]; //起飞站char arrived_address[10]; //终点站char work_date[10]; //班期char start_time[6]; //起飞时刻char arrived_time[6]; //到达时刻char FlightType[4]; //机型int fare; //票价}DataType;struct flight Flight[N];//-----------按航班号进行基数排序-----------typedef char KeyType;#define D 7 // D为排序码的最大位数#define R 'a' // R为基数,那个地点为小于字母'a'代表的整型值struct Node; //单链表结点类型typedef struct Node RadixNode;struct Node{KeyType key[D]; //关键字DataType info; //数据信息RadixNode *next;};typedef RadixNode * RadixList;typedef struct QueueNode{RadixNode *f; //对列的头指针RadixNode *e; //对列的尾指针}Queue;Queue queue[R];//用队列表示桶void radixSort(RadixList * plist, int d, int r){int i,j,k;RadixNode *p, *head;head=(*plist)->next;for(j=d-1; j>=0; j--) //进行d次分配和收集{p=head;for(i=0; i<r; i++){queue[i].f=NULL; queue[i].e=NULL; //清队列}while(p!=NULL){k=p->key[j]; //按排序码的第j个重量进行分配if(queue[k].f==NULL) queue[k].f=p; // 若第k个堆为空,则当前记录为队头else (queue[k].e)->next=p; // 否则当前记录链接到第k队的队尾queue[k].e=p;p=p->next;}i=0;while(queue[i].f==NULL) i++; // 从r个队列中找出第一个非空的队列p=queue[i].e; head=queue[i].f; //head为收集链表的头指针for(i++; i<r; i++)if(queue[i].f!=NULL){ p->next=queue[i].f; p=queue[i].e; } // 收集非空队列p->next=NULL;}(*plist)->next=head;}//初始化航班信息struct Node element[N+1]={" "," "," "," "," "," "," "," ",0,NULL,//表头"CA1544","CA1544","合肥","北京","1245 ","10:55","12:40","733",960,NULL,"MU5341","MU5341","上海","广州","每日","14:20","16:15","M90",1280,NULL, "CZ3869","CZ3869","重庆","深圳","246 ","08:55","10:35","733",1010,NULL, "MU3682","MU3682","桂林","南京","23467","20:50","22:15","M90",1380,NULL,"HU1836","HU1836","上海","北京","每日","09:40","11:20","738",1250,NULL,"CZ3528","CZ3528","成都","厦门","13457","15:10","16:50","CRJ",1060,NULL,};//------------信息显示------------//按表的格式输出某个航班信息//显示头部信息void Cout_info1(){cout<<" ****************************************\n"<<endl;cout<<" * 欢迎您使用*\n"<<endl;cout<<" * 航班信息表*\n"<<endl;cout<<" ****************************************\n"<<endl;cout<<" 航班号起飞时刻到达时刻起飞站终点站班期机型票价\n"<<endl;}//显示主体信息void Cout_info2_1(Node p[])//方式一{cout<<" "<<p->info.flight_number;cout<<" "<<p->info.start_time;cout<<" "<<p->info.arrived_time;cout<<" "<<p->info.start_address;cout<<" "<<p->info.arrived_address; cout<<" "<<p->info.work_date;cout<<" "<<p->info.FlightType;cout<<" "<<p->info.fare<<"元"<<endl;}void Cout_info2_2(flight F[],int i)//方式二{cout<<" "<<F[i].flight_number;cout<<" "<<F[i].start_time;cout<<" "<<F[i].arrived_time;cout<<" "<<F[i].start_address;cout<<" "<<F[i].arrived_address; cout<<" "<<F[i].work_date;cout<<" "<<F[i].FlightType;cout<<" "<<F[i].fare<<"元"<<endl;}//显示所有航班信息void output_ALL_info1(Node element[]) //方式一{RadixList p=element;Cout_info1();p=p->next;while(p!=NULL){Cout_info2_1(p);p=p->next;}cout<<endl;}void output_ALL_info2(flight F[]) //方式二{Cout_info1();for(int i=0;i<N;i++){Cout_info2_2(F,i);}cout<<endl;}//--------------信息复制----------------//将排好的序列(链表)转化成顺序表储备形式void copy(flight F[],Node element[]){RadixList p=element;p=p->next;int i;for(i=0;i<N && p!=NULL;i++){strcpy(F[i].flight_number,p->info.flight_number);strcpy(F[i].start_time,p->info.start_time);strcpy(F[i].arrived_time,p->info.arrived_time);strcpy(F[i].start_address,p->info.start_address);strcpy(F[i].arrived_address,p->info.arrived_address);strcpy(F[i].work_date,p->info.work_date);strcpy(F[i].FlightType,p->info.FlightType);F[i].fare=p->info.fare;p=p->next;}}//---------------服务菜单--------------void F_By_Time(flight F[],int);void F_By_Address(flight F[],int);void F_By_fare(flight F[]);void F_By_FN(flight F[]);//主菜单void mainmenu(){char ch;int y;cout<<" 主菜单\n"<<endl;cout<<"===========================================================\n"<<endl;cout<<" Please choose: (input the number)(输入查询/排序命令)\n"<<endl; cout<<" 0. show the mainmenu (显示主菜单)\n"<<endl;cout<<" 1. Find by flight number(按航班号查询)\n"<<endl;cout<<" 2. Find by start time(按起飞时刻查询)\n"<<endl;cout<<" 3. Find by arrived time(按到达时刻查询)\n"<<endl;cout<<" 4. Find by start address(按起飞地点查询)\n"<<endl;cout<<" 5. Find by arrived address(按目的地点查询)\n"<<endl;cout<<" 6. Find by the fare(按票价范畴查询)\n"<<endl;cout<<" ----其他键退出"<<endl;cout<<"===========================================================\n"<<endl;while(1){cout<<"请输入服务命令:";cin>>y;switch(y){case 0: mainmenu();break;case 1:F_By_FN(Flight);break;case 2:F_By_Time(Flight,1);break;case 3:F_By_Time(Flight,2);break;case 4:F_By_Address(Flight,1);break;case 5:F_By_Address(Flight,2);break;case 6:F_By_fare(Flight);break;default :cout<<" 感谢惠顾!"<<endl;break;}cout<<"是否退出?(Y/N):";cin>>ch;if(ch=='Y'||ch=='y') break;}}//--------------查询系统--------------//通过航班号实现二分查找法查找void F_By_FN(flight F[]){int low=0,high=N,mid;char Num[10];cout<<"请输入您要查询的航班号:";cin>>Num;Cout_info1();//显示头部信息while(low<=high){mid=(low+high)/2;if(strcmp(Num,F[mid].flight_number)==0) {Cout_info2_2(F,mid);break;}else if(strcmp(Num,F[mid].flight_number)<0) high=mid-1;else low=mid+1;}cout<<" *************对不起,没有您要查找的航班号********** "<<endl;}//通过起飞/到达时刻查询void F_By_Time(flight F[],int Time){int i;char T[6];cout<<"请输入您要查询的航班的起飞/抵达时刻:";cin>>T;Cout_info1();//显示头部信息for(i=0;i<N;i++){if(Time==1) //按起飞时刻查询{if(strcmp(T,F[i].start_time)==0) Cout_info2_2(F,i);}if(Time==2) //按抵达时刻查询{if(strcmp(T,F[i].arrived_time)==0) Cout_info2_2(F,i);}}cout<<" *******对不起,该时刻没有航班******* "<<endl;}//通过站点查询void F_By_Address(flight F[],int AD){char str[10];cout<<"请输入您要查询的航班的起飞/抵达地址:";cin>>str;Cout_info1();for(int i=0;i<N;i++){if(AD==1) //按起点站查询{if(strcmp(str,F[i].start_address)==0) Cout_info2_2(F,i);}if(AD==2) //按目的站查询{if(strcmp(str,F[i].arrived_address)==0) Cout_info2_2(F,i);}}cout<<" ********对不起,该站点不存在******** "<<endl; }//通过票价范畴查询void F_By_fare(flight F[]){int T1,T2,i;cout<<"请输入您要查询的航班的最低票价(单位:元):";cin>>T1;cout<<"请输入您要查询的航班的最高票价(单位:元):";cin>>T2;Cout_info1();for(i=0;i<N;i++){if(T1<=F[i].fare && T2>=F[i].fare) Cout_info2_2(F,i);}cout<<" *******对不起,没有适合您的航班,请修改您的票价范畴********" <<endl; }//--------------主函数----------------int main(){RadixList p=element;for(int i=0;i<N;i++)element[i].next=&element[i+1];element[10].next=NULL;radixSort(&p, D, R); //基数排序output_ALL_info1(element); //输出排序后的有序序列(航班信息)copy(Flight,element); //另储备排序后的航班信息mainmenu(); //给出主菜单return 0;}测试数据及测试结果:、边界值处理:四:遇到的问题及解决策略:第一是要实现所要的功能需用什么数据结构的问题,比如排序问题怎么说用那一种,在组员的商量下和上网搜寻资料,采纳对排序最符合,其次是在时刻的查询过程中,比如输入时刻16:40开始只能实现输入1640,最后通过改时刻的数据类型实现了时刻的输入,最后是在各个模块的组合过程中由于各个成员编程所起的名字或者其他缘故,程序无法运行,最后在大伙儿的努力下一起修改错误使得程序能够正常运行。
航班信息的查询与检索
目录21 概述21.1 课程设计名称21.2 课程设计目的21.3 课程设计内容22 系统分析22.1 设计要求22.2 设计分析23 概要设计33.1 系统总流程图33.2 定义数据类型33.3 实现排序的各函数的说明44 详细设计44.1 数据类型的定义44.2 链式基数排序54.2.1 一趟数字字符分配函数错误!未定义书签。
4.2.2 一趟数字字符的收集函数错误!未定义书签。
4.2.3 一趟字母字符分配函数错误!未定义书签。
4.2.4 一趟字母字符收集错误!未定义书签。
4.2.6 链式基数排序函数错误!未定义书签。
4.3 重新整理静态链表64.4 查找算法实现64.4.1 二分查找函数64.4.2 顺序查找函数74.5 输入输出函数75 运行与测试86 总结与心得117 参考文献118 附录(程序源代码)11目录1 概述1.1 课程设计名称航班信息的查询与检索1.2 课程设计目的通过本次实验,掌握数据结构中的几种排序算法和查找算法,了解静态链表的运用,利用上述的算法完成航班信息的查询与检索。
2 系统分析2.1 课程设计内容本课程设计主要是对排序及查找等进行练习,以链式基数排序为主线,利用二分查找和顺序查找等知识,并建立静态链表,完成对航班信息的查询与检索。
我们可以利用航班的这些信息,通过其中的任意一个信息,找出我们所需要的查找的航班的所有信息,所以,我们可以采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排序好的航班记录按航班号实现快速查找,并按其他关键字的查找可以采用最简单的顺序查找方法进行。
2.2 设计要求1) 提供对航班信息的排序功能2 提供对航班信息的输入输出记录功能找出我们所需要的查找的航班的所有信息3)提供按关键字(航班号)快速查询或顺序查询功能2.3 设计分析对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因为它们用得比较少。
数据结构课程设计航班信息查询与检索之欧阳道创编
学院名称《数据结构》课程设计报告题目——航班信息查询与检索班级:姓名:时间:2012/12/29---2013/1/5二○一二年十二月二十九日课程设计任务书及成绩评定课题名航班信息查询与检索称Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:问题描述:该设计要求对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
任务要求:对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少。
每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,假设航班信息表(8条记录)大写字母标示,后4位为航班号,这种航班号关键字可分成两段,即字母和数字。
其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串即可。
Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一三年一月五日目录一、概述 (6)二、系统分析 (6)三、概要设计 (6)四、详细设计 (7)1.定义数据类型 (7)2.算法实现 (8)五、测试数据 (10)六、收获与体欧阳道创编 2021.03.06会 (13)七、参考文献 (13)八、附录 (14)一、概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
数据结构课程设计航班查询与检索含代码流程图输出结果
算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:按站点查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#include<>#include<>#include<>#define N 6 =NULL; queue[i].e=NULL; ==NULL) queue[k].f=p; ->next=p; =p;p=p->next;}i=0;while(queue[i].f==NULL) i++; ; head=queue[i].f; !=NULL){ p->next=queue[i].f; p=queue[i].e; } light_number;cout<<" "<<F[i].start_time;cout<<" "<<F[i].arrived_time;cout<<" "<<F[i].start_address;cout<<" "<<F[i].arrived_address;cout<<" "<<F[i].work_date;cout<<" "<<F[i].FlightType;cout<<" "<<F[i].fare<<"元"<<endl;}light_number,p->;strcpy(F[i].start_time,p->;strcpy(F[i].arrived_time,p->;strcpy(F[i].start_address,p->;strcpy(F[i].arrived_address,p->;strcpy(F[i].work_date,p->;strcpy(F[i].FlightType,p->;F[i].fare=p->;p=p->next;}}show the mainmenu (显示主菜单)\n"<<endl;cout<<" 1. Find by flight number(按航班号查询)\n"<<endl;cout<<" 2. Find by start time(按起飞时间查询)\n"<<endl;cout<<" 3. Find by arrived time(按到达时间查询)\n"<<endl;cout<<" 4. Find by start address(按起飞地点查询)\n"<<endl;cout<<" 5. Find by arrived address(按目的地点查询)\n"<<endl;cout<<" 6. Find by the fare(按票价范围查询)\n"<<endl;cout<<" ----其他键退出"<<endl;cout<<"===========================================================\n"< <endl;while(1){cout<<"请输入服务命令:";cin>>y;switch(y){case 0: mainmenu();break;case 1:F_By_FN(Flight);break;case 2:F_By_Time(Flight,1);break;case 3:F_By_Time(Flight,2);break;case 4:F_By_Address(Flight,1);break;case 5:F_By_Address(Flight,2);break;case 6:F_By_fare(Flight);break;default :cout<<" 谢谢惠顾! "<<endl;break;}cout<<"是否退出(Y/N):";cin>>ch;if(ch=='Y'||ch=='y') break;}}light_number)==0) {Cout_info2_2(F,mid);break;}else if(strcmp(Num,F[mid].flight_number)<0) high=mid-1;else low=mid+1;}cout<<" *************对不起,没有您要查找的航班号********** "<<endl;}tart_time)==0) Cout_info2_2(F,i);}if(Time==2) rrived_time)==0) Cout_info2_2(F,i);}}cout<<" *******对不起,该时间没有航班******* "<<endl;}tart_address)==0) Cout_info2_2(F,i);}if(AD==2) rrived_address)==0) Cout_info2_2(F,i);}}cout<<" ********对不起,该站点不存在******** "<<endl;}are && T2>=F[i].fare) Cout_info2_2(F,i);}cout<<" *******对不起,没有适合您的航班,请修改您的票价范围********" <<endl;}ext=&element[i+1];element[10].next=NULL;radixSort(&p, D, R);我们对链表、队列、结构体的应用更娴熟,为我们更好的了解课本内容,改进不足提供了件。
数据结构课程设计航班信息的查询与检索
目录第1章概述 (1)第2章设计要求与分析 (2)2。
1设计要求 (2)2。
2设计分析 (3)2.2.1定义数据类型 (3)2.2.2实现排序的个函数说明 (3)第3章算法实现 (4)3。
1 一趟分配算法 (4)3.2 一趟收集算法 (4)3。
3 链式基数排序算法 (12)3.4 二分查找的函数定义 (12)第4章程序代码 (13)第5章运行与测试 (21)第6章实验反思 (24)参考文献 (24)第1章概述排序和查找是在数据信息处理中使用频度极高的操作.为了加快查找的速度,需要先对数据记录按关键字排序.当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、时间、价格及机型等信息。
在这个飞机航班数据的信息模型中,航班号是关键字,而且是具有结构特点的一类关键字。
因为航班号是字母数字混变的,例如CZ3869,这种记录集合是一个适合与多关键字排序的例子。
第2章设计要求与分析2.1设计要求该设计要求对飞机航班信息进行排序和查找.可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询.对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他词关键字的查找可采用最简单的顺序查找方法进行,因为他们用的较少。
每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,假设航班信息表如下表所示:其中航班号一项的格式为:k0 k1 k3 k4 k5 k6其中k0和k1的输入值是航空公司的别称,用两个大写字母表示,后4位为航班表号,这种航班号关键字可分成两段,即字母和数字。
其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串型即可。
2.2设计分析2.2。
1定义数据类型根据设计要求,我们知道设计中所用到的数据记录只有航班信息,因此要定义行管的数据类型:Typedef struct{Char start[7];Char end[7];Char sche[12];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 s1[MaxSpace];Int keylen;Int length;}SLList;为了进行基数排列,需要定义在分配和手机操作使用到的指针数组:Typedef int ArrType_n[10];Typedef int ArrType_。
数据结构课程设计航班信息查询与检索
学院名称《数据结构》课程设计报告题目——航班信息查询与检索班级:姓名:时间:2012/12/29---2013/1/5二○一二年十二月二十九日课程设计任务书与成绩评定课题名称航班信息查询与检索Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:问题描述:该设计要求对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、到达站、起飞时间以与到达时间等信息进行查询。
任务要求:对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少。
每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以与票价等,假设航班信息表(8条记录)位为航班号,这种航班号关键字可分成两段,即字母和数字。
其余七项输入内容因为不涉与本设计的核心,因此除了票价为数值型外,均定义为字符串即可。
Ⅱ、设计进度与完成情况Ⅲ、主要参考文献与资料[1] 严蔚敏数据结构(C语言版)清华大学出版社1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社1999[3] 谭浩强C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一三年一月五日目录一、概述 (6)二、系统分析 (6)三、概要设计 (6)四、详细设计 (7)1.定义数据类型 (7)2.算法实现 (8)五、测试数据 (10)六、收获与体会 (13)七、参考文献 (13)八、附录 (14)5 / 24一、概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉与和课程相关的各个方面,是一门独立于课程之外的特殊课程。
航班信息查询与检索系统课程设计报告
课程设计报告课程设计名称:数据结构课程设计题目:设计并实现一个航班信息查询与检索系统院系:计算机学院专业:班级:学号:姓名:指导教师:学术诚信声明本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。
与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名: 日期:年月日目录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)1、题目介绍设计一个航班信息查询与检索系统。
可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
2、课程设计要求1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。
如下表所示:2、对航班信息进行排序与查找。
3、概要设计3.1、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一个储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。
在查询设计中,使用折半查找法对排好序的航班号数据实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
3.2、流程图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个字母指针数组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]%48; //将数字字符转化为对应的数值型数字if(!f[j])f[j]=p;elsesl[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){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.length;i++)l.sl[i].next=i+1;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);}}void arrange(sllist &l) //按指针链表整理静态链表{int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<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;}}折半查找函数定义int binsearch(sllist l,char 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;elselow=mid+1;}return 0;}5、测试数据编译后运行,显示:录入信息^_^航班号起点站终点站班期起飞时间到达时间机型票价录入:CA1544合肥北京 1.2.4.5 10551240 733960显示:是否继续?y/n:录入:y显示:航班号起点站终点站班期起飞时间到达时间机型票价录入:MU5341上海广州每日14201615 M901280显示:是否继续?y/n:录入:y显示:航班号起点站终点站班期起飞时间到达时间机型票价录入:CZ3869 重庆深圳 2.4.6 0855 1035 733 1010显示:是否继续?y/n:录入:n录入航班信息后,屏幕显示:-------------------------------* 航班信息查询系统*-------------------------------* 1.航班号** 2.起点站** 3.终点站** 4.起飞时间** 5.到达时间** 0.退出*-----------------------------(0-5)号服务项目:录入:1显示:输入要查询的航班号(字母要大写):录入:CA1544显示:航班号起点站终点站班期起飞时间到达时间机型票价CA1544合肥北京1.2.4.5 10551240 733960录入:2显示:输入要查询的航班起点站:录入:合肥显示:航班号起点站终点站班期起飞时间到达时间机型票价显示:CA1544合肥北京 1.2.4.5 10551240 733960录入:2显示:输入要查询的航班起点站: 录入:广州显示:附录源程序:#include <stdio.h>#include <string.h>#define max 100#define keylen 7typedef 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];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) {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]%48;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}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){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 distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,p;for(j=0;j<26;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%65;if(!f[j])f[j]=p;elsesl[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.length;i++)l.sl[i].next=i+1;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);}}void arrange(sllist &l){int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<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;}}int binsearch(sllist l,char 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;elselow=mid+1;}return 0;}void seqsearch(sllist l,char key[],int i){int j,k,m=0;printf("------------------------------------------------------------\n");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;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(" %-8s%-7s%-7s%-11s%-6s%-6s%5s%4d\n",l.sl[j].keys,l.sl[j].others.start,l.sl[j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others. time2,l.sl[j].others.model,l.sl[j].others.price);}}if(m==0)printf(" 无此航班信息,可能是输入错误!\n");printf("-------------------------------------------------------\n");}void searchcon(sllist l){char key[keylen];int i=1,k;while(i>=1&&i<=5){printf("----------------------\n");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(" (0-5)号服务项目:");scanf("%d",&i);printf("\n");switch(i){case 1:printf("输入要查询的航班号(字母要大写):");scanf("%s",key);k=binsearch(l,key);printf("--------------------------------------------------------------\n");if(k==0)printf(" 无此航班信息,可能是输入错误!\n");else{printf(" 航班号起点站终点站班期起飞时间到达时间机型票价\n");printf(" %-8s%-7s%-7s%-11s%-6s%-6s%-5s%4d\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l.sl[k].others.time1,l.sl[k].oth ers.time2,l.sl[k].others.model,l.sl[k].others.price);}printf("--------------------------------------------------------------\n");break;case 2:printf("输入要查询的航班起点站:");scanf("%s",key);seqsearch(l,key,i);break;case 3:printf("输入要查询的航班终点站:");scanf("%s",key);seqsearch(l,key,i);break;case 4:printf("输入要查询的航班起飞时间:");scanf("%s",key);seqsearch(l,key,i);break;case 5:printf("输入要查询的航班到达时间:");scanf("%s",key);seqsearch(l,key,i);break;case 0:printf("\n\n宝宝走了\n\n");}}}void inputdata(sllist &l){int i=++l.length;char yn='y';while(yn=='y'||yn=='Y'){printf("信息录入^_^\n\n");printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");scanf("%s %s %s %s %s %s %s %d",l.sl[i].keys,l.sl[i].others.start,l.sl[i].others.e nd,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("%c",&yn);}l.length=i-1;}void main(){sllist l;l.keynum=6;l.length=0;inputdata(l);searchcon(l);}毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
数据结构课程设计--城市交通咨询系统、航班信息的查询与检索
课程设计题目:城市交通咨询系统一、课程设计的原始资料及依据在交通网络非常发达,交通工具和交通方式不断更新的今天,人们的出差、旅游或做其他的出行时,不仅关心节省交通运费问题,而且对里程和所需要时间等问题感兴趣。
可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。
图中顶点表示城市,边表示城市之间的交通关系。
这个交通咨询系统可用回答旅客提出的各种问题。
二、课程设计主要内容及要求1. 建立交通网络图的存储结构。
2. 画出主要的功能结构图和主要模块的流程图。
3. 使用迪杰斯特拉算法:求一个城市到其它所有城市最短路径。
4. 使用弗洛伊德算法:求任意两个城市间最短路径。
三、对课程设计说明书撰写内容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、设计小组评语、参考文献等。
一般不应少于3000字。
2.在适当位置配合相应的实验原理图、数据通路图、微程序流程图、实验接线图、微指令代码表等图表进行说明。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。
设计小组评语处注明设计组编号、设计组组长、设计组成员,并由设计组组长给出评语。
4.课程设计说明书手写或打印均可。
手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。
文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。
5.课程设计说明书装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。
四、设计完成后应提交成果的种类、数量、质量等方面的要求1.完成“任务书”中指定的操作功能,运行稳定。
航班信息查询课程设计
航班信息查询课程设计一、课程目标知识目标:1. 学生能理解航班信息查询的基本概念,掌握航班信息查询系统的使用方法。
2. 学生能掌握航班信息的核心要素,如航班号、出发地、目的地、起飞时间等。
3. 学生能了解航班信息查询在实际生活中的应用场景。
技能目标:1. 学生能够独立操作航班信息查询系统,准确查找航班信息。
2. 学生能够分析航班信息,做出合理的出行决策。
3. 学生能够运用信息技术手段解决实际问题,提高信息素养。
情感态度价值观目标:1. 学生通过学习航班信息查询,培养对信息技术的兴趣和好奇心。
2. 学生在学习过程中,培养合作意识,增强团队协作能力。
3. 学生能够认识到信息技术在生活中的重要性,提高对信息技术的重视程度。
本课程针对中学生设计,结合学生的年龄特点和认知水平,注重培养学生的实际操作能力和信息素养。
课程内容紧密联系教材,确保学生所学知识能够应用于实际生活。
通过本课程的学习,学生将能够掌握航班信息查询的基本方法,提高解决问题的能力,同时培养良好的情感态度和价值观。
为实现课程目标,教学设计中将注重实践操作、小组合作和课堂讨论,确保学生能够在轻松愉快的氛围中学习,达到预期学习成果。
二、教学内容本课程依据课程目标,结合教材内容,制定以下教学内容:1. 航班信息查询基础知识:- 航班信息查询系统简介- 航班核心信息要素(航班号、出发地、目的地、起飞时间等)2. 航班信息查询系统操作:- 系统登录与界面认识- 航班信息查询方法与步骤- 航班信息的筛选与排序3. 实际应用场景分析:- 航班信息查询在实际生活中的应用案例- 如何根据航班信息做出合理的出行决策4. 信息技术素养培养:- 信息安全与隐私保护- 信息技术在航空领域的应用与发展教学大纲安排如下:第一课时:航班信息查询基础知识学习第二课时:航班信息查询系统操作实践第三课时:实际应用场景分析与讨论第四课时:信息技术素养培养与总结教学内容与教材章节紧密关联,确保科学性和系统性。
数据结构-实验报告六--航班信息查询与检索系统
专 业 班 级
学 生 姓 名
学 号
指 导 教 师
2012至2013学年第一学期第1至9周
一、
设计一个航班信息查询与检索系统。可事先按要求录入航班信息、删除航班信息、查看全部航班信息及按航班的航班号、起点站、终点站、起飞时间、以及到达时间等信息进行查询。
二、
输入/输出形式和输出值
printf("继续输入吗y/n:");
getchar();
scanf("%c",&yn);
getchar();
}
}
void menu()
{
printf("**********************************\n");
printf("* 航班信息查询与检索系统 *\n");
printf("**********************************\n");
= ;;
printf("删除成功!!\n");
}
}
}
if(m==0)
{
printf("无此航班信息,您可能输入错误!\n");
}
}
班 号 *\n");
printf("* 2.起 点 站 *\n");
printf("* 3.终 点 站 *\n");
printf("* 4.起飞时间 *\n");
printf("* 5.到达时间 *\n");
算法实现
1.定义数据类型
根据设计要求,所用到的数据记录只有航班信息,因此要定义相关的数据类型。本系统采用链式存储的存储结构,分别定义三个结构体。
数据结构课程设计航班查询与检索含代码流程图输出结果
算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:按站点查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#include<iostream、h>#include<string、h>#include<stdio、h>#define N 6 //航班数//航班信息typedef struct flight{char flight_number[10]; //航班号char start_address[10]; //起飞站char arrived_address[10]; //终点站char work_date[10]; //班期char start_time[6]; //起飞时间char arrived_time[6]; //到达时间char FlightType[4]; //机型int fare; //票价}DataType;struct flight Flight[N];//-----------按航班号进行基数排序-----------typedef char KeyType;#define D 7 // D为排序码的最大位数#define R 'a' // R为基数,这里为小于字母'a'代表的整型值struct Node; //单链表结点类型typedef struct Node RadixNode;struct Node{KeyType key[D]; //关键字DataType info; //数据信息RadixNode *next;};typedef RadixNode * RadixList;typedef struct QueueNode{RadixNode *f; //对列的头指针RadixNode *e; //对列的尾指针}Queue;Queue queue[R];//用队列表示桶void radixSort(RadixList * plist, int d, int r){int i,j,k;RadixNode *p, *head;head=(*plist)->next;for(j=d-1; j>=0; j--) //进行d次分配与收集{p=head;for(i=0; i<r; i++){queue[i]、f=NULL; queue[i]、e=NULL; //清队列}while(p!=NULL){k=p->key[j]; //按排序码的第j个分量进行分配if(queue[k]、f==NULL) queue[k]、f=p; // 若第k个堆为空,则当前记录为队头else (queue[k]、e)->next=p; // 否则当前记录链接到第k队的队尾queue[k]、e=p;p=p->next;}i=0;while(queue[i]、f==NULL) i++; // 从r个队列中找出第一个非空的队列p=queue[i]、e; head=queue[i]、f; //head为收集链表的头指针for(i++; i<r; i++)if(queue[i]、f!=NULL){ p->next=queue[i]、f; p=queue[i]、e; } // 收集非空队列p->next=NULL;}(*plist)->next=head;}//初始化航班信息struct Node element[N+1]={" "," "," "," "," "," "," "," ",0,NULL,//表头"CA1544","CA1544","合肥","北京","1245 ","10:55","12:40","733",960,NULL,"MU5341","MU5341","上海","广州","每日","14:20","16:15","M90",1280,NULL, "CZ3869","CZ3869","重庆","深圳","246 ","08:55","10:35","733",1010,NULL, "MU3682","MU3682","桂林","南京","23467","20:50","22:15","M90",1380,NULL,"HU1836","HU1836","上海","北京","每日","09:40","11:20","738",1250,NULL,"CZ3528","CZ3528","成都","厦门","13457","15:10","16:50","CRJ",1060,NULL,};//------------信息显示------------//按表的格式输出某个航班信息//显示头部信息void Cout_info1(){cout<<" ****************************************\n"<<endl;cout<<" * 欢迎您使用*\n"<<endl;cout<<" * 航班信息表*\n"<<endl;cout<<" ****************************************\n"<<endl;cout<<" 航班号起飞时间到达时间起飞站终点站班期机型票价\n"<<endl;}//显示主体信息void Cout_info2_1(Node p[])//方式一{cout<<" "<<p->info、flight_number;cout<<" "<<p->info、start_time;cout<<" "<<p->info、arrived_time;cout<<" "<<p->info、start_address;cout<<" "<<p->info、arrived_address;cout<<" "<<p->info、work_date;cout<<" "<<p->info、FlightType;cout<<" "<<p->info、fare<<"元"<<endl; }void Cout_info2_2(flight F[],int i)//方式二{cout<<" "<<F[i]、flight_number;cout<<" "<<F[i]、start_time;cout<<" "<<F[i]、arrived_time;cout<<" "<<F[i]、start_address;cout<<" "<<F[i]、arrived_address; cout<<" "<<F[i]、work_date;cout<<" "<<F[i]、FlightType;cout<<" "<<F[i]、fare<<"元"<<endl;}//显示所有航班信息void output_ALL_info1(Node element[]) //方式一{RadixList p=element;Cout_info1();p=p->next;while(p!=NULL){Cout_info2_1(p);p=p->next;}cout<<endl;}void output_ALL_info2(flight F[]) //方式二{Cout_info1();for(int i=0;i<N;i++){Cout_info2_2(F,i);}cout<<endl;}//--------------信息复制----------------//将排好的序列(链表)转化成顺序表存储形式void copy(flight F[],Node element[]){RadixList p=element;p=p->next;int i;for(i=0;i<N && p!=NULL;i++){strcpy(F[i]、flight_number,p->info、flight_number);strcpy(F[i]、start_time,p->info、start_time);strcpy(F[i]、arrived_time,p->info、arrived_time);strcpy(F[i]、start_address,p->info、start_address);strcpy(F[i]、arrived_address,p->info、arrived_address);strcpy(F[i]、work_date,p->info、work_date);strcpy(F[i]、FlightType,p->info、FlightType);F[i]、fare=p->info、fare;p=p->next;}}//---------------服务菜单--------------void F_By_Time(flight F[],int);void F_By_Address(flight F[],int);void F_By_fare(flight F[]);void F_By_FN(flight F[]);//主菜单void mainmenu(){char ch;int y;cout<<" 主菜单\n"<<endl;cout<<"===========================================================\n"<<endl;cout<<" Please choose: (input the number)(输入查询/排序命令)\n"<<endl; cout<<" 0、show the mainmenu (显示主菜单)\n"<<endl;cout<<" 1、Find by flight number(按航班号查询)\n"<<endl;cout<<" 2、Find by start time(按起飞时间查询)\n"<<endl;cout<<" 3、Find by arrived time(按到达时间查询)\n"<<endl;cout<<" 4、Find by start address(按起飞地点查询)\n"<<endl;cout<<" 5、Find by arrived address(按目的地点查询)\n"<<endl;cout<<" 6、Find by the fare(按票价范围查询)\n"<<endl;cout<<" ----其她键退出"<<endl;cout<<"===========================================================\n"<<endl; while(1){cout<<"请输入服务命令:";cin>>y;switch(y){case 0: mainmenu();break;case 1:F_By_FN(Flight);break;case 2:F_By_Time(Flight,1);break;case 3:F_By_Time(Flight,2);break;case 4:F_By_Address(Flight,1);break;case 5:F_By_Address(Flight,2);break;case 6:F_By_fare(Flight);break;default :cout<<" 谢谢惠顾!"<<endl;break;}cout<<"就是否退出?(Y/N):";cin>>ch;if(ch=='Y'||ch=='y') break;}}//--------------查询系统--------------//通过航班号实现二分查找法查找void F_By_FN(flight F[]){int low=0,high=N,mid;char Num[10];cout<<"请输入您要查询的航班号:";cin>>Num;Cout_info1();//显示头部信息while(low<=high){mid=(low+high)/2;if(strcmp(Num,F[mid]、flight_number)==0) {Cout_info2_2(F,mid);break;}else if(strcmp(Num,F[mid]、flight_number)<0) high=mid-1;else low=mid+1;}cout<<" *************对不起,没有您要查找的航班号********** "<<endl;}//通过起飞/到达时间查询void F_By_Time(flight F[],int Time){int i;char T[6];cout<<"请输入您要查询的航班的起飞/抵达时间:";cin>>T;Cout_info1();//显示头部信息for(i=0;i<N;i++){if(Time==1) //按起飞时间查询{if(strcmp(T,F[i]、start_time)==0) Cout_info2_2(F,i);}if(Time==2) //按抵达时间查询{if(strcmp(T,F[i]、arrived_time)==0) Cout_info2_2(F,i);}}cout<<" *******对不起,该时间没有航班******* "<<endl;}//通过站点查询void F_By_Address(flight F[],int AD){char str[10];cout<<"请输入您要查询的航班的起飞/抵达地址:";cin>>str;Cout_info1();for(int i=0;i<N;i++){if(AD==1) //按起点站查询{if(strcmp(str,F[i]、start_address)==0) Cout_info2_2(F,i);}if(AD==2) //按目的站查询{if(strcmp(str,F[i]、arrived_address)==0) Cout_info2_2(F,i);}}cout<<" ********对不起,该站点不存在******** "<<endl; }//通过票价范围查询void F_By_fare(flight F[]){int T1,T2,i;cout<<"请输入您要查询的航班的最低票价(单位:元):";cin>>T1;cout<<"请输入您要查询的航班的最高票价(单位:元):";cin>>T2;Cout_info1();for(i=0;i<N;i++){if(T1<=F[i]、fare && T2>=F[i]、fare) Cout_info2_2(F,i);}cout<<" *******对不起,没有适合您的航班,请修改您的票价范围********" <<endl; }//--------------主函数----------------int main(){RadixList p=element;for(int i=0;i<N;i++)element[i]、next=&element[i+1];element[10]、next=NULL;radixSort(&p, D, R); //基数排序output_ALL_info1(element); //输出排序后的有序序列(航班信息) copy(Flight,element); //另存储排序后的航班信息mainmenu(); //给出主菜单return 0;}测试数据及测试结果:、边界值处理:四:遇到的问题及解决策略:首先就是要实现所要的功能需用什么数据结构的问题,比如排序问题究竟用那一种,在组员的商量下与上网搜寻资料,采用对排序最符合,其次就是在时间的查询过程中,比如输入时间16:40开始只能实现输入1640,最后通过改时间的数据类型实现了时间的输入,最后就是在各个模块的组合过程中由于各个成员编程所起的名字或者其她原因,程序无法运行,最后在大家的努力下一起修改错误使得程序可以正常运行。
航班信息查询与检索系统课程设计报告
课程设计报告课程设计名称:数据结构课程设计题目:设计并实现一个航班信息查询与检索系统院系:计算机学院专业:班级:学号:姓名:指导教师:学术诚信声明本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。
与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名: 日期:年月日课程设计名称数据结构课程设计专业学生姓名班级学号题目名称设计并实现一个航班信息查询与检索系统起止日期2016 年12 月18 日起至2017 年 1 月 4 日止课设内容和要求:对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。
要求:1.设计数据结构2.选择合适的排序和查找算法3.设计软件的功能结构4.采用模块化编程5.给出现实方法和算法6.按课程设计规范撰写课程设计报告参考资料:[1] 严蔚敏、陈文博,数据结构及应用算法教程[M].北京:清华大学出版社,[2] 张小莉、王苗、罗文劼,数据结构与算法[M].北京:机械工业出版社,教研室审核意见:教研室主任签字:指导教师(签名)年月日学生(签名)年月日课程设计总结:本设计的重点和难点是在于对航班数据的排序和查找,以链式基数排序为主线,用到了二分查找和顺序查找等知识,还有建立静态链表等。
通过这次课程设计,使我对C语言编程有了新的认识。
以前编程只是注重如何编写函数能够完成所需要的功能,只是凭单纯的意识和简单的语句来堆砌出一段程序。
但现在编程感觉完全不同了。
在编写一个程序之前,自己能够综合考虑各种因素,选取自己需要的数据结构,在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当前状况的算法。
数据结构课程设计航班信息查询与检索之欧阳家百创编
学院名称欧阳家百(2021.03.07)《数据结构》课程设计报告题目——航班信息查询与检索班级:姓名:时间:2012/12/29---2013/1/5二○一二年十二月二十九日课程设计任务书及成绩评定课题名称航班信息查询与检索Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:问题描述:该设计要求对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
任务要求:对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少。
每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达其中航班号一项的格式为:其中K0和K1的输入值是航空公司的别称,用两个大写字母标示,后4位为航班号,这种航班号关键字可分成两段,即字母和数字。
其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串即可。
Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一三年一月五日目录一、概述 (6)二、系统分析 (6)三、概要设计 (6)四、详细设计 (7)1.定义数据类型 (7)2.算法实现 (8)五、测试数据 (10)六、收获与体会 (13)七、参考文献 (13)八、附录 (14)一、概述欧阳索引创编 2021.02.02课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
数据结构课程设计航班信息查询与检索之欧阳法创编
学院名称《数据结构》课程设计报告题目——航班信息查询与检索班级:姓名:时间:2012/12/29---2013/1/5二○一二年十二月二十九日课程设计任务书及成绩评定课题名航班信息查询与检索称Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:问题描述:该设计要求对飞机航班信息进行排序和2021.03.09 欧阳法创编查找。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
任务要求:对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少。
每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,假设航班信息表(8条记录)K0 K1 K2 K3 K4 K5个大写字母标示,后4位为航班号,这种航班号关键字可分成两段,即字母和数字。
其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串即可。
Ⅱ、设计进度及完成情况2021.03.09 欧阳法创编Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一三年一月五日2021.03.09 欧阳法创编目录一、概述 (6)二、系统分析 (6)三、概要设计 (6)四、详细设计 (7)1.定义数据类型 (7)2.算法实现 (8)五、测试数据 (10)2021.03.09 欧阳法创编 2021.03.09六、收获与体会 (13)七、参考文献 (13)八、附录 (14)一、概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院名称《数据结构》课程设计报告题目——航班信息查询与检索班级:姓名:时间:2012/12/29---2013/1/5二○一二年十二月二十九日课程设计任务书及成绩评定课题名称航班信息查询与检索Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:问题描述:该设计要求对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
任务要求:对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少。
每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,其中K0和K1的输入值是航空公司的别称,用两个大写字母标示,后4位为航班号,这种航班号关键字可分成两段,即字母和数字。
其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串即可。
Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一三年一月五日目录一、概述 (6)二、系统分析 (6)三、概要设计 (6)四、详细设计 (7)1.定义数据类型 (7)2.算法实现 (8)五、测试数据 (10)六、收获与体会 (13)七、参考文献 (13)八、附录 (14)5一、概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
本课程设计主要是对排序及查找等进行练习,以链式基数排序为主线,利用二分查找和顺序查找等知识,并建立静态链表,完成对航班信息的查询与检索。
我们可以利用航班的这些信息,通过其中的任意一个信息,找出我们所需要的查找的航班的所有信息,所以,我们可以采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排序好的航班记录按航班号实现快速查找,并按其他关键字的查找可以采用最简单的顺序查找方法进行。
二、系统分析1设计要求(1) 提供对航班信息的排序功能(2) 提供对航班信息的输入输出记录功能找出我们所需要的查找的航班的所有信息(3)提供按关键字(航班号)快速查询或顺序查询功能2 设计分析对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因为它们用得比较少。
每个航班记录包括八项,分别是:航班号,起点站,终点站,班期,起飞时间,到达时间,飞机型号以及票价等。
其中航班号一项的格式为:K0 k1 k2 k3 k4 k5航班关键字可分为两段,即字母和数字。
其中k0和k1是航空公司的别称,用两个大写字母表示,后4位为航班编号。
三、概要设计1、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进6行排序,最后执行数据查询和检索。
在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
2、流程图四、详细设计1 . 定义数据类型根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:[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; //静态链表类型7为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:typedef int arrtype_n[10]; //十进制数字指针数组typedef int arrtype_c[26]; //26个字母指针数组2 .算法实现(1)一趟分配算法[2]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;elsesl[e[j]].next=p;e[j]=p; //将p指向的结点插入到第j个结点}}(2)一趟收集算法void collect(slnode *sl,int i,arrtype_n f,arrtype_n e){int j,t;for(j=0;!f[j];j++); //找第一个非空子表s1[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]){s1[t].next=f[j];t=e[j];} //链接两个非空子表}sl[t].next=0;}8(3)链式基数排序算法[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; //将普通的线性表改为静态链表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);}}void arrange(sllist &l) //按指针链表整理静态链表{int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<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;}}9(4)二分查找函数定义[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;elselow=mid+1;}return 0;}五、测试数据航班信息输入如图:10按航班号查询:输入航班号错误则显示如下图:按航班起点站查询:按航班起点查询:按起飞时间查询:显示查询主菜单,退出查询系统:六、收获与体会通过本实验,我了解了基数排序是作为一种内部排序方法,当关键字位数较少而排序序列较长时,该排序算法有一定的优越性。
而对于有序序列的查找算法,二分查找是一种效率比较高的方法。
在本实验中,对这两种算法的应用,我加深了对他们的理解,掌握了他们的实现方法。
在本次实验过程中,输入错误还是存在的问题,但能很快的通过编译解决,一些编译不能发现的问题,在组建过程中也能发现并解决。
这次实验的过程中遇到了很多问题,定义的过程中存在定义不清楚的问题,还有一些模糊定义和重定义的问题出现。
在程序的定义过程中,存在着函数的调用失败的问题,在调用过程中不能正常调用,通过把调用的函数直接用在程序中,不通过调用的方法,使得程序正常运行。
本次实验的问题只要通过调试和对整个程序的理解,便可以解决所有的发现的问题本次实验利用二分查找法很快的完成了对航班信息的查找,使我们对二分查找有了一个很好的掌握。
其查找过程是先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
在实验过程中,程序中许多定义需要我们有一个很仔细的了解,比如上述的对字符长度的定义,这需要对所定义的对象给一个合理的字符长度,在输入的过程中才不会出现因输入的字符长度过长而不能识别。
本次实验中用到了静态链表,定义静态链表的过程中,需要有一个很熟悉的了解,知道静态链表是如何定义以及如何实现。
通过这次实验,使得对于查找以及检索有了一个很好的掌握,让我们在以后的程序设计过程中对于类似的函数定义有一个很清晰的过程以及了解。
七、参考文献[1] 徐孝凯,魏荣《数据结构》,机械工程出版社[2] 谭浩强《程序设计》,北京大学出版社[3] 杨路明《C语言程序设计教程》,北京邮电大学出版社.[4] 耿国华《数据结构-C语言描述》,高等教育出版社八、附录源程序清单:#include <stdio.h>#include <string.h>#define MaxSpace 100#define keylen 7#define RADIX_n 10#define RADIX_c 26typedef char KeyType;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[RADIX_n]; //十进制数字指针数组typedef int ArrType_c[RADIX_c]; //26个字母指针数组// 一趟数字字符分配函数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;elsesl[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]; //s1[0].next指向第一个非空子表中的一个结点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=f[j]; t=e[j]; } //链接两个非空子表}sl[t].next=0; //t指向最后一个非空子表中的最后一个结点}// 一趟字母字符分配函数void Distribute_c(SLNode *sl,int i,ArrType_c f,ArrType_c e){int j,p;for(j=0;j<RADIX_c;j++){ //各子表置为空表f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%65; //将字母字符转换成在字母集中相应的序号(0-25)if(!f[j])f[j]=p;elsesl[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<RADIX_c-1){for(j=j+1;j<RADIX_c-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.length;i++)L.sl[i].next=i+1; //0号单元仅存放指针,不存储内容L.sl[L.length].next=0; //将普通的线性表改造为静态链表for(i=L.keynum-1;i>=2;i--){ //按最低位优先次序对各关键字进行分配和收集,先做低4位数字部分Distribute(L.sl,i,fn,en);Collect(L.sl,i,fn,en);}for(i=1;i>=0;i--){ //对高位的2位大写字母进行分配和收集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; //p指向第一个记录的当前位置for(i=1;i<L.length;i++) //l.s1[1…i-1]已按关键字有序化{while(p<i)p=L.sl[p].next; //找到第i个记录,并用p指向其在L中当前位置q=L.sl[p].next; //q指向尚未调整的表尾if(p!=i){temp=L.sl[p]; L.sl[p]=L.sl[i]; L.sl[i]=temp; L.sl[i].next=p; } //交换记录p=q; //p指向尚未调整的表尾,为找第i+1个记录做准备}}// 二分查找函数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;elselow=mid+1;}return 0;}// 顺序查找函数void SeqSearch(SLList L,KeyType key[],int i){int j,k,m=0;printf("*************************************************************\n"); 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;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("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d*\n",L.sl[j].keys,L.sl[j].others.start,L.sl[j].others.end,L.sl[j].others.sche,L.sl[j].others.time1,L.sl[j].others.time2,L.sl[j].others.model,L.sl[j].others.price);}}if(m==0)printf("* 无此航班信息,可能是输入错误!*\n");printf("*************************************************************\n"); }// 查询检索菜单控制程序void searchcon(SLList L){KeyType key[keylen];int i=1,k;while(i>=1&&i<=5){printf(" ********************\n");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(" 请选择(0-5): \n");scanf("%d",&i);switch(i){case 1:printf("输入要查询的航班号(字母要大写):");scanf("%s",key);k=BinSearch(L,key);printf("*************************************************************\n"); if(k==0)printf(" 无此航班信息,可能是输入错误!\n");else{printf("* 航班号起点站终点站航班期起飞时间到达时间机型票价*\n"); printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d*\n",L.sl[k].keys,L.sl[k].others.start,L.sl[k].others.end,L.sl[k].others.sche,L.sl[k].others.time1,L.sl[k].others.time2,L.sl [k].others.model,L.sl[k].others.price);}printf("*************************************************************\n"); break;case 2:printf("输入要查询的航班起点站名:");scanf("%s",key);SeqSearch(L,key,i);break;case 3:printf("输入要查询的航班终点站名:");scanf("%s",key);SeqSearch(L,key,i);break;case 4:printf("输入要查询的航班起飞时间:");scanf("%s",key);SeqSearch(L,key,i);break;case 5:printf("输入要查询的航班到达时间:");scanf("%s",key);SeqSearch(L,key,i);break;case 0:printf("再见\n");}}}// 输入航班记录函数void InputData(SLList &L){int i=++L.length;char yn='y';while(yn=='y'||yn=='Y'){printf("航班号起点站终点站航班期起飞时间到达时间机型票价\n"); scanf("%s%s%s%s%s%s%s%d",L.sl[i].keys,L.sl[i].others.start,L.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("继续输入吗?y/n:");scanf("%c",&yn);}L.length=i-1;}void main(){// int i,k;SLList L;// KeyType key[keylen];L.keynum=6; L.length=0; //输入航班记录InputData(L); //基数排序RadixSort(L);Arrange(L);searchcon(L);return ;}。