> # ♻️ 资源
> **大小:** 520KB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010880**](https://www.yuque.com/sxbn/ks/100010880)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87472197**](https://download.csdn.net/download/s1t16/87472197)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 进程管理-电梯调度
## 一、任务要求
## 1. 基本任务:
某一层楼 20 层,有五部互联的电梯。基于线程思想,编写一个电梯调度程序。
## 2. 功能描述:
- 电梯应有一些按键,如:数字键、关门键、开门键、上行键、下行键、报警键等。
- 有数码显示器指示当前电梯状态。
- 每层楼、每部电梯门口,有上行、下行按钮、数码显示。
## 3. 其他要求
- 所有电梯初始状态都在第一层。
- 每个电梯没有相应请求下,则应该在原地保持不动。
## 二、调度算法
### 1. 算法介绍
(1)思路分析:
- 每一部电梯均有以下的属性:当前**运行状态**(空闲、上行、下行,int),**报警情况**(是否损坏,bool),**是否需要切换运行状态**(bool)。
- 使用 Qt 内置的 QTimer 类作为定时器,使用线程的思想,定时监听每一部电梯的运行状态,并根据当前运行情况(电梯上行、下行,按楼层按钮,按报警按钮等)使用调度算法实现电梯调度。
(2)调度算法设计:
- **正常 <--> 报警**所有电梯初始状态下均为可运行状态。进行调度时首先判断电梯损坏情况,若已经损坏(按下报警键)则不调度此电梯,若恢复正常运行(再次按下报警键)则考虑调度此电梯。
```
if(_isDamage[0]) //若0号电梯损坏,直接返回
return;
```
- **运行(上行、下行)--> 运行(上行、下行)**a. 当电梯为上行状态时,若需要到达更高的楼层,则当前运行状态保持不变(上行);若已经到达顶层(20 楼),则切换运行方向为下行。b. 当电梯为下行状态时,若需要到达更低的楼层,则当前运行状态保持不变(下行);若已经到达底层(1 楼),则切换运行方向为上行。
```
//以上行->上、下行为例
floor=min(floor+1,FLOORS);
if(floor==FLOORS) //FLOORS = 20
{
_elevator[0]->setStatus(DOWN); //由上升变成下降
}
```
- **运行(上行、下行)--> 停止(空闲)**电梯从运行状态上行转换为停止状态(空闲)需要**同时**满足以下三点:a. 没有按下当前楼层以上直至顶楼的电梯**内部**按钮b. 没有按下当前楼层以上直至顶楼的电梯**外部上行**按钮c. 需要切换运行状态,没有按下当前楼层以上直至顶楼的电梯**外部下行**按钮同理,电梯从下行状态转换为停止状态(空闲)需要**同时**满足以下三点:a. 没有按下当前楼层以下直至一楼的电梯**内部**按钮b. 没有按下当前楼层以下直至一楼的电梯**外部下行**按钮c. 需要切换运行状态,没有按下当前楼层以下直至一楼的电梯**外部上行**按钮
- **停止(空闲)--> 运行(上行、下行)**不妨做如下定义:
1. 定义系统使电梯从停止(空闲)到运行状态(上行、下行)的过程为“唤醒”。
2. 若唤醒正在运行的电梯(上行或下行),不改变当前电梯的运行状态。
- 则唤醒空闲电梯需要考虑以下几个方面:
- **电梯内部按钮唤醒(空闲--> 上行)**当按下电梯内部等于或高于电梯停靠楼层的按钮时,电梯切换为上行。
- **电梯内部按钮唤醒(空闲--> 下行)**当按下电梯外部低于电梯停靠楼层的按钮时,电梯切换为下行。**(PS..此处优先考虑电梯内部按钮唤醒电梯的情况)**
- **电梯外部按钮唤醒(空闲--> 上行)**需要唤醒以下几种电梯中距离按下按钮楼层最近的一个电梯:
1. **上行状态**且低于按钮楼层的电梯
2. 空闲且低于按钮楼层的电梯,运行状态:**空闲-> 上行**
3. 空闲且高于按钮楼层的电梯,运行状态:**空闲-> 上行,需要切换运行状态**
- **电梯内部按钮唤醒(空闲--> 下行)**同理,需要唤醒以下几种电梯中距离按下按钮楼层最近的一个电梯:
1. **下行状态**且高于按钮楼层的电梯
2. 空闲且高于按钮楼层的电梯,运行状态:**空闲-> 下行**
3. 空闲且低于按钮楼层的电梯,运行状态:**空闲-> 下行,需要切换运行状态**
### 2. 数据结构及相关参数
(1)相关参数
```
# define UP 1 //上行状态
# define DOWN 2 //下行状态
# define FREE 3 //空闲(停止状态)
# define ELEVATOR_NUM 5 //电梯总数
# define MAX_FLOORS 21 //最大楼层数,选择21是为了使数组下标与楼层对齐
bool _extend; //是否需要切换运行状态 false--不切换 true--切换
```
(2)相关数据结构
```
//将电梯封装为一个类
//1. 使用数组存储5个电梯
Container* _elevator[ELEVATOR_NUM]; //5部电梯
//2. 对每一个电梯,用bool数组存储电梯内部的20个按钮
//true表示电梯内对应楼层按钮被按下,false表示没有按下按钮
bool _Floors[MAX_FLOORS]; //需要到达的楼层
//3.使用bool数组存储电梯外部的上下行按钮
//true表示对应楼层的上(下)行按钮被按下,false表示没有按下按钮
bool _upWaitFloors[MAX_FLOORS]; //上升等待队列
bool _downWaitFloors[MAX_FLOORS]; //下降等待队列
//4.使用bool数组存储电梯是否损坏
//true表示损坏(按下报警键)、false表示修复(再次按下报警键)
bool _isDamage[ELEVATOR_NUM]{false}; //表示5部电梯的损坏情况
```
## 三、使用说明
### 1.按键及页面介绍
- 五部电梯均使用竖线隔开,每一部电梯内部均有 20 个按钮,表示 20 层楼。
- 电梯内部按钮上方是警报按钮,第一次按下警报键电梯将暂停运行(此时不能按该电梯的任何按钮),再一次按下报警键电梯将恢复运行。
- 电梯内部下方是开关门键,只有当电梯停靠或空闲时按下开门键才能开门;只有电梯的门为开时才能关门。
- 页面右侧为电梯外每一层楼的按键,分为上行按键和下行按键(其中一楼只有上行键、二十楼只有下行键)。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1716600162451-a53fb62c-8b93-4964-86ab-58a32aa9e58b.png#averageHue=%23e7e6e6&from=url&id=E8EO2&originHeight=934&originWidth=1717&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
### 2. 使用说明
- 初始情况下所有的电梯均停靠在 1 楼,当有用户在电梯外按下上行、下行键之后,会有电梯进行响应并运行指定楼层;电梯到达后将会开门,用户进入电梯,按下电梯内的按钮,电梯运行到指定楼层,随后开电梯门,用户出电梯,若无其他调度电梯停靠在当前楼层。
- 电梯开门会持续一段时间,可以按电梯内部关门键关门,若不按下关门键,电梯将自动关门。
- 时间设计:电梯每上(下)一层楼需要 0.85 秒的时间。在不按关门按钮的情况下,电梯到达指定楼层停靠的时长为 4 秒。
## 四、开发环境
- 开发环境:Windows 10
- 开发软
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010880 某一层楼20层,有五部互联的电梯。基于线程思想,编写的一个电梯调度程序。初始情况下所有的电梯均停靠在1楼,当有用户在电梯外按下上行、下行键之后,会有电梯进行响应并运行指定楼层;电梯到达后将会开门,用户进入电梯,按下电梯内的按钮,电梯运行到指定楼层,随后开电梯门,用户出电梯,若无其他调度电梯停靠在当前楼层。
资源推荐
资源详情
资源评论
收起资源包目录
100010880-基于 QT(C++) 实现电梯调度管理系统(进程管理).zip (40个子文件)
processmanagement
resource.qrc 809B
pictures
elevator.png 96KB
LICENSE 1KB
elevator.cpp 76KB
main.cpp 168B
constant.h 286B
container.cpp 753B
elevator.ui 102KB
elevator.pro 1KB
elevator.ico 4KB
images
F10.png 8KB
F13.png 7KB
down.png 3KB
F9.png 5KB
F2.png 4KB
F4.png 5KB
F15.png 7KB
alert.png 10KB
F17.png 6KB
F11.png 6KB
F12.png 7KB
F3.png 4KB
F5.png 5KB
F14.png 7KB
F1.png 4KB
F19.png 7KB
up.png 3KB
openDoor.png 3KB
F8.png 6KB
closeDoor.png 5KB
F6.png 5KB
elevator.ico 4KB
F18.png 8KB
F16.png 7KB
F20.png 5KB
F7.png 4KB
container.h 1KB
进程管理项目——电梯调度 设计文档.pdf 362KB
README.md 8KB
elevator.h 7KB
共 40 条
- 1
资源评论
- m0_625464732023-05-10资源不错,对我启发很大,获得了新的灵感,受益匪浅。
神仙别闹
- 粉丝: 3706
- 资源: 7461
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于AllJoyn框架的智能家居照明控制系统.zip
- (源码)基于SpringBoot和MyBatisPlus的智能物业管理系统.zip
- (源码)基于SpringBoot和MyBatisPlus的后台管理系统.zip
- (源码)基于ESP32TTGO和PythonPyo库的交互式音频合成系统.zip
- (源码)基于SpringBoot和React的文件管理系统.zip
- 【重磅,更新!】中国省级和地级市保障性住房数据(2010-2023年)
- C#ASP.NET综合管理系统源码数据库 SQL2012源码类型 WebForm
- (源码)基于物联网技术的汽车控制系统(IOTControlCar).zip
- (源码)基于STM32F10x微控制器的嵌入式系统项目.zip
- MyBatisCodeHelperPro 3.3.0
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功