zoukankan      html  css  js  c++  java
  • 结队作业之电梯调度程序

    结对伙伴朱岭杰:http://www.cnblogs.com/zhulingjie/

    我们使用了C#来做这个电梯调度程序,一开始我们做了一个界面,运行如下图:

    其中运行部分使用的timer控件,使用了4个timer控件来控制分别的运行程序,后来明白了应该统一调度,然后又做了一个界面,准备开始重新编写,写了4天多有很大问题,就在后面贴一下新的界面,分解一下这个程序的代码。timer事件如下:

    label1.Top通过坐标控制模拟电梯的label1的运动。声明几个全局变量来改变电梯运行状态和楼层数。

    private void timer5_Tick(object sender, EventArgs e)
            {
                //label1的运行
                if (label1.Top >= 58 && quanju.or1 == 0)
                {
                    label1.Top -= 22;
                }
                else if (label1.Top <= 498 && quanju.or1 == 1)
                {
                    label1.Top += 22;
                }
                if (quanju.flag1 == 0)//没到
                {
                    int a = quanju.ft1;
                    if (a > quanju.flot1 && quanju.flot1 < 21)
                    {
                        quanju.or1 = 0;//正在向上
                        textBox1.Text = Convert.ToString(quanju.flot1);
                        quanju.flot1++;
                    }
                    else if (a < quanju.flot1 && quanju.flot1 > -1)
                    {
                        quanju.or1 = 1;//正在向下
                        textBox1.Text = Convert.ToString(quanju.flot1);
                        quanju.flot1--;
                    }
                    else if (a == quanju.flot1)
                    {
                        quanju.or1 = 2;//正在开门
                        textBox1.Text = Convert.ToString(quanju.flot1) + "开门";
                        timer5.Enabled = false;//关闭计时器
                        quanju.flag1 = 1;
                    }
                }
                else if (quanju.flag1 == 1)//到达指定楼层
                {
                    textBox1.Text = Convert.ToString(quanju.flot1);
                    quanju.flag1 = 0;//可以运行
                    quanju.or1 = 2;//静止
                    foreach (Control c in this.Controls)
                    {
                        if (c is Button)
                        {
                            c.Enabled = true;
                        }
                    }
                }
            }

    button按钮传递用户的需求,其中学到最多的就是一定要多建立子函数或者类来达到相同目的。我们这次直接在button事件中多次复制粘贴修改代码,代码行数不忍直视,以后一定要改正。

    private void button27_Click(object sender, EventArgs e)
            {
                int loc = 9;//传递用户所在楼层
                int or = 1;//并且用户要往上去
                if (timer5.Enabled == true)
                {
                    if (quanju.or1 == or && loc >= quanju.flot1)//xia
                    {
                        button7.BackColor = Color.Red;
                        button7.Enabled = false;
                    }// 这地方只适合一个电梯的调度使用,多部电梯不需要{}中的内容
                }
                else  //电梯不运行的时候在传递用户的楼层
                {
                    quanju.ft1 = loc;
                }
                if (timer6.Enabled == true)
                {
                    if (quanju.or2 == or && loc >= quanju.flot2)//xia
                    {
                        button7.BackColor = Color.Red;
                        button7.Enabled = false;
                    }
                }
                else
                {
                    quanju.ft2 = loc;
                }
                if (timer7.Enabled == true)
                {
                    if (quanju.or3 == or && loc >= quanju.flot3)//xia
                    {
                        button7.BackColor = Color.Red;
                        button7.Enabled = false;
                    }
                }
                else
                {
                    quanju.ft3 = loc;
                }
                if (timer8.Enabled == true)
                {
                    if (quanju.or4 == or && loc >= quanju.flot4)//xia
                    {
                        button7.BackColor = Color.Red;
                        button7.Enabled = false;
                    }
                }
                else
                {
                    quanju.ft4 = loc;
                }
            }

    上边的按钮是激活电梯运行,我们以为用户选择哪个哪个在调度,后来发现这个程序需要使用多线程来完成,否则就会发生冲突,由于没使用过多线程问题,我们两个想要重新编写的程序遇到了很多的问题,虽然作业提交了,但是我们两个还会继续完成这个作业,达到完全满足作业要求的程序,来提高自己。

    这个界面是去掉了上边的启动timer控件的4个按钮,代码还要继续完善 ——!

    总结:

    这次作业是两个人结对作业,感觉到了两个人一起会发现对方很多的优点和自己的不足,在写代码的时候也是感觉很轻松,每个人的知识量都是有限的,两个人就会互相弥补不足然后共同进步,感觉这次作业对我们两个人的提升很大。

  • 相关阅读:
    pandas-06 Series和Dataframe的排序操作
    java架构之路-(面试篇)JVM虚拟机面试大全
    java架构之路-(spring源码篇)springIOC容器源码解析(上)
    java架构之路-(SpringMVC篇)SpringMVC主要流程源码解析(下)注解配置,统一错误处理和拦截器
    java架构之路-(SpringMVC篇)SpringMVC主要流程源码解析(上)源码执行流程
    java架构之路-(分布式zookeeper)zookeeper集群配置和选举机制详解
    java架构之路-(分布式zookeeper)初识zookeeper安装与参数详解
    java架构之路-(mysql底层原理)Mysql事务隔离与MVCC
    java架构之路-(设计模式)五种创建型模式之单例模式
    java架构之路-(JVM优化与原理)JVM之G1回收器和常见参数配置
  • 原文地址:https://www.cnblogs.com/suisx/p/5371187.html
Copyright © 2011-2022 走看看