航空客运订票系统 (1)

更新时间:2023-07-18 08:57:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、 需求分析

航空客运订票系统,功能如下:

1、查询航线:根据旅客提出的终点站名(例:输入:济南),输出下列信息:航班号、飞机号、星期几飞行、余票数

2、承办订票业务:根据客户提出的要求(航班号(输入字符串)、订票数额(输入整型数))查询该航班票额情况,若有余票,为客户办理订票手续,若已满员或余票额少于订票额,则询问客户是否登记排队等候。

3、承办退票业务:根据客户提供的情况(日期(输入1-7表示星期几)、航班(字符串表示)),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的用户,若能满足他,则为其办理订票手续,否则依次询问其他候补客户。 二、 概要设计 1、链表抽象数据类型 ADT List

{ 数据对象:D={ ai | ai ∈EleSet , i = 1 , 2 , … , n , n ≥ 0 }

数据关系:R1={< ai-1 , ai > | ai-1 , ai∈D , i = 2 , … , n } 基本操作: MyList();

操作结果:初始化一个链表 void InsertNode(LT &);

初始条件:链表已经存在 操作结果:插入一个结点 bool DeleteNode(LT &); 初始条件:链表已经存在

操作结果:删除一个结点 }ADT List

2、队列抽象数据类型 ADT Queue {

数据对象:D={ ai | ai ∈EleSet , i = 1 , 2 , … , n , n ≥ 0 } 数据关系:R1={< ai-1 , ai > | ai-1 , ai∈D , i = 2 , … , n } 约定其中a1端为对列头,an端为队列尾

基本操作: MyQueue();

操作结果:初始化一个队列 void EnQueue(QT &); 初始条件:队列已经存在

操作结果:进对列 void DnQueue(QT &);

初始条件:队列已经存在 操作结果:出对列 bool Empty();

初始条件:队列已经存在 操作结果:队列是否为空 }ADT Queue

3、主程序流程图:

三、 详细设计

1、 链表及链队列结点类型 template<typename T> class LQNode {

friend class MyList<T>; friend class MyQueue<T>; public:

LQNode();

//初始化结点 LQNode(T);

//利用参数的值初始化结点 ~LQNode(); private:

T data;//存放结点数据

LQNode<T> *next;//指向下一个结点 };

2、链表类型

template<typename LT> class MyList {

public:

MyList();

//初始化链表,为头指针分配存储空间,并使头接点next域指向空。 ~MyList();

void InsertNode(LT &);

//插入一个结点,取得链表头指针,生成一个新结点p,为新结点赋值,利用头插入法,

//将结点插入链表p->next=head->next ; head=p ; bool DeleteNode(LT &);

//删除一个结点,利用一个临时指针p,通过while循环,p=p->next,找到要删除的结

//点,将其前一个结点的next域指向他的下一个结点。 private:

LQNode<LT> *head;//链表头指针 };

3、链队列类型

template<typename QT> class MyQueue {

public:

MyQueue();

//初始化队列 , front=rear=new LQNode<QT> ~MyQueue();

void EnQueue(QT &);

//入队列,生成一个新结点node,为结点赋值,rear->next=node , node->next=NULL;

void DnQueue(QT &);

//出对列,对头元素出队,若对列不空 front=front->next bool Empty();

//判断一个队列是否为空,若front->next==NULL 则队列为空 private:

LQNode<QT> *front;// 指向队列头的指针 LQNode<QT> *rear;//指向队列尾的指针 };

4、其他类型设计 // class AirLine

class AirLine//将航线抽象为一种抽象数据类型 类 {

friend void InitAirLine(AirLine *line);

friend ostream &operator<<(ostream &output,const AirLine& line); public:

AirLine(void); //初始化类成员 ~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; //查询该天有没有航班

void InsertAwait(Passenger& temp);

//有登记候补的乘客时,保存该乘客的信息,pQueue.EnQueue() bool DeletePassenger(Passenger&);

//从链表中删除乘客信息,pList.DeleteNode() int IfAwaitBook(int tiNum, int whichWeek); //遍历队列,查看是否有符合条件的候补乘客 // Passenger node ;

// while(!pQueue.Empty()) //{

//if(有符合的) // 返回1 // }

//返回 0 private:

string endPoint; string flightNum; string airNum; bool week[8]; seatNum[8];

int

int seatRemain[8]; MyList<Passenger> pList; MyQueue<Passenger> pQueue; };

// class Passenger

enum TicketGrade{AA,BB,CC}; class Passenger {

public:

~Passenger(void);

Passenger(const string &passengerName=" ",int tick=0,int g=1,int w=1); //初始化

bool operator==(Passenger & d); //重载的==运算符 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’:

return true; case ‘N’: case ‘n’:

return false; }

}

void InquireAirLine(AirLine *line)//根据用户输入信息查询相关航线 {

用户输入终点名 for(不到顺序表结束)

if(顺序表中记录的终点名==用户输入) { 输出本航线相关信息 返回 } cout<<"对不起,没有到达该地的航班"<<endl; }

void BookTicket(AirLine *line)//办理订票业务 {

输入航班号 输入订票额

输入订票时间:

if(tiNum>line[i].GetSeatRemain(whichWeek))//没有足够的机票数 IfAwait(line[i],tiNum,whichWeek);//办理登记候补 else TransactBookTicket(line[i],tiNum,whichWeek);//有足够的票数,办理订票 }

void ReturnTicket(AirLine *line)//办理退票业务 {

输入名字 输入航班号 输入订票时间 输入订票额

if(line[i].DeletePassenger(temp)==true)//调用链表的DeletePassenger(),若删除成功 { cout<<"办理退票完毕,谢谢合作"<<endl; IfBookTicket(line,fiNum,tiNum,whichWeek);//查询是否有满足订票条件候补客户 } else cout<<"您没有订票或输入信息错误,请核实后办理"<<endl; }

void IfAwait(AirLine &line,int tiNum,int whichWeek)//办理登记候补

{

cout<<"空座不够,是否排队候补?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 fiNum,int tiNum,int whichWeek) {

for(int i=0;i<size;i++)//遍历每个航线 if(line[i].GetFlightNum()==fiNum) { int ti=line[i].IfAwaitBook(tiNum,whichWeek); if(ti==0) cout<<"没有符合条件的候补客户"<<endl; else 为登记候补的客户办理订票业务 } return ; }

void InitAirLine(AirLine *line) {

初始化航线信息 }

5、函数调用关系图

}

四、 调试分析

调试的过程中,对程序做了几点改进,增加了程序的容错能力,不论用户输入什么内容,程序都能安全检查,若输入的有误,则提示用户重新输入,或重新办理业务。

从本实习题的编制过程中容易看出,线性表的应用广泛,线性表可以直接作为一种数据结构使用,也可以作为栈或队列的存储结构,构成链栈或链队列使用。 五、 用户手册

1、本程序运行环境为DOS操作系统,执行文件为planeTicket.exe。 2

、进入演示程序后,即显示用户界面为:

3用户根据提示进行操作。 六、 测试结果

根据提示,用户输入选项: 1查询航线,

2

订票业务

3退票业务

4

输入错误时的显示:

七、 附录

源程序文件名清单 AirLine.h AirLine.cpp Passenger.h Passenger.cpp DataStructure.h

Main.cpp

八.心得体会

这次课程设计进行了三天,虽然一整天都在电脑房里对着电脑,很枯燥,

也很辛苦,但是我觉得还是很有收获的。

这是我们第一次自己去设计一个比较系统的程序,对我们来说也是一个很好的锻炼。

首先,为了能写出程序,我将以前所学都好好的巩固了一遍,并且努力的去灵活的运用。起

码现在对结构体,链表的操作还是熟练了很多。以前一些很模糊的知识点,通过这次练习,

很多都清楚起来。其次,平时都是编写一些单个的操作,这次需要自己写出一个可以实现

几个功能的系统性的程序,刚开始时是一头雾水,但经过大家的讨论,自己的摸索,也慢慢

找到了方法。这让我体会到,在编写程序时,不仅需要扎实的知识,还要有细心周到的考虑,

同学之间的合作也是很重要的。

在这三天里,我觉得发现了自己还有很多很多的不足,也深刻的体会到了自己还

有很多东西要学,而且要真的掌握,还得多用心,多用脑。计算机的确不好学,但只要努力

就会有收获。这次程序是写了不少,但还是没能运行出一个正确的结果,不过我相信,经过

以后的学习和努力,是肯定能做出一个好的程序来的!

参考文献

谭浩强. C语言程序设计(第三版).北京:清华大学出版社,2005

北方科技学院

软件课程设计任务书

课程设计题目 航空客运订票

课程设计学生姓名 赵嘉心 学号(9,10) 10 指导教师 课设时间自 2012 年 6 月 25 日至 2012 年 6 月 27 日 课程设计任务及要求:

[问题描述] 航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

[基本要求] (1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);

(2)系统能实现的操作和功能如下: ①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额; ②承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补; ③承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求坝u为他办理订票手续,否则依次询问其它排队候补客户。

[实现提示] 两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。

[撰写格式]课程设计论文要求格式规范,条理清楚,首页为封皮,应注明题目,学生姓名、班级、学号。次页为课程设计任务书。论文内容应包括:题目分析,设计思路,完整的程序清单和必要的注释,以及调试的实验结果和测试过程,最后是课设的收获及参考文献。要求正文字体为宋体小四号,按给定课程设计模板B5纸打印上交。

课程设计成绩:

本文来源:https://www.bwwdw.com/article/hfr1.html

Top