高层建筑电梯仿真程序设计说明书.docx
《高层建筑电梯仿真程序设计说明书.docx》由会员分享,可在线阅读,更多相关《高层建筑电梯仿真程序设计说明书.docx(42页珍藏版)》请在三一办公上搜索。
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 人(0N
2、1000)在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”表示它所在列所对应的电梯可到达它所在行对应的楼层,如下所示:E0E1E2E3E4E5E6E7E
5、8E9F11111111111F2111111F3111111F4111111F5111111F6111111F7111111F8111111F9111111F10111111F11111111F12111111F13111111F14111111F15111111F16111111F17111111F18111111F19111111F20111111F21111111F22111111F23111111F24111111F2511111111F26111111F27111111F28111111F29111111F30111111F31111111F32111111F33111111F34
6、111111F35111111F36111111F37111111F38111111F39111111F40111111(2) 根据问题域中所描述的内容,在系统中识别出了三种不同的事物,分别是乘客,电梯和楼层。开始仿真后,对于某一个乘客,如果他不在楼层中,那么就一定在电梯中。这样就可以将楼层和电梯都看作是包含容器和其他数据和标志的对象,在这些对象的容器中存放的就是乘客。(3) 将楼层看作是容器时,发现楼层对象内部的容器可以按作用分为两大类,一类是存放在该层随机停留的乘客的容器,另一类是存放在该层等待电梯的乘客的容器。其中,第二类容器又可以按照乘客是向上还是向下分为两类,一类是存放等待向上乘客的
7、容器,另一类是存放等待向下乘客的容器。总结起来,楼层内部的容器共可以分为三类:随机停留容器、等待向上容器和等待向下容器。根据楼层包含这三种容器中的哪几种的不同,可以将楼层分为三类:a. 底层楼层。乘客在底层楼层中只能够随机停留或者乘梯向上运动,所以底层楼层只包含两种容器:随机停留容器和等待向上容器。b. 中间楼层乘客在中间楼层可以随机停留,并且乘客既可以乘梯向上运动,又可以乘梯向下运动,所以中间楼层中包含三种容器:随机停留容器、等待向上容器和等待向下容器。c. 顶层楼层乘客在顶层楼层中只能够随机停留或者乘梯向下运动,所以顶层楼层只包含两种容器:随机停留容器和等待向下容器。又因为每个楼层的可到达
8、电梯是不同的,所以在楼层类型的内部定义一个vector,初始化的时候该vector为空,然后通过查看楼层电梯可达表再填充该vector的内容,里面存储了所有可到达该楼层的电梯的信息。(4) 将电梯看作是容器时,所有电梯都可以使用一个类型来表示了。在电梯类型中,定义一个vector,初始化的时候该vector为空,然后通过查看楼层电梯可达表再填充该vector的内容,里面存储了该电梯可到达的所有楼层的信息。(5) 对于乘客来说,乘客当前在某一楼层,打算去另一楼层。乘客知道当前所在楼层的所有电梯中有哪些可以到达自己想要去的楼层,并且会对这些所有可以可到达的电梯都发出与自己目标方向相同的乘梯请求。当
9、某一电梯到达乘客所在楼层时,若该电梯可到达乘客要去的楼层,并且现在的运动方向与乘客的目标方向相同,并且现在排在该乘客前方的乘客没有上该电梯,并且该电梯不满时,乘客才会上该电梯。如果乘客正在等待上电梯,而同时又有另一部满足条件的电梯到达,并且现在没有人上下,那么乘客就直接上另一部电梯,而不是等待原来那部电梯。这样就可以保证乘客总是可以乘坐最早到达该层的的电梯,而不是死等某一固定电梯到达。2. 系统中重要类的识别根据上述分析,在系统中识别出来的主要有三个类:电梯类Elevator,楼层类Floor和乘客类Passenger。其中Elevator类是对各类电梯的抽象,它封装了各类电梯的数据结构和方法
10、。Floor类是一个虚基类,在该类中定义了各类操作的公共接口;由Floor类派生出三个子类,分别为BottomFloor类,MiddleFloor类和TopFloor类,分别为对底层楼层、中间楼层和顶层楼层的抽象,分别封装了底层楼层、中间楼层和顶层楼层的数据机构和方法。Passenger类是对不同乘客的抽象,它封装了乘客的数据结构和方法。3. 系统中的类图4. 类间交互过程在系统中定义乘客、楼层和电梯三种对象。乘客按下该楼层乘梯按钮发出乘梯请求,楼层将该乘梯请求通知相应电梯,电梯响应请求,到达该楼层时通知该楼层电梯到达,该楼层通知等待的乘客电梯到达。乘客上电梯后电梯离开,通知楼层电梯离开,楼层
11、通知所有在该层等待的乘客电梯离开。乘客在电梯内设置目标楼层号,电梯载乘客到达目标楼层后通知乘客电梯到达,乘客下电梯。5. 乘客及电梯的状态迁移图(1) 乘客的状态迁移图乘客有11种不同的状态,分别是“仿真开始前”,“随机停留”,“等待电梯到达”,“等待上电梯”,“正在上电梯”,“等待电梯运行”,“随电梯向目标层运动”,“随电梯在非目标层停止”,“等待下电梯”,“正在下电梯”和“仿真结束”。这些状态只有在时钟每秒触发的时候才会发生相应转换,如果乘客的当前状态没有转为另一个状态,则表示乘客维持当前状态不变。对某一个乘客仿真开始前,乘客的状态是“仿真开始前”。当乘客进入大楼,对乘客的仿真开始,乘客的
12、状态置为“随机停留”。当乘客的当前状态为“随机停留”,并且乘客的仿真次数还没有到达设定的最大值,那么当乘客的停留时间到,如果此时没有符合乘客乘梯要求的电梯到达,乘客的状态转为“等待电梯到达”;如果此时有符合乘客乘梯要求的电梯到达,并且此时电梯中没有人上下,那么乘客的状态改为“正在上电梯”;如果此时电梯中有人正在下电梯或者乘客前方的人正在上电梯,那么乘客的状态改为“等待上电梯”。当乘客的当前状态为“等待上电梯”,而此时已没有人再下电梯,并且前面的乘客也都已经上了电梯,那么乘客的状态转为“正在上电梯”;而如果乘客的当前状态为“等待上电梯”,而电梯已满并且离开,那么乘客的状态转为“等待电梯到达”。当
13、乘客的当前状态为“正在上电梯”,如果已经完成上电梯活动,并且后面的乘客不再上电梯,那么乘客的状态转为“随电梯向目标层运动”;如果后面的乘客仍然在上电梯,那么乘客的状态转为“等待电梯运动”。当乘客的当前状态为“等待电梯运动”,而所有乘客都已经完成上电梯活动,电梯开始运动,乘客的状态改为“随电梯向目标层运动”。当乘客的当前状态为“随电梯向目标层运动”,电梯在某层停下,如果该层不是乘客的目标层,那么乘客的状态转为“随电梯停留”;如果该层是乘客的目标层,如果前面有人下电梯,那么乘客的状态转为“等待下电梯”;如果前面没有人下电梯,乘客的状态转为“正在下电梯”。如果乘客的当前状态为“等待下电梯”,前面乘客
14、已经下电梯完毕,那么乘客状态转为“正在下电梯”。如果乘客的当前状态为“正在下电梯”,并且已经下电梯结束,那么乘客的当前状态转为“随机停留”。如果乘客的当前状态为“随机停留”,并且乘客的仿真次数已经到达了设定的最大值,那么乘客的状态转为“结束仿真”。(2) 电梯状态迁移图仿真开始前,电梯的状态为“停止”。当仿真开始后,电梯的状态为“停止”,如果电梯按照运行规则查找到的目标楼层是当前楼层上方的楼层,那么电梯的状态转为“向上运动”;如果目标楼层是下方的楼层,那么电梯的当前状态转为“向下运动”;如果目标楼层就是“当前楼层”,那么电梯的状态转为“在某层停留”。如果电梯的当前状态为“向上运动”,电梯已经到
15、达目标层,那么电梯的状态转为“在某层停留”。如果电梯的当前状态为“向下运动”,电梯已经到达目标层,那么电梯的状态转为“在某层停留”。如果电梯的当前状态为“在某层停留”,上下乘客结束,电梯查找下一目标层,如果下一目标层为上方楼层,那么电梯的状态转为“向上运动”;如果下一目标层为下方楼层,那么电梯的状态转为“向下运动”;如果找不到目标楼层,那么说明电梯现在没有乘客使用,电梯的状态转为“停止”。三、标识符命名规则1. 类的命名规则类的命名形式为“类名的意义单词”,类名中单词的首字母大写。例如:Elevator,Floor,Passenger。2. 成员函数命名规则类中成员函数的命名规则为“x_代表成
16、员函数的功能的单词组合”,其中x为字母e时,表示为Elevator电梯类的成员函数;x为字母f时,表示为Floor楼层类的成员函数;x为字母p时,表示为Passenger乘客类的成员函数。单词组合中每个单词首字母大写。比如:e_FindDestinationFloor(),f_NoticeElevatorLeaveUp(),p_GetInBuilding()。3. 数据成员命名规则类中数据成员的命名规则为“x_表示其功能与含义的单词组合”,其中x为字母e时,表示为Elevator电梯类的数据成员;x为字母f时,表示为Floor楼层类的数据成员;x为字母p时,表示为Passenger乘客类的数据
17、成员。单词组合中每个单词首字母大写。如e_CurrentPassengerAmount,f_FloorNumber,p_RandomStayingTime。4. 局部变量命名规则局部变量用小写单词表示,成员函数参数使用“X_表示其功能与含义的单词组合”,其中X为字母E时,表示为Elevator电梯类的成员函数的参数;X为字母F时,表示为Floor楼层类的成员函数的参数;X为字母P时,表示为Passenger乘客类的成员函数的数据成员。单词组合中每个单词首字母大写。如E_FloorNumber,F_ElevatorNumber,P_ElevatorNumber。总之,系统中所有标识符都做到了见其
18、名能知其义。四、系统中重要类及方法的说明1. Elevator类的说明它是系统中各种电梯的抽象。有如下属性和方法:对该类的说明如下:class Elevatorprivate:static int e_TimeNeedPerFloor;/电梯每上或下一层所需要的时间static int e_MaxPassengerAmount;/电梯的最大容客量int e_ElevatorNumber;/电梯编号int e_CurrentPassengerAmount;/电梯内当前乘客数目ElevatorState e_CurrentState;/电梯当前状态Direction e_Direction;/电梯
19、运行方向Direction e_ArrivedDirection;/电梯下一步的运行方向int e_CurrentFloorNumber;/当前楼层编号int e_DestinationFloorNumber;/目标楼层编号int e_NextFloorNumber;/下一楼层编号int e_TimeNeedToNextFloor;/到下一楼层所需要的时间int e_TimeNeedToNextFloorStepCounter;/从当前楼层出发向下一楼层运动已经经过的时间(计数器)int e_StayFreeTimeCounter;/电梯在某层停留时没有人上下的时间计数器bool e_bBus
20、y;/是否有人上下的标志bool e_bFull;/电梯是否已满的标志int e_TotalRunTime;/总运行时间int e_TotalStopTime;/总停止时间int e_NearestDestinatedFloorNumber;/电梯内乘客所要到达的楼层中最近的楼层int e_NearestRequestedFloorNumber;/查找到的最近的发出乘梯请求的楼层int e_FarestRequestedFloorNumber;/查找到的最远的发出乘梯请求的楼层int e_ElevatorRelatedFloorSize;/电梯可到达楼层的数目vector e_RelatedF
21、loorVector;/电梯可达到楼层及其相应的标志public:Elevator(int E_ElevatorNumber);/构造函数Elevator();/析构函数static void e_SetTimeNeedPerFloor(int E_TimeNeedPerFloor);/设置电梯运行速度(多少秒一层)的函数接口static void e_SetMaxPassengerAmount(int E_MaxPassengerAmount);/设置电梯最大容客量的函数接口void e_Simulation();/电梯仿真函数接口void e_GetSummary();/仿真结束后显示电梯
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高层建筑 电梯 仿真 程序设计 说明书
链接地址:https://www.31ppt.com/p-1871825.html