1、项目项目九九根据乘客和管理人员的需求,飞机订票系统可以提供下列服务:根据乘客和管理人员的需求,飞机订票系统可以提供下列服务:(1)浏览、查询航班信息;)浏览、查询航班信息;(2)购票、退票;)购票、退票;(3)管理航班信息(管理人员权限)。)管理航班信息(管理人员权限)。项目项目说明说明预备知识预备知识 接到项目要求后,首先需要分析项目中提出的要求然后定义项接到项目要求后,首先需要分析项目中提出的要求然后定义项目的功能。根据功能的划分再进行类与核心控制的设计,最后进行目的功能。根据功能的划分再进行类与核心控制的设计,最后进行编码和测试。编码和测试。具体可分为以下步骤:具体可分为以下步骤:(1)
2、分析系统中的各个实体之间的关系及其属性和行为;)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义;)完成类中各个成员函数的定义;(5)编码完成系统的应用模块;)编码完成系统的应用模块;(6)功能调试;)功能调试;(7)完成系统总结报告以及系统使用说明书。)完成系统总结报告以及系统使用说明书。一、问题分析和功能定义一、问题分析和功能定义二、类设计及实现二、类设计及实现三、核心控制设计三、核心控制设计四
3、、编码与测试四、编码与测试综合综合实践实践 设计设计飞机订票系统飞机订票系统一、问题分析和功能定义一、问题分析和功能定义 这个阶段的工作也叫作这个阶段的工作也叫作“需求分析需求分析”,需要程序员和用户共同分析,需要程序员和用户共同分析问题,从而确定整个软件系统要完成的功能。飞机订票系统的功能结构问题,从而确定整个软件系统要完成的功能。飞机订票系统的功能结构如图所示。如图所示。(一)更新航班信息模块(一)更新航班信息模块 该模块用于更新对航班信息,仅向管理人员开放使用,需进该模块用于更新对航班信息,仅向管理人员开放使用,需进行身份验证。其下分为五个子功能模块行身份验证。其下分为五个子功能模块信息
4、库的重建、信息信息库的重建、信息的插入、修改、删除和清空数据。的插入、修改、删除和清空数据。(二)订票和退票模块(二)订票和退票模块 订票时,首先按航班编号或站点查询该航班的基本信息,当订票时,首先按航班编号或站点查询该航班的基本信息,当剩余座位数大于剩余座位数大于0且当前系统时间小于起飞时间时才能售票,售且当前系统时间小于起飞时间时才能售票,售票后系统自动更新剩余座位数。票后系统自动更新剩余座位数。退票时,需输入退票的班次,只有该航班未发出时才能退票,退票时,需输入退票的班次,只有该航班未发出时才能退票,退票后将自动更新剩余座位数。退票后将自动更新剩余座位数。(三)查询航班信息模块(三)查询
5、航班信息模块 可以实现按航班号和按站点的两种方式进行查询并将查询到的可以实现按航班号和按站点的两种方式进行查询并将查询到的信息输出。信息输出。(四)浏览航班信息(四)浏览航班信息 该模块用于将文件中的航班信息按照要求的格式全部输出。如该模块用于将文件中的航班信息按照要求的格式全部输出。如果当前系统时间超过了某航班的起飞时间,则显示果当前系统时间超过了某航班的起飞时间,则显示“此次航班已此次航班已发出发出”的提示信息。的提示信息。程序中各功能模块所需的数据都直接取自文件,而不是依赖程序中各功能模块所需的数据都直接取自文件,而不是依赖其他模块,这样一来,保证了各模块的独立和数据的安全。其他模块,这
6、样一来,保证了各模块的独立和数据的安全。二、类设计及实现二、类设计及实现 本阶段的工作是要给出所有对象的描述,并确定对象之间是如何本阶段的工作是要给出所有对象的描述,并确定对象之间是如何交互的。本项目中定义了两个类:交互的。本项目中定义了两个类:Flight类和类和Traffic_system类。类。Flight类封装了航班的数据信息和方法,类封装了航班的数据信息和方法,Traffic_system类用于管理类用于管理Flight类对类对象。象。(一)(一)Flight类类 Flight类中的数据信息主要包括:航班的航班号、起飞时间、站类中的数据信息主要包括:航班的航班号、起飞时间、站点等信息
7、;方法主要包括:本次航班信息的输入、输出,对本航班点等信息;方法主要包括:本次航班信息的输入、输出,对本航班的订票、退票管理,对时间、站名的核对,另外,重载了提取和插的订票、退票管理,对时间、站名的核对,另外,重载了提取和插入运算符以方便对文件的输出和读取。入运算符以方便对文件的输出和读取。class Flightpublic:char m_fnum10;/航班号航班号int m_ftime2;/起飞时间起飞时间char m_fstar18;/起始站起始站char m_fdestination18;/终点站终点站int m_fprice;/票价票价int m_fseat;/票数票数Flight
8、()m_fnum0=+;Flight类的具体信息如下所示:类的具体信息如下所示: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_delete
9、d();/判断是否删除判断是否删除bool If_match(char(*p)18,char ta);/判断航班号或站点名是否相同判断航班号或站点名是否相同;(二)(二)Traffic_system类类 航班有多组,为了方便管理航班有多组,为了方便管理Flight类的各个对象,这里定义了类的各个对象,这里定义了一个一个Traffic_system类。将类。将Flight类的对象作为类的对象作为Traffic_system类的数类的数据成员,另外定义了一个数据成员用于记录航班数。据成员,另外定义了一个数据成员用于记录航班数。该类中还定义了两个私有的成员函数完成对文件的读写。其该类中还定义了两个私
10、有的成员函数完成对文件的读写。其他共有的成员函数如他共有的成员函数如Manage()、void Scan()、Search()和和BookRefund()用来完成系统的管理信息、浏览、查询和订票、退票功能。用来完成系统的管理信息、浏览、查询和订票、退票功能。Traffic_system类的具体信息如下所示:类的具体信息如下所示:class Traffic_systempublic:Traffic_system()m_sum=0;void Manage();/管理航班信息管理航班信息 void Scan();/浏览浏览 int Search(int invoke=0);/查询功能查询功能 voi
11、d BookRefund();/订票和退票订票和退票private:void Read_file();/读取文件读取文件 void Save_file();/保存文件保存文件 int m_sum;/记录航班数记录航班数 vector v_array;/航班类数组航班类数组;三、核心控制设计三、核心控制设计 核心控制设计阶段主要完成程序的框架设计,这是实现软件系统核心控制设计阶段主要完成程序的框架设计,这是实现软件系统体系的核心。在本项目中,程序的核心部分是数据存储结构的选择以体系的核心。在本项目中,程序的核心部分是数据存储结构的选择以及类中函数的设计。及类中函数的设计。(一)数据存储结构的选择
12、(一)数据存储结构的选择 乘客的基本信息包括航班号、起始站、终点站、起飞时间、票乘客的基本信息包括航班号、起始站、终点站、起飞时间、票价、余票量等,乘客的数量较大且不固定,因此我们使用动态增长价、余票量等,乘客的数量较大且不固定,因此我们使用动态增长的的Flight类数组来保存这些信息,在必要的时候可将数组的内容保存类数组来保存这些信息,在必要的时候可将数组的内容保存到文件中。到文件中。在本程序中我们使用的是在本程序中我们使用的是vector数组,数组,vector是是C+标准程序库中标准程序库中的一个类,可视为会自动扩展容量的数组。使用的一个类,可视为会自动扩展容量的数组。使用vector时
13、需在头文件时需在头文件中包含下面的代码:中包含下面的代码:#include 声明一个声明一个vector变量的方法如下:变量的方法如下:vector v;其中,其中,T是是vector要存储的对象集合的类型,该要存储的对象集合的类型,该vector的变量名的变量名称是称是v。访问访问vector中的任意元素或从末尾添加元素都可以在常量级时间中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,在本程序中我们用到了它的函数复杂度内完成,在本程序中我们用到了它的函数push_back(),其作,其作用是在用是在vector最后添加一个元素。最后添加一个元素。(二)函数的设计与实现(二)函数的
14、设计与实现 本项目中函数的实现比较简单,这里不再赘述,读者可参照源码。本项目中函数的实现比较简单,这里不再赘述,读者可参照源码。这里只将程序中带参数的函数进行简单介绍。这里只将程序中带参数的函数进行简单介绍。1istream&operator(istream&in,Flight&cp)提取运算符重载函数使用了形参提取运算符重载函数使用了形参in和和cp:形参:形参in为为“istream&”引用类型,与该函数的返回值相同,故可以将该函数引用类型,与该函数的返回值相同,故可以将该函数的返回值传给该形参,实现的返回值传给该形参,实现“”操作符的连续使用;形参操作符的连续使用;形参cp为为“Flig
15、ht&”引用类型,实现了对引用类型,实现了对Flight类对象的输入重载。类对象的输入重载。2ostream&operator(ostream&out,Flight&cp)插入运算符重载函数使用了形参插入运算符重载函数使用了形参out和和cp,其作用与提取运算符重,其作用与提取运算符重载函数类似。载函数类似。3bool Flight:If_match(char(*p)18,char ta)该函数使用了形参该函数使用了形参p和和ta:形参:形参p为指向字符数组的指针,它用来指为指向字符数组的指针,它用来指向一个大小为向一个大小为18的字符数组;形参的字符数组;形参ta为字符型,其作用是使该函数区
16、分为字符型,其作用是使该函数区分航班号和站点名两种比较。航班号和站点名两种比较。4int Traffic_system:Search(int invoke=0)该函数使用了形参该函数使用了形参invoke,该形参为,该形参为int型并设置默认参数为型并设置默认参数为0,其作用为区分调用者,以便输出相应的提示信息。其作用为区分调用者,以便输出相应的提示信息。四、编码与测试四、编码与测试编码与测试的工作将在任务实施中进行。编码与测试的工作将在任务实施中进行。任务实施任务实施设计飞机订票系统设计飞机订票系统步骤步骤1 在在Visual C+中创建一个工作区,并在此工作区中创建一个中创建一个工作区,并
17、在此工作区中创建一个Console Application即控制台应用程序类型的工程。在此工程中我们添即控制台应用程序类型的工程。在此工程中我们添加一个名为加一个名为flight的头文件以及同名的一个源文件,其代码的头文件以及同名的一个源文件,其代码略。略。步骤步骤2 在步骤在步骤1创建的工程中添加一个名为创建的工程中添加一个名为Traffic_system的头文件的头文件以及同名的一个源文件,其代码以及同名的一个源文件,其代码略。略。步骤步骤3 在在Visual C+中新建一个中新建一个C+源文件,命名为源文件,命名为main.cpp,用于,用于编写程序的入口编写程序的入口函数,其代码函数,其代码略。略。步骤步骤4 经编译、连接后,程序即可运行,由于篇幅限制,这里仅给经编译、连接后,程序即可运行,由于篇幅限制,这里仅给出程序功能测试中的部分运行结果如图所示。出程序功能测试中的部分运行结果如图所示。重新创建数据库信息重新创建数据库信息浏览航班信息浏览航班信息订票订票退票并浏览航班信息退票并浏览航班信息Thank you!