软件工程结对作业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.总结

经过本次合作,让我知道自己一个人是不可能比得上两个人的工作效率的。在代码编写的过程中难免会有疏忽的地方,这时候你的同伴就显得尤为重要了。在思路不明的时候,经过和俊颖的分析讨论,成功的解决了问题。虽然因为我们能力有限,写出的代码有一些“惨不忍睹”,实现出的功能也不尽人意。但是毕竟是努力过后的成果,值得让我们细细回味,两人一起工作时的辛酸,和成功解决问题时的喜悦。而我们也成功从一人独自编写代码转变为会有效的合作,互相鼓励共同进步,让我对软件工程有了新的认识。相信对以后的工作学习会有很大的帮助。

 

posted on 2019-05-05 23:16  节屮君  阅读(234)  评论(0编辑  收藏  举报