机场航空管制模拟实验报告
更新时间:2023-04-22 04:32:01 阅读量: 实用文档 文档下载
- 机场航空管制员推荐度:
- 相关推荐
数据结构大型实验实验报告
机场航空管制模拟实验报告
数据结构大型实验实验报告
实验题目
假设机场有一条跑道,每架飞机需花费一定时间着陆,花费一定时间起飞,飞机的起降满足一定的概率。一般来讲,机场存在两个队列,一个等待着陆的飞机队列和一个等待起飞的飞机队列,同样等待时间下,等待着陆的飞机比准备起飞的飞机具有更高的优先级。试编写程序模拟这个机场的运行。要求使用队列或优先队列实现;要求可以变换起飞和着陆频率来模拟一天中的飞行高峰期和空闲期;要求可以改变着陆和起飞时间以模拟不同的效果。
1. 实验内容分析
1.1实验目的
实验模拟了机场的航空管制,通过程序,来模拟管理飞机的起飞与着陆。它要求我们考虑起飞与着陆的优先级不同,以及根据飞机起飞/着陆时间,起飞/着陆频率模拟机场一天的运营情况。并计算出跑道的繁忙程度、着陆飞机的总的等待时间和平均等待时间、起飞飞机的总的等待时间和平均等待时间, 计算每架飞机花费在一个队列中的平均时间。
1.2内容分析
系统主要模拟了机场一天的运营。所以,需要一个计时器(以分钟计时)来计算机场的运营时间。同时,为了管理飞机的起飞与着陆,需要两个队列来存放着陆和起飞的飞机。 设计用户输入的数据为:机场开始、结束运营时间;高峰期开始、结束时间;空闲期开始、结束时间;着陆飞机最长等待时间;高峰期、空闲期以及一般时期每小时起飞、着陆的飞机数,飞机起飞、着陆需要的时间。
考虑到机场的高峰期,与空闲期,设计了Workslot类,设定不同时期的飞机起飞、着陆率。
设计Timer类,其主要方法是实现计时功能和返回当前工作时间。Plane类主要功能是记录飞机开始等待时间,开始工作时间以及起飞、着陆所需时间。
飞机起飞/着陆都需要花费一定的时间,并不是马上就完成的。所以在起飞/着陆服务函数中,不仅要调用spend(),还需要判断takeoff/landing是否结束。当t.now-startworktime<workTime时,说明飞机还在准备着陆/起飞,占用了跑道。当t.now-startworktime==workTime时,表示飞机着陆/起飞成功。调用pop方法,从队列中删除一架等待服务的飞机,并获取当前时间,减去飞机接受服务的时间,得到该飞机的等待服务时间。我们就可以计算出所有飞机的等待服务时间。
等待起飞/着陆队列总长度,等待服务总时间,以及服务起飞/着陆的飞机总数,我们就可以得出起飞/着陆飞机的平均等待时间,平均等待队列长度。同时根据当天的的工作时间,跑道的忙碌时间,可以计算得到跑道的繁忙程度。
数据结构大型实验实验报告
1.3程序基本流程
数据结构大型实验实验报告
图 1 实验基本流程
1.4基本数据结构,类设计
1.4.1类 Airport
输入:
数据结构大型实验实验报告
输出
成员
数据结构大型实验实验报告
1.4.2类Plane
成员:
1.4.3类Timer
成员:
1.4.4类Workslot
成员:
1.4.5结构 Busy
成员:
数据结构大型实验实验报告
1.5基本函数功能
1.5.1 类Simulation
setTimer():
设定计时器函数
setTakeoffTime(int t1):
设定起飞所需时间函数
setLandingTime(int t2):
设定着陆所需时间函数
setMaxlandingwaitTime(int mlwd):
设定着陆飞机最大等待时间
setStartworkTime(string s):
设定机场开始工作时间函数
setEndworkTime(string s):
设定机场结束工作时间函数
setHighslot(Workslot h):
设定高峰期机场属性
setLowslot(Workslot l):
设定空闲期机场属性
setOtherslot(Workslot o):
设定一般时段机场属性
run():
模拟飞机场运营。
数据结构大型实验实验报告
display():
该函数主要用于计算一些值,并输出在屏幕上。
跑道的繁忙程度= workTime/(endworkTime-startworkTime) 着陆飞机平均等待时间=landingwaitTime/landingNum 着陆飞机在队列中的平均等待时间=LwaitTime/landingNum 起飞飞机总的等待时间=takeoffwaitTime
起飞飞机平均等待时间=takeoffwaitTime/takeoffNum
起飞飞机在队列中的平均等待时间=TwaitTime/takeoffNum 起飞队列中剩余未起飞飞机数量=intakeoffNum-takeoffNum 再使用输出语句输出这些值。
1.5.2 类Plane
Plane()
用于初始化飞机的startwaitTime,startworkTime,workTime。
Plane(int a,int b,int c)
同上。
1.5.3 类Timer
Timer()
初始化当前时间。
Timer(int n)
同上。
void spend()
计时累加函数。
数据结构大型实验实验报告
2. 实验验证分析
2.1输入的形式和输入值的范围
2.2输出的形式
控制台下运行,结果输出形式:
时间: XX: XX X号起飞飞机进入起飞队列
时间: XX: XX X号起飞飞机开始起飞; 等待时间: XXmin ……
本日机场运营情况:
跑道的繁忙程度: XX 着陆飞机总的等待时间: XXh 着陆飞机平均等待时间: XXmin 着陆飞机在着陆队列中的平均等待时间: XXmin 起飞飞机总的等待时间: XXh 起飞飞机平均等待时间: XXmin 起飞飞机在起飞队列中的平均等待时间: XXmin 起飞队列中剩余未起飞飞机数量: XX
2.3程序所能达到的功能
程序实现了如下的功能:
数据结构大型实验实验报告
设置机场的工作时间 模拟机场的运营
模拟机场的高峰期和空闲期
计算出机场当天起飞/着陆的飞机数目
计算出等待队列(起飞/着陆)的平均长度 计算队列的平均等待时间 简单表示跑道的繁忙程度
2.4测试数据
数据结构大型实验实验报告
3. 调试分析
3.1遇到的问题及解决方法
3.1.1问题一
问题:在模拟结果中只有起飞飞机或着陆飞机。 解决方案:算法出现问题,重新写主程序。
3.1.1问题二
问题:机场的忙碌情况大于1。
解决方案:检查后发现,跑道功能工作时间的实现有问题,将代码进行改进。
3.1.1问题三
问题:产生随机数太过规则。
解决方案:发现是产生随机数的函数位置有问题,进行调整。
3.2技术难点分析
3.2.1难点一
一架飞机完成起飞/着陆花费一般超过一分钟,那么随着时间的累积,该如何来判断对当前飞机的服务结束了呢。
解决办法是给Plane类添加开始工作时间的参数,这样是要判断当前时间与开始工作时间的差值是否已到达起飞/着陆所耗时,即可判断起飞/着陆是否完成。
3.2.2难点二
单单用bool busy数据记录跑道是否忙碌会出现:当跑道忙碌时,不能判断跑道上运行的是起飞飞机还是着陆飞机这种情况。因此,我构造了Busy结构,里面不仅包括对跑道是否忙碌的的记录(bool busy)还包括对跑道上运行的是否为起飞飞机的记录(is_takeoff)。这样就可以判断跑道上忙碌时运行的是哪种飞机了。
数据结构大型实验实验报告
3.2.3难点三
由于未采用优先队列,故起飞和着陆队列是分别独立的,那么如何联系这两个队列是一大难点。由于本题我们采用着陆飞机优先的思想。故在跑道空闲的时候,先判断着陆队列是否为空,不为空就进行飞机着陆,为空则查看起飞队列是否为空,不为空则进行飞机起飞,为空则该时段不进行起飞。这样就可以不在优先队列中实现着陆飞机优先的思想。
3.3印象最深刻的错误及修正方法
3.3.1问题1
问题:着陆/起飞飞机的在队列中的平均等待时间与实际不符存在矛盾。
解决方法:查看原先对是否有等待飞机的判断语句为: if(takeoffq.size()>2) TwaitTime++; if(landingq.size()>2) LwaitTime++;
这时就遗漏了当队列只有一架飞机但由于跑道此时为忙碌,所以该飞机仍处于等待状态这种情况,故敬爱那个代码修改为:
if(takeoffq.size()>1 || (takeoffq.size()==1&&takeoffq.front().startworkTime==-1)) TwaitTime++;
if(landingq.size()>1 || (landingq.size()==1&&landingq.front().startworkTime==-1)) LwaitTime++;
更改前运行结果:
修正后运行结果:
数据结构大型实验实验报告
3.3.2问题2
问题:一开始的程序没有加入deQueue.h文件,而是直接用了#include <deque>,后面加入程序后一直没有调试成功 。
调试过程:
有报错框可知,因为程序开始设定的时候用了模版类,因此。队列类里也需要加入模版函数。在队列类的函数调用过程中修改了需要用到的函数,确保其运行成功。
解决方法: 完善了队列类
3.3.3问题3
问题:
要求机场24:00结束,但是程序只模拟到21:23分左右,之后再无飞机产生。而且之后的几小时内只有起飞飞机,无着陆飞机。多次模拟,均是类似结果。
解决方法:
首先分析该问题产生的可能原因,由于这种结果的太过规律性,怀疑是产生的随机数的问题,因此对产生随机数的语句进行分析,发现是将srand((int)time(0))语句放在for循环内造成的,故将srand((int)time(0))语句放到for循环外面。
数据结构大型实验实验报告
4. 测试结果
4.1正常运行
4.1.1输入数据正确的情况:
数据结构大型实验实验报告
4.1.2输入数据错误的情况:
数据结构大型实验实验报告
4.2边界数据测试
输入全部为
5. 后期扩展
1. 目前程序只模拟了一个跑道的情况,后期可以使用优先队列管理跑道,实现多跑道的飞
机场运营模拟。
2. 由于实验要求先处理完着陆队列再处理起飞队列,可能会导致模拟出来的情况与实际不
符,期中可能要考虑更多因素,目前的实现上来说还有待提高。
6. 源代码
6.1类设计
deQueue.h
#ifndef DEQUEUE #define DEQUEUE
数据结构大型实验实验报告
#include<iostream> using namespace std;
template <typename T> class node {
public:
T nodeValue; node<T> *next; node() : next(NULL) {}
node(const T& item, node<T> *nextNode = NULL) : nodeValue(item), next(nextNode) {} };
template <typename T> class Queue {
public: Queue(); void push_back(const T& item); void pop_front(); T& front(); const T& front() const; int size() const; bool empty() const; private: node<T> *qfront,*qback; int count; };
template <typename T>
Queue<T>::Queue():qfront(NULL), qback(NULL), count(0) {}
template <typename T>
void Queue<T>::push_back(const T& item) { node<T> *newNode=new node<T>(item, NULL); if(qfront==NULL){ qfront=newNode; qback=newNode; } else{ qback->next=newNode; qback=newNode;
数据结构大型实验实验报告
count++; }
template <typename T> void Queue<T>::pop_front() { if (empty()) //count==0 cout<<"Queue pop_front(): empty queue"<<endl; node<T> *tmp=qfront; qfront=qfront->next;
if (qfront == NULL) qback = NULL; delete tmp; count--; }
template <typename T> T& Queue<T>::front() { if (empty() ) cout<<"Queue front(): empty queue"<<endl; return qfront->nodeValue; }
template <typename T> int Queue<T>::size() const { return count; }
template <typename T>
bool Queue<T>::empty() const { return count==0; } #endif
Timer.h
#ifndef TIMER #define TIMER
class Timer{
数据结构大型实验实验报告
int now; //计时器当前时间 Timer(){} Timer(int n){ now=n; } void spend(){ //计时累加函数 now++; } };
#endif
Plane.h
#ifndef PLANE #define PLANE
class Plane{ public: int startwaitTime; int startworkTime; int workTime; Plane(){} Plane(int a,int b,int c){ startwaitTime=a; startworkTime=b; workTime=c; } };
#endif
Workslot.h
#include <iostream> #include <string> using namespace std; #ifndef WORKSLOT #define WORKSLOT
class Workslot{ public: int startTime; int endTime; int takeoffRate; //开始等待时间 //开始起飞/着陆时间 //起飞/着陆时间 //该时间段开始时间 //该时间段结束时间 //起飞频率(每小时起飞数)
正在阅读:
机场航空管制模拟实验报告04-22
微机实验顺序结构程序设计05-23
消费者行为学04-30
寒山寺导游词02-24
上海市浦东新区社会发展局(意见)06-03
物理竞赛练习(2能量与动量)11-13
北京大学附中2014届高三数学一轮复习单元训练:圆锥曲线与方程01-16
少先队16年秋季工作计划书样本参阅05-23
琼剧经典卡拉OK选段戏词doc101-24
国际税收 第八章 国际反避税措施08-27
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 管制
- 机场
- 航空
- 模拟
- 实验
- 报告
- 咨询简历模板(样式7)
- 6_Unit_5__The_power_of_nature
- 强化复工企业及员工疫情防控措施的通知
- 安全生产投入资金情况
- 湖北省2010年(下半年)会计从业资格考试《财经法规》试题
- 网络号和主机号等的分析和计算
- 玉米收获机械技术现状分析及发展建议
- 11 准备方式的类型及其选择
- 7硫化机操作规程JS-03-07
- 九年级化学溶解度练习
- WEB_网页全屏的代码
- 成才之路高一物理(人教版)必修1第三章课件4-5
- 女孩子取什么名字旺人缘
- 广东风俗文化景观与群落
- 公共设施管理汇报材料
- 长沙医学院经典毕业论文设计答辩ppt模板—最新精美导航型(五)
- 人教统编版(部编版)三年级上学期语文第1课《大青树下的小学》同
- 对高职院校新生班主任工作思路的探讨
- 国际结算中的票据(有答案)
- 王斌 质量进度投资控制考试复习要点