• 结对编程-电梯调度


    这次编程和前几次不同,这次是结对编程,就是一个人编码,一个人负责审查,两个人编程过程中要交换角色,不能全程一个人编程而另一个人只审查。我的结对队员是张心语。他是一个活泼开朗的大男孩,也是一个文艺小青年。可能是考研的原因,或者是其它什么原因,这次结对效果不是太理想,我多次找过他但他说有事,所以整个结对编程基本就是我一人在整,就连最后拍的结对照片也是为了满足老师的要求。虽然没有达到老师期望的结果,但我依然收获很大。从一开始看的题目的无从下手,到与人交流,再到最后编码,成长了很多,编程能力也得到了进一步的提升。以前对待一个编程题目就是有啥想法就写,效率不高,效果不好,自从上了软件工程这门课。让我知道对于软件开发,编代码只是其中的一小部分。买了邹欣老师的现代软件工程《构建之法》的书,看来以后给我启发很大。

    1 题目要求:

     

     2 需求分析:

    一 四部电梯分单双层载人数和载重量;

    二 显示运行状态和所到达楼层;

    三 每到一层判断是否有人按电梯;

    四 电梯要到请求曾等待上下人;

    五 实现动态存储,将电梯没有及时响应的信息保存下来;

    3 功能实现:

    一 判断是否超载函数,四部电梯载人数和载重量各不相同,我就写了四个函数。

    void overload1()
    {
        int x;
        float y;
        printf("请输入人数和体重 ");
        scanf("%d%f",&x,&y);
        while(x>10||y>800)
          {
             printf("电梯超载!请重新输入人数和体重 ");
             scanf("%d%f",&x,&y);
          }
          printf("没有超载电梯可以运行! ");
    }
    void overload2()
    {
         int x;
         float y;
        printf("请输入人数和体重 ");
        scanf("%d%f",&x,&y);
        while(x>10||y>800)
         {
            printf("电梯超载!请重新输入人数和体重 ");
            scanf("%d%f",&x,&y);
         }
            printf("没有超载电梯可以运行! ");
    }
    void overload3()
    {
        int x;
        float y;
        printf("请输入人数和体重 ");
        scanf("%d%f",&x,&y);
        while(x>20||y>1600)
          {
             printf("电梯超载!请重新输入人数和体重 ");
             scanf("%d%f",&x,&y);
          }
            printf("没有超载电梯可以运行! ");
    }
    void overload4()
    {
         int x;
        float y;
        printf("请输入人数和体重 ");
        scanf("%d%f",&x,&y);
       while(x>20||y>2000)
         {
             printf("电梯超载!请重新输入人数和体重 ");
             scanf("%d%f",&x,&y);
         }
            printf("没有超载电梯可以运行! ");
    }

    二 定义一个电梯的结构体数组大小是21,用于存放每个楼层是否有人按电梯,是上楼还是下楼,并存放按电梯人所在楼层和目标楼层。

    struct lift_info
     {
       int flag3;
       int f;
       int g;
     }lift[21];

    三 上下楼判断并执行函数。
      {
           printf("请输入您想上楼还是想下搂 ");
           printf("上楼请输入1,下楼请输入2: ");
           scanf("%d",&flag1);
        if(flag1==1)
        {
         printf("请输入您当前所在楼层和要去的楼层(0-20) ");
               scanf("%d%d",&a,&b);
            while(a>=b||(a<0||b<0||a>20||b>20))
       {
        printf("输入错误请重新输入! ");
                 scanf("%d%d",&a,&b);
       }
       lift[a].flag3=lift[a].flag3+flag1;
       lift[b].flag3=lift[b].flag3+flag1;
             lift[i].f=a; 
       lift[i].g=b;
       i++;
       for(j=1;j<21;j++)
        for(t=0;t<20;t++)
         if(lift[t].g>lift[t+1].g)
         {
          p=lift[t].g;
                         lift[t].g=lift[t+1].g;
                         lift[t+1].g=p;
         }
               for(num=0;num<lift[20].g;num++)
         {
                      printf("是否有人按电梯,如果有请输入1,没有请输入0! ");
                scanf("%d",&flag2);
          if(flag2==1)
          {
           printf("请输入您想上楼还是想下搂 ");
           printf("上楼请输入1,下楼请输入2: ");
           scanf("%d",&flag1);
           if(flag1==1)
           {
                       printf("请输入您当前所在楼层和要去的楼层(0-20) ");
                             scanf("%d%d",&a,&b);
                             while(a>=b||(a<0||b<0||a>20||b>20))
           {
                     printf("输入错误请重新输入! ");
                              scanf("%d%d",&a,&b);
           }
                      lift[a].flag3=lift[a].flag3+flag1;
                      lift[b].flag3=lift[b].flag3+flag1;
                            lift[i].f=a; 
                      lift[i].g=b;
                      i++;
           }
                          if(flag1==2)
           {
                     printf("请输入您当前所在楼层和要去的楼层(0-20) ");
                           scanf("%d%d",&a,&b);
                            while(a>=b||(a<0||b<0||a>20||b>20))
          {
                     printf("输入错误请重新输入! ");
                              scanf("%d%d",&a,&b);
          }
                      lift[a].flag3=lift[a].flag3+flag1;
                      lift[b].flag3=lift[b].flag3+flag1;
                            lift[i].f=a; 
                      lift[i].g=b;
                      i++;
           }
          }
          if(lift[num].flag3==0)
          {
            printf("电梯正在上升 ");
               Sleep(N);
            printf("电梯到达第%d楼 ",num+1);
          }
            else if(lift[num].flag3%2==flag1)
         {
                       printf("电梯到达你所在楼层 ");
           printf("电梯正在上下人请等待! ");
           Sleep(N);
           overload1();
                       printf("电梯正在上升 ");
              Sleep(N);
           printf("电梯到达第%d楼 ",num+1);
         }

         }
         printf("电梯到达最高目标楼层! ");

        }
          if(flag1==2)
        {
         printf("请输入您当前所在楼层和要去的楼层(0-20) ");
               scanf("%d%d",&a,&b);
            while(a<=b||(a<0||b<0||a>20||b>20))
       {
        printf("输入错误请重新输入! ");
                 scanf("%d%d",&a,&b);
       }
       lift[a].flag3=lift[a].flag3+flag1;
       lift[b].flag3=lift[b].flag3+flag1;
             lift[i].f=a; 
       lift[i].g=b;
       i++;
               for(j=1;j<21;j++)
        for(t=0;t<20;t++)
         if(lift[t].g>lift[t+1].g)
         {
          p=lift[t].g;
                         lift[t].g=lift[t+1].g;
                         lift[t+1].g=p;
         }
                for(j=1;j<21;j++)
        for(t=0;t<20;t++)
         if(lift[t].f>lift[t+1].f)
         {
          p=lift[t].f;
                         lift[t].f=lift[t+1].f;
                         lift[t+1].f=p;
         }
               for(j=0;j<21;j++)
         {
          if(lift[j].f!=-1)
           break;
         } 
               for(j=0;j<21;j++)
         {
          if(lift[j].g!=-1)
           break;
         }
               for(num=lift[j].f;num>lift[j].g;num--)
         {
                      printf("是否有人按电梯,如果有请输入1,没有请输入0! ");
                scanf("%d",&flag2);
          if(flag2==1)
          {
           printf("请输入您想上楼还是想下搂 ");
           printf("上楼请输入1,下楼请输入2: ");
           scanf("%d",&flag1);
           if(flag1==1)
           {
                       printf("请输入您当前所在楼层和要去的楼层(0-20) ");
                             scanf("%d%d",&a,&b);
                             while(a>=b||(a<0||b<0||a>20||b>20))
           {
                     printf("输入错误请重新输入! ");
                              scanf("%d%d",&a,&b);
           }
                      lift[a].flag3=lift[a].flag3+flag1;
                      lift[b].flag3=lift[b].flag3+flag1;
                            lift[i].f=a; 
                      lift[i].g=b;
                      i++;
           }
                          if(flag1==2)
           {
                     printf("请输入您当前所在楼层和要去的楼层(0-20) ");
                           scanf("%d%d",&a,&b);
                            while(a>=b||(a<0||b<0||a>20||b>20))
          {
                     printf("输入错误请重新输入! ");
                              scanf("%d%d",&a,&b);
          }
                      lift[a].flag3=lift[a].flag3+flag1;
                      lift[b].flag3=lift[b].flag3+flag1;
                            lift[i].f=a; 
                      lift[i].g=b;
                      i++;
           }
          }
          if(lift[num].flag3==0)
          {
            printf("电梯正在下降 ");
               Sleep(N);
            printf("电梯到达第%d楼 ",num+1);
          }
            else if(lift[num].flag3%2==flag1)
         {
                       printf("电梯到达你所在楼层 ");
           printf("电梯正在上下人请等待! ");
           Sleep(N);
           overload1();
                       printf("电梯正在上升 ");
              Sleep(N);
           printf("电梯到达第%d楼 ",num+1);
         }
         }
                 printf("电梯到达最低目标楼层! ");
        }

    四 这是主函数用于用户选则

    void main()
    {  
        int i;
        printf("请输入您选择的电梯! ");
        scanf("%d",&i);
        while(1)
         {
            switch(i)
              {
                  case 1:lift1();break;
                  case 2:lift2();break;
                  case 3:lift3();break;
                  case 4:lift4();break;
                  default:printf("输入错误请重新输入! ");break;
               }
         }
    }

    4 程序运行调试:


        

     5 总结:

    对于这次结对编程我是怀着尝试和好奇的心情开始的,在老师发布结对作业第二天我就开始着手想这个电梯调度该怎么写,虽然没开始编程,但是大体思路已经在构思了。电梯是人们日常生活中时时用到的东西,觉着很有实际意义。我们学过c和c++但我还是习惯于用c,但是c我无法做出好的用户界面,在与同学的交流中我发现他们用java开发的界面就非常好看,但是我不会java,知道了它的优点之后,我当时就决定买java书和下载视频自学。所谓技多不压身,多会点东西总是好的,虽然我更对硬件感兴趣。我找我的队友讨论如何实现这个电梯调度,但它兴趣不在这上面,我也不好强求,就决定自己一人写,虽然工作量比其他组大点,我想我多花点时间就行了。但在实际开发中还是遇到了很多困难,无法模拟现实生活中电梯的运行,无法让四部电梯独立运行,对于电梯在运行过程中如果有人按电梯该如何响应,如何实现上下人,困扰了我很久。一度想到了放弃,心想队友对此不上心,一个人也想不明白,但我看到了软工群里发的有其他人写的好的博客,行百里者半九十,也许现实生活中遇到的困难比这大多了,坚持最难!于是我就开始查资料和同学交流,着手开始编程,这一个星期除了上课时间,基本就用来想这个程序了,我已经确定是考研的,每天都给自己安排了考研的书看,虽然这一个星期没看考研书,但我觉得值,考研也是如此,最难的是坚持。对于这个电梯程序还有许多不够完善的地方,比如不能四部电梯独立运行,测试数据不够多,界面不太美观,代码效率不高,有些功能未能实现,但我会继续改进的。通过这次编程我知道了自己的代码还不够规范,基础还不够扎实,有些心浮气躁,自己要学的东西还有很多不能够局限于书本,要有克服困难的勇和决心。

    队友:张心语 博客链接:http://www.cnblogs.com/XinyuZL/

    结对编程照片:

  • 相关阅读:
    js实现页面跳转,location.href和location.replace和location.reload的区别
    Object.create()和new 创建对象的区别
    apply、call、bind区别、用法
    JavaScript toString() 函数详解
    javascript中this指针详解
    javascript中null 和 undefined的区别
    jQuery 图片轮流展示效果
    min-height 兼容
    css 命名规范
    移动端隐藏手机虚拟键盘
  • 原文地址:https://www.cnblogs.com/wangzongjie/p/5371937.html
Copyright © 2020-2023  润新知