1、航空客运订票系统一、需求分析航空客运订票系统,功能如下:1、查询航线:根据旅客提出的终点站名(例:输入:济南),输出下列信息:航班号、飞机号、星期几飞行、余票数2、承办订票业务:根据客户提出的要求(航班号(输入字符串)、订票数额(输入整型数)查询该航班票额情况,若有余票,为客户办理订票手续,若已满员或余票额少于订票额,则询问客户是否登记排队等候。3、承办退票业务:根据客户提供的情况(日期(输入17表示星期几)、航班(字符串表示),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的用户,若能满足他,则为其办理订票手续,否则依次询问其他候补客户。二、概要设计1、链表抽象数据类型
2、ADT List 数据对象:D= ai | ai EleSet , i = 1 , 2 , , n , n 0 数据关系:R1= | ai-1 , aiD , i = 2 , , n 基本操作:MyList(); 操作结果:初始化一个链表 void InsertNode(LT &);初始条件:链表已经存在操作结果:插入一个结点 bool DeleteNode(LT &); 初始条件:链表已经存在操作结果:删除一个结点ADT List2、队列抽象数据类型ADT Queue数据对象:D= ai | ai EleSet , i = 1 , 2 , , n , n 0 数据关系:R1= | ai-1
3、, aiD , i = 2 , , n 约定其中a1端为对列头,an端为队列尾基本操作: MyQueue(); 操作结果:初始化一个队列 void EnQueue(QT &); 初始条件:队列已经存在操作结果:进对列 void DnQueue(QT &);初始条件:队列已经存在操作结果:出对列 bool Empty();初始条件:队列已经存在操作结果:队列是否为空ADT Queue3、主程序流程图:三、详细设计1、 链表及链队列结点类型templateclass LQNode friend class MyList; friend class MyQueue;public: LQNode();
4、/初始化结点 LQNode(T); /利用参数的值初始化结点 LQNode();private: T data;/存放结点数据 LQNode *next;/指向下一个结点;2、链表类型templateclass MyListpublic: MyList();/初始化链表,为头指针分配存储空间,并使头接点next域指向空。 MyList(); void InsertNode(LT &);/插入一个结点,取得链表头指针,生成一个新结点p,为新结点赋值,利用头插入法,/将结点插入链表p-next=head-next ; head=p ; bool DeleteNode(LT &);/删除一个结点,利
5、用一个临时指针p,通过while循环,p=p-next,找到要删除的结/点,将其前一个结点的next域指向他的下一个结点。private: LQNode *head;/链表头指针;3、链队列类型templateclass MyQueuepublic: MyQueue(); /初始化队列 , front=rear=new LQNode MyQueue(); void EnQueue(QT &); /入队列,生成一个新结点node,为结点赋值,rear-next=node , node-next=NULL; void DnQueue(QT &); /出对列,对头元素出队,若对列不空 front=f
6、ront-next bool Empty(); /判断一个队列是否为空,若front-next=NULL 则队列为空private: LQNode *front;/ 指向队列头的指针 LQNode *rear;/指向队列尾的指针;4、其他类型设计/ class AirLineclass AirLine/将航线抽象为一种抽象数据类型 类 friend void InitAirLine(AirLine *line); friend ostream &operator(ostream &output,const AirLine& line);public: AirLine(void); /初始化类成
7、员 AirLine(void); string GetEndPoint(); /取得终点站站名 int GetSeatNum(int); /取得票数 int GetSeatRemain(int); /取得剩余票数 void SetSeatRemain(int num,int whickWeek); /修改剩余票数 string GetFlightNum(void);/取得航班号 void InsertPassenger(Passenger& temp);/有乘客订票时,保存该乘客的信息,pList.InsertNode() bool IsFly(int whichWeek) const; /查
8、询该天有没有航班 void InsertAwait(Passenger& temp);/有登记候补的乘客时,保存该乘客的信息,pQueue.EnQueue() bool DeletePassenger(Passenger&); /从链表中删除乘客信息,pList.DeleteNode() int IfAwaitBook(int tiNum, int whichWeek); /遍历队列,查看是否有符合条件的候补乘客 / Passenger node ; / while(!pQueue.Empty() /if(有符合的)/ 返回1/ /返回 0private: string endPoint; s
9、tring flightNum; string airNum; bool week8; int seatNum8; int seatRemain8; MyList pList; MyQueue pQueue; ; / class Passengerenum TicketGradeAA,BB,CC;class Passengerpublic: Passenger(void); Passenger(const string &passengerName= ,int tick=0,int g=1,int w=1); /初始化 bool operator=(Passenger & d); /重载的=运
10、算符 int GetTickets(); /取得订票额 int GetWeek(); /取得日期private: string name; int tickets; TicketGrade grade; int flightWeek;4、主程序和其他伪码算法/ main int main() while(用户不推出程序) switch(用户选择要做的操作) case 1: 查询航线信息 case 2: 承办订票业务 case 3: 承办退票业务 bool IsQuit()/询问用户是否退出系统提示用户是否退出系统 Y/y 是 N/n 否switch(用户输入)case Y:case y:ret
11、urn true;case N:case n:return false;void InquireAirLine(AirLine *line)/根据用户输入信息查询相关航线 用户输入终点名 for(不到顺序表结束) if(顺序表中记录的终点名=用户输入) 输出本航线相关信息 返回 cout对不起,没有到达该地的航班linei.GetSeatRemain(whichWeek)/没有足够的机票数 IfAwait(linei,tiNum,whichWeek);/办理登记候补 else TransactBookTicket(linei,tiNum,whichWeek);/有足够的票数,办理订票void
12、ReturnTicket(AirLine *line)/办理退票业务输入名字输入航班号输入订票时间输入订票额 if(linei.DeletePassenger(temp)=true)/调用链表的DeletePassenger(),若删除成功 cout办理退票完毕,谢谢合作endl; IfBookTicket(line,fiNum,tiNum,whichWeek);/查询是否有满足订票条件候补客户 else cout您没有订票或输入信息错误,请核实后办理endl;void IfAwait(AirLine &line,int tiNum,int whichWeek)/办理登记候补 cout空座不够
13、,是否排队候补?Y/y是N/n否endl; 是 办理候补 否 cout谢谢合作,再见。endl;void TransactBookTicket(AirLine &line,int tiNum,int whichWeek) 输入姓名输入舱位等级 line.InsertPassenger(temp); GetSeatNum(whichWeek);/取得该航班总票数 GetSeatRemain(whichWeek);/取得剩余票数 输出座位号 SetSeatRemain(tiNum,whichWeek);/设置剩余票数void IfBookTicket(AirLine *line,string fi
14、Num,int tiNum,int whichWeek) for(int i=0;isize;i+)/遍历每个航线 if(linei.GetFlightNum()=fiNum) int ti=linei.IfAwaitBook(tiNum,whichWeek); if(ti=0) cout没有符合条件的候补客户endl; else 为登记候补的客户办理订票业务 return ;void InitAirLine(AirLine *line) 初始化航线信息5、函数调用关系图四、调试分析调试的过程中,对程序做了几点改进,增加了程序的容错能力,不论用户输入什么内容,程序都能安全检查,若输入的有误,则
15、提示用户重新输入,或重新办理业务。从本实习题的编制过程中容易看出,线性表的应用广泛,线性表可以直接作为一种数据结构使用,也可以作为栈或队列的存储结构,构成链栈或链队列使用。五、用户手册1、本程序运行环境为DOS操作系统,执行文件为planeTicket.exe。2、进入演示程序后,即显示用户界面为:3用户根据提示进行操作。六、测试结果根据提示,用户输入选项:1查询航线,2订票业务3退票业务4输入错误时的显示:七、附录源程序文件名清单AirLine.hAirLine.cppPassenger.hPassenger.cpp DataStructure.hMain.cpp (注:可编辑下载,若有不当之处,请指正,谢谢!)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1