基于Java Swing的可视化电梯调度程序设计

引言

电梯调度系统是建筑物中不可或缺的部分,其目的是在多个用户请求中找到一种高效的调度方案,以最大程度地减少等待时间和服务时间。在现代建筑中,电梯调度的复杂性增加了,因为不仅要考虑电梯的方向和当前楼层,还要处理多个用户的请求。本程序使用Java Swing来实现可视化的电梯调度程序,方便地展示电梯调度的执行过程。

设计思路

本电梯调度程序主要包含以下几个模块:

  1. 电梯模型:表示电梯的状态,包括当前楼层、方向和状态(运行/空闲等)。
  2. 请求队列:维护用户请求的信息,包括请求的目标楼层和请求的时间。
  3. 调度算法:实现电梯的调度策略,这里我们使用简单的“最短时间优先”算法。
  4. 可视化界面:使用Java Swing来展示电梯的状态和请求信息。

代码示例

下面是一个简单的电梯调度程序的实现,包含基本的Swing界面和电梯调度逻辑。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.Queue;

class Elevator {
    private int currentFloor; // 当前楼层
    private boolean goingUp; // 电梯方向

    public Elevator() {
        this.currentFloor = 0; // 初始在1楼
        this.goingUp = true;
    }

    public int getCurrentFloor() {
        return currentFloor;
    }

    public void moveToFloor(int targetFloor) {
        while (currentFloor != targetFloor) {
            if (currentFloor < targetFloor) {
                currentFloor++;
                goingUp = true;
            } else {
                currentFloor--;
                goingUp = false;
            }
            try {
                Thread.sleep(500); // 模拟电梯移动
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ElevatorScheduler extends JFrame {
    private Elevator elevator;
    private Queue<Integer> requests;
    private JTextArea textArea;

    public ElevatorScheduler() {
        elevator = new Elevator();
        requests = new LinkedList<>();
        setupUI();
    }

    private void setupUI() {
        setTitle("电梯调度系统");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        textArea = new JTextArea();
        textArea.setEditable(false);
        add(new JScrollPane(textArea), BorderLayout.CENTER);

        JPanel controlPanel = new JPanel();
        JTextField requestField = new JTextField(5);
        JButton requestButton = new JButton("请求电梯");

        requestButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int requestedFloor = Integer.parseInt(requestField.getText());
                requests.offer(requestedFloor);
                textArea.append("请求电梯到达第 " + requestedFloor + " 楼\n");
                new Thread(() -> processRequests()).start();
            }
        });

        controlPanel.add(new JLabel("请输入目标楼层:"));
        controlPanel.add(requestField);
        controlPanel.add(requestButton);
        add(controlPanel, BorderLayout.SOUTH);
    }

    private void processRequests() {
        while (!requests.isEmpty()) {
            int targetFloor = requests.poll();
            elevator.moveToFloor(targetFloor);
            textArea.append("电梯到达第 " + targetFloor + " 楼\n");
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new ElevatorScheduler().setVisible(true);
        });
    }
}

代码说明

  1. Elevator类:包含电梯的基本属性和方法,包括当前楼层和移动方法。
  2. ElevatorScheduler类:构建Swing界面,包含请求电梯的功能以及处理请求的逻辑。
  3. 请求电梯功能:用户输入目标楼层,点击按钮后,电梯启动请求并按照顺序处理。

结论

通过上述实现,我们可以看到一个基础的电梯调度模拟程序的结构。尽管该程序简单,但可以作为进一步扩展和优化的基础。随着用户请求的复杂性增加,调度算法的优化变得至关重要,本程序可以进一步扩展到多台电梯和不同的调度策略,以提高系统的效率和用户体验。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部