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