A program that simulates the working mechanism of elevators. 电梯调度设计报告
编程语言
JavaScript
类设计
Elevator类
id //电梯的编号
currentFloor //电梯当前所在楼层
goingUp //true为向上运行,false为向下运行
queue //用于记录该电梯的目的楼层
initialize() //初始化HTML中的电梯界面
dial(floor) //响应电梯内部按键
openLiftDoor() //打开电梯门
closeLiftDoor() //关闭电梯门
moveUp() //电梯上升一层楼
moveDown() //电梯下降一层楼
updateFloorInfo() //更新当前所在楼层信息
updateIndicator() //更新显示器上的运行状态
arrive(floor) //到达某一楼层
checkStatus() //检查电梯当前运行状态
run() //电梯运行主函数
time() //设置周期调用run()的时间间隔
重要变量
全局变量
eleNum //电梯的台数
floorNum //楼层数
eles[] //电梯数组
pendingQueue //等待响应的楼层
实现思想
- 响应内部按键 当按下内部按键时,将该按键代表的楼层号添加到其所在电梯的queue中,并按升序排序。 如果电梯上行,电梯将逐次前往比当前高的楼层。每到达一层,就从queue中弹出一个数值。当queue中所生的楼层号的最大值都小于当前所在楼层时,电梯状态更改,开始下行。 如果电梯下行,电梯将逐次前往比当前矮的楼层。每到达一层,就从queue中弹出一个数值。当queue中所生的楼层号的最小值都大于当前所在楼层时,电梯状态更改,开始上行。
- 响应外部按钮
当某一楼层电梯外按钮被按下时,
- 所在楼层所有相同按钮都变亮。
- 则将按下按钮的楼层号及其请求方向添加到pendingQueue中。针对pendingQueue中每一项,运行方向与请求方向相同或者未运行的电梯前去响应,并将该楼层号添加到响应的电梯的queue中;如果所有电梯都在工作且都不同方向,则每隔1000ms重复检测是否有电梯满足响应条件。 分别对应lightsOn()和checkPendingQueue()函数。
- 到达楼层 到达楼层后,电梯内部与外部与当前楼层对应的灯都熄灭,然后打开电梯门并将当前楼层从该电梯的queue中移除。2s后关闭电梯门。(开门和关门动画的时长都为2s)
测试
设置3部电梯20层楼
- 所有电梯都在一楼,按下6楼向上的按钮,在第一部电梯到达4楼时,按下5楼向上的按钮。 结果:第一部电梯响应,另外两部电梯保持等待状态。结果合理,因为第一步电梯离5楼最近且顺路。
- 所有电梯都在一楼,按下6楼向上的按钮和5楼向下的按钮。 结果:分别由第一部和第二部电梯响应,因为不顺路。结果合理。
- 当3部电梯都在向上运行时,按下7楼向下的按钮。 结果:最先走完所有目的楼层的第二部电梯响应。结果合理。