当前位置:首页 >> 工学 >>

航班信息的查询与检索课程设计


数据结构与算法 课程设计报告

题目:

航班信息的查询与检索

学生姓名 学 号

专业班级 指导教师 日 期 元培学院教务处

课 程 设 计 任 务 书
班 级 姓 名 成 绩

题目 航班信息的查询与检索
一、 问题描述

设计民航售票处的计算机系统可以为客户提供下列各项服务:1. 查询航 线: 根据旅客提出的终点站名输出下列信息: 航班号、 飞机号、 星期几飞行、 ; 2. 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情 况。

已 知 技 术 参 数 、 设 计 要 求 、 测 试 数 据 等

二、基本要求
1.对飞机航班信息进行排序和查找。 可按航班的航班号、 起点站、 到达站、 起飞时间以及到达时间等信息进行查询。 2.采用快速排序法对的飞机航班号进行排序。 3.利用二分查找法对排好序的航班记录按航班号查询。 4.每个航班记录包括八项,分别为:航班号、起点站、终点站、班期、起 飞时间、到达时间、飞机型号以及票价等

二、

测试数据

CA1505 深圳 海南 135 09:00 11:00 M90 980 10 CA1544 上海 北京 1245 10:55 12:40 733 1960 10 MU5341 上海 广州 每日 14:20 16:15 M90 1280 10 CZ3869 重庆 深圳 246 08:55 10:35 733 1010 10 MU3682 杭州 南京 23467 20:50 22:15 M90 1380 10 HU1836 上海 北京 每日 09:40 11:20 738 1250 10 CZ3528 成都 厦门 13457 15:10 16:50 CRJ 1060 10 MU5566 北京 上海 135 09:00 11:00 A77 1234 10 BK1456 海南 纽约 126 07:00 19:00 A77 5600 10 BK1451 北京 纽约 126 08:00 20:00 A77 5600 10 HU1136 上海 巴黎 每日 09:40 16:20 B38 3250 10 MU3682 重庆 南京 23467 20:50 22:15 M90 1380 10 CA1544 乌鲁木齐 北京 1245 10:55 15:40 733 3960 10 AA1544 桂林 杭州 125 10:55 14:40 A73 2960 10 CZ3869 深圳 重庆 246 08:55 10:35 733 1010 10 AZ7733 海南 新加坡 136 08:55 10:35 777 910 10 HU1136 上海 新加坡 每日 09:40 13:20 B38 2250 10 HZ1136 北京 巴黎 每日 09:40 16:20 B33 3250 10

设 计 进 作 度 4 月 10 日~ 4 月 17 日 完成代码 计 4 月 17 日~4 月 19 日 完成报告 安 划 排 或 工

一、 需求分析
要解决的问题:设计民航售票处的计算机系统可以为客户提供下列各项服务:1. 查询 航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行、;2. 承办 订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况。 具体要求:1.对飞机航班信息进行排序和查找,可按航班的航班号,起点站,终点站, 班期,起飞时间,到达时间,飞机型号以及票价等。2. 采用快速排序法对的飞机航班号进 行排序。3.利用二分查找法对排好序的航班记录按航班号查询。4.每个航班记录包括八项, 分别为:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等

二、

概要设计

数据类型的声明:
/*头文件以及存储结构*/
#include<iostream> #include<fstream> #include<string> int n; using namespace std; class Employee

2,表达式的抽象数据类型定义
static void twosearch(Employee a[]);//二分查找 static void f_by_address(Employee a[],int m);//按起点站/终点站查询 static void f_by_time(Employee a[],int m);//按起飞时间/到达时间查询 void insert(Employee a[]);//添加航班 friend

void show()//输出信息 void book(Employee a[])//订票系统 void quicksort(Employee a[],int low,int high) //-快速排序

3. 主程序的流程

三、

详细设计

1.主要代码:
friend istream&operator>>(istream&in,Employee&e)//文件输出流 { return in>>e.flight_num>>e.start>>e.end>>e.fly_date>>e.start_time>>e.end_time>>e.flight_type>>e.price>>e.tickets; } friend ostream&operator<<(ostream&out,Employee&e)//文件输入流 { return out<<e.flight_num<<e.start<<e.end<<e.fly_date<<e.start_time<<e.end_time<<e.flight_type<<e.price<<e.tickets ;

} void show()//输出信息 { cout<<" cout<<" "<<start_time<<" } }; //----------快速排序----------void quicksort(Employee a[],int low,int high) { int z,y;Employee key;//定义一个 key 的类对象,key 为关键字 if(low<high) { z=low; y=high; key=a[low];//把第一个数据复制给 key,为关键字 while(z!=y) { while((z<y)&&(strcmp(key.flight_num,a[y].flight_num)<=0))//当 low<high 且 a[y].flight_num 大于等于关键字 y--;//high 向前移一位 a[z]=a[y];//此时 a[y]的值为关键字 while((z<y)&&(strcmp(key.flight_num,a[z].flight_num)>=0))//当 low<high 且 a[y].flight_num 小于等于关键字 z++;//low 向后移一位 a[y]=a[z];//此时 a[z]的值为关键字 航班号 起飞站 终点站 班期 起飞时间 "<<end<<" 到达时间 机型 票价"<<endl;

"<<flight_num<<" "<<end_time<<"

"<<start<<"

"<<fly_date<<"

"<<flight_type<<"

"<<price<<endl;

}

a[z]=key; quicksort(a,low,z-1);//对一边递归调用 quicksort()排序 quicksort(a,z+1,high);//对另一半递归调用 quicksort()排序 } } //通过航班号实现二分查找法查找 void Employee::twosearch(Employee a[])//二分查找 { char num[6];

int key=0; cout<<"请输入您要查询的航班号:"; cin>>num; int low=0,high=n-1,mid; while(low<=high) { mid=(low+high)/2; if(!strcmp(num,a[mid].flight_num))//找到该航班,并输出 { a[mid].show();key=1;return; } else if(strcmp(num,a[mid].flight_num)<0) high=mid-1; else low=mid+1; } if(!key) cout<<" } void insert(Employee a[])//添加航班 { *************对不起,没有您要查找的航班号********** "<<endl;

char secret[6];int i=3; cout<<"请输入管理员密码:"; cin>>secret; if(!strcmp(secret,"12345")) { cout<<"请依次录入航班信息数据(航班号由 2 位大写字母和 4 位数字组成):"<<endl; ofstream f;//定义文件对象 f.open("初始化航班.txt",ios::app); if(f.fail())//打开文件失败 { cout<<"打开文件失败!"<<endl; exit(2); }int i=n; while(!f.eof())//直到文件结尾 { //int i=sizeof(a)/sizeof(a[0]); 航班号 起飞站 终点站 班期 起飞时间 到达时间 机型 票价 票数

cout<<"

"<<endl;

cin>>a[i].flight_num>>a[i].start_time>>a[i].end_time>>a[i].start>>a[i].end>>a[i].fly_date>>a[i].flight_ty pe>>a[i].price>>a[i].tickets; f<<a[i];n++;break;//通过文件输入流导入文件

} } else

f.close();

cout<<"密码错误,请重新登入!"<<endl;

}

2、函数的调用关系
除了主函数 main()外,其他各个函数相对于其它函数来说是独立的,函数的使用都由 主函数 main()调用使用的。

四、

测试分析(设计测试数据,或具体给出测试数据。要求测试数据能全面地

测试所设计程序的功能)

菜单:

查询:

订票系统:

添加班次:

五、总结分析
拿到这个课题的时候,我首先想到的就是用这学期学的 C++来写,我是用类的思想来 实现的,编写的过程中遇到的最大困难就是 C++的文件输入输出操作,以及快速排序的实 现,对于快排,我首先想到的是写一个“quicksort.h”的头文件,以便缩短代码的长度, 然后用类模板的思想来实现,后来发现不能直接调用航班类里面的成员,于是,还是老老 实实在主程序里面敲快排的代码,期间也遇到很多问题,一开始我是用数据的航班号作为 关键字,进行交换排序,发现航班类里面的其他成员并没有实现排序,后来在董老师的帮 助下,我定义了一个类对象作为关键字,终于实现了排序。 一开始是用手动敲航班信息到程序里面,发现效率很低,容易敲错,于是想到了用文 件直接读入的方法,不过用 C++进行文件操作还是第一次,和董老师进行了相关的交流以 及查询了相关资料后,才有了一定的了解,由于航班类里面有很多成员,不能直接导入, 要写一个文件的输入和输出流来实现 friend istream&operator>>(istream&in,Employee&e)//文件输出流 friend ostream&operator<<(ostream&out,Employee&e)//文件输入流。在调试过程中遇 到其它比较多的问题大概就是输出的格式问题,以及怎么把界面优化到一个良好的可视效 果,比较编程最终实现的就是要人机界面要友好。 通过这次课程设计,我对 C++类的思想有了更深的了解,学到了 C++的文件操作和快 速排序算法,虽然这次写的是一个很小的系统,但是为将来开发一个更庞大的系统奠定了 一个良好的基础,在这里,要感谢董老师对我的细心帮助。

五、

程序清单

/**************航班信息的查询与检索课程设计 代码**************/ #include<iostream> #include<fstream> #include<string> //#include<algorithm>

int n; using namespace std; /******************航班记录类描述*****************/ class Employee { public: char flight_num[7];//航班号 char start[6];//起点站 char end[6];//终点站 char fly_date[6];//班期 char start_time[6];//起飞时间 char end_time[6];//到达时间 char flight_type[6];//机型 int price;//票价 int tickets;//票数 public: Employee(){} Employee(char *a,char *b,char *c,char *d,char *e,char *f,char *g,int h):price(h)//构造函数 { strcpy(flight_num,a); strcpy(start,b); strcpy(end,c); strcpy(fly_date,d); strcpy(start_time,e); strcpy(end_time,f); strcpy(flight_type,g); //定义一个 Employee 的类

} ~Employee(){}//析构函数 friend istream&operator>>(istream&in,Employee&e)//文件输出流 { return in>>e.flight_num>>e.start>>e.end>>e.fly_date>>e.start_time>>e.end_ti me>>e.flight_type>>e.price>>e.tickets; } friend ostream&operator<<(ostream&out,Employee&e)//文件输入流 { return out<<e.flight_num<<e.start<<e.end<<e.fly_date<<e.start_time<<e.end_t ime<<e.flight_type<<e.price<<e.tickets; }

static void twosearch(Employee a[]);//二分查找 static void f_by_address(Employee a[],int m);//按起点站/终点站查 询 static void f_by_time(Employee a[],int m);//按起飞时间/到达时间查 询

friend

void insert(Employee a[]);//添加航班

void show()//输出信息 { cout<<" 航班号 型 票价"<<endl; cout<<" "<<fly_date<<" "<<flight_num<<" "<<start_time<<" "<<start<<" "<<end<<" 起飞站 终点站 班期 起飞时间 到达时间 机

"<<end_time<<"

"<<flight_type<<" }

"<<price<<endl;

}; //*****************************公有函数 *********************************** //-----------订票系统 void book(Employee a[]) {

char aa[6];int b,key=0; char yn[6]; cout<<"请输入您要订的航班号:"; cin>>aa; int low=0,high=n-1,mid; while(low<=high) { mid=(low+high)/2; if(!strcmp(aa,a[mid].flight_num))//找到航班 { cout<<a[mid].flight_num<<" "<<"剩余票数: "<<a[mid].tickets<<endl; cout<<"请输入您要订的票数:"; cin>>b; if(a[mid].tickets>=b) { cout<<"您是否要订购? YES/NO:"; cin>>yn;

if(!strcmp(yn,"YES")) { cout<<"订票成功!"<<endl; a[mid].tickets-=b;//原票数减去已订购的票数 key=1; return; } else {key=1;return;} } else { cout<<"订购的票数超出了余额!"<<endl; } } else if(strcmp(aa,a[mid].flight_num)<0) high=mid-1; else low=mid+1; } if(!key) cout<<" ********** } //----------快速排序----------"<<endl; *************对不起,没有您要查找的航班号

void quicksort(Employee a[],int low,int high) {

int z,y;Employee key;//定义一个 key 的类对象,key 为关键字 if(low<high) { z=low; y=high; key=a[low];//把第一个数据复制给 key,为关键字 while(z!=y) {

while((z<y)&&(strcmp(key.flight_num,a[y].flight_num)<=0))//当 low<high 且 a[y].flight_num 大于等于关键字 y--;//high 向前移一位 a[z]=a[y];//此时 a[y]的值为关键字

while((z<y)&&(strcmp(key.flight_num,a[z].flight_num)>=0))//当 low<high 且 a[y].flight_num 小于等于关键字 z++;//low 向后移一位 a[y]=a[z];//此时 a[z]的值为关键字

}

a[z]=key; quicksort(a,low,z-1);//对一边递归调用 quicksort()排序 quicksort(a,z+1,high);//对另一半递归调用 quicksort()排序 } }

//--------------查 询 系 统-------------//通过航班号实现二分查找法查找 void Employee::twosearch(Employee a[])//二分查找 { char num[6]; int key=0; cout<<"请输入您要查询的航班号:"; cin>>num; int low=0,high=n-1,mid; while(low<=high) { mid=(low+high)/2; if(!strcmp(num,a[mid].flight_num))//找到该航班,并输出 { a[mid].show();key=1;return; } else if(strcmp(num,a[mid].flight_num)<0) high=mid-1; else low=mid+1; } if(!key) cout<<" ********** } "<<endl; *************对不起,没有您要查找的航班号

//通过站点查询 void Employee::f_by_address(Employee a[],int m)

{ char ar[6];int key=0,i; if(m==2) { cout<<"请输入您要查询的航班的起飞地址:"; cin>>ar; for(i=0;i<n;i++) { if(!strcmp(ar,a[i].start)) { a[i].show();key=1; } } } else if(m==3) { cout<<"请输入您要查询的航班的抵达地址:"; cin>>ar; for(i=0;i<n;i++) { if(!strcmp(ar,a[i].end)) { a[i].show();key=1; } } } if(!key) cout<<" ********对不起,该站点不存在********

"<<endl; } //通过起飞时间到达时间查询 void Employee::f_by_time(Employee a[],int m) { char time[6];int i,key=0; if(m==4) { cout<<"请输入您要查询的航班的起飞时间:"; cin>>time; for(i=0;i<n;i++) { if(!strcmp(time,a[i].start_time)) { a[i].show();key=1; } } } else if(m==5) { cout<<"请输入您要查询的航班的抵达时间:"; cin>>time; for(i=0;i<n;i++) { if(!strcmp(time,a[i].end_time)) { a[i].show();key=1; }

} } if(!key) cout<<" "<<endl; ********对不起,该站点不存在********

}

//*****************************分函数 ***********************************

void menushow()//菜单 { cout<<" "<<endl; cout<<" ==========================================================="<<endl; cout<<" 查询航线 航班信息查询与检索系统

---------------------------------------------------"<<endl; cout<<" number)"<<endl; cout<<" address)"<<endl; cout<<" address)"<<endl; cout<<" time)"<<endl; 4. 按起飞时间查询(Find by start 3. 按终点站查询(Find by arrived 2. 按起点站查询(Find by start 1. 按航班号查询(Find by flight

cout<<" time)"<<endl; cout<<" cout<<" cout<<" cout<<" cout<<" cout<<"

5.

按到达时间查询(Find by arrived

订票系统"<<endl; 6. 订票(book the ticket)"<<endl;

管理员系统"<<endl; 7. 0. 添加班次(Add divisions )"<<endl; 退出系统(Exit program )"<<endl;

==========================================================="<<endl; cout<<" -----------------版权所有:计算机 1002 王嘉琦

---------------"<<endl<<endl;

} void insert(Employee a[])//添加航班 {

char secret[6];int i=3; cout<<"请输入管理员密码:"; cin>>secret; if(!strcmp(secret,"12345")) { cout<<"请依次录入航班信息数据(航班号由 2 位大写字母和 4 位数字 组成):"<<endl; ofstream f;//定义文件对象 f.open("初始化航班.txt",ios::app); if(f.fail())//打开文件失败 { cout<<"打开文件失败!"<<endl;

exit(2); }int i=n; while(!f.eof())//直到文件结尾 { //int i=sizeof(a)/sizeof(a[0]);

cout<<" 机型

航班号

起飞站

终点站

班期

起飞时间

到达时间

票价 票数"<<endl;

cin>>a[i].flight_num>>a[i].start_time>>a[i].end_time>>a[i].start >>a[i].end>>a[i].fly_date>>a[i].flight_type>>a[i].price>>a[i].ticket s; f<<a[i];n++;break;//通过文件输入流导入文件

} } else

f.close();

cout<<"密码错误,请重新登入!"<<endl;

} /***********************主函数******************/ /*bool cmp(Employee a,Employee b) { return strcmp(a.flight_num,b.flight_num)<0; }*/ int main() {

Employee flight[100];//定义一个 flight 的类对象 int point; n=0; ifstream f;//定义文件对象 f.open("初始化航班.txt",ios::in); if(f.fail())//打开文件失败 { cout<<"打开文件失败!"<<endl; exit(2); } while(!f.eof()) { f>>flight[n++];//导出文件里面的信息到 flight 里面 }

quicksort(flight,0,n-1);//排序

//sort(flight,flight+n,cmp); menushow(); while(1) { cout<<"请输入要你需要的操作:"; cin>>point; switch(point) { case 1:Employee::twosearch(flight);break; case 2:Employee::f_by_address(flight,2);break; case 3:Employee::f_by_address(flight,3);break; //显示菜单

case 4:Employee::f_by_time(flight,4);break; case 5:Employee::f_by_time(flight,5);break; case 6:book(flight);break; case 7: insert(flight);break; case 0:exit(0); }

} f.close (); return 0; }


赞助商链接
相关文章:
数据结构课程设计航班信息的查询与检索
数据结构课程设计航班信息的查询与检索 - 目录 第 1 章 概述 ......
航班信息的查询与检索
航班信息的查询与检索_计算机软件及应用_IT/计算机_专业资料。C 课程设计 设计题目: 航班信息的查询与检索 院 系 信息学院 班级 学生姓名 学号 职称 讲师、讲师 ...
航班信息的查询与检索
11 目录 1 概述 1.1 课程设计名称航班信息的查询与检索 1.2 课程设计目的通过本次实验,掌握数据结构中的几种排序算法和查找算法,了解静态链表的运用,利用上述 ...
航班信息的查询与检索的程序设计模版
航班信息的查询与检索的程序设计模版_IT/计算机_专业资料。用VC++MFC做文本编辑器《数据结构》课程设计报告 《数据结构》 数据结构》课程设计报告设计题目 专班姓学...
数据结构课程设计-航班查询与检索(含代码、流程图、输...
数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)_工学_高等教育_教育专区。数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)算法...
航班信息查询与检索系统
航班信息查询与检索系统 - 课程设计报告 课程设计名称:数据结构课程设计 题目:设计并实现一个航班信息查询与检索系统 院系:计算机学院 专业: 班级: 学号: 姓名: ...
实验六 航班检索与查询
1.2 实验目的通过进行课程设计, 了解并初步掌握设计航班信息的查询与检索功能, 包括: 系统分析、 详细设计、 系统功能、 以及调试分析, 熟练掌握数据结构的选择、...
航班信息的查询与检索、表达式求值、一元多项式的运算
航班信息的查询与检索、表达式求值、一元多项式的运算_数学_自然科学_专业资料。C++课设沈阳工程学院 课程设计 设计题目: 航班信息的查询与检索、表达式求值、一元 ...
航班信息的查询和检索.
题目:航班信息的查询与检索设计一个实用的航班信息查询和检索系统,要求能对飞机航班信息进行排 序和查询。可按航班的航班号、起点站、到达站、起飞时间以及到达时间...
航班信息的查询与检索系统
航班信息的查询与检索系统 - 航班信息查询与检索 一、问题描述 实现对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到 达时间等信息进行...
更多相关标签: