博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
电梯调度二——曹玉松&&蔡迎盈
阅读量:6573 次
发布时间:2019-06-24

本文共 4789 字,大约阅读时间需要 15 分钟。

电梯初步版本

    经过去实际大楼的调查和一周的学习,初步完成了电梯的制作,但是这个版本的电梯功能并不是很全面,而且界面有待于改善,现在做出了测试版本,稍后进一步跟进新的版本,现在的版本初步完成的是电梯楼层之间上下调度的问题,还有四部电梯之间路程最短的调度,即一个总控控制四部电梯,比较四部电梯哪个电梯距离上电梯者最近,优先调度,还有一部电梯的调度,例如在向上的过程中首先响应向上的楼层,然后再调度其他任务,电梯允许多按钮,并且有颜色变化。其中用到了线程,主要用到了textbox控件,button按钮,panel容器,每个电梯基本用到的算法与前面所说的基本一致,此外在多textbox输出方面增加了foreach方法。
分工问题:

 主要代码:

int floor = 1;//电梯所在楼层,初始状态为1楼        int direction = 0;//1状态向上,2向下,0静止        bool Outdir;        bool[] Wait = new bool[21];//同向数组        bool[] Ywait = new bool[21];//反向数组        int Preprocess = 0;

  

public void Stateofelevator()//显示楼层和上下        {            textBox1.Text = floor.ToString();            Control.ControlCollection cc = panel2.Controls;            foreach (Control ct in cc)            {                if (ct is TextBox)                {                    ct.Text = floor.ToString();                }            }                                  if (direction == 1)            {                textBox1.Text += '↑';                foreach (Control ct in cc)                {                    if (ct is TextBox)                    {                        ct.Text+= '↑';                    }                }                                         }            else if (direction == 2)            {                textBox1.Text +='↓';                foreach (Control ct in cc)                {                    if (ct is TextBox)                    {                        ct.Text += '↓';                    }                }                           }            else            {                textBox1.Text += "--";                foreach (Control ct in cc)                {                    if (ct is TextBox)                    {                        ct.Text += "--";                    }                }                                                         }            direction = 0;                    }

  

public void Layerofelevator()        {                       int i;            for (i = floor; i <= 20; i++)            {                if (Wait[i] == true)                {                                while(floor <=i)                   {                       if (floor == i)                       {                           direction = 0;                       }                       else                       {                           direction = 1;                       }                       Stateofelevator();                       Thread.Sleep(1000);                        Application.DoEvents();                            floor++;                                           }                   Thread.Sleep(5000);                   floor--;                    Preprocess--;                    Wait[i] = false;                }                          }                        for (i = floor;  i>=0; i--)            {                if (Wait[i] == true)                {                   while (floor >= i)                    {                        if (floor == i)                        {                            direction = 0;                        }                        else                        {                            direction = 2;                        }                                                                Stateofelevator();                       Thread.Sleep(1000);                       Application.DoEvents();                       floor--;                                       }                   Thread.Sleep(10000);                   floor++;                    Preprocess--;                    Wait[i] = false;                }                            }                            }

  

public void Outofelevator(int j)        {            if ((j < floor) && (direction == 2 || direction == 0) && (Outdir == false))                {                    direction = 2;                    Wait[j] = true;                    Preprocess++;                }                else if ((j > floor) && (direction == 1 || direction == 0) && (Outdir == true))                {                    direction = 1;                    Wait[j] = true;                    Preprocess++;                }                else Ywait[j] = true;            if ((floor == 20) || (floor == 0) || (Preprocess ==0))            {                if (direction == 2)                {                    direction = 1;                }                else if (direction == 1)                {                    direction = 2;                }            }                for (int i = 0; i <= 20; i++)                {                    if (Ywait[i] == true)                    {                        Wait[i] = true;                        Preprocess++;                    }                }                      }

  

程序截图:

 

 

 

 

转载于:https://www.cnblogs.com/caoyusongnet/p/3603858.html

你可能感兴趣的文章
Android自动化测试01-环境安装连接问题及解决
查看>>
zencart后台修改首页meta_title、meta_keywords、meta_description
查看>>
SecureCRT 常用命令大全
查看>>
Android 通过触摸动态地在屏幕上画矩形
查看>>
序列化 反序列化
查看>>
html基础内容样式
查看>>
java for语句(翻译自Java Tutorials)
查看>>
iOS开发之SceneKit框架--实战地月系统围绕太阳旋转
查看>>
java设计模式2--工厂模式
查看>>
在Mac OS X中配置Apache + PHP + MySQL
查看>>
今天天气怎么样
查看>>
free函数
查看>>
bootstrap中点击左边展开
查看>>
【转】暴露问题是对项目验收最起码的尊重!
查看>>
昆虫繁殖
查看>>
Android Spinner 下拉列表
查看>>
AR导航真的有前途,马云领衔1亿2500万投资
查看>>
POJ - 2777——Count Color(懒标记线段树二进制)
查看>>
zepto 事件分析4(事件队列)
查看>>
Silverlight/WPF中DependencyProperty使用陷阱一枚
查看>>