软件工程结对作业2
1.代码地址
该项目是由我和我的伙伴李俊颖共同编写的---电梯调度算法现已上传coding.net,使用的是java语言。
该项目的单元测试详见李俊颖的博客,本博客不再赘述。
2.题目要求
-
现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示,其使用规定如下:
-
楼层号为0~20,其中0号为地下一层
-
有楼层限制的电梯不在相应楼层停靠,如单双层
-
所有电梯采用统一按钮控制
-
请根据上述要求设计并实现一个电梯控制程序,使得用户平均等待时间尽可能小,如果有图形显示就更好了。
-
电梯编号 | 可服务楼层 | 最大乘客数量 | 最大载重量 |
---|---|---|---|
1 | 全部楼层 | 10 | 800 kg |
2 | 单层 | 10 | 800 kg |
3 | 双层 | 10 | 800 kg |
4 | 全部楼层 | 20 | 200 kg |
3.任务分工
驾驶员:王翘楚(进行代码编写)
领航员:李俊颖(进行单元测试)
4.实现思路
(1)题目选择
每天中午在寝室楼下等电梯的时候,都让人忍不住想吐槽电梯的调度算法,尤其是像我们这种“准程序猿”。我们俩在这之前也讨论过有关电梯调度算法,看到本次题目之后,就萌生了自己写一套电梯调度算法的想法,所以达成一致选择电梯题目。正巧我们俩之前的作业都使用的是java语言,虽然掌握不太熟练,但是总是要尝试新的挑战,所以一同用java语言编写了本次作业。
(2)思路整合
- 要有一个电梯类囊括入四部电梯,每部电梯有不同的要求。
public static int GetElevator(int ElevatorNum, int Passengers, int TotolWeight, int Floor ) { int Finish = 0; //乘坐1号电梯 if(ElevatorNum == 1) { //人数超载 if(Passengers > 10) { Passengers = Passengers - 10; System.out.println("人数超载,请下去"+ Passengers +"人!"); } //重量超载 else if(TotolWeight > 800) System.out.println("重量超载,本电梯载重800kg,请根据情况下去适当人数!"); //楼层超出范围 else if(Floor > 20 || Floor < 0) System.out.println("抱歉,电梯只能通往0-20层!"); else { System.out.println("欢迎乘坐本次电梯,你已到达"+ Floor +"层!"); Finish = 1; } } //乘坐2号电梯 else if(ElevatorNum == 2) { //人数超载 if(Passengers > 10) { Passengers = Passengers - 10; System.out.println("人数超载,请下去"+ Passengers +"人!"); } //重量超载 else if(TotolWeight > 800) System.out.println("重量超载,本电梯载重800kg,请根据情况下去适当人数!"); //楼层超出范围 else if(Floor > 20 || Floor < 0) System.out.println("抱歉,电梯只能通往0-20层!"); //选择了去双数楼层 else if(Floor%2 == 0) System.out.println("抱歉,"+ ElevatorNum +"号电梯只能通往单数楼层,请换乘其他号电梯!"); else { System.out.println("欢迎乘坐本次电梯,你已到达"+ Floor +"层!"); Finish = 1; } } //乘坐3号电梯 else if(ElevatorNum == 3) { //人数超载 if(Passengers > 10) { Passengers = Passengers - 10; System.out.println("人数超载,请下去"+ Passengers +"人!"); } //重量超载 else if(TotolWeight > 800) System.out.println("重量超载,本电梯载重800kg,请根据情况下去适当人数!"); //楼层超出范围 else if(Floor > 20 || Floor < 0) System.out.println("抱歉,电梯只能通往0-20层!"); //选择了去单数楼层 else if(Floor%2 == 1) System.out.println("抱歉,"+ ElevatorNum +"号电梯只能通往双数楼层,请换乘其他号电梯!"); else { System.out.println("欢迎乘坐本次电梯,你已到达"+ Floor +"层!"); Finish = 1; } } //乘坐4号电梯 else if(ElevatorNum == 4) { //人数超载 if(Passengers > 20) { Passengers = Passengers - 20; System.out.println("人数超载,请下去"+ Passengers +"人!"); } //重量超载 else if(TotolWeight > 200) System.out.println("重量超载,本电梯载重800kg,请根据情况下去适当人数!"); //楼层超出范围 else if(Floor > 20 || Floor < 0) System.out.println("抱歉,电梯只能通往0-20层!"); else { System.out.println("欢迎乘坐本次电梯,你已到达"+ Floor +"层!"); Finish = 1; } } //选择其他电梯(电梯编号写错) else System.out.println("抱歉,没有"+ ElevatorNum +"号电梯,请重新选择!"); return Finish; }
- 一个电梯选择类能够选择最近的电梯让乘客乘坐。未能实现图形,只能在Console用键盘键入选择,进行操作。
public static int Choose(int layer,int[] E) { //定义一个数组来保存电梯所在层和乘客之间的距离 int[] min = new int[5]; min[0] = E[1] - layer; if(min[0] < 0) min[0] = -min[0]; min[1] = min[0]; int d=0; for(int i = 2;i < 5;i ++) { min[i] = E[i] - layer; if(min[i] <= 0) min[i] = -min[i]; if(min[0] > min[i]) min[0] = min[i]; } //可能有多部电梯都里乘客最近,可以有多重选择 for(int i = 1;i < 5;i ++) { if(((layer == 1)||(layer == 3)||(layer == 5)||(layer == 7)||(layer == 9)||(layer == 11)||(layer == 13)||(layer == 15)||(layer == 17)||(layer == 19))&&(i == 3)) {continue;} if(((layer == 2)||(layer == 4)||(layer == 6)||(layer == 8)||(layer == 10)||(layer == 12)||(layer == 14)||(layer == 16)||(layer == 18)||(layer == 20))&&(i == 2)) {continue;} if(min[i] == min[0]) {System.out.println("请乘坐"+ i + "号电梯!");d=i;break;} } return d; }
5.运行结果图
6.总结
经过本次合作,让我知道自己一个人是不可能比得上两个人的工作效率的。在代码编写的过程中难免会有疏忽的地方,这时候你的同伴就显得尤为重要了。在思路不明的时候,经过和俊颖的分析讨论,成功的解决了问题。虽然因为我们能力有限,写出的代码有一些“惨不忍睹”,实现出的功能也不尽人意。但是毕竟是努力过后的成果,值得让我们细细回味,两人一起工作时的辛酸,和成功解决问题时的喜悦。而我们也成功从一人独自编写代码转变为会有效的合作,互相鼓励共同进步,让我对软件工程有了新的认识。相信对以后的工作学习会有很大的帮助。