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();/仿真结束后显示电梯
22、运营时间与空闲时间的函数接口void e_PrintCurrentState();/打印电梯当前状态的函数接口void e_FindDestinationFloor();/按照既定运营规则查找电梯下一目的楼层的函数接口void e_AddRelatedFloor(int E_FloorNumber, Floor* E_FloorPtr);/添加电梯可到达楼层的函数接口void e_MakeUpRequest(int E_FloorNumber);/响应楼层向上乘梯请求的函数接口void e_MakeDownRequest(int E_FloorNumber);/响应楼层向下乘梯请求的函数接口v
23、oid e_NoticeElevatorArriveUp(int E_FloorNumber);/告知E_FloorNumber楼层此电梯到达并且继续向上运动的函数接口void e_NoticeElevatorArriveDown(int E_FloorNumber);/告知E_FloorNumber楼层此电梯到达并且继续向下运动的函数接口void e_NoticeElevatorLeaveUp(int E_FloorNumber);/告知E_FloorNumber楼层此电梯离开并且继续向上运动的函数接口void e_NoticeElevatorLeaveDown(int E_FloorNum
24、ber);/告知E_FloorNumber楼层此电梯离开并且继续向下运动的函数接口void e_AddPassenger(int E_FloorNumber, Passenger* E_PassengerPtr);/向电梯中添加乘客的函数接口,乘客上电梯时调用该函数void e_RemovePassenger(int E_FloorNumber, Passenger* E_PassengerPtr);/从电梯中删除乘客的函数接口,乘客下电梯时调用该函数void e_SetDestinationFloor(int E_DestinationFloorNumber);/设立目的楼层的函数接口,乘客
25、设立目的楼层时调用该函数void e_SetElevatorBusy();/乘客上下电梯时调用该函数,表达电梯现在被占用,其他乘客不能访问void e_SetElevatorFree();/乘客上下电梯时调用该函数,表达电梯现在没有被占用,其他乘客可以访问int e_GetTotalRunTime();/获取电梯总运营时间的函数接口int e_GetTotalStopTime();/获取电梯总停止时间的函数接口ElevatorState e_GetCurrentState();/获取电梯当前状态的函数接口int e_GetCurrentFloorNumber();/获取电梯当前所在楼层的函数接
26、口bool e_IsFull();/判断电梯当前是否已满的函数接口bool e_IsBusy();/判断电梯当前是否被占用的函数接口void e_RemoveInvalidPassenger();/由电梯自己调用,删除已经下电梯的失效乘客;2. Floor类的说明2.1 Floor基类Floor类是一个虚基类,它定义了楼层所提供的操作的接口,如下所示:对该类的说明如下:class Floorpublic:virtual void f_Simulation() = 0;/楼层仿真函数接口virtual void f_PrintCurrentState() = 0;/打印楼层当前状态的函数接口vi
27、rtual int f_GetFloorNumber() = 0;/获取楼层号的函数接口virtual void f_MakeRequest(int F_ElevatorNumber, Direction F_RequestDir) = 0;/发出请求函数接口,供乘客发出乘梯请求时调用virtual void f_NoticeElevatorArrive(int F_ElevatorNumber, Direction F_ElevatorDir) = 0;/告知在本层等待的乘客电梯到达virtual void f_NoticeElevatorLeave(int F_ElevatorNumber
28、, Direction F_ElevatorDir) = 0;/告知在本层等待的乘客电梯离开virtual void f_AddPassengerToStayingContainer(Passenger* F_PassengerPtr) = 0;/添加乘客到停留容器里,供乘客进入停留容器时调用virtual void f_RemovePassengerFromStayingContainer(Passenger* F_PassengerPtr) = 0;/从停留容器中移除乘客,供乘客停留时间届时进入等待容器时调用virtual void f_AddPassengerToWaitingConta
29、iner(Passenger* F_PassengerPtr, Direction F_PassengerDir) = 0;/添加乘客到等待容器,供乘客停留时间届时进入等待容器时调用virtual void f_RemovePassengerFromWaitingContainer(Passenger* F_PassengerPtr, Direction F_PassengerDir) = 0;/从等待容器中移除乘客,供乘客进入电梯时调用virtual void f_AddRelatedElevator(int F_ElevatorNumber, Elevator* F_ElevatorPtr
30、) = 0;/添加可到达该层的电梯信息以相应的标志;由Floor类派生出BottomFloor、MiddleFloor和TopFloor这三个子类,接下来分别介绍。2.2 BottomFloor底层楼层类BottomFloor类是对底层楼层(1楼)的抽象,它有如下的数据结构和操作:对该类的说明如下:class BottomFloor : public Floorint f_FloorNumber;/楼层号int f_RelatedElevatorSize;/可到达该楼层的电梯的数目vector f_RelatedElevatorVector;/可到达该楼层的电梯列表int f_StayingC
31、ontainerSize;/该层中停留容器中乘客的数目list f_PassengerStayingContainer;/该层中停留容器(停留乘客列表)int f_WaitingUpContainerSize;/该层中档待向上容器中乘客的数目list f_PassengerWaitingUpContainer;/该层中档待向上容器(等待向上乘客列表)public:BottomFloor(int F_FloorNumber);/构造函数BottomFloor();/析构函数void f_Simulation();/楼层仿真函数接口void f_PrintCurrentState();/打印楼层当
32、前状态的函数接口int f_GetFloorNumber();/获取楼层号的函数接口void f_AddRelatedElevator(int F_ElevatorNumber, Elevator* F_ElevatorPtr);/添加可到达该层的电梯信息以及相应的标志void f_NoticeElevatorArrive(int F_ElevatorNumber, Direction F_ElevatorDir);/告知在本层等待的乘客电梯到达void f_NoticeElevatorLeave(int F_ElevatorNumber, Direction F_ElevatorDir);/
33、告知在本层等待的乘客电梯离开void f_MakeRequest(int F_ElevatorNumber, Direction F_RequestDir);/发出请求函数接口,供乘客发出乘梯请求时调用void f_AddPassengerToStayingContainer(Passenger* F_PassengerPtr);/添加乘客到停留容器里,供乘客进入停留容器时调用void f_RemovePassengerFromStayingContainer(Passenger* F_PassengerPtr);/从停留容器中移除乘客,供乘客停留时间届时进入等待容器时调用void f_Add
34、PassengerToWaitingContainer(Passenger* F_PassengerPtr, Direction F_PassengerDir);/添加乘客到等待容器,供乘客停留时间届时进入等待容器时调用void f_RemovePassengerFromWaitingContainer(Passenger* F_PassengerPtr, Direction F_PassengerDir);/从等待容器中移除乘客,供乘客进入电梯时调用void f_AddPassengerToWaitingUpContainer(Passenger* F_PassengerPtr);/添加乘客
35、到等待向上容器,供乘客停留时间届时进入等待向上容器时调用void f_RemovePassengerFromWaitingUpContainer(Passenger* F_PassengerPtr);/从等待向上容器中移除乘客,供乘客进入电梯时调用void f_MakeUpRequest(int F_ElevatorNumber);/发出向上请求函数接口,供乘客发出向上乘梯请求时调用void f_NoticeElevatorArriveUp(int F_ElevatorNumber);/告知在本层等待的乘客电梯到达并且接下来会向上运动void f_NoticeElevatorLeaveUp(i
36、nt F_ElevatorNumber);/告知在本层等待的乘客电梯离开并且接下来会向上运动void f_NoticePassengerElevatorArriveUp();/告知在本层等待的乘客本楼层有哪些电梯停留、有哪些电梯到达并且接下来会向上运动,这是留给楼层调用的函数接口,当电梯到达某层楼,并且接下来将会向上运动时楼层调用该函数告知乘客void f_RemoveInvalidPassengerFromStayingContainer();/由楼层自己调用,删除已经离开随机停留容器的失效乘客void f_RemoveInvalidPassengerFromWaitingContainer
37、();/由楼层自己调用,删除已经离开等待容器的失效乘客void f_RemoveInvalidPassengerFromWaitingUpContainer();/由楼层自己调用,删除已经离开等待向上容器的失效乘客;2.3 MiddleFloor中间楼层类MiddleFloor类是对中间楼层(2至39楼)的抽象,它有如下的数据结构和操作:对该类的说明如下:class MiddleFloor : public Floorint f_FloorNumber;/楼层号int f_RelatedElevatorSize;/可到达该楼层的电梯的数目vector f_RelatedElevatorVect
38、or;/可到达该楼层的电梯列表int f_StayingContainerSize;/该层中停留容器中乘客的数目list f_PassengerStayingContainer;/该层中停留容器(停留乘客列表)int f_WaitingUpContainerSize;/该层中档待向上容器中乘客的数目list f_PassengerWaitingUpContainer;/该层中档待向上容器(等待向上乘客列表)int f_WaitingDownContainerSize;/该层中档待向下容器中乘客的数目list f_PassengerWaitingDownContainer;/该层中档待向下容器(
39、等待向下乘客列表)public:MiddleFloor(int F_FloorNumber);/构造函数MiddleFloor();/析构函数void f_Simulation();/楼层仿真函数接口void f_PrintCurrentState();/打印楼层当前状态的函数接口int f_GetFloorNumber();/获取楼层号的函数接口void f_AddRelatedElevator(int F_ElevatorNumber, Elevator* F_ElevatorPtr);/添加可到达该层的电梯信息以及相应的标志void f_NoticeElevatorArrive(int
40、F_ElevatorNumber, Direction F_ElevatorDir);/告知在本层等待的乘客电梯到达void f_NoticeElevatorLeave(int F_ElevatorNumber, Direction F_ElevatorDir);/告知在本层等待的乘客电梯离开void f_MakeRequest(int F_ElevatorNumber, Direction F_RequestDir);/发出请求函数接口,供乘客发出乘梯请求时调用void f_AddPassengerToStayingContainer(Passenger* F_PassengerPtr);/
41、添加乘客到停留容器里,供乘客进入停留容器时调用void f_RemovePassengerFromStayingContainer(Passenger* F_PassengerPtr);/从停留容器中移除乘客,供乘客停留时间届时进入等待容器时调用void f_AddPassengerToWaitingContainer(Passenger* F_PassengerPtr, Direction F_PassengerDir);/添加乘客到等待容器,供乘客停留时间届时进入等待容器时调用void f_RemovePassengerFromWaitingContainer(Passenger* F_P
42、assengerPtr, Direction F_PassengerDir);/从等待容器中移除乘客,供乘客进入电梯时调用void f_AddPassengerToWaitingUpContainer(Passenger* F_PassengerPtr);/添加乘客到等待向上容器,供乘客停留时间届时进入等待向上容器时调用void f_RemovePassengerFromWaitingUpContainer(Passenger* F_PassengerPtr);/从等待向上容器中移除乘客,供乘客进入电梯时调用void f_AddPassengerToWaitingDownContainer(Passenger* F_PassengerPtr);/添加乘客到等待向下容器,供乘客停留时间届时进入等待向下容器时调用void f_RemovePassengerFromWaitingDownContainer(Passenger* F_PassengerPtr);/从等待向下容器中移除乘客,供乘客进入电梯时调用void f_MakeUpRequest(int F_ElevatorNumber);/发出向上请求函数接口,供乘客发出向上乘梯请求时调用void f