电梯调度(结对项目)②

本文探讨了如何使用UML图描述电梯调度系统,介绍了Design by Contract原则在代码中的实践,详细阐述了Bus调度算法的实现过程,并展示了主界面UI的设计。通过实例演示了从理论到实践的完整流程。

一、UML图

Passenger EleController Elevator 申请进入电梯 提供目标楼层 添加请求列表 提供未上电梯的乘客信息 选择可以载入的乘客 使乘客进入电梯 Passenger EleController Elevator

二、Design by Contract, Code Contract

契约式设计(Design by Contract ,DbC)是一种设计计算机软件的方法,是按照某种规定对一些数据等做出约定。如果超出约定,程序将不再运行。例如,要求输入的参数必须满足某种条件。站在java语言的角度上讲,所谓的契约式编程就是在满足一定条件的情况下,才有条件执行方法体,可以使用AOP实现Java契约式设计。在java的Junit测试中我们使用断言(assert)来观察我们程序结构。

三、实现Bus调度算法

Bus调度算法的思想是:将电梯当作公交车,从-1层一直到最高层,每一层都停,并且开门让乘客进出,然后关门继续向上走。直到最高层,再向下。
在实现过程中,我们使用四个线程运行四个电梯。在每个线程中,首先判断电梯是否在本层服务。若可以提供服务,则电梯开门,同时调用EleController类中的synchronized方法GetPsgIn(),将可以在本层进入该电梯的乘客接走,以此保证每个电梯访问等待中的乘客列表时,不会出现因为线程冲突引起的bug。

public void busDispatcher(){
        随机生成乘客
        调度电梯所用的线程(共4个)
        for (int i = 0; i < ELE_COUNT; i++)
        {
            new Thread(()->{
                while (true){
                    获取此刻状态和楼层
                    判断是否在本层服务
                    检测有无上下电梯
                    电梯运行
                    }
                }
            }).start();
        }
    }

四、制作主界面UI

电梯调度 主界面
上图为我们小组制作的电梯调度程序主界面,左侧可以随机生成乘客,也可以手动添加乘客。我们提供了“Bus”“SSTF”“LOOK”三个按钮,以供用户自主选择合适的调度算法。右侧为电梯运行状况的模拟,直观地显示了电梯当前所在的楼层、载人、载重以及乘客的信息。
在这里插入图片描述
“设置电梯参数”按钮连接一个新的界面,可以根据用户需要调整电梯的服务楼层、最大载人、最大载重等参数。输入电梯编号并填入新的载重、人数,勾选服务楼层,便可以更新该电梯的参数。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值