结队作业之电梯调度程序

结对伙伴朱岭杰: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个按钮,代码还要继续完善 ——!

总结:

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

 

 

 

 

 

posted @ 2016-04-09 11:20  suisx  阅读(453)  评论(1编辑  收藏  举报