zoukankan      html  css  js  c++  java
  • 电梯调度(二)

     结组队员:刘静(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层,如果不选择电梯种别会有提示:  

     

                  

     

        

     

                           

     

                     

     


    五、小组成员时间安排

     

     

     

     

  • 相关阅读:
    Java知多少(57)主线程
    Java知多少(56)线程模型
    Java知多少(55)线程
    Java知多少(54)断言详解
    Java知多少(53)使用Java创建自己的异常子类
    Java知多少(52)内置异常
    Java知多少(51)finally
    Java知多少(50)Java throws子句
    Java知多少(49)throw:异常的抛出
    Java知多少(48)try语句的嵌套
  • 原文地址:https://www.cnblogs.com/jing-si/p/3621739.html
Copyright © 2011-2022 走看看