数据结构课程设计机场管理系统Word格式.docx
《数据结构课程设计机场管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计机场管理系统Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
根据旅客提出的终点站名输出下列信息:
航班号、飞机号、星期几飞行、剩余票额等信息。
2、承办订票业务:
根据客户提出的要求(航班号,订票数额)查询该航班的票额情况,若尚有余票,则为客户办理订票手续,输出座位号,若已经满员或者余票额少于订票额,则做出相应的提示。
3、承办退票业务:
根据客户提供的情况(航班以及客户姓名),为客户办理退票手续
1.3.2停车场管理系统:
1、车辆到达:
新来车辆时如果有空位,按顺序为该车分配停车位;
2、车辆离开:
车辆开走时,交纳相应停车费实现计费功能,计费标准为:
按时间计费,1.5元/每分(车在便道不计费);
3、打印车场情况:
统计停车场的停车情况。
打印停车场内所停车辆的信息。
1.3.3机场路径查询系统:
1、显示机场地图信息:
在用户界面绘制机场重要地点的标识并且用数字编号。
2、输入查询路径的起点终点。
3、显示最短路径:
在机场地图界面绘制两点之间最短的路径。
1.4涉及数据结构知识点
1.结构体、指针、多个类与方法的定义与使用。
2.线性表的定义
3.线性表的存储(顺序存储和链式存储)。
4.线性表的查找、插入、删除、按条件排序、遍历。
5.栈与队列的定义。
6.入栈出栈以及入队。
二、概要设计:
2.1系统的结构图:
2.2抽象数据类型定义:
航空订票管理:
typedefstructCustomer/*航线乘客信息*/
{
charName[10];
/*姓名*/
intAmount;
/*定票数*/
intIDinfor;
/*个人信息*/
structCustomer*Next;
/*指向下一乘客结点*/
}Customer;
typedefstructFlight/*航线信息*/
charDes_Name[10];
/*终点站名*/
charFlight_No[6];
/*航班号*/
charPlane_No[3];
/*飞机号*/
intPrice;
/*机票价格*/
intWeek_Day;
/*飞行周日*/
intCustomer_Amount;
/*乘员定额*/
intFree_Amount;
/*剩余票数*/
Customer*CustName;
/*该航班的已定票乘客名单*/
structFlight*Next;
/*指示下一航线结点*/
}Flight,*PFlight;
classFlight_Management
public:
Flight_Management();
Flight_Management(Flight_Management&
F);
~Flight_Management();
voidLinemanageMenu();
//航线管理菜单
voidDisplay_Reserve();
//订票乘客信息显示
voidBookingMenu();
//订票菜单
voidLine_Add();
//添加航线
voidLine_Search();
//按航班号查找航线且打印结果
voidLine_See();
//显示所有航线
intEmpty_Flight();
//判断航线是否为空
intFind_Line(PFlightL,char*key);
//核对航线是否唯一
intFind_Line(PFlightL,char*key,PFlight&
p2,int&
Flight_No);
//按航班号查找航线且返回标志
intExitSystem();
//系统退出
charContinue();
//询问是否继续
voidErrorMess();
//报告出错
voidMainflightmenu();
//航空客运订票系统主菜单
private:
intCustomer_Count;
/*所有航线的定票乘客总数*/
Flight*Head;
/*航线头指针*/
Flight*p2;
/*航线结点指针*/
Customer*Custp1[MAX];
/*各条航线乘客结点指针*/
Customer*Replp1[MAX];
/*各条航线候补结点指针*/
intIsEmpty;
/*是否有定票乘客*/
Customer*prior;
/*满足要求的定票乘客的前结点以作删除操作
voidRefundticketMenu();
};
停车场管理:
structTime
{
inthour;
intmin;
Time&
operator=(Time&
t);
/*时间结点*/
structCar/*栈内停放车辆结点*/
stringnum;
Timereach;
Timeleave;
structcarNode/*队列停放车辆结点*/
carNode*link;
carNode(stringstr,carNode*ptr=NULL){num=str;
link=ptr;
}
classParkstack停车栈
private:
structCar*elements;
inttop;
intMaxsize;
栈所能容纳的最大停放数
public:
Parkstack():
top(-1),Maxsize(Max)
{
elements=newCar[Maxsize];
if(elements==NULL)
{
cout<
<
"
内存分配失败"
endl;
exit
(1);
}
}
~Parkstack(){delete[]elements;
voidPush(Carx);
车辆入栈
boolPop(Car&
x);
车辆出站
boolIsEmpty()判断车场是否为空
{return(top==-1)?
true:
false;
boolIsFull()判断车场是否已经停满
{return(top==Maxsize-1)?
intgetSize()const{return(top+1);
}计算停车场已经停放的车辆数
voidMakeEmpty(){top=-1;
}停车场置空
friendvoidParkpush();
//车辆进场。
friendvoidParkpop();
//车辆出场。
friendvoidWaitpop();
//便道上的车辆进入停车场;
friendvoidShow(Parkstack&
x,Waitqueue&
y);
//显示停车场和便道车辆信息。
classHchstack
//缓冲栈(该站用于停车场内车辆退出时临时存放其他车辆,具体定义与停车栈基本相同)
Hchstack():
if(elements==NULL)
{cout<
~Hchstack(){delete[]elements;
boolIsEmpty(){return(top==-1)?
boolIsFull(){return(top==Maxsize-1)?
friendvoidParkpop();
//车辆出场。
classWaitqueue//便道.无头结点的链式队列、
carNode*front,*rear;
Waitqueue():
rear(),front(){};
~Waitqueue();
boolEnQueue(Carx);
车辆入队
boolDeQueue(Car&
车辆出队
boolIsEmpty(){return(front==NULL)?
intgetSize();
获得队列中停放车辆数目
friendvoidParkpush();
friendvoidShow(Parkstack&
//打印停车场信息函数。
friendvoidWaitpop();
2.3文件结构:
航空订票管理:
ticket.cpp
停车场管理:
停车场.h,停车场.cpp
三、详细设计:
3.1系统的模块划分
创建航线
查找航线
查看所有航线
航线管理
订票办理
退票办理
乘客管理
车辆入场
车辆出场
打印停车场信息
停车场管理
终点站名
航班号
飞机型号
机票价格
飞行日期
成员定额
剩余票数
乘客名单
3.2E-R图:
乘客姓名
乘客订票数
座位号信息
车牌号
驶入时间
离开时间
四、系统的实现:
4.1系统关键算法
4.1.1对于航空订票管理有以下主要的方法实现:
因为页数的限制,再者航空订票系统书上已经有程序,虽然有增加内容,但是为了节省空间,所以这里只列出的函数,没有写出具体的程序,看程序可以看源程序。
1./*-----------------航线添加函数-------------*/
voidFlight_Management:
:
Line_Add()
2./*---------------订票办理函数---------------*/
BookingMenu()
3./*-----------------退票办理函数-----------------*/
RefundticketMenu()
4./*--------------航线查找函数-------------*/
/*Find_Line()为重载函数*/
5./*---------------航班查找函数---------------*/
Line_Search()
6./*-----------------订票乘客信息-----------------*/
Display_Reserve()
4.1.2对于停车场管理系统有四个主要的函数:
1.车辆到达时,用于进行对车辆的操作,程序代码如下:
voidParkpush()//车辆进场。
boolgauge=true;
cout<
欢迎光临!
\n请输入车牌号:
(十位以内)"
cin>
>
c.num;
for(inti=0;
i<
=P.top;
i++)//不让车辆重复进场
{
if(c.num==P.elements[i].num)
cout<
停车场中已经有这辆车,不能重复进场。
gauge=false;
}
if(gauge)
if(!
P.IsFull())//场不满时,车辆进场,初始化进场时间
P.Push(c);
cout<
请输入进场时间。
P.elements[P.top].reach;
您的车辆已存入停车场,请放心!
按任意键返回"
getch();
else
抱歉。
停车场已满,车辆进入便道暂时停放。
W.EnQueue(c);
2.当便道车辆进入停车场,程序代码如下:
voidWaitpop()//便道上的车辆进入停车场;
if(!
W.IsEmpty()&
&
!
P.IsFull())
W.DeQueue(c);
停车场有空位,牌号为:
c.num<
的车从便道上进入停车场。
P.Push(c);
便道上的车辆进入停车场,请输入进场时间。
//P.elements[P.top].reach=time(NULL);
车辆停放在"
P.top+1<
号车位,按任意键返回"
getch();
3.车辆出场,代码如下:
voidParkpop()//车辆出场。
if(P.IsEmpty())cout<
停车场中没有车辆存放。
inti=-1;
stringnum;
请输入出场车辆的车牌号:
cin>
num;
for(intz=0;
z<
z++)
if(P.elements[z].num==num)
i=z;
if(i==-1)cout<
停车场中没有这辆车。
else
intj=P.top;
for(;
j>
i;
j--)//将要出场车前方车辆移动到临时栈。
P.Pop(c);
H.Push(c);
P.Pop(c);
请输入出场时间。
c.leave;
应缴车费"
money(c.reach,c.leave)<
元(1.5元/分钟)"
while(!
H.IsEmpty())//将临时栈中的车辆送回停车场。
H.Pop(c);
P.Push(c);
Waitpop();
getch();
4.显示停车场信息,代码如下:
voidShow(Parkstack&
y)
P.IsEmpty())
x.IsFull())
停车场中现有车位"
Max-x.getSize()<
个。
停车场已停车辆有:
for(inti=0;
i<
i++)
P.elements[i].num<
"
;
if(x.IsFull())
停车场已满,便道上有"
y.getSize()<
辆车等候。
4.2系统调试过程分析:
●当系统提示“请输入航班日期(请输入1—7)”时,若输入45,系统没有提示错误,按要求系统应该显示“日期输入有误,请重新输入”的错误提示。
●经过分析代码得出错误原因:
在结构体的成员变量的定义中,飞行周日的成员变量
Week_Day的类型定义有问题,开始定义的是char型,所以在用户输入数据时输入45时,代码中的判断语句if(p2->
Week_Day<
1||p2->
Week_Day>
7)不能识别错误。
●改正:
将Week_Day定义为Int型变量,
原语句中的cin>
p2->
Week_Day改为cin>
Week_Day;
再次运行,该问题得到了解决!
●但是又发现了新的问题:
当某航线的票已经全部定完后,按要求在乘客信息菜单里会显示“票已经售完”,但是运行时却显示的是“还有剩余的票”。
在订票乘客信息的函数Display_Reserve()中的有关票是否售完的条件语句有问题
原来的这段代码如下:
while(p2!
=NULL)
{
Cout<
Name<
p1->
Flight_No<
Plane_No<
Amount<
Des_Name<
IDinfor;
if(p2->
Amount>
=1)
还有多余的票!
\n"
票已售完!
p2=p2->
Next;
其中的有关票是否售完的条件语句:
if(p2->
Amount>
=1)中的指针p2错误,
p2是乘客信息节点的指针,p2->
Amount表示乘客的订票数。
应把该条件语句改为if(p1->
Free_Amount>
p1是航线节点指针,p1->
Free_Amount表示剩余票的数量
4.3系统运行界面赏析:
航空订票系统如图所示:
添加航线界面:
查看航线界面:
查询航线界面:
订票界面:
退票办理菜单:
停车场系统主界面:
车辆进站界面:
打印停车场信息界面:
车辆出站且便道上的车辆入站:
五.系统评价
5.1系统的特点
本机场管理系统覆盖知识面较广,基本涵盖了c++所有的知识点,尤其是对c++类和结构体,以及指针方面进行了充分的应用。
同时体系结构所采用的线性表以及相关操作广泛涉及了数据结构的知识。
并且虽然书上已经有了航空售票系统,但是我在书上的基础上对系统有了完善和改进,增加了一些功能,再加上停车场管理系统,完善了机场的知识。
5.2系统的缺点
由于是第一次做这样大型的程序,虽然付出了很大的努力,但是最终的作品依然是漏洞百出,问题多多。
在这里全面反思一下自己的问题:
1.在程序中,很难对数据的输入做出严格的要求限制,因此当输入错误的数据时,程序会发生各种各样意想不到的结果。
2.没有用到数据库的相关知识,所有输入的数据只能临时保存在内存中间,一旦程序关闭以后便完全释放。
这给程序的调试以及使用都带来了极大的不便。
3.程序的整体框架不够规范,对数据在内存中具体的存放状态没有充分理解,析构函数写的不是很完美,总会有一些被指针创建的空间不能够彻底删除释放。
六.课程设计总结
在这两个月的课程设计中,我真的感觉受益匪浅。
对于我们这些正在学习阶段的学生来说,课程设计是我们知识掌握程度的阶段性验证,也是为自己增添项目设计经验的很好机会。
本次设计极大的提高了我的自主学习,自主解决问题的能力,从一开始学习数据结构基础知识,到后来在编程过程中所需要的课外知识,还有选择C++编程而没有选择C语言,绝大部分来源于互联网上查找资料以及向老师的请教之中。