结对项目开发电梯调度 - 整体设计

一、系统介绍

1. 功能描述

  本电梯系统用来控制一台运行于一个具有16层的大楼电梯,它具有上升、下降、开门、关门、载客的基本功能。

  大楼的每一层都有:

  (1) 两个指示灯:  这两个指示灯分别用于指示当前所在的层数和电梯的当前状态(上行、下行或停止);

   (2)按钮:  除了第一层和顶层,每一层都有两个按钮(上行、下行),乘客可以呼叫上楼或下楼,顶楼只有一个下楼按钮,而第一层只有一个上楼按钮。

2. 电梯里面具有:  标示从“1”到“16”的16个楼层按钮,用于让乘客选择所要的层数;

  注:1-8层不停

二、关键实现方法描述

  用两个队列来实现电梯的调度,电梯根据这两个队列发送来的楼层号作为目的地进行运行。在上行队列中保存了所有的上行请求的楼层号(包括楼层的呼叫和电梯里的楼层按钮请求),即保存电梯上行时需要停的楼层号。

  队列排列规则是:高于或等于电梯当前所地楼层的上行请求的楼层号从小到大排在队列的前部分,低于电梯当前所地楼层的上行请求的楼层号从小到大排在队列后部分。如果新请求的楼层号被插在队列头时同时将这个楼层号发送给电梯作为它的目的地。在下行队列中保存了所有的下行请求的楼层号(包括楼层的呼叫和电梯里楼层按钮请求),即保存电梯下行时需要停的楼层号。

三、电梯具体设计

  本次设计用的语言是.net,用的环境是VS 2010开发工具,

  该系统用了3个.cs文件,一个主类class ElevatorController,主要定义了函数用来调度电梯。一个class Elevator,标明电梯状态;一个class Form1,设计布局,线程控制;

  1. 电梯设置: 电梯分为三种状态:静止,上升,下降。

   2 乘客分析: 乘客的需求分为“上”和“下”两种。

   3 电梯需要初始化,其中状态为静止state=0,层数floor_lift设置为1。目标层数数组需要初始化。

  程序源代码:

  1.Elevator.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ElevatorManager
{
    class Elevator
    {
        public int floor;
        public bool[] panel;//电梯内面板状态
        public int direction;//up,down
        public int gatestatus;//open,close
        public bool isrun;

        const int UP = 0;
        const int DOWN = 1;

        const int CLOSE = 0;
        const int OPEN = 1;

        public Elevator()
        {
            floor = 0;
            panel = new bool[10];
            for (int i = 0; i < 10; ++i)
            {
                panel[i] = false;
            }
            direction = UP;
            gatestatus = CLOSE;
            isrun = false;
        }

        public void setPanel(int i)
        {
            panel[i] = true;
        }

    }
}

  2.ElevatorManager.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ElevatorManager
{
    class ElevatorController
    {
        public Elevator ele_1;
        public Elevator ele_2;
        public bool[] uppanel;
        public bool[] downpanel;

        #region 状态常量定义
        //电梯内
        const int UP = 0;
        const int DOWN = 1;

        const int CLOSE = 0;
        const int OPEN = 1;
        const int WAIT = 2;

        //电梯外
        const int EXTERIOR = 0;
        const int INTERIOR = 1;

        //任务
        const int MOVEUP = 0;
        const int MOVEDOWN = 1;
        const int NONE = -1;

        //type判断
        const int ELE1 = 0;
        const int ELE2 = 1;

        #endregion

        public ElevatorController()
        {
            ele_1 = new Elevator();
            ele_2 = new Elevator();
            uppanel = new bool[10];//电梯外 上按钮状态
            downpanel = new bool[10];//电梯外 下按钮状态
            for (int i = 0; i < 10; ++i)
            {
                uppanel[i] = false;
            }
            for (int i = 0; i < 10; ++i)
            {
                downpanel[i] = false;
            }
        }

        public void operate(int IorE, int type, int select)//操作
        {
            //操作判断
            if (IorE == INTERIOR)//外层IorE判断
            {
                if (type == ELE1)//内层type判断
                {
                    ele_1.setPanel(select);
                }
                else if (type == ELE2)
                {
                    ele_2.setPanel(select);
                }
                else
                {
                    Exception ex = new Exception("INTERIOR type 错误");
                    throw ex;
                }
            }
            else if (IorE == EXTERIOR)
            {
                if (type == UP)
                {
                    uppanel[select] = true;
                }
                else if (type == DOWN)
                {
                    downpanel[select] = true;
                }
                else
                {
                    Exception ex = new Exception("EXTERIOR type 错误");
                    throw ex;
                }
            }
            else
            {
                Exception ex=new Exception("IorE错误");
                throw ex;
            }

            //电梯是否在执行任务
            if (!ele_1.isrun)
            {
                ele_1.isrun = true;
                Thread th1 = new Thread(new ThreadStart(run_ele1));
                th1.IsBackground = true;
                th1.Start();
            }
            if (!ele_2.isrun)
            {
                ele_2.isrun = true;
                Thread th2 = new Thread(new ThreadStart(run_ele2));
                th2.IsBackground = true;
                th2.Start();
            }
        }

        public void run_ele1()
        {
            try
            {
                run(ele_1);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void run_ele2()
        {
            try
            {
                run(ele_2);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void run(Elevator ele)//运行
        {
            for (; isGoOn(ele); )
            {
                for (operaGate(ele); ele.gatestatus == OPEN; operaGate(ele))
                {
                    Thread.Sleep(5000);
                    ele.gatestatus = CLOSE;
                }
                int task = NONE;
                task = gettask(ele);
                if (task == MOVEUP)
                {
                    ele.floor += 1;
                    if (!floorJudge(ele))
                    {
                        Exception ex = new Exception("楼层错误");
                        throw ex;
                    }
                    Thread.Sleep(1000);
                }
                else if (task == MOVEDOWN)
                {

                    ele.floor -= 1;
                    if (!floorJudge(ele))
                    {
                        Exception ex = new Exception("楼层错误");
                        throw ex;
                    }
                    Thread.Sleep(1000);
                }
                else if (task == NONE)
                {
                    //不操作
                    if (!floorJudge(ele))
                    {
                        Exception ex = new Exception("楼层错误");
                        throw ex;
                    }
                }
                else
                {
                    Exception ex = new Exception("获取的任务出错");
                    throw ex;
                }
            }
            ele.isrun = false;
        }

        public void operaGate(Elevator ele)//是否开门操作
        {
            if (ele.direction == UP)
            {
                if(ele.panel[ele.floor]||uppanel[ele.floor])
                {
                    ele.gatestatus = OPEN;
                    //ele.direction = UP;
                    ele.panel[ele.floor] = false;
                    uppanel[ele.floor] = false;
                    return;
                }
                if (!upAsk(ele))
                {
                    if (downpanel[ele.floor])
                    {
                        ele.gatestatus = OPEN;
                        ele.direction = DOWN;
                        downpanel[ele.floor] = false;
                        return;
                    }
                }
            }
            else if (ele.direction == DOWN)
            {
                if (ele.panel[ele.floor] || downpanel[ele.floor])
                {
                    ele.gatestatus = OPEN;
                    //ele.direction = DOWN;
                    ele.panel[ele.floor] = false;
                    downpanel[ele.floor] = false;
                    return;
                }
                if (!downAsk(ele))
                {
                    if (uppanel[ele.floor])
                    {
                        ele.gatestatus = OPEN;
                        ele.direction = UP;
                        uppanel[ele.floor] = false;
                        return;
                    }
                }
            }
            else
            {
                Exception ex = new Exception("电梯状态出错");
                throw ex;
            }
        }

        public bool isGoOn(Elevator ele)//是否有任务判断
        {
            for (int i=0;i<10;++i)
            {
                if (ele.panel[i])
                {
                    return true;
                }
                if (uppanel[i])
                {
                    return true;
                }
                if (downpanel[i])
                {
                    return true;
                }
            }
            return false;
        }

        public int gettask(Elevator ele)//任务获取
        {
            if(ele.direction==UP)//方向上任务获取顺序
            {
                if (upAsk(ele))
                {
                    return MOVEUP;
                }
                if (downAsk(ele))
                {
                    return MOVEDOWN;
                }
            }
            else if(ele.direction==DOWN)//方向下任务获取顺序
            {
                if (downAsk(ele))
                {
                    return MOVEDOWN;
                }
                if (upAsk(ele))
                {
                    return MOVEUP;
                }
            }
            else
            {
                Exception ex = new Exception("电梯状态出错");
                throw ex;
            }
            return NONE;
        }

        public bool upAsk(Elevator ele)//上方查询
        {
            for (int i = ele.floor + 1; i < 10; ++i)
            {
                if (ele.panel[i])
                {
                    return true;
                }
                if (uppanel[i])
                {
                    return true;
                }
                if (downpanel[i])
                {
                    return true;
                }
            }
            return false;
        }

        public bool downAsk(Elevator ele)//下方查询
        {
            for (int i = ele.floor - 1; i >= 0; --i)
            {
                if (ele.panel[i])
                {
                    return true;
                }
                if (uppanel[i])
                {
                    return true;
                }
                if (downpanel[i])
                {
                    return true;
                }
            }
            return false;
        }

        public bool floorJudge(Elevator ele)
        {
            if (ele.floor>=0&&ele.floor<10)
            {
                return true;
            }
            return false;
        }

    }
}

  3.Form1.CS

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

                imgEleOpen=new Bitmap(@".\elevator_open.jpg");
                imgEleClose=new Bitmap(@".\elevator_close.jpg");

                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);
            }
        }
    }
}

四、测试结果  

  结过几周的不断编写和调试,最后程序得已成功运行,期间查看了不少的资料和信息,特别 是对于画布的设计效果,还有就是对于电梯开关时的音效.

  下面是测试效果:

  1开始界面,初使是默认在第一层:

时间: 2024-08-08 05:21:04

结对项目开发电梯调度 - 整体设计的相关文章

项目开发中自定义字段设计原则

在开发系统过程中,做到自定义字段策略设置,目前这种功能是很多系统的标准配置,这样子可以简化后续增加字段的难度,并对自定义字段做管理. 自定义字段功能要注意到以下几点: 1.批量规划好要自定义字段的数据表.2.对自定义字段存放的表字典表做设计3.对自定义字段做不同的属性设计4.自定义字段的扩展设计 1.明确是哪个表需要自定义字段.如果是开发一套易用的系统,做开发的时候对用到的主表做统一的自定义字段设计.这样子方便在以后的开发应用中直接操作自定义功能就能增加字段.很多程序员在初写程序的时候,增加字段

结对开发--电梯调度报告

“电梯调度”需求分析 一.项目背景 试想一下,石家庄铁道大学基础教学楼的电梯配置如下:大厦有18层, 4部电梯,很多乘客使用这些电梯的日常(旅客重量:平均70公斤最大120公斤,最小45公斤).其他常量数据:电梯速度,开/关门时间,乘客的时间要在/走出电梯.可以对这些合理的假设. 二.数据分析 我们随机选择了一天去现场调查基础教学楼电梯的使用情况,列表如下: 电梯名称 停靠层数 乘客限制 重量限制/kg 电梯开关时间/s 乘客进出电梯时间/s 电梯1 8-18层(双层) 15人 1150 4s

结对项目:电梯调度算法的实现和测试

结对编程人员: 12061167林旭鹏 12061174李靖 TFS上Pairproject11 结对编程优点: (1)结对编程相对来说比较高效,一些基本功能可以分开来写unit在进行整合,核心算法可以进行讨论,选择效率比较好的哪一种算法. (2)两个人同时进行编程,不容易分神,集中程度相对一个人时更高,双方也可以互相监督.并且若有一个人实时对另一个人的代码进行实时监督,可以避免手滑打出来的小问题,这些小问题在调试时时很难找出来的,可以节约调试的时间.而且debug时,也可以让头脑比较清醒的人上

结对编程之电梯调度

编程任务:电梯调度 结对人员:左少辉-12061209,杨昊兰-12061202,吕雨朗 一.此次软工作业确实是让人却步的不敢开始,不过结对编程使得我对完成作业又有了信心,开始没有积极组队的我落单了,后来只能是申请加入已经组好的队伍,所以我们其实是一个三人组,都说人多力量大,想法也就会开阔许多,做起作业来也会顺利许多.起初对作业不是很了解,光是看英文要求就已经醉了,后来还是硬着头皮开始了漫长的代码阅读,浅学c#觉得语法也就一般般,不过看到如此绚丽的代码还是各种懵~确实一个人做起来简直是困难,但是

结对项目:电梯调度算法的实现与测试

结对编程人员:12061174 李靖 12061167 林旭鹏 文件位于TFS上的Pairproject11中 算法核心:两个关键---1.history direction变量 2电梯里面有没有人. 电梯初始的方向默认为向上,在每个tick时间点 电梯如果在底层,history direction为上,如果在顶层则为下. 电梯内没有人的时候,先遍历请求,如果有方向一致并且可以去到的楼层请求,则Reqstopat最近的. 若当前History dirction方向上,没有方向一致的楼层请求,则检

结对编程:电梯调度

电梯调度项目: 项目分析与需求: 从题目上来看,项目要求编写一个掌控电梯的程序.电梯这个东西,大家都乘过,无非就是:乘客上电梯,判断是否超重,乘客选择想要达到的楼层,最后依次去到离需求最近的一个楼层. 项目中要求有四个电梯,其中第一号和第四号电梯是一模一样的,只需要把负载量给修改即可:第二和第三也大同小异,只需要把负载量和输入楼层的判断方式修改一下即可. 在我们的设想中,我们要达到的效果是这样的:得有一个switch语句,来控制一开始的电梯选择界面:之后在case语句之后相应搭载各种需要的语句以

软件项目开发中需求分析与设计时间和开发时间的比例分配的问题

从毕业到现在做开发已经有近7年了,大大小小的项目也经历了几十个了.在项目开发的过程中很少有项目在设计阶段投入很多时间的, 有很多情况下,甚至都没有怎么做设计就直接开始编码了,处于一种边开发边设计到状态,还有些时候,设计就是完成一些文档来应付下,很 少有认认真真做设计,然后就直接开始编码,如果遇到需求上问题,再确认.还有些时候,是一边确认需求,一边开始做原型,然后再进入开 发,这种方式倒是比较好,至少可以在前期发现很多问题,避免后续的重大问题出现的几率. 其实从我个人的角度来观察,很多时候我们重开

结对开发----电梯调度(课堂练习)

一.题目 石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦. 由于楼层不太高,在上下课高峰期时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. 问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 二.设计思路 首先我们最初设定人数为默认的8人,每次分别输入每个人想要到达的楼层,然后存入一个数组中,用到循环结构:然后再用一个循环结构分别计算停在某一层所

结对开发——电梯调度

组员 石鹤李海超 一.题目 石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦. 由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. 问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 二.设计思想 算出停在各层需要爬的层数,比较得出最小的. 我也考虑了老师说的优化方法,但我觉得假如2层和4层都满足那种条件,而那个公式没