结对编程-----电梯控制程序

    首先,说一说我对这个题目的理解:刚刚看到这个题目时,我就觉得这不应该是最好用硬件来实现的吗。。比如说,当电梯控制超载,图形显示,传感器神马的。所以令我很茫然。由于没学过图形化编程,那就只好在输出上做文章了,想了想思路,约束条件较多,需要控制的也较复杂,先实现它基本的功能好了。

需求分析:

1.4部电梯,每个电梯的信息不同,需要根据它的信息,做出与之对应的停靠、响应

2.如何能让电梯符合日常需求,做出合理控制

3.图形显示就先让它尽量用输出表述清晰

    首先需要考虑的一点是,如果要模拟电梯,过程就很重要,比如说,上楼还是下楼,哪个电梯接收指示,选择目的楼层,到达目的地等等。电梯遵循节约能源的原则,需要在相邻或比较接近的楼层停靠,这个应该是不难,看了下要求,4个电梯,停的楼层数、人数、重量都不一样,电梯如果在运行中需要显示上下箭头,如果在某个楼层停靠,那就输出个下划线好了。那运行的过程要怎样显示出来呢,有一点硬件的基础,最开始就认为是运行时间得有延迟啊,怎么办呢,如果不针对硬件,那就应该需要什么东西控制,才能明确地地看出它的运行过程,通过萌萌的队友提示,就通过输入一个数表示,如果输入的是这个数,那就输出运行一层,两层到多层。有了大概要实施的框架,就开始我们的变成之旅啦。

1.电梯楼层,上升、下降、停靠显示

    把每个电梯的楼层用一个数组表示,通过上升下降实现对楼层控制,用该数组输出,上升用ascii码中码值为24的表示,下降用ascii码中码值为25的表示。

2.接人实现

    首先输入上楼or下楼,等待附近空闲电梯来接,空闲电梯的标准为:如果呼叫楼层为奇数楼层,偶数楼层不参与比较差值,反之同理。比较差值的过程,在调试过程中出现了一个bug,楼层差值如Nowfloor - elevator[i],如果下楼的话,差值就变成负的了,果断取绝对值。如果电梯与呼叫楼层不相等,就一直循环执行上楼下楼操作。可以看每个楼梯停靠的过程,可由如上叙述,通过输入一个值,然后判等。如果相等,电梯层数自增或自减。

    cin >> m;
    if (m = 'a')
    {
        elevator[a] = elevator[a] + 1;
        status[0] = int(24);
        display(a);
    }

 

       区分奇、偶层,来进行电梯控制,如果判断最小值为不合适的电梯,最小值跳过,如下:

    if (a % 2 != 0)
    {
        if (d % 2 == 0)
        {
            if (min >= d)
                min = d;
        }
    }
    if (d % 2 != 0)
    {
        if (a % 2 == 0)
        {
            if (min >= a)
                min = a;
        }
    }

 

3.电梯运行

    空闲电梯到达后,选择目的楼层,如果在奇数电梯上,目的楼层输入偶数时,提示:该电梯不在偶数楼层停靠,反之同理。当如果有另一个人需要进入电梯时,把楼层传入数组,可以让另一个人进入电梯,电梯到达后,因为无法判断人数和体重,均采用人工输入,输入成功后,若无超载现象,即可输入目的楼层,如果不到目的楼层,一直执行upstairs(),downstairs()程序。判断如下:

                for (; elevator[1] != floor;)
                {
                    if (direction == 1)
                        upstairs(1);
                    else
                        downstairs(1);
                }

      因为输入时出现了格式较乱的情况,经过队友提点,学会了光标定位的方式,可以是界面变的有序。这一点在以后的编程中也可以多用到

            HANDLE hOut;
            COORD pos = { 0,7 }; /* 光标的起始位(第1列,第3行) 0是第1列 2是第3行*/
            hOut = GetStdHandle(STD_OUTPUT_HANDLE);
            SetConsoleCursorPosition(hOut, pos);

      只能说,这次编程思路很重要,调试过程找bug比较麻烦,一步一步跟踪,总会达到目的结果

     一~四号电梯分别为为奇数层、偶数层,全部层最多十人,全部层最多二十人电梯 运行截图如下:

 

 

 

总结:此次结对编程从分析到思路,让我体验到有助攻的好处,两个人编程确实和一个人编程不一样,因为我们需要讨论,磨合。最初因为我们平时接触不多,可能会有点小尴尬。但我的队友是一个开朗的大男生,因此在合作的过程中,就渐渐熟悉了起来。每段代码需要模块化,以前自己写的时候,基本上是一条龙的思维模式,想到哪儿,写到哪儿。知道哪里有调用,哪里要传参,不会太顾及模块化编程。而这次编程,最初可能会没思路,多一个人思考,在没思路的时候能够获得帮助。在讨论过后,以及程序编写的过程中,我也会得到一些以前没有或不懂的知识。这次编程让我初次感受到了结对编程的乐趣,希望下次能够继续体验。

最后附上一张我们的认真工作照:

 

     

 

posted @ 2016-04-08 22:57  魏鑫磊  阅读(925)  评论(1编辑  收藏  举报