求一个电梯的调度管理程序,c++的

求一个电梯的调度管理程序,c++的,第1张

/*建立一座两层楼,一部电梯的模拟程序。为简化起见,每部电梯限乘一人,电梯每天在一楼关门等待

模拟程序包括一个时钟,每天从零开始。模拟程序得调度器组件随机设置每一层第一个人到来的时间,当时钟的时间等于第一个人到来的时间时,模拟程序生成一个新到的人将该人放到这一层。然后这个人按下按钮,请求电梯开门。这个人的目的地楼层不能与他上电梯的楼层相同。

如果第一个人到达第一层,则可以在按下按钮、等待电梯开门之后立即进入电梯。如果第一个人在第2层,则电梯要升到第2层去接他。电梯从1层移到2层需要5秒。

电梯到达一层时,打开电梯门上的灯,并在电梯内发出铃声,该层的按钮和电梯中表示该层的按钮复位,电梯门打开,乘客走出电梯(如果有到该层的乘客)。另一乘客(如果该层有人等待)进入电梯按下目的层按钮,电梯们关上。电梯移动前确定移动方向(两层很容易判断),为简单起见,电梯到达一层直到关门所花时间为0。

任何时间每层最多只能有一人等待,如果新到的人(不在电梯中)要到达该层时该层被占用,则一秒后才能安排新到达者。假设每隔5到20秒人们随机到达每层*/

#include <iostream >

#include <ctime >

#include <iomanip >

#include <string >

#include <stdlib.h>

#include <windows.h >

using namespace std

class person

{

public:

string sex//定义人员类

person()

void newset()

}

person::person()

{sex="man" }

void person::newset()

{

int i

srand((unsigned)time(NULL))

for(i=0i++)

{

if(rand()==1)

{sex="man" break }

if(rand()==2)

{sex="woman" break }

}

}

class elevator

{

public:

int now //定义电梯类

elevator()

}

elevator::elevator()

{now=1 }

class Time

{

public:

static void outtime()//定义时间类,用于输出电梯每次运行时的时间

{

SYSTEMTIME t

GetLocalTime(&t)

cout<<" //"<<t.wYear<<"."<<t.wMonth<<"."<<t.wDay<<". "<<t.wHour<<":"<<t.wMinute<<":"<<t.wSecond<<endl

}

}

void last(long n)//用于等待时输出.的函数

{

long i

i=n/500

for(i=0i<n/500i++)

{

cout<<'.' Sleep(500)

}

cout<<endl

}

void waiting()

{long m //模拟随机等待的时间函数

srand((unsigned)time(NULL))

cout<<"elevator waiting"

for(int i=0i<1000i++)

m=rand()%(20000-5000+1)+5000

last(m)

}

void output(long t,person &p,elevator &e) //电梯模拟函数

{

static n=1 //定义乘客的个数

if( t==1)//有人在一楼按铃

{

p.newset()

if(e.now!=1) //但是此时电梯停留在二楼

{

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") arrived floor 1."//输出有人到达一楼

Time::outtime() //输出此时的准确时间

cout<<"elevator running"

last(5000)

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") enters elevator." //输出乘客进入电梯

Time::outtime() //输出此时的准确时间

cout<<"elevator running"

last(5000)

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") arrives floor 2." //输入乘客到达二楼

Time::outtime() //输出此时的准确时间

e.now=2

n++

system("color 0C") waiting() system("color 0F")

}

else//此时电梯就是一楼

{

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") arrives floor 1." //输出有人到达一楼

Time::outtime() //输出此时的准确时间

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") enters elevator."<<endl

cout<<"elevator running"

last(5000)

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") arrives floor 2."

Time::outtime()

e.now=2

n++

system("color 0C") waiting() system("color 0F")

}

}

if(t==2)//有人在二楼按铃

{

if(e.now!=2)//但是电梯此时不在二楼

{

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") arrived floor 2."

Time::outtime()

cout<<"elevator running"

last(5000)

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") enters elevator."

Time::outtime()

cout<<"elevator running"

last(5000)

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") arrives floor 1."

Time::outtime()

e.now=1

n++

system("color 0C") waiting() system("color 0F")

}

else//此时电梯就是二楼

{

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") arrives floor 2."

Time::outtime()

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") enters elevator."

Time::outtime()

cout<<"elevator running"

last(5000)

cout<<"person "<<n<<"(a "<<setw(5)<<p.sex<<") arrives floor 1."

Time::outtime()

e.now=1

n++

system("color 0C") waiting() system("color 0F")

}

}

}

int main()

{

cout.fill('*')

cout<<setw(80)<<'*'

cout.fill(' ')

system("color 0C")

cout<<setw(50)<<"***欢迎使用电梯模拟程序***"<<endl //输出头菜单

cout.fill('*')

cout<<setw(80)<<'*'

cout.fill(' ')

int i

person p

elevator e

srand((unsigned)time(NULL)) //定义随机数种

waiting()

system("color 0F")

for(i=0i++)

output(rand(),p,e)//调用电梯模拟函数

return 0

}

这个问题主要还是一个物理题,相信都坐电梯,但没有仔细研究,它的运行过程就是一个需求:

1、按下X楼层,并记录按下的时间顺序;1.1、当前电梯不在此楼层;1.2、电梯在此楼层;

2、若电梯不在此楼层,先运行至此楼层开门,否则直接开门,消除请求信息;

3、电梯先加速,再匀速,再减速至X楼层;

4、如果去X楼层的途中,遇到有同向的楼层按下,则先停靠在该楼层,然后再进行步骤3;

5、运行至X楼层后,消除当前请求X楼层信息,如果有其他楼层已经按下,则转到最先按下的楼层的方向(中途有其他的请求,顺便带上),如果没有请求,则停止在X楼,等待!

6、两部电梯的话,主要考虑哪个有空闲,只要空闲就优先执行重复以上1~5步骤。

数据结构的话主要有:电梯当前所在楼层,目标楼层X,中途请求系列,是否已完成;

问题是属于比较复杂的那种,还是要自己多思考思考怎么写文档才是,越详细越好,想清楚了,实现应该是比较简单的!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7739281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存