zoukankan      html  css  js  c++  java
  • 结对开发项目-电梯调度系统

    小组成员:马翔 & 胡佳奇

    项目名称:电梯调度系统

          经过了两个多星期的结对开发过程,我们的电梯调度系统有了一个初步的面貌。现版本的调度系统和最初的设想还是有很大的区别的。最初的设想是有一个整体调度系统,每当乘客发出一个请求,调度系统就通过这个计算来为这个请求分配一部电梯。在实践的过程中发现这样不可行,复杂度很高,这个问题能有多复杂就有多复杂。后来通过实际调研和自己思考,决定将问题简单话,即四部电梯只会沿着自己的方向来运行,某一层有顾客请求就停下。而调度程序只为处于ready状态的电梯发出命令。通过这样的思路来简化问题,从而实现了电梯的运行。

          在电梯的实现过程中,使用了线程的技术。将每个电梯对象的run方法封装成一个线程,这样四部电梯就能不受互相影响的同时运行,并且接受调度。在编程环境上我们选择使用visual studio 2010 下的C#,实现了界面的设计。目前项目尚有一些不足之处,如没有一个整体观察电梯运行的界面和人数检测,我们会尽力将这些在以后进行完善。

    项目时间管理表:

    电梯运行截图:

    电梯调度系统运行调度部分代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace 电梯调度系统
    {
        public struct Request   //请求结构体
        {
            public int pgFloor;//乘客请求楼层
            public string pgDir; //乘客请求方向
            public string pgIo;  //乘客请求进出方向
        }
    
        public struct outRequest
        {
            public int request;
            public int toUp;
            public int toDown;
        }
    
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            //[STAThread]
            
            //电梯调度系统函数
            public static void Manager(int r)
            {
    
                if (fangWen.E1.direction=="Ready")
                {
                    if (fangWen.E1.floorNow > r) fangWen.E1.direction = "Down";
                    else if (fangWen.E1.floorNow < r) fangWen.E1.direction = "Up";
                    else if (fangWen.E1.floorNow == r) fangWen.E1.Open();
                }
                else if(fangWen.E2.direction=="Ready")
                {
                    if (fangWen.E2.floorNow > r) fangWen.E2.direction = "Down";
                    else if (fangWen.E2.floorNow < r) fangWen.E2.direction = "Up";
                    else if (fangWen.E2.floorNow == r) fangWen.E2.Open();
                }
                else if(fangWen.E3.direction=="Ready")
                {
                    if (fangWen.E3.floorNow > r) fangWen.E3.direction = "Down";
                    else if (fangWen.E3.floorNow < r) fangWen.E3.direction = "Up";
                    else if (fangWen.E3.floorNow == r) fangWen.E3.Open();
                }
                else if(fangWen.E4.direction=="Ready")
                {
                    if (fangWen.E4.floorNow > r) fangWen.E4.direction = "Down";
                    else if (fangWen.E4.floorNow < r) fangWen.E4.direction = "Up";
                    else if (fangWen.E4.floorNow == r) fangWen.E4.Open();
                }
    
            }
    
    
            //电梯类
            public class Elevator
            {
                public  int speed;       //速度
                public  int load;        //载重
                public  int people;      //乘客限制
                public  int openClose;   //开关门时间
                public  int inOut;       //进出门时间
                public  int floorNow;    //电梯当前楼层
                public  String direction;//电梯当前状态
                public  int loadNow;     //电梯当前载重
                public  int peopleNow;   //电梯当前乘客数
    
                public int[] RespondQueue=new int [21];  //电梯内部响应队列
    
                public static outRequest[] oR = new outRequest[21];  //电梯外请求队列
                public static int Requestflag;   //电梯请求标记
                public int Rfront;
                public int Rrear;
     
                public Elevator(int sp,int lo,int pe,int oc,int io,int fln) //电梯构造函数
                {
                    speed = sp;         //初始化电梯速度
                    loadNow=load = lo;          //初始化电梯载重
                    peopleNow=people = pe;        //初始化乘客限制
                    openClose = oc;    //初始化电梯开关门时间
                    inOut = io;        //初始化乘客进出时间
                    floorNow = fln;    //初始化电梯当前楼层
                    direction = "Ready";//初始化电梯状态
    
                    Requestflag = 0; //标记初始化为零,表示没有外部请求
                    Rfront = 0;
                    Rrear = 0;
                }
                //电梯运行功能函数
                public int tanCeUp()   //向上探测函数
                {
                    int i=0;
                    if (this.direction == "Up")
                    {
                        for (i = this.floorNow; i <= 20; i++)
                        { 
                            if((this.RespondQueue[i]==1)||(oR[i].request==1&&oR[i].toUp==1))break;
                        }
                        //if (i == 21) i = this.floorNow;
                    }
                    return i;
                }
    
                public int tanCeDown()   //向下探测函数
                {
                    int i = 0;
                    if (this.direction == "Down")
                    {
                        for (i = this.floorNow; i >= 0; i--)
                        {
                            if ((this.RespondQueue[i] == 1) || (oR[i].request == 1 && oR[i].toDown == 1)) break;
                        }
                       
                    }
    
                    return i;
                }
    
    
    
                public void Run()
                {
                    
                    while (true)
                    {
                        if (this.direction == "Up")
                        {
                            while (tanCeUp() != 21)
                            {
                                Thread.Sleep(1500);
                                this.floorNow++;
                                if ((this.RespondQueue[this.floorNow] == 1) || (oR[this.floorNow].request == 1 && oR[this.floorNow].toUp == 1))
                                {
                                    this.Open();    
                                }
                            }
                            this.direction = "Ready";
    
                        }
                        if (this.direction == "Down")
                        {
                            while (tanCeDown() != -1)
                            {
                                Thread.Sleep(1500);
                                this.floorNow--;
                                if ((this.RespondQueue[this.floorNow] == 1) || (oR[this.floorNow].request == 1 && oR[this.floorNow].toDown == 1))
                                {
                                    this.Open();
                                }
                            }
                            this.direction = "Ready";
                           
                        }
     
                     }
                }
    
                public void Open()
                {
                    this.RespondQueue[this.floorNow] = 0;
                    oR[this.floorNow].request = 0;
                    if (this.direction == "Up") oR[this.floorNow].toUp = 0;
                    if (this.direction == "Down") oR[this.floorNow].toDown = 0;
                    Thread.Sleep(3000);
                }
    
            }
    
            public static class fangWen   //将四个电梯实例对象封装在一个类里供其他窗体访问
            {
                public static Elevator E1 = new Elevator(10, 800, 10, 5, 8, 1);
                public static Elevator E2 = new Elevator(10, 800, 10, 5, 8, 1);
                public static Elevator E3 = new Elevator(10, 1600, 20, 5, 8, 1);
                public static Elevator E4 = new Elevator(10, 2000, 20, 5, 8, 1);
            }
    
            public static void ThreadProc_1()  //创建电梯的线程函数
            {
                fangWen.E1.Run();
            }
            public static void ThreadProc_2()
            {
                fangWen.E2.Run();
            }
            public static void ThreadProc_3()
            {
                fangWen.E3.Run();
            }
            public static void ThreadProc_4()
            {
                fangWen.E4.Run();
            }
    
            static void Main()
            {
                Thread t1 = new Thread(new ThreadStart(ThreadProc_1)); //各个电梯线程开始运行
                t1.Start();
    
                Thread t2 = new Thread(new ThreadStart(ThreadProc_2));
                t2.Start();
    
                Thread t3 = new Thread(new ThreadStart(ThreadProc_3));
                t3.Start();
    
                Thread t4 = new Thread(new ThreadStart(ThreadProc_4));
                t4.Start();
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
    
            }
        }
    }
  • 相关阅读:
    2013第51周四开放杂记
    2013第51周三杂记
    2013第51周二eclipse启动优化
    2013 第51周一纠错
    2013第50周日小结
    国内主流开放平台接口了解
    手机加密那点事儿_数值内存加密
    crontab,想说爱你不easy
    SIP基本呼叫
    js正則表達式语法
  • 原文地址:https://www.cnblogs.com/maxiang/p/3621760.html
Copyright © 2011-2022 走看看