国庆期间 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(); 获取电梯内人员索引
-------------------------------------------------------------------------------------------------------------------------------

京公网安备 11010502036488号