在上一次我们传的电梯调度二版本的基础上进行了一些改进及弥补,增加了门的动作,电梯调度二版本做了一些尝试例如调度四部电梯 但没有实现,于是便把心思花在完善它的现有功能上了,完善版功能如下:
1. 1至10层每层有上下两个按钮,1层只有上行按钮,10层只有下行按钮。每层都有相应的指示灯,灯亮表示该按钮已经被按下,如果该层的上行或者下行请求已经被响 应,则指示灯灭。
2. 电梯内共有10个目标按钮,表示有乘客要在该层下电梯。有指示灯指示按钮是否被按下。乘客按按钮导致按钮指示灯亮,如果电梯已经在该层停靠则该按钮指示灯灭。
3. 如果电梯正在向I层驶来,并且位于I层与相邻层(向上运行时是I-1层或者向下运行时是I+1层)之间,则因为安全考虑不响应此时出现的I层目标或者请求。如果电梯正好经过了I楼层,运行在I楼层和下一楼层之间,则为了直接响应此时出现的I层目标或者请求,必须至少到达运行方向上的下一楼层然后才能掉头到达I楼层(假设掉头无须 其它额外时间),如果I楼层不是刚刚经过的楼层则可以在任意位置掉头,此时掉头后经过的第一个楼层不可停。
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 btnUpPanel; List btnDownPanel; List btnEle1; List 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 (); btnDownPanel = new List (); btnEle1 = new List (); btnEle2 = new List (); #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) { } }}