结对编程 第二次作业
代码地址:https://dev.tencent.com/u/DongLiCoding/p/sibudiantidiaodu/git/tree/master
1.项目描述
现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示,其使用规定如下:
- 楼层号为0~20,其中0号为地下一层
- 有楼层限制的电梯不在相应楼层停靠,如单双层
- 所有电梯采用统一按钮控制
- 请根据上述要求设计并实现一个电梯控制程序,使得用户平均等待时间尽可能小,如果有图形显示就更好了。
电梯编号 | 可服务楼层 | 最大乘客数量 | 最大载重量 |
---|---|---|---|
1 | 全部楼层 | 10 | 800 kg |
2 | 单层 | 10 | 800 kg |
3 | 双层 | 10 | 800 kg |
4 | 全部楼层 | 20 | 200 kg |
2.项目分工
本次结对编程由我设计编写代码,伙伴杜金同学负责代码审查测试工作。
3.需求分析
本项目需要实现四部电梯调度算法,以图形界面展示电梯的调度运行过程,乘客在相应楼层按下电梯按钮后调度满足约束条件的一部电梯,使乘客平均等待时间尽可能小。
4.设计方案
- 创建图形化界面,由楼层号按钮、4部电梯运行显示方框、上下楼方向按钮构成,每部分都设置21项,分别代表0~20楼
- 为每步电梯分别创建并启动线程
- 乘客按下方向键指定所在楼层和电梯走向,运行电梯调度算法选择4部电梯之一前往乘客所在楼层
- 电梯到达乘客所在楼层,命令窗口请求输入进出电梯人数,载重根据电梯人数随机生成
- 乘客在电梯内按动楼层号按钮,电梯将乘客送往指定楼层
5.电梯调度算法流程图
乘客请求调度电梯时,根据各个电梯运行情况,有静止电梯先调度静止电梯,若有2部及2部以上电梯静止,按照约束条件,选择电梯优先级为:1号电梯(可服务全部楼层且载重量大)>4号电梯(可服务全部楼层)>2或3号电梯(只服务奇数层楼或偶数层楼);若4部电梯均在移动中,根据各个电梯当前移动方向选择朝乘客所在位置移动的电梯,奇数层楼优先调度2号电梯,偶数层楼优先调度3号电梯,这样可以为1号电梯与4号电梯节省更多时间运载乘客而提早变为静止状态。
6.程序运行效果
(1)初始图形界面
(2)电梯运行界面
(3)命令窗口
7.总结
本次结对编程,我担任驾驶员的角色,根据设计方案完成代码的编写;伙伴杜金同学担任领航员的角色负责代码的审查测试。作业公布后,我们经过商量先确立了本次编程项目——电梯调度,决定以图形化界面呈现电梯调度过程,在纸上绘制了我们要呈现的图形轮廓;接下来我们查阅电梯运行相关原理设计了我们要实现的电梯调度算法,考虑到此项目需要同时调度4部电梯,回顾学过的计算机操作系统有关多线程的知识决定创建4个线程来模拟4部电梯;设计方案探讨完毕后,我开始代码的编写工作。
在本次代码的编写过程中,我遇到的主要问题是图形按钮的监听程序与实际按键不完全匹配,由于图形界面各按钮组件边界固定,界面最上方提示文字独占一行,导致判断电梯具体行数时与实际电梯编号不完全对应,从而在出现问题时增加了代码纠错难度;同时,各个电梯分别创建相应的线程类和监听器,未利用类的继承与多态机制,从而导致代码冗杂的高,大大增加了代码量,为检查与纠缠增加了难度。
本次结对项目,伙伴杜金与我进行了及时的沟通与交流,主动性高。在商量算法和具体实现的时候,我们互相发表自己的想法,不断改进完善电梯的运行机制;代码编写完毕后,杜金利用现有图形界面进行了多种情况的测试,及时将问题反馈给我,为代码纠错环节节省了时间,很好地完成了领航员这一角色。