科技大学本科生《C++程序设计》课程设计说明书题目:航空售票管理系统学生:完美主义学号:XXXXXXXX专业:计算科学与技术班级:计2010-1班指导教师:XXX【摘要】随着科技的发展和人们生活水平的日益提高,人们在不断追求更加快捷的交通方式以满足人们快节奏的生活方式,航空系统在交通系统中已扮演着一个越来越重要的角色。
然而,交通的快捷离不开信息的快捷。
随着随着计算机的发展和普及,人们的生活方式发生了巨大的改变,计算机在代替和延伸脑力劳动方面发挥着越来越重要的作用。
在交通系统中,有大量的数据需要被处理,而这些工作有人来完成几乎是不可能的,而交给计算机处理,就可以很好地满足我们的需求。
航空售票管理系统可以根据乘客和管理人员的要求,进行方便快速的查询、购票、退票和管理等工作。
本文介绍了简易航空售票管理系统的实现过程。
【关键词】航空售票管理系统动态数组类和对象文件操作运算符重载多文件结构成绩评定标准课程设计的验收答辩采取“讲解程序+提问+即时编程”的方式。
目录………………………………………………………………………………………………………………………………………………………………………1.1该航空售票管理系统必须用C++语言进行设计,要能体现C++语言的特性。
1.2该系统至少要能提供下列服务:(1)录入航班信息,格式为:可不定时地增加航班数据。
(2)浏览航班信息,可显示出所有航班,如果当前系统时间超过了某航班的起飞时间,则显示“此次航班已发出”的提示信息。
(3)查询路线:可按航班编号查询,可按起始站,终点站查询(4)订票和退票功能A:查询航班编号或站点。
当剩余座位数大于0,并且当前系统时间小于起飞时间时才能售票,售票后自动更新剩余座位数。
B:退票时,输入退票的班次,当本班航班未发出时才能退票,退票后自动更新剩余座位数。
从对问题的描述可以知道,我们需要建立的是具有能对数据录入,追加,浏览,检索和修改功能的软件。
由于乘客的数量较大且不固定,因此选择用动态数组来保存乘客的基本信息:航班号、起始站名、终点站名、起飞时间、经济参票价、余票量等等。
所以我们建立一个可以动态增长的数组,在必要的时候将数组的容保存到文件中。
系统主要实现的操作和功能是:录入航班信息、浏览航班信息、查询航线、订票功能、退票功能。
要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。
2.1阐述你对问题的理解、解决问题的方案说明根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成.员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)完成系统总结报告以及系统使用说明书。
2.2系统功能模块的划分该系统总共包含四大功能模块:一、更新航班信息功能模块该模块为对航班信息的操作,仅向管理员开放使用,普通用户不能使用该功能对航班信息进行操作,故进入该功能需进行身份验证。
该模块又被分为五个子功能模块——信息库的重建、信息的插入、修改、删除和清空数据。
二、浏览航班信息完成将文件中的航班信息按照要求格式全部输出。
三、查询航班信息可以实现按航班号和按站点的查询并将查询到的信息输出。
四、订票和退票系统该模块根据订票和退票操作的相似性,将这两种操作放在一起。
另外,由于各模块函数是直接对文件进行操作,所以各功能模块是相互独立的。
第三章数据模型3.1相关数据结构的说明本系统用到的容器主要是动态增长的vector ,使用该容器需用头文件#include <vector>,其通过语句vector <Flight> v_array;申请了一个可以动态增长的数组。
该数组的元素类Flight的对象,通过语句Flight fly; v_array.push_back(fly);可实现数组v_array的增长。
该容器用来存放航班类Flight的对象,使用该容器可以可以存放个数不确定的对象,且可以方便地进行访问。
3.2类的设计程序中一共定义了两个类:Flight类和Traffic_system类。
在Flight类里定义了私有数据成员m_fnum[10]表示航班号, m_ftime[2]表示起飞时间,char m_fstar[18]表示起始站, m_fdestination[18]表示终点站, m_fprice表示票价, m_fseat表示票数;定义了共有的成员函数bool SetInfo()用来设置航班信息,friend istream& operator>>(istream& in, Flight& cp)用来重载提取运算符>>,friend ostream& operator<<(ostream& out, Flight& cp)用来重载插入运算符<<,void Display()用来输出航班信息,bool Book()用来订票,void Refund()用来退票,bool If_takeoff()用来判断是否起飞,bool If_deleted()用来判断该航班是否被删除,bool If_match(char (*p)[18], char ta)用来判断航班号或站点名是否相同。
另一个类为Traffic_system类,其中定义了私有数据成员m_sum和v_array,v_array是数组名,用来存放航班类对象,m_sum表示数组v_array中航班类对象的个数;还定义了私有的成员函数void Read_file()用来读取文件,void Save_file()用来保存数据到文件,以及公有的数据成员函数void Manage()用来管理航班信息,void Scan()用来浏览航班信息,int Search(int invoke = 0)完成查询功能,void BookRefund()用来订票和退票。
两个类之间是组合的关系,其中Flight类是Traffic_system类的子类。
3.3程序结构说明,即程序各个部分之间如何协调来完成任务程序的结构图如下:如上图,程序中各功能模块所需的数据都直接取自文件,这样保证了各模块的独立性和数据的安全性。
并且只有相应的模块进行写的操作,并且数据的写入不必依赖其他模块,这样使用户可以仅使用其中某一项功能,而不必进行多余的操作。
3.4全局变量,重要形式参数、局部变量等等,它们的命名及用途解释(1)整个程序中未使用全局变量。
(2)重要形参A) 提取运算符重载函数istream& operator>>(istream& in, Flight& cp)中使用了形参in和cp,形参in为引用“ istream&”,与该函数的返回值相同,故可以将该函数的返回值传给该形参,实现“>>”操作符的连续使用。
形参cp为引用“Flight&”,实现了对Flight类对象的输入重载。
B) 插入运算符重载函数ostream& operator<<(ostream& out, Flight& cp)中使用了形参out和cp,其作用与上面类似。
C) 函数bool Flight::If_match(char (*p)[18], char ta)中使用了形参p 和ta,形参p为指向字符数组的指针,它用来指向一个大小为18的字符数组;形参ta为字符型,其作用是使该函数区分航班号和站点名两种比较。
D) 函数int Traffic_system::Search(int invoke = 0)中使用了形参invoke,该形参为int型并设置默认参数0,其作用为区分调用者,以便输出相应的提示信息。
第四章算法描述4.1解题算法的设计思路介绍首先根据问题描述抽象出一个航班类,封装了航班的数据信息和方法。
数据里主要有航班的航班号、起飞时间、站点等信息,方法主要是对该类中数据的值的输入、输出对本班次机票的管理,对时间、站名等的核对,另外为了方便对文件的输出和读取,还以友元的形式重载了提取和插入运算符。
由于有航班有多组,为了方便管理各个对象,所以有定义了一个Traffic_system 类,将Flight类的对象作为Traffic_system类的数据成员。
Traffic_system类中还定义了两个私有的成员函数完成对文件的读写。
共有的成员函数主要是Manage(),void Scan(), Search(int invoke = 0)和BookRefund(),用来完成系统的几大功能。
4.2画出程序流程图文件“航空售票管理系统v-1.0.cpp”中主函数流程图——main()文件“class/Traffic_system.cpp”中类中Traffic_system中浏览函数——void Scan()查询函数——Search(int invoke = 0)订票退票函数BookRefund()第五章设计总结此课程设计完成了对航线查询、订票、退票等功能的设计操作,并且为了插入和删除方便,运用动态数组做存储结构。
此课程设计还包含了清屏功能以及退出功能。
对程序在运行时输入错误操作的修改,提供了一定方便条件基本上能安全的运行,具备的功能符合题目的要求。
用了文件的操作,是此程序的最大优点。
程序写的还算简练,结构清晰,各个模块的分工和功能明确。
经过两周的课程设计,我认识到把课堂上老师讲的知识运用到实际操作中的重要性。
我这次课程设计的题目是航空订票系统,在开始阶段,根本无从下手,后来通过查阅一些相关资料和老师的耐心讲解,最终成功完成整个程序的设计。
通过这次课设我对C++语言中的类的定义、运算符重载等知识有了进一步的理解,对流程图的画法更加熟练,对程序的开发思路有了一定的理解,我想这在以后的学习和工作中都会有帮助的,更使我意识到了学习C++语言的重要性。
程序中运用了多文件结构,虽然程序不是太大,但多文件结构的使用是我模仿正规软件的结构来写的,我想这对我以后的提高有帮助。
另外,对程序的不断调试,是我的查错能力有了很大的提高。
附录【程序清单】文件——航空售票管理系统v-1.0.cpp#include <fstream>#include <iostream>using namespace std;#include "class/Traffic_system.h"int main(){Traffic_system civil_aviation;//若文件不存在,则新建文件ofstream newfile( "flight information.txt", ios::app );if (!newfile){cerr << "文件\"flight information.txt\"无法打开!\n";exit(2);}newfile.close();int tab;while(1){cout << "\n>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎进入航空售票管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"<< "****** 主菜单:***********"<< "****** 1——更新航班信息(需管理员身份验证) 2——浏览航班信息 ***********"<< "****** 3——查询航班信息 4——订票和退票 ***********"<< "****** 5——清屏 0——退出系统 ***********"<<"*************************************************************************** *****"<< "你需要做什么?(选择0~4)" << endl;cin >> tab;while(!(tab == 1 || tab == 2 || tab == 3 || tab == 4 || tab == 5 || tab == 0)){cout << "请输入正确选择(0~4):";cin >> tab;}switch(tab){case 1:{civil_aviation.Manage();break;} //航线管理case 2:{civil_aviation.Scan();break;} //订票办理case 3:{civil_aviation.Search();break;} //退票办理case 4:{civil_aviation.BookRefund();break;}case 5: system("cls"); break;case 0:return 0; //退出系统}}}文件——class/Traffic_system.h#include <vector>using namespace std;#include "flight.h"//用于对文件的操作class Traffic_system{public:Traffic_system(){m_sum = 0;}void Manage();//管理航班信息void Scan();//浏览int Search(int invoke = 0);//查询功能void BookRefund();//订票和退票private:void Read_file();//读取文件void Save_file();//保存文件private:int m_sum;//记录航班数vector <Flight> v_array;//航班类数组};文件——class/Traffic_system.cpp#include <fstream>#include <iostream>using namespace std;#include "Traffic_system.h"//读取文件void Traffic_system::Read_file(){ifstream file( "flight information.txt");if (!file){cerr << "文件\"flight information.txt\"无法打开!\n";exit(1);}m_sum = 0;while (!file.eof()){Flight fly;v_array.push_back(fly);//file >> v_array[m_sum++];}m_sum--;//file.close();}//保存文件void Traffic_system::Save_file(){ofstream file( "flight information.txt" , ios::trunc);if (!file){cerr << "文件\"flight information.txt\"无法打开!\n";exit(2);}int i = -1;while (++i < m_sum){if (!v_array[i].If_deleted()){file << v_array[i];}}file.close();}//管理航班信息void Traffic_system::Manage(){char password[20];//用于存贮密码int times = 3;cout << "登录系统需验证密码!" << endl;//验证密码。