zoukankan      html  css  js  c++  java
  • 结对编程-----电梯控制程序

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

    需求分析:

    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比较麻烦,一步一步跟踪,总会达到目的结果

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

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

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

         

  • 相关阅读:
    [转]数据库优化方法(三)
    [转]根据性能监视器,分析性能瓶颈
    sqlserver获取表名,字段名
    VBA SQLServer 基本操作
    oracle常见权限分配
    oracle 里面定时执行任务,比如存储过程内容等
    cisco 路由配置
    cisco LAN
    mongodb的启动参数--quiet
    mongodb的IO测试工具 mongoperf
  • 原文地址:https://www.cnblogs.com/wxl530/p/5370301.html
Copyright © 2011-2022 走看看