《[精编]高层建筑电梯仿真程序设计说明书》由会员分享,可在线阅读,更多相关《[精编]高层建筑电梯仿真程序设计说明书(38页珍藏版)》请在金锄头文库上搜索。
1、高层建筑电梯仿真程序设计说明书设计书明书一、问题描述用面向对象方法和面向对象程序设计语言,实现满足下述要求的一个高层建筑电梯活动仿真程序。1.问题域概述某国际展览中心共40层,设有载客电梯10部(用E0E9标识)。2.限定条件(1)电梯的运行规则是:E0、E1:可到达每层。E2、E3:可到达1、2540层。E4、E5:可到达125层。E6、E7:可到达1、240层中的偶数层。E8、E9:可到达139层中的奇数层。(2)每部电梯的最大乘员量均为K人(K值可以根据仿真情况在1018人之间确定)。(3)仿真开始时,各电梯随机地处于其符合运行规则的任意一层,为空梯。(4)仿真开始后,有N人(0N100
2、0)在M分钟(0M10)内随机地到达该国际展览中心的1层,开始乘梯活动。(5)每位乘客初次所要到达的楼层是随机的,令其在合适的电梯处等待电梯到来。(6)每位乘客乘坐合适的电梯到达指定楼层后,随机地停留10120秒后,再随机地去往另一楼层,依此类推,当每人乘坐过L次(每人的L值不同,在产生乘客时随机地在110次之间确定)电梯后,第L+1次为下至底层并结束乘梯行为。到所有乘客结束乘梯行为时,本次仿真结束。(7)电梯运行速度为S秒/层(S值可以根据仿真情况在15之间确定),每人上下时间为T秒(T值可以根据仿真情况在210之间确定)。(8)电梯运行的方向由先发出请求者决定,不允许后发出请求者改变电梯的
3、当前运行方向,除非是未被请求的空梯。(9)当某层有乘客按下乘梯电钮时,优先考虑离该层最近的、满足条件(8)、能够最快到达目标层的电梯。(10)不允许电梯超员。3.开发结果的行为特征(1)产生事件的周期为1秒,每次可产生0个或多个事件。(2)各随机事件由互不相关的伪随机数发生器决定。(3)设计一个易于理解的界面,动态显示各梯的载客与运行情况,动态显示各楼层的人员停留情况与要求乘梯情况;动态显示从仿真开始到目前的时间。(4)显示时用应表示出不同的乘客及其当前所要求去往的楼层。例如,12-32表示标识为12的乘客要求去往32层。(5)统计各梯的运行与空闲时间;统计各人发出乘梯要求后的等待时间;仿真结
4、束后显示这些时间。(6)参数K、N、M、S、T应从命令行输入。(7)(选做)考虑有些乘客(随机决定)携带的物品体积较大,需占用12人的电梯空间(随机决定),且上下梯的时间比其他乘客长一倍的情况,再进行相应的仿真(注意,不是所有的乘客都携带较大体积的物品)。这时,显示乘客及所去往的楼层时要能够识别出是否携带了较大体积的物品。二、分析与设计模型1.分析过程(1)根据问题域中所描述的内容,可以生成一张“电梯楼层可达表”,其中“1”表示它所在列所对应的电梯可到达它所在行对应的楼层,如下所示:E0E1E2E3E4E5E6E7E8E9F11111111111F2111111F3111111F4111111
5、F5111111F6111111F7111111F8111111F9111111F10111111F11111111F12111111F13111111F14111111F15111111F16111111F17111111F18111111F19111111F20111111F21111111F22111111F23111111F24111111F2511111111F26111111F27111111F28111111F29111111F30111111F31111111F32111111F33111111F34111111F35111111F36111111F37111111F38111
6、111F39111111F40111111(2)根据问题域中所描述的内容,在系统中识别出了三种不同的事物,分别是乘客,电梯和楼层。开始仿真后,对于某一个乘客,如果他不在楼层中,那么就一定在电梯中。这样就可以将楼层和电梯都看作是包含容器和其他数据和标志的对象,在这些对象的容器中存放的就是乘客。(3)将楼层看作是容器时,发现楼层对象内部的容器可以按作用分为两大类,一类是存放在该层随机停留的乘客的容器,另一类是存放在该层等待电梯的乘客的容器。其中,第二类容器又可以按照乘客是向上还是向下分为两类,一类是存放等待向上乘客的容器,另一类是存放等待向下乘客的容器。总结起来,楼层内部的容器共可以分为三类:随机
7、停留容器、等待向上容器和等待向下容器。根据楼层包含这三种容器中的哪几种的不同,可以将楼层分为三类:a. 底层楼层。乘客在底层楼层中只能够随机停留或者乘梯向上运动,所以底层楼层只包含两种容器:随机停留容器和等待向上容器。b. 中间楼层乘客在中间楼层可以随机停留,并且乘客既可以乘梯向上运动,又可以乘梯向下运动,所以中间楼层中包含三种容器:随机停留容器、等待向上容器和等待向下容器。c. 顶层楼层乘客在顶层楼层中只能够随机停留或者乘梯向下运动,所以顶层楼层只包含两种容器:随机停留容器和等待向下容器。又因为每个楼层的可到达电梯是不同的,所以在楼层类型的内部定义一个vector,初始化的时候该vector
8、为空,然后通过查看楼层电梯可达表再填充该vector的内容,里面存储了所有可到达该楼层的电梯的信息。(4)将电梯看作是容器时,所有电梯都可以使用一个类型来表示了。在电梯类型中,定义一个vector,初始化的时候该vector为空,然后通过查看楼层电梯可达表再填充该vector的内容,里面存储了该电梯可到达的所有楼层的信息。(5)对于乘客来说,乘客当前在某一楼层,打算去另一楼层。乘客知道当前所在楼层的所有电梯中有哪些可以到达自己想要去的楼层,并且会对这些所有可以可到达的电梯都发出与自己目标方向相同的乘梯请求。当某一电梯到达乘客所在楼层时,若该电梯可到达乘客要去的楼层,并且现在的运动方向与乘客的目
9、标方向相同,并且现在排在该乘客前方的乘客没有上该电梯,并且该电梯不满时,乘客才会上该电梯。如果乘客正在等待上电梯,而同时又有另一部满足条件的电梯到达,并且现在没有人上下,那么乘客就直接上另一部电梯,而不是等待原来那部电梯。这样就可以保证乘客总是可以乘坐最早到达该层的的电梯,而不是死等某一固定电梯到达。2.系统中重要类的识别根据上述分析,在系统中识别出来的主要有三个类:电梯类Elevator,楼层类Floor和乘客类Passenger。其中Elevator类是对各类电梯的抽象,它封装了各类电梯的数据结构和方法。Floor类是一个虚基类,在该类中定义了各类操作的公共接口;由Floor类派生出三个子
10、类,分别为BottomFloor类,MiddleFloor类和TopFloor类,分别为对底层楼层、中间楼层和顶层楼层的抽象,分别封装了底层楼层、中间楼层和顶层楼层的数据机构和方法。Passenger类是对不同乘客的抽象,它封装了乘客的数据结构和方法。3.系统中的类图4.类间交互过程在系统中定义乘客、楼层和电梯三种对象。乘客按下该楼层乘梯按钮发出乘梯请求,楼层将该乘梯请求通知相应电梯,电梯响应请求,到达该楼层时通知该楼层电梯到达,该楼层通知等待的乘客电梯到达。乘客上电梯后电梯离开,通知楼层电梯离开,楼层通知所有在该层等待的乘客电梯离开。乘客在电梯内设置目标楼层号,电梯载乘客到达目标楼层后通知乘
11、客电梯到达,乘客下电梯。5.乘客及电梯的状态迁移图(1)乘客的状态迁移图乘客有11种不同的状态,分别是“仿真开始前”,“随机停留”,“等待电梯到达”,“等待上电梯”,“正在上电梯”,“等待电梯运行”,“随电梯向目标层运动”,“随电梯在非目标层停止”,“等待下电梯”,“正在下电梯”和“仿真结束”。这些状态只有在时钟每秒触发的时候才会发生相应转换,如果乘客的当前状态没有转为另一个状态,则表示乘客维持当前状态不变。对某一个乘客仿真开始前,乘客的状态是“仿真开始前”。当乘客进入大楼,对乘客的仿真开始,乘客的状态置为“随机停留”。当乘客的当前状态为“随机停留”,并且乘客的仿真次数还没有到达设定的最大值,
12、那么当乘客的停留时间到,如果此时没有符合乘客乘梯要求的电梯到达,乘客的状态转为“等待电梯到达”;如果此时有符合乘客乘梯要求的电梯到达,并且此时电梯中没有人上下,那么乘客的状态改为“正在上电梯”;如果此时电梯中有人正在下电梯或者乘客前方的人正在上电梯,那么乘客的状态改为“等待上电梯”。当乘客的当前状态为“等待上电梯”,而此时已没有人再下电梯,并且前面的乘客也都已经上了电梯,那么乘客的状态转为“正在上电梯”;而如果乘客的当前状态为“等待上电梯”,而电梯已满并且离开,那么乘客的状态转为“等待电梯到达”。当乘客的当前状态为“正在上电梯”,如果已经完成上电梯活动,并且后面的乘客不再上电梯,那么乘客的状态
13、转为“随电梯向目标层运动”;如果后面的乘客仍然在上电梯,那么乘客的状态转为“等待电梯运动”。当乘客的当前状态为“等待电梯运动”,而所有乘客都已经完成上电梯活动,电梯开始运动,乘客的状态改为“随电梯向目标层运动”。当乘客的当前状态为“随电梯向目标层运动”,电梯在某层停下,如果该层不是乘客的目标层,那么乘客的状态转为“随电梯停留”;如果该层是乘客的目标层,如果前面有人下电梯,那么乘客的状态转为“等待下电梯”;如果前面没有人下电梯,乘客的状态转为“正在下电梯”。如果乘客的当前状态为“等待下电梯”,前面乘客已经下电梯完毕,那么乘客状态转为“正在下电梯”。如果乘客的当前状态为“正在下电梯”,并且已经下电梯结束,那么乘客的当前状态转为“随机停留”。如果乘客的当前状态为“随机停留”,并且乘客的仿真次数已经到达了设定的最大值,那么乘客的状