關於電梯調度的實施過程(二)
——楊波 崔海營
一.需求分析
為了更加好的完成結對項目的開發,我們又做了進一步需求分析。對於一座大廈中電梯的運行,首先無疑是要更加好的滿足於乘客的需求,爭取在最短的時間中調度電梯給予乘客使用,與此同時還應該考慮到一天中各個樓層的乘客流量,相應的為其分配載重最為合適的電梯。然后我們所要考慮的便是突發情況的處理,其中突發情況包括電梯停電,火災預警,電梯自身故障等。在處理過程中,可以在電梯內部設置報警按鈕或者是在主操控室中采用人工處理等方法。
二. 分析與設計
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的博客 !