资源简介

设计一个电梯模拟系统。这是一个离散的模拟程序,由随机事件驱动,以模拟时钟决定乘客或电梯的动作发生的时刻和顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一时刻。
要求:
(1)模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
电梯一共有八个状态,即正在开门(Opening)、已开门(Opened)、正在关门(Closing)、已关门(Closed)、等待(Waiting)、移动(Moving)、加速(Accelerate)、减速(Decelerate)。
(2)乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。最后一个人放弃能不能取消按键?
(3)模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:
有人进出时,电梯每隔40t测试一次,若无人进出,则关门;
关门和开门各需要20t;
每个人进出电梯均需要25t;
电梯加速需要15t; 下行时要不要加速?
上升时,每一层需要51t,减速需要14t;每一层和减速?
下降时,每一层需要61t,减速需要23t;
如果电梯在某层静止时间超过300t,则驶回1层候命。驶回本垒层间接到消息?
(4)电梯调度规则如下:
①就近原则:电梯的主要调度策略是首先响应沿当前行进方向上最近端的请求直到满足最远端请求。若该方向上无请求时,就改变移动方向;
②在就近原则无法满足的情况下,首先满足更高层的请求;
③电梯的最大承载人数为13人,电梯人数达到13人后,在有人出电梯之前,不接受进入电梯的请求;
④乘客上下电梯时先出后进。进电梯时乘客是按发出乘坐请求的顺序依次进入,每次只能进入一人且每个人花费的时间都为25t;
⑤电梯在关门期间(电梯离开之前)所在层提出请求的乘客同样允许进入。
(5)按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。
扩展要求:
实现电梯模拟的可视化界面。用动画显示电梯的升降,人进出电梯。设计有下列对象:电梯、人、电梯控制板及其上各种按钮、模拟时钟等。

资源截图

代码片段和文件信息

#include“pch.h“
#include“Elevator.h“
#include
#include
#include
#include
#include
#include
using namespace std;

Elevator::~Elevator()
{
Passage* current *temp;
for (int i = 1; i <= Floor; i++)
{
current = UpQ[i];
while (current != NULL){
temp = current;
current = current->next;
delete temp;
}
}
delete[]UpQ;
for (int i = 1; i <= Floor; i++)
{
current = DownQ[i];
while (current != NULL) {
temp = current;
current = current->next;
delete temp;
}
}
delete[]DownQ;
for (int i = 1; i <= Floor; i++)
{
current = Elev_Q[i];
while (current != NULL) {
temp = current;
current = current->next;
delete temp;
}
}
delete[]Elev_Q;

}

void Elevator::Init()
{
// cout << “现在进行电梯系统的初始化------>“ << endl;
//楼层初始化
// cout << “请输入楼层高度:“;
// cin >> Floor;
// 加检测
// UpQ = new Passage*[Floor + 1];
// DownQ= new Passage*[Floor + 1];//外面等待队列采用链表形式
// for (int i = 0; i <= Floor; i++)
// UpQ[i] = NULL;
// for (int i = 0; i <= Floor; i++)
// DownQ[i] = NULL;
//电梯初始化
// cout << “请输入电梯最大载荷人数:“;
// cin >> MaxLoad;
// 加检测
// Number = 0;
// Elev_Q = new Passage*[Floor +1]; //内部等待队列采用数组形式
// for (int i = 0; i <= Floor; i++)
// Elev_Q[i] = NULL;
// now_floor = 1;
// states = Waiting;
// ways = 0;
//时间初始化
//
// cout << “注意:以下设置的时间单位t为0.1s.“ << endl;
// cout << “1)请输入电梯开门时间:“;
// cin >> T_Open;
// 加检测
// cout << “2)请输入电梯关门时间:“;
// cin >> T_Close;
// 加检测
// cout << “3)请输入人员进出时间:“;
// cin >> T_People;
// 加检测
// cout << “4)请输入电梯上行时间:“;
// cin >> T_Up;
// 加检测
// cout << “5)请输入电梯下行时间:“;
// cin >> T_Down;
// 加检测
// cout << “6)请输入电梯加速时间:“;
// cin >> T_Acc;
// 加检测
// cout << “7)请输入电梯上升减速时间:“;
// cin >> T_UpDec;
// 加检测
// cout << “8)请输入电梯下降减速时间:“;
// cin >> T_DownDec;
// 加检测
// cout << “9)请输入电梯关门等待时间:“;
// cin >> T_Test;
// 加检测
// cout << “10)请输入电梯空闲等待时间:“;
// cin >> T_Wait;
// 加检测

Floor=9;
UpQ = new Passage*[Floor + 1];
DownQ = new Passage*[Floor + 1];//外面等待队列采用链表形式
for (int i = 0; i <= Floor; i++)
UpQ[i] = NULL;
for (int i = 0; i <= Floor; i++)
DownQ[i] = NULL;
 MaxLoad = 13;
//加检测
Number = 0;
Elev_Q = new Passage*[Floor + 1]; //内部等待队列采用数组形式
for (int i = 0; i <= Floor; i++)
Elev_Q[i] = NULL;
now_floor = 1;
states = Waiting;
ways = 0;
//时间初始化
T_Open=20;
T_Close=20;
T_People=25;
 T_Up=51;
T_Down=61;
 T_Acc=15;
T_UpDec=14;
T_DownDec=23;
T_Test=40;
T_Wait=300;
}

//获取一队乘客的到来信息,保存在P中,返回到来时间
void Elevator::GetPassage(Passage*& P)
{
//time(0);
int T = rand() %20000;
if (T < 19900)
return;
else //加一个人到列表中
{
Passage*temp = new Passage;
temp->Sorc_floor = rand() % Floor + 1;
temp->Dest_floor = rand() % Floor + 1;
while (temp->Dest_floor == temp->Sorc_floor)
temp->Dest_floor = rand() % Floor + 1; //重摇
temp->T_Stand = rand() % 2000 + 300; //估算人的等待时间在10-120秒
temp->Pname = rand() % 10000;
tem

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-12-06 11:25  模拟电梯\
     目录           0  2019-12-02 23:09  模拟电梯\.vs\
     目录           0  2019-12-02 23:09  模拟电梯\.vs\模拟电梯\
     目录           0  2019-12-19 23:54  模拟电梯\.vs\模拟电梯\v15\
     文件       55808  2019-12-19 23:54  模拟电梯\.vs\模拟电梯\v15\.suo
     文件     5427200  2019-12-19 23:54  模拟电梯\.vs\模拟电梯\v15\Browse.VC.db
     目录           0  2019-12-19 14:01  模拟电梯\.vs\模拟电梯\v15\ipch\
     文件      327680  2019-12-19 23:07  模拟电梯\.vs\模拟电梯\v15\ipch\1e79c1d3d1207885.ipch
     目录           0  2019-12-05 22:05  模拟电梯\.vs\模拟电梯\v15\ipch\AutoPCH\
     目录           0  2019-12-05 21:15  模拟电梯\.vs\模拟电梯\v15\ipch\AutoPCH\cec9e5a631563721\
     文件    75956224  2019-12-05 21:15  模拟电梯\.vs\模拟电梯\v15\ipch\AutoPCH\cec9e5a631563721\图的遍历-邻接表.ipch
     文件      327680  2019-12-10 08:35  模拟电梯\.vs\模拟电梯\v15\ipch\f4f7feccebcd5da5.ipch
     目录           0  2019-12-19 14:02  模拟电梯\Debug\
     文件      139264  2019-12-19 14:08  模拟电梯\Debug\模拟电梯.exe
     文件      802124  2019-12-19 14:08  模拟电梯\Debug\模拟电梯.ilk
     文件     1019904  2019-12-19 14:08  模拟电梯\Debug\模拟电梯.pdb
     目录           0  2019-12-19 23:08  模拟电梯\模拟电梯\
     目录           0  2019-12-19 14:08  模拟电梯\模拟电梯\Debug\
     文件      302963  2019-12-19 15:35  模拟电梯\模拟电梯\Debug\Elevator.obj
     文件      308268  2019-12-06 10:42  模拟电梯\模拟电梯\Debug\elevator.obj.enc
     文件        4040  2019-12-19 14:02  模拟电梯\模拟电梯\Debug\pch.obj
     文件      281600  2019-12-19 15:35  模拟电梯\模拟电梯\Debug\vc141.idb
     文件      585728  2019-12-19 15:35  模拟电梯\模拟电梯\Debug\vc141.pdb
     文件      194046  2019-12-19 14:02  模拟电梯\模拟电梯\Debug\原语函数.obj
     文件        1516  2019-12-05 20:51  模拟电梯\模拟电梯\Debug\模拟电梯.Build.CppClean.log
     文件        7660  2019-12-19 15:35  模拟电梯\模拟电梯\Debug\模拟电梯.log
     文件       39137  2019-12-19 15:35  模拟电梯\模拟电梯\Debug\模拟电梯.obj
     文件     2031616  2019-12-19 14:02  模拟电梯\模拟电梯\Debug\模拟电梯.pch
     目录           0  2019-12-19 15:35  模拟电梯\模拟电梯\Debug\模拟电梯.tlog\
     文件        5308  2019-12-19 15:35  模拟电梯\模拟电梯\Debug\模拟电梯.tlog\CL.command.1.tlog
     文件       27418  2019-12-19 15:35  模拟电梯\模拟电梯\Debug\模拟电梯.tlog\CL.read.1.tlog
............此处省略17个文件信息

评论

共有 条评论