Skip to content

Latest commit

 

History

History
65 lines (49 loc) · 3.18 KB

README.md

File metadata and controls

65 lines (49 loc) · 3.18 KB

Elevator-Simulator

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           //等待响应的楼层

实现思想

  1. 响应内部按键 当按下内部按键时,将该按键代表的楼层号添加到其所在电梯的queue中,并按升序排序。 如果电梯上行,电梯将逐次前往比当前高的楼层。每到达一层,就从queue中弹出一个数值。当queue中所生的楼层号的最大值都小于当前所在楼层时,电梯状态更改,开始下行。 如果电梯下行,电梯将逐次前往比当前矮的楼层。每到达一层,就从queue中弹出一个数值。当queue中所生的楼层号的最小值都大于当前所在楼层时,电梯状态更改,开始上行。
  2. 响应外部按钮 当某一楼层电梯外按钮被按下时,
    1. 所在楼层所有相同按钮都变亮。
    2. 则将按下按钮的楼层号及其请求方向添加到pendingQueue中。针对pendingQueue中每一项,运行方向与请求方向相同或者未运行的电梯前去响应,并将该楼层号添加到响应的电梯的queue中;如果所有电梯都在工作且都不同方向,则每隔1000ms重复检测是否有电梯满足响应条件。 分别对应lightsOn()和checkPendingQueue()函数。
  3. 到达楼层 到达楼层后,电梯内部与外部与当前楼层对应的灯都熄灭,然后打开电梯门并将当前楼层从该电梯的queue中移除。2s后关闭电梯门。(开门和关门动画的时长都为2s)

测试

设置3部电梯20层楼

  1. 所有电梯都在一楼,按下6楼向上的按钮,在第一部电梯到达4楼时,按下5楼向上的按钮。 结果:第一部电梯响应,另外两部电梯保持等待状态。结果合理,因为第一步电梯离5楼最近且顺路。
  2. 所有电梯都在一楼,按下6楼向上的按钮和5楼向下的按钮。 结果:分别由第一部和第二部电梯响应,因为不顺路。结果合理。
  3. 当3部电梯都在向上运行时,按下7楼向下的按钮。 结果:最先走完所有目的楼层的第二部电梯响应。结果合理。