国庆期间 C++ 练手用的小玩意,没有组织文件结构,一般来说头文件定义,可执行文件实现,但是写得爽起来就懒得整理了哈哈~
源码放 github 仓库了,放一下类的结构,内存占用挺稳定的,释放和申请都挺舒服。
看了一下最后运行结果和实习单位大楼的电梯规律挺像的哈哈。

/********************************************************************************  写在前面  *********************************************************************************
           1、 电梯调度采用的是上下轮转,当前进方向上不需要下人或者上人时提前转向,否则到底才转向
           2、 默认意向一楼时目的是离开建筑物
           3、 乘客上下电梯流程与乘客本身的意愿无关,而是由建筑和电梯来进行控制的(这方面不太符合逻辑)
           4、 电梯是方向驱动而不是信号驱动,即没有对电梯呼叫按键和电梯内楼层按键的模拟,电梯是否移动取决于电梯当前方向移动是否有意义(这个也不符合现实场景)
 *****************************************************************************************************************************************************************************/

------------------------------------------------------------Class Person-------------------------------------------------------
    *** 变量 ***
    -- stopTime: 在出电梯后的滞留时间
    -- standardStopTime: 滞留时间标准值
    -- wannaFloor: 想去的当前建筑物层数
    -- currentFloor: 当前所在层数
    -- belongs: 所属建筑物
    -- noFloor: 刚出电梯时未刷新下一层意向时的标准取值

    *** 函数(方法) ***
    -- void stopAtThisFloor();  在当前层滞留
    -- void setWannaFloor(int);  设置想去的层
    -- void setCurrentFloor(int);  设置当前层数
    -- void refreshWannaFloor();  更新新的意向层数
    -- void sayMyMind();  输出部分自己的信息
    -- int getWannaFloor();  获取意向层数
    -- int getCurrentFloor();  获取当前层数
    -- int getWannaDir();  获取方向,向上还是向下
    -- int getNoFloor();  获得标准无意向层数
-------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------Class Building-------------------------------------------------------
    *** 变量 ***
    -- no: 建筑序号(目前没用)
    -- floorNum: 层数
    -- floorWannaPersonNum: 每层楼想去的人数
    -- personEachFloor: 每层的人员指针索引
    -- floorPersonNum: 每层人数
    -- elevatorList: 电梯索引
    -- elevatorNum: 电梯数量

    *** 函数(方法) ***
    -- void moveElevators();  让电梯移动一个步
    -- void addNewElevator();  添加新电梯
    -- void addPersonToFloor(int);  向一个层添加人员
    -- void update();  更新建筑物状态
    -- void updatePersonWannaFloor();  把每一个还没有想去楼层的人的楼层意向更新
    -- void showInfo();  显示文字信息
    -- void letPersonGoIntoElevator();  每层想进电梯的人进入电梯
    -- void showInfoByUI();  显示图形信息
    -- void addPerson(Person*, int);  向某一层添加具体人员
    -- void deletePerson(int, int);  删除某层的索引所在人员
    -- void addNewPersonFromFloorOne();  向第一层添加新人
    -- void updateWannaFloorStat();  更新每层想去人数表
    -- int getFloorNum();  获得层数
    -- int getNo();  获得建筑号
    -- Person** getPersonInFloor(int floor);  获得某层的人员链表索引
    -- int getPersonNumAtFloor(int floor);  获得每层人数表的索引
-------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------Class Elevator-------------------------------------------------------
    *** 变量 ***
    --stopTime  电梯上下人的消耗时间
    --no  电梯编号
    --maxCapacity  电梯最大容量
    --standardStopTime  标准上下人消耗时间
    --belongs  电梯归属的建筑物
    --personList  电梯内人员表
    --personNum  电梯内人数
    --direction  电梯的方向,向上或向下
    --floorAt  电梯所在层数

    *** 函数(方法) ***
    --void showInfo();  显示电梯内信息
    --void addPerson(Person*);  电梯内添加人员
    --void deletePerson(int);  电梯删除人员
    --void letPersonGoIntoBuilding();  让电梯内所有人员决定是否到达目标层需要出电梯
    --void move();  电梯移动一个步
    --int getStopTime();  获取电梯当前尚需停滞的时间
    --int getDirection();  获取电梯移动方向
    --int getFloorAt();  获取电梯当前所在层
    --int getPersonNum();  获取电梯内人员数量
    --int getMaxCapacity();  获取电梯的最大容量
    --Person** getPersonList();  获取电梯内人员索引
-------------------------------------------------------------------------------------------------------------------------------

电梯运行