航空客运订票系统.docx

上传人:b****6 文档编号:6041245 上传时间:2023-01-03 格式:DOCX 页数:14 大小:123.04KB
下载 相关 举报
航空客运订票系统.docx_第1页
第1页 / 共14页
航空客运订票系统.docx_第2页
第2页 / 共14页
航空客运订票系统.docx_第3页
第3页 / 共14页
航空客运订票系统.docx_第4页
第4页 / 共14页
航空客运订票系统.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

航空客运订票系统.docx

《航空客运订票系统.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统.docx(14页珍藏版)》请在冰豆网上搜索。

航空客运订票系统.docx

航空客运订票系统

 

一、需求分析

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

1、查询航线:

根据旅客提出的终点站名(例:

输入:

济南),输出下列信息:

航班号、飞机号、星期几飞行、余票数

2、承办订票业务:

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

3、承办退票业务:

根据客户提供的情况(日期(输入1-7表示星期几)、航班(字符串表示)),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的用户,若能满足他,则为其办理订票手续,否则依次询问其他候补客户。

二、概要设计

1、链表抽象数据类型

ADTList

{数据对象:

D={ai|ai∈EleSet,i=1,2,…,n,n≥0}

数据关系:

R1={|ai-1,ai∈D,i=2,…,n}

基本操作:

MyList();

操作结果:

初始化一个链表

voidInsertNode(LT&);

初始条件:

链表已经存在

操作结果:

插入一个结点

boolDeleteNode(LT&);

初始条件:

链表已经存在

操作结果:

删除一个结点

}ADTList

2、队列抽象数据类型

ADTQueue

{

数据对象:

D={ai|ai∈EleSet,i=1,2,…,n,n≥0}

数据关系:

R1={|ai-1,ai∈D,i=2,…,n}

约定其中a1端为对列头,an端为队列尾

基本操作:

MyQueue();

操作结果:

初始化一个队列

voidEnQueue(QT&);

初始条件:

队列已经存在

操作结果:

进对列

voidDnQueue(QT&);

初始条件:

队列已经存在

操作结果:

出对列

boolEmpty();

初始条件:

队列已经存在

操作结果:

队列是否为空

}ADTQueue

3、主程序流程图:

三、详细设计

1、链表及链队列结点类型

template

classLQNode

{

friendclassMyList;

friendclassMyQueue;

public:

LQNode();

//初始化结点

LQNode(T);

//利用参数的值初始化结点

~LQNode();

private:

Tdata;//存放结点数据

LQNode*next;//指向下一个结点

};

2、链表类型

template

classMyList

{

public:

MyList();

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

~MyList();

voidInsertNode(LT&);

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

//将结点插入链表p->next=head->next;head=p;

boolDeleteNode(LT&);

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

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

private:

LQNode*head;//链表头指针

};

3、链队列类型

template

classMyQueue

{

public:

MyQueue();

//初始化队列,front=rear=newLQNode

~MyQueue();

voidEnQueue(QT&);

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

voidDnQueue(QT&);

//出对列,对头元素出队,若对列不空front=front->next

boolEmpty();

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

private:

LQNode*front;//指向队列头的指针

LQNode*rear;//指向队列尾的指针

};

4、其他类型设计

//classAirLine

classAirLine//将航线抽象为一种抽象数据类型类

{

friendvoidInitAirLine(AirLine*line);

friendostream&operator<<(ostream&output,constAirLine&line);

public:

AirLine(void);

//初始化类成员

~AirLine(void);

stringGetEndPoint();

//取得终点站站名

intGetSeatNum(int);

//取得票数

intGetSeatRemain(int);

//取得剩余票数

voidSetSeatRemain(intnum,intwhickWeek);

//修改剩余票数

stringGetFlightNum(void);

//取得航班号

voidInsertPassenger(Passenger&temp);

//有乘客订票时,保存该乘客的信息,pList.InsertNode()

boolIsFly(intwhichWeek)const;

//查询该天有没有航班

voidInsertAwait(Passenger&temp);

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

boolDeletePassenger(Passenger&);

//从链表中删除乘客信息,pList.DeleteNode()

intIfAwaitBook(inttiNum,intwhichWeek);

//遍历队列,查看是否有符合条件的候补乘客

//Passengernode;

//while(!

pQueue.Empty())

//{

//if(有符合的)

//返回1

//}

//返回0

private:

stringendPoint;stringflightNum;stringairNum;boolweek[8];intseatNum[8];

intseatRemain[8];MyListpList;MyQueuepQueue;

};

//classPassenger

enumTicketGrade{AA,BB,CC};

classPassenger

{

public:

~Passenger(void);

Passenger(conststring&passengerName="",inttick=0,intg=1,intw=1);

//初始化

booloperator==(Passenger&d);

//重载的==运算符

intGetTickets();

//取得订票额

intGetWeek();

//取得日期

private:

stringname;inttickets;TicketGradegrade;intflightWeek;

};

4、主程序和其他伪码算法

//main

intmain()

{

while(用户不推出程序)

{

switch(用户选择要做的操作)

{

case1:

查询航线信息

case2:

承办订票业务

case3:

承办退票业务

}

}

}

boolIsQuit()//询问用户是否退出系统

{

提示用户是否退出系统Y/y是N/n否

switch(用户输入)

{

case‘Y’:

case‘y’:

returntrue;

case‘N’:

case‘n’:

returnfalse;

}

}

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

{

用户输入终点名

for(不到顺序表结束)

if(顺序表中记录的终点名==用户输入)

{

输出本航线相关信息

返回

}

cout<<"对不起,没有到达该地的航班"<

}

voidBookTicket(AirLine*line)//办理订票业务

{

输入航班号

输入订票额

输入订票时间:

if(tiNum>line[i].GetSeatRemain(whichWeek))//没有足够的机票数

IfAwait(line[i],tiNum,whichWeek);//办理登记候补

else

TransactBookTicket(line[i],tiNum,whichWeek);//有足够的票数,办理订票

}

voidReturnTicket(AirLine*line)//办理退票业务

{

输入名字

输入航班号

输入订票时间

输入订票额

if(line[i].DeletePassenger(temp)==true)//调用链表的DeletePassenger(),若删除成功

{

cout<<"办理退票完毕,谢谢合作"<

IfBookTicket(line,fiNum,tiNum,whichWeek);//查询是否有满足订票条件候补客户

}

else

cout<<"您没有订票或输入信息错误,请核实后办理"<

}

voidIfAwait(AirLine&line,inttiNum,intwhichWeek)//办理登记候补

{

cout<<"空座不够,是否排队候补?

Y/y是N/n否"<

是办理候补

否cout<<"谢谢合作,再见。

"<

}

voidTransactBookTicket(AirLine&line,inttiNum,intwhichWeek)

{

输入姓名

输入舱位等级

line.InsertPassenger(temp);

GetSeatNum(whichWeek);//取得该航班总票数

GetSeatRemain(whichWeek);//取得剩余票数

输出座位号

SetSeatRemain(tiNum,whichWeek);//设置剩余票数

}

voidIfBookTicket(AirLine*line,stringfiNum,inttiNum,intwhichWeek)

{

for(inti=0;i

if(line[i].GetFlightNum()==fiNum)

{

intti=line[i].IfAwaitBook(tiNum,whichWeek);

if(ti==0)

cout<<"没有符合条件的候补客户"<

else

为登记候补的客户办理订票业务

}

return;

}

voidInitAirLine(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

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1