关于电梯调度的实施过程(二)
——杨波 崔海营
一.需求分析
为了更加好的完成结对项目的开发,我们又做了进一步需求分析。对于一座大厦中电梯的运行,首先无疑是要更加好的满足于乘客的需求,争取在最短的时间中调度电梯给予乘客使用,与此同时还应该考虑到一天中各个楼层的乘客流量,相应的为其分配载重最为合适的电梯。然后我们所要考虑的便是突发情况的处理,其中突发情况包括电梯停电,火灾预警,电梯自身故障等。在处理过程中,可以在电梯内部设置报警按钮或者是在主操控室中采用人工处理等方法。
二. 分析与设计
1).电梯类 lift
属性的设置如下:
public int order; //电梯的序号 public int direct_lift; //电梯运行方向,1表示向上,0表示静止,-1表示向下 public double time; //乘客和电梯相对应时的等待时间 public int Tf; //电梯位置 public double t; //电梯经过一层的时间 public double mostWeight; //电梯的最大载重量 public int mostPeopleNumber;//电梯的最大载人数 public double presentWeight;//电梯的当前载重量 public double presentPeopleNumber;//电梯的当前人数 public double tCloseDoor; //电梯的关门时间 public double tOpenDoor; //电梯的开门时间
方法设计如下:
lift(int d, int T, int order1, int mostPeopleNumber1) { order = order1; direct_lift=d; Tf=T; t=5;//注意延时函数调用 mostPeopleNumber = mostPeopleNumber1; } int getd() { return direct_lift; } int getTf() { return Tf; } public double liftPassenger_time(passenger a)//计算乘客选择需求后,需要等待的时间 { if (a.direct_p == 1) //乘客需求向上 { if (Tf > a.Tp) { if (direct_lift == 1) time = (40 - Tf + a.Tp) * t; else if (direct_lift == -1) time = (Tf + a.Tp) * t; else time = (Tf - a.Tp) * t; } else if (Tf < a.Tp) { if (direct_lift == 1) time = (a.Tp - Tf) * t; else if (direct_lift == -1) time = (Tf + a.Tp) * t; else time = (a.Tp - Tf) * t; } else time = 0; } if (a.direct_p == -1) //乘客需求向下 { if (Tf > a.Tp) { if (direct_lift == 1) time = (40 - Tf - a.Tp) * t; else if (direct_lift == -1) time = (Tf - a.Tp) * t; else time = (Tf - a.Tp) * t; } else if (Tf < a.Tp) { if (direct_lift == 1) time = (40 - a.Tp - Tf) * t; else if (direct_lift == -1) time = (40 + Tf - a.Tp) * t; else time = (a.Tp - Tf) * t; } else time = 0; } return time; } public void liftReply(passenger p) //电梯对乘客到达响应 { int temp; System.DateTime currentTime = new System.DateTime(); temp = currentTime.Second; do { if ((temp + (Math.Abs(p.getTR()-p.getTp()))*t)%60== currentTime.Second) { Console.WriteLine("您已到达!"); break; } }while(true); } //注意不断更新电梯位置和方向的函数。 public int peopleNumberlimit() //乘客人数超载响应处理 { if (presentPeopleNumber > mostPeopleNumber) return 1; else return 0; }
2).乘客类 passenge
属性设置如下:
public int direct_p; //1表示向上,-1表示向下 public double weight; //单个乘客重量 public int Tp; //乘客按铃时所在楼层 public int TRequire; //乘客需求楼层
方法设计如下:
passenger() { weight=75.0; } public void setPassengerD(int d)//乘客的需求方向 { direct_p=d; } public void setPassengerTp(int d) { Tp=d; } public void PassengerRequire(int TRequire1)//乘客想要去的位置 { TRequire = TRequire1; } public int getTR() { return TRequire; } public int getTp() { return Tp; } public int passengerdangerous() //乘客的应急危险响应 { return 1; }
3)界面设计如下:
最上面的四个textbox显示的是四个电梯运行状态;
下面0-20为楼层的层数;
UP和DW分别为各个楼层对应的上或下,即乘客的需求方向选择按键;
一号电梯,二号电梯,三号电梯和四号电梯分别对应着乘客对于电梯的选择;
中间的textbox对应着给乘客推荐的电梯以及相应信息的提示;
接下来的0-20为电梯内部的选择按钮;
开门,关门和呼叫按钮;
最下面的为主操控室对于电梯的应急处理操作;
TEXTBOX为主控室的各个电梯的运行状态;
三.调试过程中所遇到的问题
1). 做界面中对一些控件和自定义类的交互,真心感到无力,泪奔啊。
2),对怎样将程序包装成一个可用可跨平台的成熟软件,也感到无力迷茫啊。
四.思想感触
这次的编程过程让我们都感触颇深,而我个人的感受便是如果一个人的思想使应用程序可以供给十个人实施,那么一个团队的思想便可以使其融入整个世界。而相应的
在团队中自己才可以真正的发现自己的缺点和不足,那样才有机会加以改正。其中我发现了自己当初学习时的马虎以及知识的不扎实的缺点,同时也发现编程能力确实有
待提高。
附录1:时间记录日志(2014年)
工作者 | 时间 | 工作内容 |
杨波,崔海营 | 3.8 8:40-12:00 3.9 16:20-18:40 | 讨论整个编程过程以及查阅相应的资料 |
杨 波 | 3.12 12:00-15:00 | 编译环境的安装 |
杨 波 | 3.13 16:20-17:40 | 图形界面的设计 |
崔海营 | 3.13 20:00-21:20 | 编写等待时间函数 |
杨 波 | 3.15 14:18-16:40 | 编写电梯类和乘客类及相应调度函数 |
杨波,崔海营 | 3.15 17:10-21:20 | 代码的最后整合 |
崔海营 | 3.16 13:45-15:20 | 博客书写 |
杨 波 | 3.16 15:25-16:10 | 博客校正 |
电梯的算法设计请见:stud_bo的博客 !