当前位置:   article > 正文

操作系统作业 - 进程管理 - 电梯调度_操作系统电梯调度

操作系统电梯调度

操作系统进程管理 - 电梯调度

文末有源码

1. 项目需求

某一层楼20层,有五部互联的电梯。基于线程思想,编写一个电梯调度程序。

1.1 功能描述

  1. 每个电梯里面设置必要功能键:如数字键关门键开门键上行键下行键报警键、当前电梯的楼层数上升及下降状态等。
  2. 每层楼应该有上行和下行按钮和当前电梯状态的数码显示器
  3. 所有电梯初始状态都在第一层。每个电梯如果在它的上层或者下层没有相应请求情况下,则应该在原地保持不动

2. 开发环境

  • 开发环境: Windows 10
  • 开发软件: Eclipse
  • 开发语言: JavaSE (jdk1.8.0_241)
  • 开发工具包: Swing

3. 操作说明

  • 文件夹内双击运行elevator.jar,进入电梯模拟系统如下图

    一开始电梯都停在1层,数码显示器显示01

  • 点击每部电梯的功能键(开/关键, 报警器, 楼层按钮), 进行单部电梯内命令处理模拟

  • 点击左侧楼层上下按钮,进行多部电梯外命令处理模拟。

    注:由于空间有限无法给每一个电梯每一层都做上下按钮,故只在每层设置一组上下按钮,表示该层有上行或下行请求。其中20层不能继续上行、1层不能继续下行,故不设对应按钮。

3. 系统分析

  • 单部电梯内命令处理

    • 内部事件及对应响应:
      • 用户点击楼层按钮
        • 若按键楼层与电梯当前的楼层数相同 → \rightarrow 该电梯开门,1秒后自动关门
        • 若按键楼层与电梯当前楼层数不同 → \rightarrow 将对应楼层的请求设为true,并进行调度
          • 若电梯正在上行且按键楼层在电梯当前楼层之上 → \rightarrow 电梯到达该层时停靠、开门、1秒后自动关门
          • 若电梯正在下行且按键楼层在电梯当前楼层之下 → \rightarrow 电梯到达该层时停靠、开门、1秒后自动关门
          • 若电梯正在上行而按键楼层在电梯当前楼层之下 → \rightarrow 电梯继续上行,完成此前的任务后下行到达该层、开门、1秒后关门
          • 若电梯正在下行而按键楼层在电梯当前楼层之上 → \rightarrow 电梯继续下行,完成此前的任务后上行到达该层、开门、1秒后关门
      • 用户点击开关按钮
        • 若电梯正在运行,不响应此请求
        • 若电梯处于静止状态,开门、1秒后关门
      • 用户点击报警按钮
        • 电梯立刻停止运行,数码显示器显示“ERR!”
        • 1秒后该电梯所有内部按键变红且失效
  • 多部电梯外命令处理

    • 外部事件及对应响应:

      • 用户按下某一楼层的上/下行按钮(每层设置一个上/下行按钮)

        a. 筛选处于正常状态的电梯,计算每部电梯到达此层的路程:

        • 静止态的电梯:

          当前楼层和请求楼层之间的距离即为路程(每层层高为30个像素点)

        • 上行电梯:

          • 若请求楼层在电梯当前所在楼层之上,电梯当前楼层和请求楼层之间的距离即为路程

          • 若请求楼层在电梯当前坐在楼层之下

            路程=电梯上行到达任务中最远楼层的距离*2+当前楼层和请求楼层之间的距离

        • 下行电梯:

          • 若请求楼层在电梯当前所在楼层之下,电梯当前楼层和请求楼层之间的距离即为路程

          • 若请求楼层在电梯当前坐在楼层之上

            路程=电梯下行到达任务中最远楼层的距离*2+当前楼层和请求楼层之间的距离

        b. 选出所需路程最短的电梯,将此请求加入该电梯的任务序列中等待响应

4. 系统设计

4.1 界面设计

4.1.1 整体设计
  • 初始状态

  • 运行状态

img

4.1.2 组件设计
  • 窗体模型: Java. Swing. JFrame
  • 电梯模型:Elevator 继承面板父类Java. Swing. JPanel 实现线程接口Java. lang. Runnable
    • 电梯内部按钮 component. Buttons
      • 按钮后的粉底背板 Java. Swing. JLabel
      • 各类按钮 component. MyButton
      • 电梯状态的“数码显示器” Java. Swing. JLabel
    • 电梯门 Java. Swing. JLabel
    • 电梯文字 Java. Swing. JLabel
  • 楼层模型:component. Floor
    • 楼层数字 Java. Swing. JLabel
    • 楼层背景 Java. Swing. JLabel
    • 楼层上下按钮 component. MyButton
  • 大楼模型:UI. MyBuilding
    • 电梯*5
    • 楼层*20

4.2 状态设计

  • 电梯状态
    • IsRun = false # 静止状态
    • IsRun = true # 运行状态
    • IsUp = true # 上行
    • IsDown = true # 下行
  • 电梯门状态
    • IsOpen = true # 开门状态
    • IsOpen = false # 关门状态
  • 楼层状态
    • whichFloorIsWaitUp[i] = true # 第i层请求上行
    • whichFloorIsWaitDown[i] = true # 第i层请求下行

4.3 类设计

4.3.1 MyButton类:电梯按钮

img

4.3.2 Buttons类:电梯内按钮组

img

4.3.3 Elevator类:电梯类

img

4.3.4 EventListener类:实现事件监听接口
public class EventListener implements ActionListener {
   
	public void actionPerformed(ActionEvent e) {
   
		System.out.println("I'm listening!");
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
4.3.5 Floor类:楼层类

在这里插入图片描述

4.3.6 MyBuilding类:大楼类(主类)

在这里插入图片描述

5. 系统实现

5.1 内命令处理

  1. 报警器

    • 用户点击报警按钮 → \rightarrow 对应电梯立即停止运行 → \rightarrow 数码显示器显示“ERR!”
    • 该电梯所有内部按钮变红,并且无法再按下
    • 禁用该电梯,外部调度将忽略此电梯
    buttons.btnAlarm.btn.addActionListener(new EventListener() {
         
    	public void actionPerformed(ActionEvent e) {
         
    		alarm = true;
    		buttons.setFloor(-1
    • 1
    • 2
    • 3
    • 4
    • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/381773
推荐阅读
相关标签
  

闽ICP备14008679号