您好,欢迎来到华拓网。
搜索
您的当前位置:首页飞机场起飞降落管理

飞机场起飞降落管理

来源:华拓网
课程名称: 《数据结构》课程设计

课程设计题目: 模拟飞机场起飞降落管理

姓 名: 院系: 计算机学院

专 业:计算机科学与技术

年 级: 学 号: 指导教师: 2014 年月 日

目 录

1 课程设计的目的………………………………………………………………3 2 需求分析………………………………………………………………………3 3 课程设计报告内容……………………………………………………………3 3.1概要设计……………………………………………………………………3 3.2详细设计……………………………………………………………………3 3.3调试分析……………………………………………………………………3 3.4用户手册……………………………………………………………………4 3.5测试结果……………………………………………………………………4 3.6程序清单……………………………………………………………………5 4 小结 …………………………………………………………………………x 5 参考文献 ………………………………………………………………8

1.课程设计的目的

(1) 熟练使用 C 语言编写程序,解决实际问题; (2) 了解并掌握数据结构与算法的设计方法,具备初步的分析和设计能力;

(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

(4) 提高综合运用所学的理论知识和方法分析和解决问题的能力; 2.需求分析

设飞机场有三条跑道。前两条跑道可以用作着陆和起飞,第三条跑道主要用作起飞,除非有紧急着陆。到达的飞机进入某个跑道的等待队列,并分配给该飞机一个整数id(身份号)和另一个整数t,t是飞机必须降落前(出现油量的原因)在队列中允许停留的时间单位数,称为剩余时间。三个跑道中的每一个均有一个起飞队列。在起飞队列中的飞机也分配有一个id值。各起飞队列的长度应大致相同。

在每个时间单位中,可允许最多有三架飞机进入着陆队列以及最多三架飞机进入起飞队列。每条跑道在一个时间单位中,允许一次起飞或降落。第三条跑道仅用作起飞,除非飞机须紧急降落。在每个时间单位中,任何一个着陆队列里剩余时间接近零的飞机必须给予高于其他飞机(不论是着陆还是起飞)的优先级。如果仅有一架飞机出现这种情况,则使用第三条跑道。如果多于一架飞机(最多三架)发生此情况,则其他跑道也被使用。

用连续偶数(奇数)表示飞机在起飞(着陆)队列中的id值。在每个单位时间中,假设进入队列的操作先于起飞或降落的操作。设计一个算法用于模拟上述管理模式。要求队列不会过于增大,而到来的飞机又必须放到适当队列的尾部。队列不允许重新安排。

实习任务:

编写一个程序完成上述控制过程的模拟运行过程。 您的程序需要达到下面的要求:

算法的输出应该清楚地显示出每个时间单位中发生的事情。 每次输出应包括: (a)每个队列的内容; (b)起飞的平均等待时间; (c)着陆的平均等待时间; (d)着陆的平均剩余时间;

(e)紧急降落(无油料)的飞机数。

算法的输入可以来自键盘、文件或随机数产生器。

在每个时间单位中,输入包括:到达起飞队列的飞机数,到达着陆队列的飞机数,以及到达着陆队列的飞机所具有的剩余时间。3 文章编辑的设计

3.1概要设计

对于准备降落和起飞的飞机,我们分别建立一个队列landing和takeoff进行容纳;在本实验中,对马上降落的飞机,我们用两个函数进行处理void Land1(plane& p)和void Land2(plane& p)进行降落处理,其中void Land1(&plane p)是使飞机降落在降落专用跑道上,而void Land2(plane& p)则是使飞机降落在混合跑道上;对于准备起飞的飞机,我们同样定义与降落相应的两个函数void Fly1(plane &p)和void Fly2(plane &p)去实现飞机起飞的操作。3.3调试分析

测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

3.4用户手册(略) 3.5测试结果(略) 4总结

使用队列的数据结构来完成飞机场的起飞降落管理,3条跑道同时进行,预期的总飞机数为3.在设计是遇到很多困难,参考了网上的一些相关资料

5、程序清单:(见附录) #include #include #include #include #include #ifndef QUEUE_H #define QUEUE_H

#ifndef AIRPORTSIMULATION_H #define AIRPORTSIMULATION_H using namespace std; template class Queue{ private:

int front,rear; Type* queue; int MaxSize; public:

Queue(int MaxQueueSize=6); bool IsEmpty(); bool IsFull();

void Add(const Type& item); Type* Delete(Type&); int Size(); };

template

Queue::Queue(int MaxQueueSize):MaxSize(MaxQueueSize){ queue=new Type[MaxSize]; front=rear=0; }

template

inline bool Queue::IsFull(){

if(rear>front&&rear-front==5||rearelse return false; }

template

inline bool Queue::IsEmpty(){ if(front==rear) return true; else return false; }

template

void Queue::Add(const Type& x){ int k=(rear+1)%MaxSize; queue[rear=k]=x; }

template

Type* Queue::Delete(Type& x){ x=queue[++front%=MaxSize]; return &x; }

template int Queue::Size(){ if(rear>=front)

return rear-front; else

return 6-front+rear; };

#endif

struct plane { int id; int tm; };

enum action{ARRIVE,DEPART}; class AirportSimulation{ public:

AirportSimulation(); void RunSimulation(); private:

Queue landing;//等待降落的飞机队列 Queue takeoff;//等待起飞的飞机队列

double expectarrive;//一个单元时间内期望到达的降落飞机数 double expectdepart;//一个时间单元内期望到达的起飞飞机数 int

curtime,endtime,idletime,landwait,takeoffwait,nland,nplanes,nrefuse,ntakeoff;

void Randomize();//设置随机数种子

int PoissionRandom(double& expectvalue);//根据泊松分布和给定的期望值生成随机非负整数

plane* NewPlane(plane& p,action kind);//建立新飞机的数据项 void Refuse(plane& p,action kind);//拒绝服务 void Land1(plane& p);// 降落飞机 void Land2(plane& p);

void Fly1(plane& p);//起飞飞机 void Fly2(plane& p);

void Idle();//处理空闲时间 void Conclude();//处理模拟结果 };

#endif

AirportSimulation::AirportSimulation(){ bool ok;

cout<<\"请输入模拟时间单元数:\"; cin>>endtime;

idletime = landwait = nland = nplanes = nrefuse = ntakeoff = takeoffwait= 0;

Randomize(); do {

cout<<\"请输入一个单元时间内期望到达的降落飞机数:\"; cin>>expectarrive;

cout<<\"请输入一个单元时间内期望到达的起飞飞机数:\"; cin>>expectdepart;

if(expectarrive<0.0||expectdepart<0.0){

cout<<\"这些数不能为负!请重新输入。\"<else if (expectarrive+expectdepart>3.0){ cout<<\"机场将饱和!请重新输入。\"<else ok=true; }while(ok==false); }

void AirportSimulation::RunSimulation(){ int pri; plane p;

for(curtime=1;curtime<=endtime;curtime++){ cout<<\"时间单元\"<if(landing.IsFull()) Refuse(p,ARRIVE); else landing.Add(p); }

pri=PoissionRandom(expectdepart); for(int j=1;j<=pri;j++){ p=*NewPlane(p,DEPART);

if(takeoff.IsFull()) Refuse(p,DEPART); else takeoff.Add(p); }

if(landing.IsEmpty()&&takeoff.IsEmpty()) Idle(); else{

if(!landing.IsEmpty()){ p=*landing.Delete(p); Land1(p); }

if (!takeoff.IsEmpty()){ p=*takeoff.Delete(p); Fly1(p); }

if(!landing.IsEmpty()){ p=*landing.Delete(p); Land2(p); }

else if(!takeoff.IsEmpty()){ p=*takeoff.Delete(p); Fly2(p); } } }

Conclude(); }

void AirportSimulation::Randomize(){

srand((unsigned int)(time(NULL)%10000)); }

int AirportSimulation::PoissionRandom(double& expectvalue){ int n=0;

double limit; double x;

limit=exp(-expectvalue);

x=rand()%10000/(double)10000; while(x>limit){

n++;

x*=rand()%10000/(double)10000; }

return n; }

plane* AirportSimulation::NewPlane(plane& p,action kind){ nplanes++; p.id=nplanes; p.tm=curtime; switch(kind){ case ARRIVE:

cout<<\"飞机\"<case DEPART:

cout<<\"飞机\"<return &p; }

void AirportSimulation::Refuse(plane& p,action kind){ switch(kind){ case ARRIVE:

cout<<\"引导飞机\"<cout<<\"告诉飞机\"<nrefuse++; }

void AirportSimulation::Land1(plane& p){ int wait;

wait=curtime-p.tm;

cout<<\"飞机\"<nland++;

landwait+=wait; }

void AirportSimulation::Fly1(plane& p){ int wait=curtime-p.tm;

cout<<\"飞机\"<ntakeoff++;

takeoffwait+= wait;

}

void AirportSimulation::Land2(plane& p){ int wait;

wait=curtime-p.tm;

cout<<\"飞机\"<nland++;

landwait+=wait; }

void AirportSimulation::Fly2(plane& p){ int wait=curtime-p.tm;

cout<<\"飞机\"<ntakeoff++;

takeoffwait+= wait; }

void AirportSimulation::Idle(){ cout<<\"跑道空闲。\"<void AirportSimulation::Conclude(){

cout<<\"总模拟时间单元数:\"<cout<<\"拒绝服务的飞机的总数:\"<cout<<\"队列中剩余的准备降落的飞机数:\"<0) cout<<\"跑道空闲时间百分比:\"<<((double)idletime/endtime)*100.0<if(nland>0) cout<<\"降落平均等待时间:\"<<(double)landwait/nland<if(ntakeoff>0) cout<<\"起飞的平均等待时间:\"<<(double)takeoffwait/ntakeoff<int main(){

AirportSimulation s; s.RunSimulation(); }

6、参考文献1 严蔚敏,吴伟民 编著. 数据结构(C 语言版)--北京: 清华大学出版社,2007.2 严蔚敏,吴伟民 米 宁 编著. 数据结构题集(C 语言版)--北京: 清华大学出版社, 2007.3网上搜索相关程序作为参考

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo3.cn 版权所有 湘ICP备2023017654号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务