信1101-2
20113026 胡弦琴
20112917 王兵茹
在上一次我們傳的電梯調度二版本的基礎上進行了一些改進及彌補,增加了門的動作,電梯調度二版本做了一些嘗試例如調度四部電梯 但沒有實現,於是便把心思花在完善它的現有功能上了,完善版功能如下:
(1)電梯的配置:
1. 1至10層每層有上下兩個按鈕,1層只有上行按鈕,10層只有下行按鈕。每層都有相應的指示燈,燈亮表示該按鈕已經被按下,如果該層的上行或者下行請求已經被響 應,則指示燈滅。
2. 電梯內共有10個目標按鈕,表示有乘客要在該層下電梯。有指示燈指示按鈕是否被按下。乘客按按鈕導致按鈕指示燈亮,如果電梯已經在該層停靠則該按鈕指示燈滅。
(2) 電梯的運行控制:
1.電梯的初始狀態是電梯位於第一層處,所有按鈕都沒有按下。
2.乘客可以在任意時刻按任何一個目標鈕和呼叫鈕。呼叫和目標對應的樓層可能不是電梯當前運行方向可達的樓層。
3. 如果電梯正在向I層駛來,並且位於I層與相鄰層(向上運行時是I-1層或者向下運行時是I+1層)之間,則因為安全考慮不響應此時出現的I層目標或者請求。如果電梯正好經過了I樓層,運行在I樓層和下一樓層之間,則為了直接響應此時出現的I層目標或者請求,必須至少到達運行方向上的下一樓層然后才能掉頭到達I樓層(假設掉頭無須其它額外時間),如果I樓層不是剛剛經過的樓層則可以在任意位置掉頭,此時掉頭后經過的第一個樓層不可停。
4. 電梯系統依照某種預先定義好的策略對隨機出現的呼叫和目標進行分析和響應。
5. 電梯停靠某一層后,苦無目標和呼叫,則電梯處於無方向狀態,方向指示燈全滅,否則電梯內某個方向的指示燈亮,表示電梯將向該方向運行。
6. 當一個目標(呼叫)已經被服務后,應將對應的指示燈熄滅。
源程序如下(界面及功能實現代碼):
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace ElevatorManager { public partial class Form1 : Form { const int UP = 0; const int DOWN = 1; const int EXTERIOR = 0; const int INTERIOR = 1; const int ELE1 = 0; const int ELE2 = 1; const int CLOSE = 0; const int OPEN = 1; List<Button> btnUpPanel; List<Button> btnDownPanel; List<Button> btnEle1; List<Button> btnEle2; Thread th_ui; ElevatorController myElevator; Image imgEleOpen; Image imgEleClose; public Form1() { InitializeComponent(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; } private void Form1_Load(object sender, EventArgs e) { try { btnUpPanel = new List<Button>(); btnDownPanel = new List<Button>(); btnEle1 = new List<Button>(); btnEle2 = new List<Button>(); #region 控件獲取 btnUpPanel.Add(btn_1_up); btnUpPanel.Add(btn_2_up); btnUpPanel.Add(btn_3_up); btnUpPanel.Add(btn_4_up); btnUpPanel.Add(btn_5_up); btnUpPanel.Add(btn_6_up); btnUpPanel.Add(btn_7_up); btnUpPanel.Add(btn_8_up); btnUpPanel.Add(btn_9_up); btnUpPanel.Add(new Button()); btnDownPanel.Add(new Button()); btnDownPanel.Add(btn_2_down); btnDownPanel.Add(btn_3_down); btnDownPanel.Add(btn_4_down); btnDownPanel.Add(btn_5_down); btnDownPanel.Add(btn_6_down); btnDownPanel.Add(btn_7_down); btnDownPanel.Add(btn_8_down); btnDownPanel.Add(btn_9_down); btnDownPanel.Add(btn_10_down); btnEle1.Add(btn_e1_f1); btnEle1.Add(btn_e1_f2); btnEle1.Add(btn_e1_f3); btnEle1.Add(btn_e1_f4); btnEle1.Add(btn_e1_f5); btnEle1.Add(btn_e1_f6); btnEle1.Add(btn_e1_f7); btnEle1.Add(btn_e1_f8); btnEle1.Add(btn_e1_f9); btnEle1.Add(btn_e1_f10); btnEle2.Add(btn_e2_f1); btnEle2.Add(btn_e2_f2); btnEle2.Add(btn_e2_f3); btnEle2.Add(btn_e2_f4); btnEle2.Add(btn_e2_f5); btnEle2.Add(btn_e2_f6); btnEle2.Add(btn_e2_f7); btnEle2.Add(btn_e2_f8); btnEle2.Add(btn_e2_f9); btnEle2.Add(btn_e2_f10); #endregion string impath = @"e:\elevator_open.jpg"; imgEleOpen = new Bitmap(impath); string impath2 = @"e:\elevator_close.jpg"; imgEleClose = new Bitmap(impath2); myElevator=new ElevatorController(); MessageBox.Show("初始化成功!!!"); } catch(Exception ex) { MessageBox.Show(ex.Message); } th_ui = new Thread(new ThreadStart(UIController)); th_ui.IsBackground=true; th_ui.Start(); } public void UIController()//UI控制線程 { try { for (; true; ) { #region 面板燈 for (int i = 0; i < 10; ++i) { if (myElevator.uppanel[i]) { btnUpPanel[i].BackColor = Color.Yellow; } if (!myElevator.uppanel[i]) { btnUpPanel[i].BackColor = Color.White; } // if (myElevator.downpanel[i]) { btnDownPanel[i].BackColor = Color.Yellow; } if (!myElevator.downpanel[i]) { btnDownPanel[i].BackColor = Color.White; } // if (myElevator.ele_1.panel[i]) { btnEle1[i].BackColor = Color.Yellow; } if (!myElevator.ele_1.panel[i]) { btnEle1[i].BackColor = Color.White; } // if (myElevator.ele_2.panel[i]) { btnEle2[i].BackColor = Color.Yellow; } if (!myElevator.ele_2.panel[i]) { btnEle2[i].BackColor = Color.White; } } #endregion label_ele1.Text = "Ele1.floor:" + (myElevator.ele_1.floor + 1).ToString(); label_ele2.Text = "Ele2.floor:" + (myElevator.ele_2.floor + 1).ToString(); picture_ele1.Location = new Point(picture_ele1.Location.X, 500 - (50 * myElevator.ele_1.floor)); picture_ele2.Location = new Point(picture_ele2.Location.X, 500 - (50 * myElevator.ele_2.floor)); if (myElevator.ele_1.gatestatus == CLOSE) { picture_ele1.Image = imgEleClose; } if (myElevator.ele_1.gatestatus == OPEN) { picture_ele1.Image = imgEleOpen; } if (myElevator.ele_2.gatestatus == CLOSE) { picture_ele2.Image = imgEleClose; } if (myElevator.ele_2.gatestatus == OPEN) { picture_ele2.Image = imgEleOpen; } Thread.Sleep(100); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_1_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 0); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_2_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 1); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_2_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 1); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_3_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 2); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_3_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 2); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_4_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 3); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_4_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 3); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_5_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 4); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_5_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 4); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_6_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 5); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_6_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 5); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_7_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 6); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_7_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 6); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_8_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 7); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_8_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 7); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_9_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 8); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_9_up_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, UP, 8); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_10_down_Click(object sender, EventArgs e) { try { myElevator.operate(EXTERIOR, DOWN, 9); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f1_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 0); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f2_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 1); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f3_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 2); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f4_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 3); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f5_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 4); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f6_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 5); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f7_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 6); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f8_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 7); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f9_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 8); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e1_f10_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE1, 9); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f1_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 0); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f2_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 1); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f3_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 2); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f4_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 3); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f5_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 4); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f6_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 5); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f7_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 6); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f8_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 7); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f9_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 8); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btn_e2_f10_Click(object sender, EventArgs e) { try { myElevator.operate(INTERIOR, ELE2, 9); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void label_ele1_Click(object sender, EventArgs e) { } } }
運行結果如下: