机场航空管制模拟实验报告汇总文档格式.docx

上传人:b****6 文档编号:16828301 上传时间:2022-11-26 格式:DOCX 页数:34 大小:275.18KB
下载 相关 举报
机场航空管制模拟实验报告汇总文档格式.docx_第1页
第1页 / 共34页
机场航空管制模拟实验报告汇总文档格式.docx_第2页
第2页 / 共34页
机场航空管制模拟实验报告汇总文档格式.docx_第3页
第3页 / 共34页
机场航空管制模拟实验报告汇总文档格式.docx_第4页
第4页 / 共34页
机场航空管制模拟实验报告汇总文档格式.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

机场航空管制模拟实验报告汇总文档格式.docx

《机场航空管制模拟实验报告汇总文档格式.docx》由会员分享,可在线阅读,更多相关《机场航空管制模拟实验报告汇总文档格式.docx(34页珍藏版)》请在冰豆网上搜索。

机场航空管制模拟实验报告汇总文档格式.docx

intstartworkTime;

机场当天开始运营时间

intendworkTime;

机场当天结束运营时间

ClassWorkslothighslot;

高峰时间段

ClassWorkslotlowslot;

空闲时间段

ClassWorkslototherslot;

一般时间段

deque<

Plane>

takeoffq;

等待起飞飞机队列

landingq;

等待着陆飞机队列

intworkTime;

跑道忙碌时间

intTwaitTime;

总起飞等待时间

intLwaitTime;

总着陆等待时间

inttakeoffwaitTime;

所有起飞飞机总等待时间

intlandingwaitTime;

所有着陆飞机总等待时间

intmaxlandingwaitTime;

最大着陆等待时间

intintakeoffNum;

进入起飞队列飞机数

intinlandingNum;

进入着陆队列飞机数

inttakeoffNum;

已经起飞飞机数

intlandingNum;

已经着陆飞机数

intt_rate;

用来保存起飞速率

intl_rate;

用来保存着陆速率

输出

备注

t.now

当前时间

inttakeoffNum

当前已起飞飞机数量

intlandingNum

当前已着陆飞机数量

intintakeoffNum

当前已入起飞队列飞机数

intinlandingNum

当前已入着陆队列飞机数

takeoffq

起飞队列,元素类型为飞机类型

landingq

着陆队列,元素类型为飞机类型

double(workTime/(endworkTime-startworkTime))

跑道的繁忙程度(用机场总工作时间与跑道忙碌时间之比来衡量)

doublelandingwaitTime

着陆飞机总的等待时间

double(landingwaitTime/landingNum)

着陆飞机平均等待时间

double(LwaitTime/landingNum)

着陆飞机在队列中的平均等待时间

doubletakeoffwaitTime

起飞飞机总的等待时间

double(takeoffwaitTime/takeoffNum)

起飞飞机平均等待时间

double(TwaitTime/takeoffNum)

起飞飞机在队列中的平均等待时间

intIntakeoffNum–takeoffNum

运营结束时,起飞队列中剩余飞机数量

成员

方法名

voidrun()

运行仿真

voidsetTimer()

设定计时器函数

voidsetTakeoffTime(intt1)

设定起飞所需时间函数

voidsetLandingTime(intt2)

设定着陆所需时间函数

voidsetMaxlandingwaitTime(intmlwd)

设定着陆飞机最大等待时间

voidsetStartworkTime(strings)

设定机场开始工作时间函数

voidsetEndworkTime(strings)

设定机场结束工作时间函数

voidsetHighslot(Worksloth)

设定高峰期机场属性

voidsetLowslot(Workslotl)

设定空闲期机场属性

voidsetOtherslot(Worksloto)

设定一般时段机场属性

1.4.2类Plane

成员:

intstartwaitTime

开始等待时间

intstartworkTime

开始起飞/着陆时间

intworkTime

起飞/着陆时间

1.4.3类Timer

intnow

计时器当前时间

voidspend()

计时累加函数

1.4.4类Workslot

intstartTime

该时间段开始时间

intendTime

该时间段结束时间

inttakeoffRate

起飞频率(每小时起飞数)

intlandingRate

着陆频率(每小时着陆数)

1.4.5结构Busy

boolis_takeoff

跑道中是否为起飞飞机

boolbusy

1.5基本函数功能

1.5.1类Simulation

setTimer():

setTakeoffTime(intt1):

setLandingTime(intt2):

setMaxlandingwaitTime(intmlwd):

setStartworkTime(strings):

setEndworkTime(strings):

setHighslot(Worksloth):

setLowslot(Workslotl):

setOtherslot(Worksloto):

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(inta,intb,intc)

同上。

1.5.3类Timer

Timer()

初始化当前时间。

Timer(intn)

计时累加函数。

2.实验验证分析

2.1输入的形式和输入值的范围

类型

范围

输入示例

机场开始工作时间

string

0:

00~24:

00

2:

机场结束工作时间

12:

高峰期开始时间

高峰期结束时间

5:

空闲期开始时间

6:

空闲期结束时间

10:

着陆飞机最长等待时间

Int

0~

20

高峰期飞机起飞率

30

高峰期飞机着陆率

29

空闲期飞机起飞率

0~高峰期飞机起飞率

12

空闲期飞机着陆率

0~高峰期飞机着陆率

13

一般情况飞机起飞率

空闲期飞机起飞率~高峰期飞机起飞率

一般情况飞机着陆率

空闲期飞机着陆率~高峰期飞机着陆率

23

起飞所需时间

1~10

3

着陆所需时间

2

2.2输出的形式

控制台下运行,结果输出形式:

时间:

XX:

XXX号起飞飞机进入起飞队列

XXX号起飞飞机开始起飞;

等待时间:

XXmin

……

本日机场运营情况:

跑道的繁忙程度:

XX

着陆飞机总的等待时间:

XXh

着陆飞机平均等待时间:

XXmin

着陆飞机在着陆队列中的平均等待时间:

起飞飞机总的等待时间:

XXh

起飞飞机平均等待时间:

起飞飞机在起飞队列中的平均等待时间:

起飞队列中剩余未起飞飞机数量:

XX

2.3程序所能达到的功能

程序实现了如下的功能:

◆设置机场的工作时间

◆模拟机场的运营

◆模拟机场的高峰期和空闲期

◆计算出机场当天起飞/着陆的飞机数目

◆计算出等待队列(起飞/着陆)的平均长度

◆计算队列的平均等待时间

◆简单表示跑道的繁忙程度

2.4测试数据

第一组数据

第二组数据

第三组数据

9:

8:

17:

24:

15:

11:

3:

15

42

36

40

33

35

10

9

22

17

跑道的繁忙程度

0.755556

0.75

0.750694

12.3333h

15.8167h

66.0333h

17min

8min

11min

3min

5.68333h

18.4333h

139.25h

85min

44min

321min

21min

55min

起飞队列中剩余未起飞飞机数量

61架

148架

531架

3.调试分析

3.1遇到的问题及解决方法

3.1.1问题一

问题:

在模拟结果中只有起飞飞机或着陆飞机。

解决方案:

算法出现问题,重新写主程序。

3.1.1问题二

机场的忙碌情况大于1。

检查后发现,跑道功能工作时间的实现有问题,将代码进行改进。

3.1.1问题三

产生随机数太过规则。

发现是产生随机数的函数位置有问题,进行调整。

3.2技术难点分析

3.2.1难点一

一架飞机完成起飞/着陆花费一般超过一分钟,那么随着时间的累积,该如何来判断对当前飞机的服务结束了呢。

解决办法是给Plane类添加开始工作时间的参数,这样是要判断当前时间与开始工作时间的差值是否已到达起飞/着陆所耗时,即可判断起飞/着陆是否完成。

3.2.2难点二

单单用boolbusy数据记录跑道是否忙碌会出现:

当跑道忙碌时,不能判断跑道上运行的是起飞飞机还是着陆飞机这种情况。

因此,我构造了Busy结构,里面不仅包括对跑道是否忙碌的的记录(boolbusy)还包括对跑道上运行的是否为起飞飞机的记录(is_takeoff)。

这样就可以判断跑道上忙碌时运行的是哪种飞机了。

3.2.3难点三

由于未采用优先队列,故起飞和着陆队列是分别独立的,那么如何联系这两个队列是一大难点。

由于本题我们采用着陆飞机优先的思想。

故在跑道空闲的时候,先判断着陆队列是否为空,不为空就进行飞机着陆,为空则查看起飞队列是否为空,不为空则进行飞机起飞,为空则该时段不进行起飞。

这样就可以不在优先队列中实现着陆飞机优先的思想。

3.3印象最深刻的错误及修正方法

3.3.1问题1

着陆/起飞飞机的在队列中的平均等待时间与实际不符存在矛盾。

解决方法:

查看原先对是否有等待飞机的判断语句为:

if(takeoffq.size()>

2)

TwaitTime++;

if(landingq.size()>

LwaitTime++;

这时就遗漏了当队列只有一架飞机但由于跑道此时为忙碌,所以该飞机仍处于等待状态这种情况,故敬爱那个代码修改为:

1||(takeoffq.size()==1&

&

takeoffq.front().startworkTime==-1))

1||(landingq.size()==1&

landingq.front().startworkTime==-1))

更改前运行结果:

修正后运行结果:

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边界数据测试

输入全部为0

5.后期扩展

1.目前程序只模拟了一个跑道的情况,后期可以使用优先队列管理跑道,实现多跑道的飞机场运营模拟。

2.由于实验要求先处理完着陆队列再处理起飞队列,可能会导致模拟出来的情况与实际不符,期中可能要考虑更多因素,目前的实现上来说还有待提高。

6.源代码

6.1类设计

deQueue.h

#ifndefDEQUEUE

#defineDEQUEUE

#include<

iostream>

usingnamespacestd;

template<

typenameT>

classnode

{

public:

TnodeValue;

node<

T>

*next;

node():

next(NULL)

{}

node(constT&

item,node<

*nextNode=NULL):

nodeValue(item),next(nextNode)

};

classQueue

Queue();

voidpush_back(constT&

item);

voidpop_front();

T&

front();

constT&

front()const;

intsize()const;

boolempty()const;

private:

node<

*qfront,*qback;

intcount;

Queue<

:

Queue():

qfront(NULL),qback(NULL),count(0)

{}

voidQueue<

push_back(constT&

item)

*newNode=newnode<

(item,NULL);

if(qfront==NULL){

qfront=newNode;

qback=newNode;

}

else{

qback->

next=newNode;

count++;

}

pop_front()

if(empty())//count==0

cout<

<

"

Queuepop_front():

emptyqueue"

endl;

*tmp=qfront;

qfront=qfront->

next;

if(qfront==NULL)

qback=NULL;

deletetmp;

count--;

T&

Queue<

front()

if(empty())

Queuefront():

returnqfront->

nodeValue;

intQueue<

size()const

returncount;

boolQueue<

empty()const

returncount==0;

}

#endif

Timer.h

#ifndefTIMER

#defineTIMER

classTimer{

public:

intnow;

//计时器当前时间

Timer(){}

Timer(intn){

now=n;

voidspend(){//计时累加函数

now++;

Plane.h

#ifndefPLANE

#definePLANE

classPlane{

intstartwaitTime;

//开始等待时间

intstartworkTime;

//开始起飞/着陆时间

intworkTime;

//起飞/着陆时间

Plane(){}

Plane(inta,intb,intc){

startwaitTime=a;

startworkTime=b;

workTime=c;

Workslot.h

#include<

string>

#ifndefWORKSLOT

#defineWORKSLOT

classWorkslot{

intstartTime;

//该时间段开始时间

intendTime;

//该时间段结束时间

inttakeoffRate;

//起飞频率(每小时起飞数)

intlandingRate;

//着陆频率(每小时着陆数)

Workslot(){}

Workslot(stringsT,stringeT,inttR,intlR):

takeoffRate(tR),landingRate(lR){

intsmin=0;

intn1=sT.find_first_of('

'

);

if(n1==1)smin=(sT[0]-'

0'

)*60;

elseif(n1==2)smin=((sT[0]-'

)*10+(sT[1]-'

))*60;

elsecout<

InputStartTimeerror!

smin+=(sT[

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

当前位置:首页 > 外语学习 > 英语考试

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

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