数据结构课程设计—机场管理系统_第1页
数据结构课程设计—机场管理系统_第2页
数据结构课程设计—机场管理系统_第3页
数据结构课程设计—机场管理系统_第4页
数据结构课程设计—机场管理系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数据结构课程设计报告机场管理系统 目录1.机场管理系统概述11.1 项目背景11.2 需求分析11.3 主要功能11.4 涉及知识点22.概要设计22.1系统的结构图 22.2 抽象数据类型定义32.3 文件结构53.详细设计53.1系统的功能模块图53.2 er图 54.系统的实现104.1 系统关键算法114.2 系统调试过程114.3系统运行界面赏析115.系统评价174.1系统的特点184.2系统的缺点186. 课程设计总结 198参考文献 19一.机场管理系统概述1 .1项目背景:我的课程设计选择了制作一个机场管理系统,制作周期历时将近两个月,从c+、数据结构学习的一开始便着手这项

2、工作,完成的作品基本按时间可以分为两大块:第一部分为订票系统,第二部分为停车场管理系统。1 .2需求分析: 订票系统是基于两个线性链表(乘客链表以及航线链表)的一系列操作的实现,业务活动包括:查询、添加航线,客票预订和办理退票等。相对于书上的订票系统,增加了查询和客票预订功能。以链表来存放航线以及每条航线上的乘客信息,并且实现一些列关于链表的相关操作。每条航线涉及的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、成员定额、机票价格、订票量、已订票的客户名单(包括姓名、订票量、座位号)。停车场管理是基于双栈(用于构造停车场)和链式队列(当停车场满时,用于充当便道,停放需要进入停车场的车辆)

3、的数据存储结构进行设计,主要用于专门提供给载有货物的运输车辆的停放。通过计时,进行收费,实现用户和系统之间的交互式信息传递。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。1 .3系统实现的操作和功能如下: 1.3.1订票系统:1、查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号

4、、星期几飞行、剩余票额等信息。2、承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班的票额情况,若尚有余票,则为客户办理订票手续,输出座位号,若已经满员或者余票额少于订票额,则做出相应的提示。3、承办退票业务:根据客户提供的情况(航班以及客户姓名),为客户办理退票手续1.3.2停车场管理系统:1、车辆到达:新来车辆时如果有空位,按顺序为该车分配停车位; 2、车辆离开:车辆开走时,交纳相应停车费实现计费功能,计费标准为:按时间计费,1.5元/每分(车在便道不计费);3、打印车场情况:统计停车场的停车情况。打印停车场内所停车辆的信息。1.3.3机场路径查询系统: 1、显示机场地图信息:

5、在用户界面绘制机场重要地点的标识并且用数字编号。 2、输入查询路径的起点终点。 3、显示最短路径:在机场地图界面绘制两点之间最短的路径。1.4涉及数据结构知识点 1结构体、指针、多个类与方法的定义与使用。 2线性表的定义 3线性表的存储(顺序存储和链式存储)。 4线性表的查找、插入、删除、按条件排序、遍历。 5栈与队列的定义。 6入栈出栈以及入队。二、概要设计:机 场 管 理 系 统2.1系统的结构图:停 车 场 管 理 系 统机 场 订 票 系 统2.2抽象数据类型定义:航空订票管理:typedef struct customer /*航线乘客信息*/ char name10; /*姓名*/

6、 int amount; /*定票数*/ int idinfor; /*个人信息*/ struct customer *next; /*指向下一乘客结点*/customer;typedef struct flight /*航线信息*/ char des_name10; /*终点站名*/ char flight_no6; /*航班号*/ char plane_no3; /*飞机号*/ int price; /*机票价格*/ int week_day; /*飞行周日*/ int customer_amount; /*乘员定额*/ int free_amount; /*剩余票数*/ customer

7、 *custname; /*该航班的已定票乘客名单*/ struct flight *next; /*指示下一航线结点*/flight,*pflight;class flight_managementpublic:flight_management();flight_management(flight_management &f);flight_management();void linemanagemenu(); /航线管理菜单void display_reserve(); /订票乘客信息显示 void bookingmenu(); /订票菜单void line_add(); /添加航线vo

8、id line_search(); /按航班号查找航线且打印结果void line_see(); /显示所有航线int empty_flight(); /判断航线是否为空int find_line(pflight l,char *key); /核对航线是否唯一 int find_line(pflight l,char *key,pflight &p2,int &flight_no);/按航班号查找航线且返回标志 int exitsystem(); /系统退出char continue(); /询问是否继续void errormess(); /报告出错void mainflightmenu();

9、 /航空客运订票系统主菜单private: int customer_count; /*所有航线的定票乘客总数*/ flight *head; /*航线头指针*/ flight *p2; /*航线结点指针*/ customer *custp1max; /*各条航线乘客结点指针*/ customer *replp1max; /*各条航线候补结点指针*/ int isempty; /*是否有定票乘客*/ customer *prior; /*满足要求的定票乘客的前结点以作删除操作void refundticketmenu();停车场管理:struct time int hour; int min;

10、 time& operator=(time &t); /*时间结点*/struct car /*栈内停放车辆结点*/ string num;time reach; time leave; ;struct carnode /*队列停放车辆结点*/string num;carnode *link;carnode(string str,carnode *ptr=null)num=str;link=ptr;class parkstack 停车栈private:struct car *elements;int top; int maxsize; 栈所能容纳的最大停放数public:parkstack()

11、:top(-1),maxsize(max)elements=new carmaxsize;if(elements=null) cout内存分配失败endl;exit(1);parkstack()delete elements;void push(car x); 车辆入栈bool pop(car &x); 车辆出站bool isempty() 判断车场是否为空return (top=-1)? true:false;bool isfull() 判断车场是否已经停满return (top=maxsize-1)? true:false;int getsize() constreturn (top+1)

12、; 计算停车场已经停放的车辆数void makeempty()top=-1; 停车场置空friend void parkpush(); /车辆进场。 friend void parkpop(); /车辆出场。friend void waitpop(); /便道上的车辆进入停车场;friend void show(parkstack &x,waitqueue &y);/显示停车场和便道车辆信息。;class hchstack/缓冲栈(该站用于停车场内车辆退出时临时存放其他车辆,具体定义与停车栈基本相同)private:struct car *elements;int top;int maxsiz

13、e;public:hchstack():top(-1),maxsize(max)elements=new carmaxsize; if(elements=null) cout内存分配失败endl;exit(1);hchstack()delete elements;void push(car x);bool pop(car &x);bool isempty() return (top=-1)? true:false;bool isfull()return (top=maxsize-1)? true:false;int getsize() constreturn (top+1);void make

14、empty()top=-1;friend void parkpop();/车辆出场。;class waitqueue/便道.无头结点的链式队列、private:carnode *front,*rear;public:waitqueue():rear(),front();waitqueue();bool enqueue(car x); 车辆入队bool dequeue(car &x); 车辆出队bool isempty() return (front=null)? true:false;int getsize(); 获得队列中停放车辆数目friend void parkpush(); /车辆进场

15、。 friend void show(parkstack &x,waitqueue &y);/打印停车场信息函数。friend void waitpop(); /便道上的车辆进入停车场;;2.3 文件结构: 航空订票管理:ticket.cpp 停车场管理: 停车场.h,停车场.cpp三、详细设计:3.1系统的模块划分创建航线查找航线查看所有航线航线管理订票办理退票办理乘客管理机 场 管 理 系 统航空订票管理车辆入场车辆出场打印停车场信息停车场管理终点站名航班号飞机型号机票价格飞行日期成员定额剩余票数乘客名单3.2 e-r图:航 线 机 场乘客姓名乘客订票数座位号信息车牌号驶入时间离开时间场内

16、停车场停车费用便道车牌号四、系统的实现:4.1 系统关键算法4.1.1对于航空订票管理有以下主要的方法实现: 因为页数的限制,再者航空订票系统书上已经有程序,虽然有增加内容,但是为了节省空间,所以这里只列出的函数,没有写出具体的程序,看程序可以看源程序。1./*-航线添加函数-*/void flight_management:line_add()2. /*-订票办理函数-*/void flight_management:bookingmenu()3. /*-退票办理函数-*/void flight_management:refundticketmenu()4. /*-航线查找函数-*/*fin

17、d_line()为重载函数*/5. /*-航班查找函数-*/void flight_management:line_search()6./*-订票乘客信息-*/void flight_management:display_reserve()4.1.2对于停车场管理系统有四个主要的函数:1.车辆到达时,用于进行对车辆的操作,程序代码如下:void parkpush()/车辆进场。bool gauge=true;cout欢迎光临!n请输入车牌号:(十位以内)c.num;for(int i=0;i=p.top;i+)/不让车辆重复进场if(c.num=p.elementsi.num) cout停车场

18、中已经有这辆车,不能重复进场。endl;gauge=false;if(gauge)if(!p.isfull()/场不满时,车辆进场,初始化进场时间p.push(c); cout请输入进场时间。p.elementsp.top.reach; cout您的车辆已存入停车场,请放心!按任意键返回endl;getch(); elsecout抱歉。停车场已满,车辆进入便道暂时停放。按任意键返回endl;w.enqueue(c);getch();2.当便道车辆进入停车场,程序代码如下:void waitpop()/便道上的车辆进入停车场;if(!w.isempty()&!p.isfull()w.dequeu

19、e(c);cout停车场有空位,牌号为:c.num的车从便道上进入停车场。endl;p.push(c);cout便道上的车辆进入停车场,请输入进场时间。p.elementsp.top.reach;/p.elementsp.top.reach=time(null);cout车辆停放在p.top+1号车位,按任意键返回endl;getch();3.车辆出场,代码如下:void parkpop()/车辆出场。if(p.isempty() cout停车场中没有车辆存放。endl;elseint i=-1;string num;cout请输入出场车辆的车牌号:num;for(int z=0;z=p.to

20、p;z+)if(p.elementsz.num=num) i=z;if(i=-1) cout停车场中没有这辆车。i;j-)/将要出场车前方车辆移动到临时栈。p.pop(c);h.push(c); p.pop(c); cout请输入出场时间。c.leave;cout应缴车费money(c.reach,c.leave)元(1.5元/分钟)endl; while(!h.isempty()/将临时栈中的车辆送回停车场。h.pop(c);p.push(c);waitpop();getch();4.显示停车场信息,代码如下:void show(parkstack &x,waitqueue &y)if(!p

21、.isempty() if(!x.isfull() cout停车场中现有车位max-x.getsize()个。endl;cout停车场已停车辆有:endl;for(int i=0; i=p.top; i+)coutp.elementsi.num ;coutendl;if(x.isfull() cout停车场已满,便道上有y.getsize()辆车等候。endl;cout按任意键返回week_dayweek_day7)不能识别错误。 改正:将week_day定义为int 型变量, 原语句中的cinp2-week_day 改为 cin&p2-week_day;再次运行,该问题得到了解决!但是又发现

22、了新的问题:当某航线的票已经全部定完后,按要求在乘客信息菜单里会显示“票已经售完”,但是运行时却显示的是“还有剩余的票”。 经过分析代码得出错误原因:在订票乘客信息的函数display_reserve()中的有关票是否售完的条件语句有问题原来的这段代码如下:while(p2!=null) coutnameflight_noplane_noamountdes_nameidinfor; if(p2-amount =1) cout还有多余的票!n; else coutnext; 其中的有关票是否售完的条件语句:if(p2-amount=1)中的指针p2错误,p2是乘客信息节点的指针,p2-amoun

23、t表示乘客的订票数。应把该条件语句改为if( p1-free_amount=1)p1是航线节点指针,p1-free_amount表示剩余票的数量4.3系统运行界面赏析:航空订票系统如图所示:添加航线界面:查看航线界面:查询航线界面:订票界面:退票办理菜单:停车场系统主界面:车辆进站界面:打印停车场信息界面:车辆出站且便道上的车辆入站:五.系统评价5.1系统的特点 本机场管理系统覆盖知识面较广,基本涵盖了c+ 所有的知识点,尤其是对c+ 类和结构体,以及指针方面进行了充分的应用。同时体系结构所采用的线性表以及相关操作广泛涉及了数据结构的知识。并且虽然书上已经有了航空售票系统,但是我在书上的基础上对系统有了完善和改进,增加了一些功能,再加上停车场管理系统,完善了机场的知识。5.2系统的缺点 由于是第一次做这样大型的程序,虽然付出了很大的努力,但是最终的作品依然是漏洞百出,问题多多。在这里全面反思一下自己的问题: 1.在程序中,很难对数据的输入做出严格的要求限制,因此当输入错误的数据时,程序会发生各种各样意想

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论