机场航空管制模拟实验报告_第1页
机场航空管制模拟实验报告_第2页
机场航空管制模拟实验报告_第3页
机场航空管制模拟实验报告_第4页
机场航空管制模拟实验报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

机场航空管制模拟实验报告实验题目假设机场有一条跑道,每架飞机需花费一定时间着陆,花费一定时间起飞,飞机的起降满足一定的概率。一般来讲,机场存在两个队列,一个等待着陆的飞机队列和一个等待起飞的飞机队列,同样等待时间下,等待着陆的飞机比准备起飞的飞机具有更高的优先级。试编写程序模拟这个机场的运行。要求使用队列或优先队列实现;要求可以变换起飞和着陆频率来模拟一天中的飞行顶峰期和空闲期;要求可以改变着陆和起飞时间以模拟不同的效果。实验内容分析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输入:变量名注释Timert;计时器StructBusyb;跑道是否忙碌inttakeoffTime;飞机起飞所需时间intlandingTime;飞机着陆所需时间intstartworkTime;机场当天开始运营时间intendworkTime;机场当天结束运营时间ClassWorkslothighslot;顶峰时间段ClassWorkslotlowslot;空闲时间段ClassWorkslototherslot;一般时间段deque<Plane>takeoffq;等待起飞飞机队列deque<Plane>landingq;等待着陆飞机队列intworkTime;跑道忙碌时间intTwaitTime;总起飞等待时间intLwaitTime;总着陆等待时间inttakeoffwaitTime;所有起飞飞机总等待时间intlandingwaitTime;所有着陆飞机总等待时间intmaxlandingwaitTime;最大着陆等待时间intintakeoffNum;进入起飞队列飞机数intinlandingNum;进入着陆队列飞机数inttakeoffNum;已经起飞飞机数intlandingNum;已经着陆飞机数intt_rate;用来保存起飞速率intl_rate;用来保存着陆速率输出变量名备注t.now当前时间inttakeoffNum当前已起飞飞机数量intlandingNum当前已着陆飞机数量intintakeoffNum当前已入起飞队列飞机数intinlandingNum当前已入着陆队列飞机数deque<Plane>takeoffq起飞队列,元素类型为飞机类型deque<Plane>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类SimulationsetTimer():设定计时器函数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类PlanePlane()用于初始化飞机的startwaitTime,startworkTime,workTime。Plane(inta,intb,intc)同上。1.5.3类TimerTimer()初始化当前时间。Timer(intn)同上。voidspend()计时累加函数。实验验证分析2.1输入的形式和输入值的范围变量名类型范围输入例如机场开始工作时间string0:00~24:002:00机场结束工作时间string0:00~24:0012:00顶峰期开始时间string0:00~24:002:00顶峰期结束时间string0:00~24:005:00空闲期开始时间string0:00~24:006:00空闲期结束时间string0:00~24:0010:00着陆飞机最长等待时间Int0~20顶峰期飞机起飞率Int0~30顶峰期飞机着陆率Int0~29空闲期飞机起飞率Int0~顶峰期飞机起飞率12空闲期飞机着陆率Int0~顶峰期飞机着陆率13一般情况飞机起飞率Int空闲期飞机起飞率~顶峰期飞机起飞率20一般情况飞机着陆率Int空闲期飞机着陆率~顶峰期飞机着陆率23起飞所需时间Int1~103着陆所需时间Int1~1022.2输出的形式控制台下运行,结果输出形式:时间:XX:XXX号起飞飞机进入起飞队列时间:XX:XXX号起飞飞机开始起飞;等待时间:XXmin……本日机场运营情况:跑道的繁忙程度:XX着陆飞机总的等待时间:XXh着陆飞机平均等待时间:XXmin着陆飞机在着陆队列中的平均等待时间:XXmin起飞飞机总的等待时间: XXh起飞飞机平均等待时间:XXmin起飞飞机在起飞队列中的平均等待时间:XXmin起飞队列中剩余未起飞飞机数量:XX2.3程序所能到达的功能程序实现了如下的功能:设置机场的工作时间模拟机场的运营模拟机场的顶峰期和空闲期计算出机场当天起飞/着陆的飞机数目计算出等待队列〔起飞/着陆〕的平均长度计算队列的平均等待时间简单表示跑道的繁忙程度2.4测试数据第一组数据第二组数据第三组数据机场开始工作时间9:008:000:00机场结束工作时间12:0017:0024:00顶峰期开始时间9:0015:009:00顶峰期结束时间10:0017:0015:00空闲期开始时间11:308:003:00空闲期结束时间12:0011:008:00着陆飞机最长等待时间202015顶峰期飞机起飞率423636顶峰期飞机着陆率403335空闲期飞机起飞率121010空闲期飞机着陆率10912一般情况飞机起飞率202020一般情况飞机着陆率221722起飞所需时间333着陆所需时间333第一组数据第二组数据第三组数据跑道的繁忙程度0.7555560.750.750694着陆飞机总的等待时间12.3333h15.8167h66.0333h着陆飞机平均等待时间17min8min11min着陆飞机在队列中的平均等待时间3min3min3min起飞飞机总的等待时间5.68333h18.4333h139.25h起飞飞机平均等待时间85min44min321min起飞飞机在队列中的平均等待时间44min21min55min起飞队列中剩余未起飞飞机数量61架148架531架调试分析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()>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.1正常运行输入数据正确的情况:输入数据错误的情况:4.2边界数据测试输入全部为0后期扩展目前程序只模拟了一个跑道的情况,后期可以使用优先队列管理跑道,实现多跑道的飞机场运营模拟。由于实验要求先处理完着陆队列再处理起飞队列,可能会导致模拟出来的情况与实际不符,期中可能要考虑更多因素,目前的实现上来说还有待提高。源代码6.1类设计deQueue.h#ifndefDEQUEUE#defineDEQUEUE#include<iostream>usingnamespacestd;template<typenameT>classnode{public:TnodeValue;node<T>*next;node():next(NULL){}node(constT&item,node<T>*nextNode=NULL):nodeValue(item),next(nextNode){}};template<typenameT>classQueue{public: Queue();voidpush_back(constT&item);voidpop_front(); T&front();constT&front()const;intsize()const;boolempty()const;private: node<T>*qfront,*qback;intcount;};template<typenameT>Queue<T>::Queue():qfront(NULL),qback(NULL),count(0){}template<typenameT>voidQueue<T>::push_back(constT&item){ node<T>*newNode=newnode<T>(item,NULL);if(qfront==NULL){ qfront=newNode; qback=newNode; }else{ qback->next=newNode; qback=newNode; } count++;}template<typenameT>voidQueue<T>::pop_front(){if(empty())//count==0 cout<<"Queuepop_front():emptyqueue"<<endl; node<T>*tmp=qfront; qfront=qfront->next;if(qfront==NULL) qback=NULL;deletetmp; count--;}template<typenameT>T&Queue<T>::front(){if(empty()) cout<<"Queuefront():emptyqueue"<<endl;returnqfront->nodeValue;}template<typenameT>intQueue<T>::size()const{returncount;}template<typenameT>boolQueue<T>::empty()const{returncount==0;}#endifTimer.h#ifndefTIMER#defineTIMERclassTimer{public:intnow;//计时器当前时间 Timer(){} Timer(intn){ now=n; }voidspend(){//计时累加函数 now++; }};#endifPlane.h#ifndefPLANE#definePLANEclassPlane{public:intstartwaitTime;//开始等待时间intstartworkTime; //开始起飞/着陆时间intworkTime;//起飞/着陆时间 Plane(){} Plane(inta,intb,intc){ startwaitTime=a; startworkTime=b; workTime=c; }};#endifWorkslot.h#include<iostream>#include<string>usingnamespacestd;#ifndefWORKSLOT#defineWORKSLOTclassWorkslot{public: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]-'0')*10+(sT[1]-'0'))*60;elsecout<<"InputStartTimeerror!"<<endl; smin+=(sT[n1+1]-'0')*10+(sT[n1+2]-'0'); startTime=smin;intemin=0;intn2=eT.find_first_of(':');if(n2==1)emin=(eT[0]-'0')*60;elseif(n2==2)emin=((eT[0]-'0')*10+(eT[1]-'0'))*60;elsecout<<"InputEndTimeerror!"<<endl; emin+=(eT[n2+1]-'0')*10+(eT[n2+2]-'0'); endTime=emin; } Workslotoperator=(Workslota){ startTime=a.startTime; endTime=a.endTime; takeoffRate=a.takeoffRate; landingRate=a.landingRate;return*this; }};#endif6.2方法实现Airport.h#include<iostream>#include<ctime>#include<string>#include"deQueue.h"#include<iomanip>#include"Workslot.h"#include"Plane.h"#include"Timer.h"usingnamespacestd;#ifndefAIRPORT#defineAIRPORTvoidchtime(intn){if(n%60/10!=0) cout<<"时间:"<<setw(2)<<n/60<<":"<<setw(2)<<n%60;else cout<<"时间:"<<setw(2)<<n/60<<":0"<<n%60;}structBusy{boolis_takeoff;//跑道中是否为起飞飞机boolbusy; //跑道是否忙碌};classAirport{private: Timert;//计时器 Busyb; //跑道是否忙碌inttakeoffTime;//飞机起飞所需时间intlandingTime;//飞机着陆所需时间intstartworkTime;//机场当天开始运营时间intendworkTime; //机场当天结束运营时间 Workslothighslot;//顶峰时间段 Workslotlowslot;//空闲时间段 Workslototherslot;//一般时间段Queue<Plane>takeoffq;//等待起飞飞机队列Queue<Plane>landingq;//等待着陆飞机队列intworkTime;//跑道忙碌时间intTwaitTime;//总起飞等待时间intLwaitTime;//总着陆等待时间inttakeoffwaitTime;//所有起飞飞机总等待时间intlandingwaitTime;//所有着陆飞机总等待时间intmaxlandingwaitTime; //最大着陆等待时间intintakeoffNum;//进入起飞队列飞机数intinlandingNum;//进入着陆队列飞机数inttakeoffNum; //已经起飞飞机数intlandingNum; //已经着陆飞机数intt_rate;intl_rate;public:voidsetTimer(){//设定计时器函数 t.now=startworkTime; }voidsetTakeoffTime(intt1){//设定起飞所需时间函数 takeoffTime=t1; }voidsetLandingTime(intt2){ //设定着陆所需时间函数 landingTime=t2; }voidsetMaxlandingwaitTime(intmlwd){//设定着陆飞机最大等待时间 maxlandingwaitTime=mlwd; }voidsetStartworkTime(strings){//设定机场开始工作时间函数intmin=0;intn=s.find_first_of(':');if(n==1)min=(s[0]-'0')*60;elseif(n==2)min=((s[0]-'0')*10+(s[1]-'0'))*60;else{ cout<<"InputStartWorkTimeerror!"<<endl;return; } min+=(s[n+1]-'0')*10+(s[n+2]-'0'); startworkTime=min; }voidsetEndworkTime(strings){//设定机场结束工作时间函数intmin=0;intn=s.find_first_of(':');if(n==1)min=(s[0]-'0')*60;elseif(n==2)min=((s[0]-'0')*10+(s[1]-'0'))*60;else{ cout<<"InputEndWorkTimeerror!"<<endl;return; } min+=(s[n+1]-'0')*10+(s[n+2]-'0'); endworkTime=min; }voidsetHighslot(Worksloth){//设定顶峰期机场属性 highslot=h; }voidsetLowslot(Workslotl){//设定空闲期机场属性 lowslot=l; }voidsetOtherslot(Worksloto){//设定一般时段机场属性 otherslot=o; }voidrun(){//报表数据初始化 workTime=0;//跑道忙碌时间 takeoffwaitTime=0; landingwaitTime=0; TwaitTime=0;//起飞等待时间 LwaitTime=0;//着陆等待时间 takeoffNum=0;//已起飞飞机数量 landingNum=0;//已着陆飞机数量 intakeoffNum=0;//进入起飞队列飞机数量 inlandingNum=0;//进入着陆队列飞机数量 b.busy=0; srand((int)time(0));//随机数初始化 while(t.now<=endworkTime){ //飞机场模拟开始if(highslot.startTime<=t.now&&highslot.endTime>t.now){//设置顶峰期起飞、着陆率 t_rate=highslot.takeoffRate; l_rate=highslot.landingRate; }elseif(lowslot.startTime<=t.now&&lowslot.endTime>t.now){ t_rate=lowslot.takeoffRate; l_rate=lowslot.landingRate; }else{ t_rate=otherslot.takeoffRate; l_rate=otherslot.landingRate; }if((rand()%100+1)*60.0/100<t_rate){ Planetp(t.now,-1,takeoffTime); takeoffq.push_back(tp); intakeoffNum++; chtime(t.now); cout<<""<<setw(3)<<intakeoffNum<<"号起飞飞机进入起飞队列"<<endl; }boollanding1=((!landingq.empty()&&(landingq.size()*landingTime-t.now+landingq.front().startworkTime)<maxlandingwaitTime)||landingq.empty());boollanding2=(((landingq.size()+1)*landingTime-t.now+(landingq.empty()?t.now:landingq.front().startworkTime))<=endworkTime-t.now);if((rand()%100+1)*60.0/100<l_rate&&landing1&&landing2){ Planelp(t.now,-1,landingTime); landingq.push_back(lp); inlandingNum++; chtime(t.now); cout<<""<<setw(3)<<inlandingNum<<"号着陆飞机进入着陆队列"<<endl; }if(b.busy){ if(b.is_takeoff&&(takeoffq.front().startworkTime!=-1 &&t.now-takeoffq.front().startworkTime==takeoffTime)){ takeoffwaitTime+=takeoffq.front().startworkTime-takeoffq.front().startwaitTime; takeoffq.pop_front(); b.busy=0; }elseif(!b.is_takeoff&&(landingq.front().startworkTime!=-1 &&t.now-landingq.front().startworkTime==landingTime)){ landingwaitTime+=landingq.front().startworkTime-landingq.front().startwaitTime; landingq.pop_front(); b.busy=0; } }else{ if(!landingq.empty()){ landingq.front().startworkTime=t.now; b.is_takeoff=0; chtime(t.now); landingNum++; cout<<""<<setw(3)<<landingNum<<"号着陆飞机开始着陆;等待时间:"<<t.now-landingq.front().startwaitTime<<"min"<<endl; b.busy=1; }elseif(landingq.empty()&&!takeoffq.empty()){ takeoffq.front().startworkTime=t.now; b.is_takeoff=1; chtime(t.now); takeoffNum++; cout<<""<<setw(3)<<takeoffNum<<"号起飞飞机开始起飞;等待时间:" <<t.now-takeoffq.front().startwaitTime<<"min"<<endl; b.busy=1; } }if(takeoffq.size()>1|| (takeoffq.size()==1&&takeoffq.front().startworkTime==-1)) TwaitTime++;if(landingq.size()>1|| (landingq.size()==1&&landingq.front().startworkTime==-1)) LwaitTime++;if(b.busy)workTime++; t.spend(); } }voiddisplay(){//输出计算结果函数 cout<<endl<<"本日机场运营情况:"<<endl<<"跑道的繁忙程度:" <<(double)workTime/(double)(endworkTime-startworkTime)<<endl;if(landingNum!=0){ cout<<"着陆飞机总的等待时间:" <<(double)landingwaitTime/60<<"h"<<endl; cout<<"着陆飞机平均等待时间:" <<(double)(landingwaitTime/landingNum)<<"min"<<endl; cout<<"着陆飞机在队列中的平均等待时间:" <<(double)(LwaitTime/landingNum)<<"min"<<endl<<endl; }elsecout<<"期间无飞机着陆"<<endl<<endl;if(takeoffNum!=0){ cout<<"起飞飞机总的等待时间:" <<(double)takeoffwaitTime/60<<"h"<<endl; cout<<"起飞飞机平均等待时间:" <<(double)(takeoffwaitTime/takeoffNum)<<"min"<<endl; cout<<"起飞飞机在队列中的平均等待时间:" <<(double)(TwaitTime/takeoffNum)<<"min"<<endl; cout<<"起飞队列中剩余未起飞飞机数量:" <<intakeoffNum-takeoffNum<<"架"<<endl; }elsecout<<"期间无飞机起飞"<<endl; } };#endifSimulation.cpp#include"Airport.h"#include"Plane.h"#include"Timer.h"#include<iostream>#include"deQueue.h"#include<string>usingnamespacestd;boolwrong(strings){if(s[0]-'2'>=0&&s[1]!=':'&&s[1]-'4'>0)return1;return0;}intmain(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); cout<<"------------------机场航空管制模拟-------------------"<<endl; Airporta; stringbeginTime,endTime,hbeginTime,hendTime,lbeginTime,lendTime;inthtakeoffRate,hlandingRate,ltakeoffRate,llandingRate,otakeoffRate,olandingRate,TakeoffTime,LandingTime,MaxlandingwaitTime; cout<<"请输入机场开始工作时间:"; cin>>beginTime;while(wrong(beginTime)){ cout<<"机场开始工作时间输入有误,请输入小于等于24的数字:"; cin>>endTime; } cout<<endl; cout<<"请输入机场结束工作时间:"; cin>>endTime;while(wrong(endTime)){ cout<<"机场结束工作时间输入有误,请输入小于等于24的数字:"; cin>>endTime; } cout<<endl; cout<<"请输入顶峰期开始时间:"; cin>>hbeginTime;while(wrong(hbeginTime)){ cout<<"顶峰期开始时间输入有误,请输入小于等于24的数字:"; cin>>endTime; } cout<<endl; cout<<"请输入顶峰期结束时间:"; cin>>hendTime;while(wrong(hendTime)){ cout<<"顶峰期结束时间输入有误,请输入小于等于24的数字:"; cin>>endTime; } cout<<endl; cout<<"请输入空闲期开始时间:"; cin>>lbeginTime;while(wrong(lbeginTime)){ cout<<"空闲期开始时间输入有误,请输入小于等于24的数字:"; cin>>endTime; } cout<<endl; cout<<"请输入空闲期结束时间:"; cin>>lendTime;while(wrong(lendTime)){ cout<<"空闲期结束时间输入有误,请输入小于等于24的数字:"; cin>>endTime; } cout<<endl; cout<<"请输入着陆飞机最长等待时间:

温馨提示

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

评论

0/150

提交评论