结对编程-电梯调度

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

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/

结对编程照片:

原文地址:https://www.cnblogs.com/wangzongjie/p/5371937.html