結組隊員:劉靜(20092532) 解鳳嬌(20112878) 王洪葉(20112886)
一、電梯調度編寫綜述:
1、電梯分為四個,因此設置一個電梯標號選項工乘客選擇向乘坐的電梯。
2、電梯為負一層到二十層,因此為滿足電梯需求,每一層電梯內部設置26個按鈕工乘客選擇所要到達的電梯層數。電梯外部設置兩個按鈕(第二十層和負一層除外,第二十層只設置向下按鈕,負一層只設置向上按鈕)並通過按鈕的亮滅狀態判斷電梯的運行狀態。
3、電梯時間設置:電梯到達各層停止時間設置為10s供電體中乘客走出或者電梯外部的人進入電梯;電梯開關門時間設置為1s,通過每一層所用時間為9s。
4、電梯在每一層會判斷電梯載重量是否超重,若超重則不再應答電梯外部請求,直到滿足條件為止。
二、流程圖:
三、功能實現思想:
1、編譯環境:vs2010
2、實現語言:C#
3、(1)靜態數據設置:
具體實現部分代碼:
1 static public class St 2 { 3 public enum proSt { Wait, Run ,Ready}; 4 5 public enum dir { Up, Down, Stay }; 6 } 7 public class INFO //INFO數據塊 8 { 9 public bool Run = true; //電梯運行狀況 10 11 public int req = 0; //電梯剩下的請求數 12 13 public St.proSt sta = St.proSt.Ready; //電梯運動狀態 14 15 public St.dir edir = St.dir.Stay; //電梯運動的方向 16 17 public St.dir nextDir = St.dir.Stay; //電梯被請求的下一個運動方向 18 19 public int curFlo = 0; //電梯當前樓層數 20 21 public int[] upFlo = new int[20]; //上行 目的地狀態欄:0為沒有請求 1為有請求 22 23 public int[] downFlo = new int[20]; //下行 目的地狀態欄:0為沒有請求 1為有請求 24 25 26 public int[] light = new int[20]; //電梯內按鈕燈的狀態,1為亮燈,0為滅燈 27 28 public int[] uplight = new int[20]; //控制上行燈的顯示狀態標識 29 30 public int[] dLight = new int[20]; //控制下行燈的顯示狀態標識 31 }
(2)電梯運行狀態類:public class Process
具體代碼部分:
public class Process { public INFO info = new INFO(); public TextBox eleSta = new TextBox(); //用來顯示此電梯狀況的表 private delegate void boxDelegate(); public void Lightup(int floor) { info.light[floor - 1] = 1; } public void Lightclose(int floor) { info.light[floor] = 0; }
(3)電梯運行方向實現方法:public void setdir()
具體實現部分代碼:
1 public void setdir() 2 { 3 int i = 0; 4 if (info.req != 0) 5 { 6 for (i = info.curFlo; i != 20; i++) 7 { 8 if (info.upFlo[i] == 1) 9 { 10 if (info.curFlo == i) 11 { 12 info.edir = St.dir.Stay; 13 break; 14 } 15 else { 16 info.edir = St.dir.Up; 17 break; 18 } 19 } 20 } 21 if(i == 20) 22 { 23 for(i = 19;i != -1 ;i--) 24 { 25 if (info.downFlo[i] == 1) 26 { 27 if (info.curFlo == i) 28 { 29 info.edir = St.dir.Stay; 30 break; 31 } 32 else 33 { 34 info.edir = St.dir.Down; 35 break; 36 } 37 } 38 } 39 } 40 if(i == -1) 41 info.edir = St.dir.Stay; 42 } 43 }
(4)請求參數改變運行狀態:public void setFlo(int floor, int reqDir)
具體實現部分代碼:
1 public void setFlo(int floor, int reqDir) 2 { 3 if (info.upFlo[floor - 1] == 1| info.downFlo[floor - 1] == 1) 4 { 5 return; 6 } 7 info.req++; 8 if (info.curFlo - (floor-1) <= 0) 9 { 10 if (reqDir == -1) 11 info.downReverseSta[floor - 1] = 1; 12 info.upFlo[floor - 1] = 1; 13 } 14 else if (info.curFlo - (floor - 1) > 0) 15 { 16 if (reqDir == 1) 17 info.uplight[floor - 1] = 1; 18 info.downFlo[floor - 1] = 1; 19 } 20 setdir(); 21 22 } 23 public void arrFlo(int arrflo) 24 { 25 if (info.edir == St.dir.Up | info.edir == St.dir.Stay) 26 { 27 info.upFlo[arrflo] = 0; 28 if (info.dLight[arrflo] == 1) 29 outOrder.downFloors[arrflo] = 0; 30 else 31 outOrder.upFloors[arrflo] = 0; 32 info.downReverseSta[arrflo] = 0; 33 } 34 else if (info.edir == St.dir.Down) 35 { 36 info.downFlo[arrflo] = 0; 37 if(info.uplight[arrflo] == 1) 38 outOrder.upFloors[arrflo] = 0; 39 else 40 outOrder.downFloors[arrflo] = 0; 41 info.uplight[arrflo] = 0; 42 } 43 if (info.req == 0) 44 { 45 info.edir = St.dir.Stay; 46 info.nextDir = St.dir.Stay; 47 } 48 } 49 public int isRightReq(int orderFloor) 50 { 51 orderFloor--; 52 if ((info.curFlo > orderFloor) && (info.edir == St.dir.Up|info.Sta == St.proSt.Wait)) 53 return -1; 54 else if ((info.curFlo < orderFloor) && (info.edir == St.dir.Down|info.Sta == St.proSt.Wait)) 55 return -1; 56 else 57 return 0; 58 } 59 public void run(object t) 60 { 61 eleSta = (t as TextBox); 62 while (info.Run) 63 { 64 if (info.req != 0) 65 { 66 setdir(); 67 if(info.edir != St.dir.Stay) 68 info.Sta = St.proSt.Run; 69 this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow)); 70 this.eleSta.Dispatcher.Invoke(new boxDelegate(MoveShow)); 71 this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow)); 72 } 73 if (isArr()) 74 { 75 arrFlo(info.curFlo); 76 Lightclose(info.curFlo); 77 Thread.Sleep(3000); 78 } 79 Thread.Sleep(1000); 80 if (info.req == 0) 81 { 82 info.Sta= St.proSt.Ready; 83 this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow)); 84 } 85 } 86 do 87 { 88 Thread.Sleep(3000); 89 } 90 while (!info.Run); 91 run(t); 92 } 93 }
四、運行結果截圖
主界面:
主界面默認在電梯-1層,如果不選擇電梯種別會有提示:
五、小組成員時間安排