数据结构与算法课程设计报告——航班信息查询系统(C++)
航班信息查询系统
《数据结构》课程设计书---飞机订票系统班级:完成人:指导老师:开始时间:完成时间:一、任务内容制作一个简单的飞机订票系统二、功能要求1.录入.可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2.查询.(1)可以查询某个航线的情况(如,输入航班号,查询抵达城市,航班票数信息,是否满仓);(2)可以输入起飞抵达城市,查询飞机航班情况;(3)订票:(订票情况可以存在一个数据文件中,结构自己设定)(4)退票:可退票,退票后修改相关数据文件;(5)修改航班信息:当航班信息改变可以修改航班数据文件四、源程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#define FLIGHTAMOUNT 200//最大航班数#define SEATAMOUNT 500//最大座位数struct flightstruct{char flightnumber[20];//航班号char finishingline[20];//终点站char date[20]; //日期unsigned maxamount;//总票数unsigned remainders;//剩余票数unsigned seatstate[SEATAMOUNT];//座位数组,贮存座位信息}flight[FLIGHTAMOUNT];void main(){char flag;//提供选择菜单的变量void open(FILE *fp);//打开文件函数void save(FILE *fp);//保存信息函数void built(FILE *fp);//建立文件函数void manage();//输入、管理信息函数void insert(FILE *fp);//插入信息函数void remend(FILE *fp);//修改信息函数void delet(FILE *fp);//删除信息函数void delet_all(FILE *fp);//删除所有信息函数void scan();//浏览信息函数void select();//查询信息函数void booktickets();//订票函数void print_info(unsigned);//输出打印信息函数void sendbacktickets();//退票函数do{printf("\n\t************************飞机订票系统****************************\n");printf("\n\t----------------------------主菜单-------------------------------\n");printf("\t**************-1--信息管理信息浏览--2-****************\n");printf("\t**************-3--信息查询订票系统--4-****************\n");printf("\t**************-5--退票系统退出系统--0-****************\n");p rintf("\n\t-----------------------------------------------------------------\n");do{scanf("%c",&flag);}while(flag!='1'&&flag!='2'&&flag!='3'&&flag!='4'&&flag!='5'&&flag!='0');switch(flag){case '1':manage();break;case '2':scan();break;case '3':select();break;case '4':booktickets();break;case '5':sendbacktickets();break;case '0':;break;}}while(flag!='0');}/**********打开文件 "flightinfomaition.dat"***********/void open(FILE *fp){unsigned i;if((fp=fopen("flightinfomaition.dat","r"))==NULL)//以只读方式打开{printf(" 打开文件失败!\n");exit(0);}for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++) if(fread(&flight[i],sizeof(struct flightstruct),1,fp)!=1){printf(" 文件读取错误!\n");exit(0);}fclose(fp);}/***********************保存设置*******************/void save(FILE *fp){unsigned i;char incept;printf("是否保存?(Y/N):");do{incept=getchar();}while(!(incept=='Y'||incept=='y'||incept=='N'||incept=='n'));if(incept=='Y'||incept=='y'){if((fp=fopen("flightinfomaition.dat","r+"))==NULL)//以读写方式打开{printf(" 打开文件失败!\n");exit(0);}for(i=0;i<FLIGHTAMOUNT;i++)if(fwrite(&flight[i],sizeof(struct flightstruct),1,fp)!=1){printf(" 保存失败!\n");exit(0);}printf(" 保存成功!\n");}fclose(fp);}/*********************管理信息*********************/void manage(){FILE* fp=NULL;char incept;printf("**************************欢迎进入信息管理系统*********************\n");do{p rintf("\n--------------------------------------------------------------------\n");printf("请选择:\n\t 1--建立新文件\n\t 2--插入信息\n\t 3--修改信息\n\t 4--删除信息\n\t 5--删除全部\n\t 0--退出\n");p rintf("--------------------------------------------------------------------\n");do{incept=getchar();}while(incept!='1'&&incept!='2'&&incept!='3'&&incept!='4'&&incept!='5'&&incept!='0');switch(incept){case '1':built(fp);break;case '2':insert(fp);break;case '3':remend(fp);break;case '4':delet(fp);break;case '5':delet_all(fp);break;case '0':return;}printf("继续进行管理?(Y/N)");do{incept=getchar();}while(!(incept=='Y'||incept=='y'||incept=='N'||incept=='n'));}while(incept=='Y'||incept=='y');}/**********建立一个名为"flightinfomaition.dat"的文件************/void built(FILE*fp){unsigned i,j;//建立一个名为"flightinfomaition.dat"文件,用于存贮航班信息if((fp=fopen("flightinfomaition.dat","w"))==NULL){printf(" 文件建立失败!\n");exit(0);}elseprintf("文件建立成功!\n");//文件信息初始化for(i=0;i<FLIGHTAMOUNT;i++){ //将所有信息内容置为0strcpy(flight[i].flightnumber,"0");strcpy(flight[i].finishingline,"0");strcpy(flight[i].date,"0");flight[i].maxamount=0;for(j=0;j<flight[i].maxamount;j++)flight[i].seatstate[j]=0;}save(fp);//保存所改变的信息insert(fp);//插入航班信息}/***********************插入信息************************/ void insert(FILE *fp){unsigned i;char flightnumber[20];open(fp);//在系统可容纳的数据范围之内循环for(i=0;i<FLIGHTAMOUNT;i++)//当所循环到的位置为空时写入新信息if(strcmp(flight[i].flightnumber,"0")==0){printf("请输入航班号(输入“0”结束):");scanf("%s",flightnumber);if(strcmp(flightnumber,"0")==0)break;else{strcpy(flight[i].flightnumber,flightnumber);printf("请输入终点站 :");scanf("%s",flight[i].finishingline);printf("请输入日期 :");scanf("%s",flight[i].date);printf("请输入总票数 :");do{scanf("%d",&flight[i].maxamount);if(flight[i].maxamount<0||flight[i].maxamount>SEATAMOUNT)printf(" 输入错误!\n 请输入正确的数字:");}while(flight[i].maxamount<0||flight[i].maxamount>SEATAMOUNT);flight[i].remainders=flight[i].maxamount;}}save(fp);}/*******************************修改信息*****************************/void remend(FILE *fp){unsigned i,j,maxamount;char flag;char flightnumber[20],finishingline[20],date[20];open(fp);do{printf("查询航班号?(Y/N):");do{scanf("%c",&flag);}while(!(flag=='y'||flag=='Y'||flag=='N'||flag=='n'));if(flag=='y'||flag=='Y')select(fp);printf("请输入航班号:");scanf("%s",flightnumber);f or(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0")&&strcmp(flight[i].flightnumber, flightnumber);i++);if(!strcmp(flight[i].flightnumber,flightnumber)){printf("输入“0”将不做修改\n");printf("请输入新的航班号:");scanf("%s",flightnumber);if(strcmp(flightnumber,"0"))strcpy(flight[i].flightnumber,flightnumber);printf("请输入新的终点站:");scanf("%s",finishingline);if(strcmp(finishingline,"0"))strcpy(flight[i].finishingline,finishingline);printf("请输入新的时间:");scanf("%s",date);if(strcmp(date,"0"))strcpy(flight[i].date,date);printf("请输入新的票数:");do{scanf("%d",&maxamount);if(maxamount<0||maxamount>SEATAMOUNT){printf("输入错误!请重新输入票数:");}}while(maxamount<0||maxamount>SEATAMOUNT);if(maxamount!=0)flight[i].maxamount=maxamount;flight[i].remainders=flight[i].maxamount;for(j=0;j<flight[i].maxamount;j++)flight[i].seatstate[j]=0;save(fp);}elseprintf("没有找到“%s”次航班!",flightnumber); printf("是否继续?(Y/N):");do{scanf("%c",&flag);}while(!(flag=='y'||flag=='Y'||flag=='N'||flag=='n'));}while(flag=='y'||flag=='Y');}/************************************删除信息***********************************/ void delet(FILE *fp){unsigned i;char flag;char flightnumber[20];open(fp);do{printf("查询航班号?(Y/N):");do{scanf("%c",&flag);}while(!(flag=='y'||flag=='Y'||flag=='N'||flag=='n'));if(flag=='y'||flag=='Y')select(fp);printf("请输入航班号:");scanf("%s",flightnumber);f or(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0")&&strcmp(flight[i].flightnumber, flightnumber);i++);if(!strcmp(flight[i].flightnumber,flightnumber)){for(;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++){strcpy(flight[i].flightnumber,flight[i+1].flightnumber);strcpy(flight[i].finishingline,flight[i+1].finishingline);strcpy(flight[i].date,flight[i+1].date);flight[i].maxamount=flight[i+1].maxamount;flight[i].remainders=flight[i+1].remainders;}printf("删除成功!\n");save(fp);}elseprintf("删除是败!没有找到“%s”航班!",flightnumber);printf("是否继续?(Y/N):");do{scanf("%c",&flag);}while(!(flag=='y'||flag=='Y'||flag=='N'||flag=='n'));}while(flag=='y'||flag=='Y');}/*****************删除所有信息**********************/void delet_all(FILE *fp){char incept;unsigned i,j;printf(" 这个操作将删除所有信息!\n");printf("是否继续?(Y/N)");do{incept=getchar();}while(!(incept=='Y'||incept=='y'||incept=='N'||incept=='n'));if(incept=='Y'||incept=='y'){open(fp);for(i=0;i<FLIGHTAMOUNT;i++){strcpy(flight[i].flightnumber,"0");strcpy(flight[i].finishingline,"0");strcpy(flight[i].date,"0");flight[i].maxamount=0;for(j=0;j<flight[i].maxamount;j++)flight[i].seatstate[j]=0;}save(fp);}}/***************************浏览信息*****************************/void scan(){FILE *fp=NULL;unsigned i;open(fp);printf("***********************欢迎进入信息浏览系统************************************\n\n");printf("序号| 航班号 | 终点站 | 时间 |票数|剩余|\n");for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++){p uts("------------------------------------------------------------------------------");p rintf("%4d|%-20s|%-20s|%-20s|%-4d|%-4d|\n",i+1,flight[i].flightnumber,flight[i].finishing line,flight[i].date,flight[i].maxamount,flight[i].remainders);}puts("------------------------------------------------------------------------------\n");}/*********************查询信息************************************/void select(){FILE *fp=NULL;unsigned i;int j;char incept;char flightnumber[20],finishingline[20],date[20];open(fp);printf("\n*************************欢迎进入信息查询系统*************************\n");do{j=0;p uts("----------------------------------------------------------------------\n");printf("请选择一种查询方式:\n");printf("\t 1--航班号\n\t 2--终点站\n\t 3--时间\n\t 4--浏览全部\n\t 0--退出\n");p uts("----------------------------------------------------------------------\n");do{incept=getchar();}while(!(incept=='1'||incept=='2'||incept=='3'||incept=='4'||incept=='0'));switch(incept){case '1':{printf("请输入航班号:");scanf("%s",flightnumber);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0")!=0;i++)if(strcmp(flight[i].flightnumber,flightnumber)==0){print_info(i);j=1;}if(j==0)printf("对不起!没有找到“%s”航班.\n",flightnumber);}break;case '2':{printf("请输入终点站:");scanf("%s",finishingline);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++) if(!strcmp(flight[i].finishingline,finishingline)){print_info(i);j=1;}if(j==0)printf("对不起!飞往“%s”的航班没有找到.\n",finishingline);}break;case '3':{printf("请输入日期:");scanf("%s",date);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++) if(!strcmp(flight[i].date,date)){print_info(i);j=1;}if(j==0)printf("对不起!“%s”的航班没有找到.\n",date);};break;case '4':scan();break;case '0':return;}printf("是否继续查询?(Y/N)");do{incept=getchar();}while(!(incept=='Y'||incept=='y'||incept=='N'||incept=='n'));}while(incept=='Y'||incept=='y');}/*****************用于select函数输出打印提示信息*********************/void print_info(unsigned i){puts("------------------------------------------------------------------------------");printf("序号| 航班号 | 终点站 | 时间 |票数|剩余|\n");puts("------------------------------------------------------------------------------");printf("%4d|%-20s|%-20s|%-20s|%-4d|%-4d|\n",i+1,flight[i].flightnumber,flight[i].finishingline,flight[i].date,flight[i].maxamount,flig ht[i].remainders);puts("------------------------------------------------------------------------------");}/****************************订票函数****************************/void booktickets(){FILE *fp=NULL;unsigned amount,i,j;char flag,flightnumber[20];printf("****************************欢迎进入订票系统******************************\n");do{open(fp);printf("输入“s”查询(任意键跳过):");getchar();//接收上面语句的回车scanf("%c",&flag);if(flag=='s')select(fp);printf("输入“y”退出订票(任意键继续):");getchar();scanf("%c",&flag);if(flag=='y')break;printf("请输入航班号:");scanf("%s",flightnumber);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,flightnumber);i++);if(!strcmp(flight[i].flightnumber,flightnumber)){if(flight[i].remainders==0)printf("对不起!没有票.\n");else{printf("请输入订票数量:");do{scanf("%d",&amount);if(amount<0||amount>flight[i].remainders)printf(" 输入错误!\n 请输入正确的数据:");}while(amount<0||amount>flight[i].remainders);for(j=0;j<flight[i].maxamount&&(amount--)>0;j++)if(flight[i].seatstate[j]==0){flight[i].seatstate[j]=1;flight[i].remainders--;}save(fp);}}elseprintf("没有找到“%s”航班!\n",flightnumber);printf("是否继续订票?(Y/N):");do{flag=getchar();}while(!(flag=='Y'||flag=='y'||flag=='N'||flag=='n'));}while(flag=='y'||flag=='Y');}/****************************退票函数******************************/void sendbacktickets(){FILE *fp=NULL;unsigned i,j,seatnumber;char flag,flightnumber[20];printf("****************************欢迎进入退票系统***********************\n");do{open(fp);printf("请输入航班号:");scanf("%s",flightnumber);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,flightnumber);i++);if(!strcmp(flight[i].flightnumber,flightnumber)){printf("请输入座位号:");do{scanf("%d",&seatnumber);if(seatnumber<0||seatnumber>flight[i].maxamount)printf("输入错误!\n请重新输入座位号:");}while(seatnumber<0||seatnumber>flight[i].maxamount);for(j=0;j<flight[i].maxamount&&seatnumber!=j+1;j++);if((seatnumber==j+1)&&(flight[i].seatstate[j]==1)){flight[i].seatstate[j]=0;flight[i].remainders++;save(fp);}elseprintf(" 输入错误!\n");}elseprintf(" 没有找到“%s”航班!\n",flightnumber);printf("是否继续退票?(Y/N):");do{flag=getchar();}while(!(flag=='Y'||flag=='y'||flag=='N'||flag=='n'));}while(flag=='y'||flag=='Y');}五、效果图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,最后通过改时间的数据类型实现了时间的输入,最后是在各个模块的组合过程中由于各个成员编程所起的名字或者其他原因,程序无法运行,最后在大家的努力下一起修改错误使得程序可以正常运行。
c语言课程设计报告--航班时刻表信息 (2)
一、系统功能模块结构航班时刻表信息查询系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。
如下图1所示:图3.1.1 系统功能模块结构图1、文件模块包括五个子模块:数据保存,数据加载,数据备份,备份恢复,退出;2、编辑模块包括九个子模块:航班插入,航班修改,航班删除,机场插入,机场修改,机场删除,经停航班插入,经停航班修改,经停航班删除;3、查询模块包括三个子模块:航班查询,机场查询,模糊查询;航班时刻表信息查询系统文件数据保存数据加载数据备份恢复备份退出编辑航班插入航班修改航班删除机场插入机场修改机场删除经停航班插入经停航班修改经停航班删除查询航班查询机场查询模糊查询统计座位统计价格统计帮助帮助主题关于系统清屏4、统计模块包括两个子模块:座位统计,价格统计;5、帮助模块包括三个子模块:帮助主题,关于系统,清屏。
二、数据结构设计及用法说明1、帐号密码信息链数据结构(IP)及用法typedef struct ip_node{char id[15]; /*帐号*/char password[15]; /*密码*/struct ip_node *next;} IP;2、航班信息链数据结构(FLIGHT_NODE)及用法typedef struct flight_node{char flight_number[10]; /*航班编号*/char aircraft_model[20]; /*客机名称*/char flight_corp_number[10]; /*所属航空公司编号*/char flight_corp_name[20]; /*所属航空公司名称*/char initial[10]; /*始发地*/char terminal[10]; /*目的地*/char begin_time[10]; /*始发时间*/char end_time[10]; /*到达终点时间*/float one_price; /*单程票价*/float round_price; /*来回票价*/char full_time[10]; /*全程时间*/int mileage; /*飞行里程*/struct flight_node *next; /*指向下一结点*/struct stop_airport_node * anext; /*指向经停机场信息链结点的指针*/ } FLIGHT_NODE;3、经停机场信息链数据结构(STOP_AIRPORT_NODE)及用法typedef struct stop_airport_node{char airport_number[10]; /*机场编号*/char airport_name[20]; /*机场名称*/char regional_number[10]; /*所属地域编号*/char flight_number[10]; /*航班编号*/char arrive_time[10]; /*到达时间*/char leave_time[10]; /*离开时间*/char cur_time[10]; /*到目前为止飞行时间*/int cur_mileage; /*到目前为止飞行里程*/struct stop_airport_node *next; /*指向下一节点*/struct stop_flight_node *fnext; /*指向经停航班信息结点的指针*/ } STOP_AIRPORT_NODE;4、经停航班信息链数据结构(STOP_FLIGHT_NODE)及用法typedef struct stop_flight_node{char flight_number[10]; /*经停航班编号*/char aircraft_model[20]; /*经停客机型号*/char airport_number[10]; /*机场编号*/char regional_number[10]; /*所属地域编号*/char flight_type[20]; /*航班类型:始发-经停-终到*/char arrive_time[10]; /*到达时间*/char leave_time[10]; /*离开时间*/float cur_one_price; /*本机场到终点单程票价*/float cur_round_price; /*本机场到终点来回票价*/int surplus_ticket; /*余票数量*/struct stop_flight_node *next;/*指向下一个结点*/} STOP_FLIGHT_NODE;5、屏幕窗口信息链数据结构(LAYER_NODE)及用法typedef struct layer_node {char LayerNo; /*弹出窗口层数*/SMALL_RECT rcArea; /*弹出窗口区域坐标*/CHAR_INFO *pContent; /*弹出窗口区域字符单元原信息存储缓冲区*/char *pScrAtt; /*弹出窗口区域字符单元原属性值存储缓冲区*/struct layer_node *next; /*指向下一结点的指针*/} LAYER_NODE;6、标签束信息结构(LABEL_BUNDLE)及用法typedef struct label_bundle {char **ppLabel; /*标签字符串数组首地址*/COORD *pLoc; /*标签定位数组首地址*/int num; /*标签个数*/} LABEL_BUNDLE;标签束信息包括标签字符串数组内容,标签位置,标签个数。
C语言课程设计-航班信息管理系统
课程设计课程名称C语言课程设计题目名称航班信息管理系统学生学院物理与光电工程学院专业班级电子科学与技术(4)班学号学生姓名指导教师2015 年10 月23 日目录一设计目的.............................................................................................................................. - 2 - 二课程设计的内容.................................................................................................................. - 2 - 三课程设计的要求与数据...................................................................................................... - 2 - 四课程设计应完成的工作...................................................................................................... - 3 - 五总体设计.............................................................................................................................. - 3 - 六详细设计.............................................................................................................................. - 3 - 七调试分析.............................................................................................................................. - 9 -7.1 源程序及注释............................................................................................................... - 9 -7.2 调试与测试................................................................................................................. - 30 -7.2.1 算法调试过程中出现的问题及解决方法:.................................................. - 30 -7.2.2 主要程序运行结果.......................................................................................... - 32 - 八总结.................................................................................................................................... - 35 - 九参考文献............................................................................................................................ - 36 -一设计目的进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
c语言航班系统课程设计
c语言航班系统课程设计一、课程目标知识目标:1. 理解C语言的基本语法和编程结构,掌握函数、数组、指针等基本概念;2. 学会使用C语言进行数据输入、处理和输出;3. 掌握航班系统的基本功能需求,如航班查询、预订、取消等;4. 了解文件操作,实现航班信息的存储和读取。
技能目标:1. 能够运用C语言编写简单的航班系统程序;2. 学会分析问题,设计合理的程序结构,培养编程解决问题的能力;3. 掌握调试和优化程序的方法,提高程序质量和效率;4. 学会团队协作,与他人共同完成项目任务。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情,提高自主学习能力;2. 培养学生的逻辑思维和创新能力,提高分析问题和解决问题的能力;3. 培养学生的团队协作精神,学会与他人沟通、分享和合作;4. 引导学生关注实际应用,认识到编程知识在现实生活中的重要性。
课程性质:本课程为实践性较强的课程,旨在让学生通过设计航班系统,将所学的C语言知识应用于实际项目中。
学生特点:学生具备一定的C语言基础,对编程感兴趣,具备一定的逻辑思维能力。
教学要求:教师需引导学生自主学习,注重理论与实践相结合,鼓励学生思考、创新,提高编程能力和团队协作能力。
通过课程学习,使学生达到上述课程目标,并能够将所学知识应用于实际项目中。
后续教学设计和评估将围绕这些具体的学习成果展开。
二、教学内容1. C语言基础语法回顾:变量、数据类型、运算符、表达式、控制结构(条件语句、循环语句);2. 函数与模块化编程:函数定义、调用、参数传递、作用域、递归;3. 数组与字符串:一维数组、二维数组、字符串处理;4. 指针与动态内存管理:指针概念、指针运算、指针与数组、动态内存分配;5. 结构体与文件操作:结构体定义、结构体数组、文件读写、文件存储;6. 航班系统功能模块设计:航班查询、预订、取消、航班信息管理;7. 程序调试与优化:调试技巧、性能优化、代码规范。
教学内容安排与进度:1. 第一周:C语言基础语法回顾;2. 第二周:函数与模块化编程;3. 第三周:数组与字符串;4. 第四周:指针与动态内存管理;5. 第五周:结构体与文件操作;6. 第六周:航班系统功能模块设计;7. 第七周:程序调试与优化。
数据结构与算法课程设计报告 航班信息查询系统(C )
数据结构与算法课程设计报告计算机学院软件工程摘要 (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.510551240M90960(2)从键盘输入各记录。
c++航班管理系统课程设计报告
c++航班管理系统课程设计报告课程设计报告报告(论文)题目: 1航班信息查询系统2迷宫问题作者所在系部: 计算机科学与工程系作者所在专业: 计算机科学与技术作者所在班级: B07513作者姓名 : 蒲熙德作者学号 : 20074051306 指导教师姓名: 斯琴巴拉完成时间 : 2008年12月31日北华航天工业学院教务处制北华航天工业学院课程设计报告摘要本次课设目的在于检验学生在《数据结构》课程一学期中的学习成果,从而加深学生对所学知识的进一步理解与巩固。
本次课程设计过程中我主要根据课本中的实现思想及算法编写程序,体现以课本知识的应用为主,在学习了线性表、栈、队列、二叉树、树和图等结构的基础上,以能够更加熟练的应用所学知识,并能结合一些著名算法来实现对一些实际问题的应用,例如,哈夫曼树等,从而更为深刻理解数据结构的内涵,熟悉它们各自的应用场合及方法。
有些在平时课程中并没有掌握的内容在这次课程设计中都是先通过看课本学懂了,然后再在课程设计中加深印象,实现算法的应用和扩展。
这次课程设计的设计内容主要是通过实际的例子和程序来实现课本中所学习的算法的应用。
我主要做了迷宫问题、哈夫曼编码/译码实现两个题目。
本文利用C++语言编写程序,分别实现了对自定义的迷宫有无路径的判定和航班信息查询系统信息的录入,查询,删除,排序。
其中航班信息查询系统还可分为五个功能模块:主菜单设计要求、航班信息的录入、查询,排序,输出。
两个系统均已经过全面的测试,能够很好的运行,达到了预期的效果。
关键词:数据结构栈查询排序北华航天工业学院课程设计报告目录摘要...................................................................... ..........................................................? 第1章绪论 ..................................................................... . (1)1.1 课程设计选题的目的 ..................................................................... . (1)1(2 课程设计选题的背景和意义 ..................................................................... .. (1)1(3课题研究的主要内容 ..................................................................... ..................... 2 第2章系统需求分析 ..................................................................... . (2)2(1输入/输出形式和输出值的范围 ..................................................................... (2)2(2 程序功能 ..................................................................... . (3)2.3测试数据 ..................................................................... ........................................... 3 第3章概要设计 ..................................................................... .. (4)3.1设计思想 ..................................................................... . (4)3.2函数间的关系 ..................................................................... ................................... 4 第4章详细设计 ..................................................................... (6)4.1航班信息查询系统的主要结构 ..................................................................... ....... 6 第5章调试分析 ..................................................................... . (41)5.1问题描述 ..................................................................... .. (41)5.2问题的解决方案 ..................................................................... .. (41)5.3设计实现的回顾讨论和分析 ..................................................................... (41)5.4对算法的分析和改进设想 ..................................................................... . (42)5.5经验和体会 ..................................................................... ..................................... 42 第6章测试并列出测试结果 ..................................................................... (42)6.1航班信息查询系统测试结果: .................................................................... (42)6.2迷宫问题测试结果 .............................................................................................. 44 第7章总结 ..................................................................... (44)7.1设计体会 ..................................................................... .. (44)7.1.1系统的优点 ..................................................................... (44)7.1.2本系统的不足 ..................................................................... .. (45)7.2结束语 ..................................................................... ............................................. 45 致谢 ..................................................................... ............................................................ 46 参考文献 ..................................................................... ........................................................ 46 附录 ..................................................................... (47)北华航天工业学院课程设计报告第1章绪论随着信息产业的飞速发展,信息化管理及查询已经引入并应用到各行业管理领域,各种形式的百货商场、大型仓储超市、便利店、连锁超市和专卖店等形式的零售业鳞次栉比,不断改变、影响着人们的价值观念和生活方式。
c语言航班信息查询系统实验报告
软件学院大作业任务书题目:航班信息查询系统专业:班级:姓名:学号:完成人数:起讫日期:任课教师:职称:讲师部分管主任:完成时间:说明1.本任务书由任课教师填写后,下达到学生。
2.任务完成后,任课教师需填写小结表。
3.任务书、学生成绩与学生完成后的大作业(纸质和电子两种)一并报送各教学研究部审核后转教务办。
4.另附一份全班大作业总结NANCHANG UNIVERSITY高级语言程序设计课程设计题目: 航班信息查询系统学院:专业:班级:完成人数:成员:起讫日期:任课教师:完成时间:填表日期:目录一、需求分析............................................................. - 1 -1.1 项目介绍....................................................... - 1 -1.2 功能需求....................................................... - 1 -二、系统分析............................................................. - 1 -2.1 本程序需解决的关键技术问题..................................... - 1 -2.2 程序流程....................................................... - 1 -三、程序设计与实现....................................................... - 2 -3.1 程序设计....................................................... - 2 -3.2 程序实现........................................... 错误!未定义书签。
航空信息管理和检索系统--数据结构课程设计(C语言版)
#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>typedef struct node{char username[20];char userlock[20];struct node *next;}user;typedef struct tnode{char number[20];char airstart[20];char airend[20];char startime[20];char arrivetime[20];struct tnode* next;}airplane,*plane;void administerlogin();void userlogin();void administerlogin();void administer();void save(void *head1) //save information{ airplane* head=(airplane*)(head1);airplane *p;FILE *f;p=head;if(p!=NULL){f=fopen("data.txt","w+");do{fprintf(f,"%-21.21s%-11.11s%-21.21s%-21s%-21s\n",p->number,p->airstart,p->airend,p->startime ,p->arrivetime);p=p->next;}while(p!=NULL);fclose(f);}}void save1(void *head1) //save information{ user* head=(user*)(head1);user *p;FILE*f;p=head;if(p!=NULL){f=fopen("user.txt","w+");do{fprintf(f,"%-21.21s%-21s\n",p->username,p->userlock);p=p->next;}while(p!=NULL);fclose(f);}}void print(airplane *head) //pinrt information{airplane *f;f=head;printf("\n\n");if(f!=NULL){do{printf("|%6s |%10s | %10s | %10s | %10s |\n",f->number,f->airstart,f->airend,f->startime,f->arrivetime);f=f->next;}while(f!=NULL);}}void userprint(user *head) //pinrt information{user *f;f=head;printf("\n\n");if(f!=NULL){do{printf("|%10s | %10s | \n",f->username,f->userlock);f=f->next;}while(f!=NULL);}}void inlist() //create information file{airplane *p,*q;airplane *head;int n=0;char ch;printf("是否添加新信息:");getchar();scanf("%c",&ch);printf("请输入航班号起点站终点站出发时间到达时间:\n");p=q=(airplane*)malloc(sizeof(airplane));scanf("%s%s%s%s%s",p->number,p->airstart,p->airend,p->startime,p->arrivetime);head=NULL;while(1){n=n+1;if(n==1)head=p;elseq->next=p;q=p;printf("是否继续添加新信息:");getchar();scanf("%c",&ch);if(ch=='n')break;printf("请输入航班号起点站终点站出发时间到达时间:\n");p=(airplane*)malloc(sizeof(airplane));scanf("%s%s%s%s%s",p->number,p->airstart,p->airend,p->startime,p->arrivetime);q->next=NULL;save(head);}void adinsertNode(airplane *head,airplane *newNode) // insert new node {airplane *f;f=head;while(f->next!=NULL){f=f->next;}f->next=newNode;newNode->next=NULL;}void insertNode(user *head,user *newNode) // insert new node{user *f;f=head;while(f->next!=NULL){f=f->next;}f->next=newNode;newNode->next=NULL;}void *administeread() //read information from file{FILE *fp;airplane *f,*head=NULL;char str[128];fp=fopen("data.txt","r+");fgets( str , sizeof(str) , fp );head=(airplane*)malloc(sizeof(airplane));if(head==NULL){printf("分配内存失败!\n");fclose(fp);exit(0);}head->next=NULL;sscanf(str,"%s %s %s %s %s",head->number,head->airstart,head->airend,head->startime,head->ar rivetime) ;while (fgets( str , sizeof(str) , fp ) != NULL){f=(airplane*)malloc(sizeof(airplane));f->next=NULL;sscanf(str,"%s %s %s %s %s",f->number,f->airstart,f->airend,f->startime,f->arrivetime) ;adinsertNode(head,f);}fclose(fp);return head;}user *useread(){FILE *fp;user *f,*head=NULL;char str[128];fp=fopen("user.txt","r+");fgets( str , sizeof(str) , fp );head=(user*)malloc(sizeof(user));if(head==NULL){printf("分配内存失败!\n");fclose(fp);exit(0);}head->next=NULL;sscanf(str,"%s%s",head->username,head->userlock) ;while (fgets( str , sizeof(str) , fp ) != NULL){f=(user*)malloc(sizeof(user));f->next=NULL;sscanf(str,"%s%s",f->username,f->userlock) ;insertNode(head,f);}fclose(fp);return head;}void manageflight(airplane *head){char numbers[20];char ch;airplane * p=head,*q;printf("请输入航班号: ");scanf("%s",numbers);//printf("error1");while(!strcmp(p->next->number,numbers)||p->next==NULL)p=p->next;// printf("error2");q=p;p=p->next;printf("A 删除该航班 B 修改该航班\n");getchar();scanf("%c",&ch);if(ch=='a'||ch=='A'){q->next=p->next;free(p);}else if(ch=='b'||ch=='B'){printf("|%6s |%10s | %10s | %10s | %10s |\n",p->number,p->airstart,p->airend,p->startime,p->arrivetime);printf("请输入新的航班信息航班号起点站终点站出发时间到达时间:\n");scanf("%s%s%s%s%s",p->number,p->airstart,p->airend,p->startime,p->arrivetime);}save(head);}void inquire(int n,char str[])//查找{//航班号//起点站//终点站//起飞时间//到达时间airplane *p;airplane *head=(airplane*)administeread();p=head;switch(n)case 1:while(!strcmp(p->number,str)){p=p->next;}printf("|%6s |%10s | %10s | %10s | %10s |\n",p->number,p->airstart,p->airend,p->startime,p->arrivetime);break;case 2:while(!strcmp(p->airstart,str)){p=p->next;}printf("|%6s |%10s | %10s | %10s | %10s |\n",p->number,p->airstart,p->airend,p->startime,p->arrivetime);break;case 3:while(!strcmp(p->airend,str)){p=p->next;}printf("|%6s |%10s | %10s | %10s | %10s |\n",p->number,p->airstart,p->airend,p->startime,p->arrivetime);break;case 4:while(!strcmp(p->startime,str)){p=p->next;}printf("|%6s |%10s | %10s | %10s | %10s |\n",p->number,p->airstart,p->airend,p->startime,p->arrivetime);break;case 5:while(!strcmp(p->arrivetime,str)){p=p->next;}printf("|%6s |%10s | %10s | %10s | %10s |\n",p->number,p->airstart,p->airend,p->startime,p->arrivetime);break;}}int main() //主函数{char str;printf("A 管理员登陆:\nB 用户登录:\n");scanf("%c",&str);system("cls");if(str=='a'||str=='A')administerlogin();//管理员登陆else if(str=='b'||str=='B')userlogin();//用户登陆return 0;}void sort(airplane *head){airplane *endpt; //控制循环比较airplane *p; //临时指针变量airplane *p1,*p2;p1 = (airplane *) malloc (sizeof(airplane));p1->next = head; //注意理解:我们增加一个节点,放在第一个节点的前面,主要是为了便于比较。
数据结构课程设计-航班的信息系统
数据结构课程设计-航班的信息系统目录1、需求分析 11.1系统主要功能 11.2系统要求 12.概要设计 22.1系统功能模块图 22.2算法设计: 22.2.1录入模块 22.2.2 订票退票模块 22.2.3查询修改模块 32.3 存储结构设计 42.4 C语言描述 53.详细设计 63.1录入航班信息模块 63.2订票模块 63.3退票模块 63.4查询航班模块 63.5查询订单模块 63.6修改航线模块 63.7保存退出模块 64.调试分析75.用户说明136.收获及体会137.源代码141、需求分析1.1系统主要功能(1)录入:可以录入航班情况。
(数据可以存储在一个数据文件中,数据结构、具体数据自定)(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况。
(3)订票:可以订票,如果该航班已经无票,可以提供相关可选择航班。
(订票情况可以存在一个数据文件中,结构自己设定)(4)退票:可以退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
(5)修改航班信息:当航班信息改变可以修改航班数据文件。
1.2系统要求首先录入航班的信息:包括航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓。
根据提示完成相应的要求如:查询航班、订票、退票、修改航班等。
航班信息如表1.1所示。
订票客户的信息也录入其中如:姓名,证件号,订票数量及航班情况。
所有信息根据数据可以存储在一个数据文件中,数据结构、具体数据自定。
客户信息如表1.2所示。
表1.2 客户信息航班号姓名证件号订票数票价 MU5138张三 7>201314 1 375表1.1航班信息航班号起飞时间降落时间起飞城市降落城市票价折扣是否满仓CN8963 12:00 13:00 郴州长沙125 7.5 否MU4567 14:00 15:00 北京上海355 3.3 否CN1234 9:00 11:00 武汉长沙215 3.5 是2.概要设计2.1系统功能模块图图2.1 主程序流程图2.2算法设计:2.2.1录入模块查找单链表的链尾,在链尾插入一个“航班信息”的新结点。
数据结构课程设计航班信息查询与检索
学院名称《数据结构》课程设计报告题目——航班信息查询与检索班级:姓名:时间: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)二、系统分析 (1)1.航班信息的查询与检索 (1)2.航班信息查询与检索数据结构理论 (1)三、概要设计 (2)1.系统的功能 (2)2.系统模块分析及其流程图 (3)四、详细设计 (6)1.各函数说明 (6)2.定义相关数据类型 (8)3.航班信息的查询 (9)五、运行由于测试 (11)六、总结与心得 (16)参考文献 (16)附录 (16)一、概述随着信息产业的飞速发展, 信息化管理及查询已经进入并应用到各行各业, 影响着人们的价值观念和生活方式。
因此, 要提高企业信息化建设, 利用先进的办公自动化系统来实现企业内部信息管理、共享及交流, 从而提高企业综合实力。
本次设计是针对航班的查询系统, 该设计要求对飞机航班信息进行排序和查询。
可按航班的航班号、起点站、终点站等信息进行航班信息的查询。
二、系统分析1.航班信息的查询与检索进入系统后, 首先提示输入航班的信息, 包括: 航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号及票价等, 票价为整型, 其他为字符型。
当输入完一个信息后会提示是否继续输入, 重复以上步骤输入全部的信息。
进入主菜单后会给出用户操作的界面, 根据提示进行航班信息的查询。
2.航班信息查询与检索数据结构理论针对在本该类系统中的数据的处理情况, 本系统采用二分查找法、基数排序法、最高位优先法。
二分查找法也称为折半查找法, 它充分利用了元素间的次序关系, 采用分治策略, 可在最坏的情况下用O(log n)完成搜索任务。
它的基本思想是, 将n 个元素分成个数大致相同的两半, 取a[n/2]与欲查找的x作比较, 如果x=a[n/2]则找到x, 算法终止。
如果x<a[n/2], 则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。
如果x>a[n/2], 则我们只要在数组a的右半部继续搜索x。
对航班号的排序是采用的基数排序法。
基数排序法又称“桶子法”(bucket sort)或bin sort, 顾名思义, 它是透过键值的部份资讯, 将要排序的元素分配至某些“桶”中, 藉以达到排序的作用, 基数排序法是属于稳定性的排序, 其时间复杂度为O (nlog(r)m), 其中r为所采取的基数, 而m为堆数, 在某些时候, 基数排序法的效率高于其它的比较性排序法。
航班订票系统课程设计报告(C++)
一.课程设计目的1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言,自行实现一个较为完整的应用系统的设计与开发。
2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
二.课程设计内容1)、录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2)、查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)、订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)、退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)、修改航班信息:当航班信息改变可以修改航班数据文件三.系统功能模块设计本系统分为五个模块:录入新航班模块、浏览航班模块、查找航班模块、订票模块、退票模块。
得到如图所示系统功能模块图。
系统功能模块图四.程序源代码#ifndef FLIGHTINFO_H#define FLIGHTINFO_H#include<iostream>#include<>using namespace std;light <<"\t"<<F[i].Terminus <<"\t"<<F[i].Day <<endl;}cout<<"---------------------------------------------"<<endl;cout<<"你可以进行以下操作:.查看单条航线;"<<"2.录入新的航班信息"<<"3.返回上一级.\n"<<"请选择:";int chioce;top2: cin>>chioce;if(chioce==1){ShowOneFlight(F);}else if(chioce==2)addFlight(F,B);else if(chioce==3){return;else{cout<<"输入错误!请重新选择:";goto top2;}}void addFlight(FlightNode *F,POList *B){int i=0;while(n<50){cout<<"请输入航班的信息:"<<endl<<"请输入新航班的终点站名:";cin>>F[n].Terminus;do{cout<<"请输入新航班的航班号:";cin>>F[n].Flight;if(F[n].Flight%5!=0){cout<<"输入有误,请重新输入.";i=1;}else {for(int j=0;j<n;j++)if(F[n].Flight==F[j].Flight){cout<<"航班号已存在,请重新输入。
C语言程序设计报告(航班)
输入航班信息
查询航班界面
订票系统
2.数据结构
先定义全局变量: int n=0,m=0,c;//定义全局变量 n 为航班数,m 为乘客数,c 则是常用变量 结构体: struct plane//定义航班结构体
{
int airnum;//航班号 int maxsize;//最大载客数 char start[20];//起飞地点 char time1[20];//起飞时间 char end[20];//降落地点 char time2[20];//降落时间 float price;//票价
2. 结束语 能够完成这次课程设计必须感谢 C 语言课程老师陈黎静、宋戈,还有同学的帮助。
参考文献
1、谭浩强 《C 程序设计》(第四版) 清华大学出版社 2、Greg Perry 《Absolute Beginner’s Guide To C》 第二版 Sams 3、: [美]普拉塔(Prata,S.) 《C Primer plus》 第 5 版 人民邮电出版社
printf("\n\t\t\t 订票成功!您的个人信息已保存.\n"); fwrite(&m,sizeof(int),1,fp); pas[m-1]=a;//将乘客信息放在结构体数组 pas[m-1]中 pas[m-1].seat=rand()%fly[l].maxsize+1; fly[l].maxsize=fly[l].maxsize-b;//修改剩余票数
{ l=i;//将对应航线的位置 i 赋值给 l break;
} }
if(l==-1) { printf("\n\t\t\t 该航班不存在!\n"); } else if(b>fly[l].maxsize)//判断票是否售完 {
数据结构毕业课程设计(C语言版)飞机订票系统
(此文档为word格式,下载后您可任意编辑修改!)———C语言版课题:飞机订票系统和图的遍历的动态演示姓名:学号:班级:指导教师:订票系统1.需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2:主要设计思路:1)算法构造流程图:A:主菜单:B:各分块模板的构造流程图:3:功能函数设计:(1):订票系统主菜单函数menu_select()本函数主要构造系统的主菜单,系统需要实现很多功能,并且各个功能需要各自的函数支持,所以通过主菜单可以轻松的进入各个函数下实现各自的功能,故主菜单显得尤为重要。
其实就是通过键盘输入选择项,然后通过scanf接受,在通过swtich判断进入各个选择项。
(2):工作人员管理函数enter()&change()系统需要各个航班的详细信息,所以需要工作人员把信息输入系统里,以供乘客查询订票。
enter()函数的构造就是为了解决这个问题。
而有可能航班线路更改或由于天气等原因飞机的起飞时间发生了更改,故工作人员需要及时更改信息,所以需要构造change()函数。
(3):列出航班信息的函数list()乘客需要查询各个航班的信息,所以通过系统要能调出上面工作人员已经录入好的航班信息,所以构造本函数来实现这个功能。
(4)乘客具体查询函数search()本函数分两个分函数:search1()和search2(),它们分别实现乘客的按航班查询和按出发及抵达城市的两种查询方案。
数据结构课程设计——飞机航线查询系统
题目:飞机航班信息系统功能:能够实现航班信息的查询、修改、退票等操作具体要求:1)界面简洁美观。
2)查询航班信息的至少两种方式:1、按航班号查询2、按照航线查询3)用户订票或者退票之后,与之对应的相关航班信息要跟着改变。
4)当没有乘客要乘坐的航班时,系统能够智能提示用户的其他路线选择。
具体的代码实现:#include"stdio.h"#include"stdlib.h"#include<string.h> //包含字符串函数处理头文件#define N 50#define M 50struct air//定义结构体数组{char number[10];char start[10];char end[10];char time1[8];char time2[8];int price;int count;int num;}s[N];int m;struct{char name[20];char ID[7];int t;int co;}c[M];void save()//保存模块程序{ int i;FILE *fp;//定义文件指针if((fp=fopen("info.txt","wb"))==0)//打开文件并判断是否出错{printf("创建文件失败!\n");//打印出错提示exit (0);}for(i=0;i<m;i++)if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件写入数据,并判断是否出错printf("向文件输入数据失败!\n\n");fclose(fp);//关闭文件}void read()//从文件读取信息模块{int i;FILE *fp;//定义文件指针if((fp=fopen("info.txt","rb"))==0)//打开文件,并判断是否出错{printf("出错,请检查文件是否存在\n");//打印出错提示exit (0);}for(i=0;i<m;i++){fread(&s[i],sizeof(struct air),1,fp);//从文件中读取信息}fclose(fp);//关闭文件}void menu(){printf(" ★---您好,欢迎进入中国民航管理系统!---★\n");printf("============================================================\ n");printf(" -------- ☆ 1.输入航班信息☆-------- \n");printf(" -------- ☆ 2.浏览航班信息☆-------- \n");printf(" -------- ☆ 3.修改航班信息☆-------- \n");printf(" -------- ☆ 4.查找航班信息☆-------- \n");printf(" -------- ☆ 5.删除航班信息☆-------- \n");printf(" -------- ☆ 6.订票信息☆-------- \n");printf(" -------- ☆ 7.退票信息☆-------- \n");printf(" -------- ☆ 0.退出☆-------- \n");printf("============================================================\ n");}void Input(){int i;printf("你需要输入多少个航班信息?\n");scanf("%d",&m);printf("请依次输入航班信息:\n") ;printf("航班号起点站终点站起飞时间抵达时间票价折扣总票数\n");for(i=0;i<m;i++){scanf("%s",s[i].number); //读取航班号scanf("%s",s[i].start);//读取起始站scanf("%s",s[i].end);//读取终点站scanf("%s",s[i].time1);//读取时间scanf("%s",s[i].time2);scanf("%d",&s[i].price);scanf("%d",&s[i].count);//读取机票数scanf("%d",&s[i].num);}save();printf("输入后的航班信息如下\n");read();printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数\n"); for(i=0;i<m;i++){printf("%3s ",s[i].number);printf("%8s ",s[i].start);printf(" %8s",s[i].end);printf(" %8s ",s[i].time1);printf("%8s ",s[i].time2);printf("%8d",s[i].price);printf("%7d折",s[i].count);printf("%8d",s[i].num);printf("\n");}}void Display(int m){ int i;read();printf("*********************** 【航班信息】**********************************\n");printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数\n"); printf("************************************************************************* *\n");for(i=0;i<m;i++){printf("%3s ",s[i].number);printf("%8s ",s[i].start);printf("%8s",s[i].end);printf("%8s ",s[i].time1);printf("%8s ",s[i].time2);printf("%8d",s[i].price);printf("%8d",s[i].count);printf("%8d",s[i].num);printf("\n");}printf("********************************************************************* *****\n");}void Print(int i){printf("%-6s %8s %8s %8s %8s %6d %6d %6d \n",s[i].number,s[i].start,s[i].end,s[i].time1,s[i].time2,s[i].price,s[i].count,s[i].num);printf("--------------------------------------------------------------------\n");}void search()//查询模块{char name1[10];char name2[10];char code[10];int i,k;read();printf("请选择查找方式:\n");//打印查询方式菜单printf("1.按航班号查找\n");printf("2.按航线查找\n");printf("0.返回\n");printf("请在0-2中选择:\n");scanf("%d",&k);//读取查找方式if(k>0){switch(k){case 1: printf("请输入航班号:\n");scanf("%s",code);break;case 2: printf("请输入起始站名称:\n");scanf("%s",name1);//读取起始站printf("请输入终点站名称:\n");scanf("%s",name2);break;}}read();//调用读取函数for(i=0;i<m;i++){ if(strcmp(s[i].number,code)==0){ printf("查找航班信息成功");Print(i);break;}if(strcmp(s[i].start,name1)==0&&strcmp(s[i].end,name2)==0)//按终点站起始站判断输出条件{ printf("查找航班信息成功!\n");Print(i);break;}else if(strcmp(s[i].start,name1)==0||strcmp(s[i].end,name2)==0){ printf("查找信息失败!没有您要查询的航线,您还可以考虑乘坐以下航班\n");Print(i);}}}void Modify() //修改模块{struct //定义结构体{char ch[10];char name1[10];char name2[10];char time1[8];char time2[8];int price;int count;int num;}mo;char a;int i,n;read();//调用读取模块//Display(m);do{printf("请选择修改方式:\n");printf("*1,按航班号修改:\n");printf("*2,按航线修改: \n");printf("请选择1或2,按回车键确认:\n");scanf("%d",&n);//读取修改方式switch(n){case 1:printf("请输入航班号:\n");scanf("%s",mo.ch);//读取航班号break;case 2:printf("请输入起始站:\n");scanf("%s",1);//读取起始站printf("请输入终点站:\n");scanf("%s",2);//读取终点站break;}for(i=0;i<m;i++){if(strcmp(s[i].start,1)==0&&strcmp(s[i].end,2)==0)//判断输出条件{Print(i);break;}if(strcmp(s[i].number,mo.ch)==0)//判断输出条件{Print(i);break;}}printf("请输入新航班号、起始站、终点站、起飞时间、抵达时间、价格、折扣、机票数:\n"); scanf("%s",mo.ch); //读取航班号scanf("%s",1);//读取起始站scanf("%s",2);//读取终点站scanf("%s",mo.time1);//读取时间scanf("%s",mo.time2);scanf("%d",&mo.price);scanf("%d",&mo.count);//读取机票数scanf("%d",&mo.num);strcpy(s[i].number,mo.ch);strcpy(s[i].start,1);//替换其始站strcpy(s[i].end,2);//替换终点站strcpy(s[i].time1,mo.time1);//替换时间strcpy(s[i].time2,mo.time2);s[i].price=mo.price;s[i].count=mo.count;//替换机票数s[i].num=mo.num;save();//调用保存模块printf("修改信息成功!\n");read();printf("修改后的航班信息为\n");printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数\n");for(i=0;i<m;i++)Print(i);printf("是否继续?请键入Y或N以回车键结束:\n");scanf(" %c",&a);}while(a=='Y'); //判断结束}void Book() //实现用户订票功能{ char ch[10];int d,i=0,t;Display(m);printf("请输入您要订的航班号码\n");scanf("%s",ch);while(i<m&&(strcmp(s[i].number,ch)!=0))i++;if(i>m){printf("没有找到您所要订的航班!请重新输入\n");scanf("%s",ch);}else if(strcmp(s[i].number,ch)==0)t=i;printf("请输入你要订的票数\n");scanf("%d",&d);if(d<0){printf("请输入有效的机票数!\n");//判断机票数是否出错scanf("%d",&d);}H:i=0;do{if(s[i].num!=0&&s[i].num>=d)//判断是否出错{ s[i].num=s[i].num-d;c[i].t=d;c[i].co=t;printf("请输入您的姓名:");scanf("%s",c[i].name);printf("请输入您的证件号码(6位数字)\n");scanf("%s",c[i].ID);system("cls");//save();//调用保存函数printf("订票成功!\n\n");break;}if(s[i].count<d)//判断是否出错{printf("对不起,您所订的航班剩余机票不够,请重新输入机票数量:\n");scanf("%d",&d);goto H;}i++;}while(i<m);//read();printf("下面是已订机票的顾客的相关信息:\n");printf("--------------------------------------------------------------------\n");printf("姓名证件号码订票数量订单编号\n");printf("--------------------------------------------------------------------\n");printf("%-6s %6s %6d %6d\n",c[i].name,c[i].ID,c[i].t,c[i].co);Print(c[i].co);}void Back()//退票模块{char p[10];int n,i=0;read();//调用查询模块printf("请输入您要退订的航班号\n");scanf("%s",p);while(i<m&&strcmp(s[i].number,p)!=0)i++;if(i<m){printf("请输入您要退的机票数目:\n");scanf("%d",&n);//输入所退票数}if(n<0) //判断票数是否有效{printf("请输入有效的机票数:");scanf("%d",&n);}s[i].num=s[i].num+n;printf("退票成功!\n");//save(); //调用保存模块}void Delet(int &m)//删除模块{char a;char city1[20],city2[20],no[10];int k,i,j;read();do{printf("请选择删除以方式回车键结束:\n");//打印删除方式菜单printf("*1.按航班号删除\n" );printf("*2.按航线删除\n" );printf("*0.返回\n" );printf("请输入您的选项(0-2):\n");scanf("%d",&k);//读取删除方式switch(k){case 1: printf("请输入您要删除的航班号:\n");scanf("%s",no);//读取航班号for(i=0;i<m;i++)if(strcmp(s[i].number,no)==0){ for(j=i;j<m;j++)s[j]=s[j+1];m--;save();//调用读取函数printf("删除信息成功,剩余航班信息如下\n");read();printf("************************************************************************* *\n");printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数(张)\n");printf("************************************************************************* *\n");for(i=0;i<m;i++)Print(i);printf("**************************************************************************\n");}break;//跳出循环case 2: printf("请输入要删除的航班起始站名称:\n");scanf("%s",city1);//读取起始站printf("请输入要删除的航班终点站名称:\n");scanf("%s",city2);//读取终点站for(i=0;i<m;i++)if(strcmp(s[i].start,city1)==0&&strcmp(s[i].end,city2)==0){for(j=i;j<m;j++)s[j]=s[j+1];m--;save();//调用读取函数printf("删除信息成功,剩余航班信息如下\n");read();printf("********************************************************************* *****\n");printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数(张)\n");printf("************************************************************************* *\n");for(i=0;i<m;i++)Print(i);printf("********************************************************************* *****\n");break;}break;//跳出循环case 0:break;}printf("是否继续删除?(Y or N):\n");scanf(" %c",&a);}while(a=='Y');}void main(){int j;menu();printf("请在0-7中选择以回车键结束:\n\n");scanf("%d",&j);switch(j){case 1:system("cls");Input();//调用输入模块break;case 2:system("cls");Display(m);//调用打印模块break;case 3:system("cls");Modify();//调用修改模块break;case 4:system("cls");search();//调用查找模块break;case 5:Delet(m); //调用删除模块break;case 6:system("cls");Book();//调用订票模块break;case 7:system("cls");Back();//调用退票模块break;case 0: break;}}11。
c课程设计航班系统
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二分查找二分查找是对有序序列进行快速查找的一种有效方法。
它的基本思想是,每次都与这个有序序列的中间元素进行比较,若找到,则输出元素信息,若没找到,则判断这个中间元素比待查找的元素大还是小,如果大,那么查找工作继续在该有序序列的前半段进行;反之,则继续查找该有序序列的后半段。
如此一直查找,直到找到该元素或者查找到只剩下一个元素而这个元素与待查找元素不相符时,查找结束。
前一种情况找到了待查找元素,输出该元素,后一种没有找到,输出相应提示信息。
4.3算法实现1、顺序查找对于根据起点站、终点站、航班期、起飞时间、到达时间来进行航班查找的函数,只需将这个查找关键字与结构体数组中相应的键值进行比较,因为每个关键字查找不一定是唯一的,所以如果想要查找到所有的相关信息,则必须将结构体查找到底。
当找到相应航班信息时,只要将其输出即可。
2、基数排序最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。
再将各组连接起来,便得到一个有序序列。
3、二分查找设置标志位left,right,mid。
其中left表示查找序列的左端第一个元素下标,right表示查找序列的右端第一个元素下标。
mid等于(left+right)/2。
函数使用while循环,循环条件是left<=right。
在循环体内,首先判断待查找信息的航班号是否与以mid为下标的数组内指针所指向的结构体变量一致,若一致,则输出该航班信息,若比该结构体变量小,则令rihgt=mid-1,继续进入下一轮循环,若比较大,则令left=mid+1,继续循环。
这样查找到最后,若找到,则会输出相应航班信息,若没有找到,需要输出提示信息。
4、主函数在主函数中,依然是以while循环的方式列出该程序的操作清单。
该程序的菜单是请用户选择以什么作为查找关键字来查找航班信息。
查找菜单如下:1.航班号,2.起点站,3.终点站,4.起飞时间,5.到达时间,0.退出。
选择不同菜单项,将会提示不同信息让用户输入,然后程序根据各自的查找方法进行查找。
4.4函数说明(1)一趟数字字符分配函数void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e)(2)一趟数字字符收集函数void collect(slnode *sl,int i,arrtype_n f,arrtype_n e)(3)一趟字母字符分配函数void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e)(4)一趟字母字符收集函数void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e)(5)链式基数排序函数void radixsort(sllist &l)(6)按指针链重新整理静态链表void arrange(sllist &l)(7)二分查找函数int binsearch(sllist l,keytype key[])(8)顺序查找函数void seqsearch(sllist l,keytype key[],int i)(9)查询检索菜单void searchcon(sllist l)(10)录入航班数据函数void inputdata(sllist &l)(11)主函数void main()第五章测试5.1核心算法复杂性分析(1)基数排序复杂性分析设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排序的时间复杂度为O(d(n+radix)),其中,一趟分配时间复杂度为O(n),一趟收集时间复杂度为O(n),共进行d趟分配和收集。
空间效率:需要2*radix个指向队列的辅助空间,以及用于静态链表的n个指针。
(2)折半查找复杂性分析问题规模为n,其算法复杂度为o(log(n))5.2测试数据及结果略第六章总结本设计的重点和难点在于对航班数据的排序和查找,以链式基数排序为主,用到了二分查找和顺序查找、建立静态链表等知识。
通过本次课程设计,使我对数据结构和算法设计有了新的认识,能够独立分析问题,选择所需的数据结构,仔细分析算法。