结对编程-电梯调度
这次编程和前几次不同,这次是结对编程,就是一个人编码,一个人负责审查,两个人编程过程中要交换角色,不能全程一个人编程而另一个人只审查。我的结对队员是张心语。他是一个活泼开朗的大男孩,也是一个文艺小青年。可能是考研的原因,或者是其它什么原因,这次结对效果不是太理想,我多次找过他但他说有事,所以整个结对编程基本就是我一人在整,就连最后拍的结对照片也是为了满足老师的要求。虽然没有达到老师期望的结果,但我依然收获很大。从一开始看的题目的无从下手,到与人交流,再到最后编码,成长了很多,编程能力也得到了进一步的提升。以前对待一个编程题目就是有啥想法就写,效率不高,效果不好,自从上了软件工程这门课。让我知道对于软件开发,编代码只是其中的一小部分。买了邹欣老师的现代软件工程《构建之法》的书,看来以后给我启发很大。
1 题目要求:
2 需求分析:
一 四部电梯分单双层载人数和载重量;
二 显示运行状态和所到达楼层;
三 每到一层判断是否有人按电梯;
四 电梯要到请求曾等待上下人;
五 实现动态存储,将电梯没有及时响应的信息保存下来;
3 功能实现:
一 判断是否超载函数,四部电梯载人数和载重量各不相同,我就写了四个函数。
void overload1()
{
int x;
float y;
printf("请输入人数和体重\n");
scanf("%d%f",&x,&y);
while(x>10||y>800)
{
printf("电梯超载!请重新输入人数和体重\n");
scanf("%d%f",&x,&y);
}
printf("没有超载电梯可以运行!\n");
}
void overload2()
{
int x;
float y;
printf("请输入人数和体重\n");
scanf("%d%f",&x,&y);
while(x>10||y>800)
{
printf("电梯超载!请重新输入人数和体重\n");
scanf("%d%f",&x,&y);
}
printf("没有超载电梯可以运行!\n");
}
void overload3()
{
int x;
float y;
printf("请输入人数和体重\n");
scanf("%d%f",&x,&y);
while(x>20||y>1600)
{
printf("电梯超载!请重新输入人数和体重\n");
scanf("%d%f",&x,&y);
}
printf("没有超载电梯可以运行!\n");
}
void overload4()
{
int x;
float y;
printf("请输入人数和体重\n");
scanf("%d%f",&x,&y);
while(x>20||y>2000)
{
printf("电梯超载!请重新输入人数和体重\n");
scanf("%d%f",&x,&y);
}
printf("没有超载电梯可以运行!\n");
}
二 定义一个电梯的结构体数组大小是21,用于存放每个楼层是否有人按电梯,是上楼还是下楼,并存放按电梯人所在楼层和目标楼层。
struct lift_info
{
int flag3;
int f;
int g;
}lift[21];
三 上下楼判断并执行函数。
{
printf("请输入您想上楼还是想下搂\n");
printf("上楼请输入1,下楼请输入2:\n");
scanf("%d",&flag1);
if(flag1==1)
{
printf("请输入您当前所在楼层和要去的楼层(0-20)\n");
scanf("%d%d",&a,&b);
while(a>=b||(a<0||b<0||a>20||b>20))
{
printf("输入错误请重新输入!\n");
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!\n");
scanf("%d",&flag2);
if(flag2==1)
{
printf("请输入您想上楼还是想下搂\n");
printf("上楼请输入1,下楼请输入2:\n");
scanf("%d",&flag1);
if(flag1==1)
{
printf("请输入您当前所在楼层和要去的楼层(0-20)\n");
scanf("%d%d",&a,&b);
while(a>=b||(a<0||b<0||a>20||b>20))
{
printf("输入错误请重新输入!\n");
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)\n");
scanf("%d%d",&a,&b);
while(a>=b||(a<0||b<0||a>20||b>20))
{
printf("输入错误请重新输入!\n");
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("电梯正在上升\n");
Sleep(N);
printf("电梯到达第%d楼\n",num+1);
}
else if(lift[num].flag3%2==flag1)
{
printf("电梯到达你所在楼层\n");
printf("电梯正在上下人请等待!\n");
Sleep(N);
overload1();
printf("电梯正在上升\n");
Sleep(N);
printf("电梯到达第%d楼\n",num+1);
}
}
printf("电梯到达最高目标楼层!\n");
}
if(flag1==2)
{
printf("请输入您当前所在楼层和要去的楼层(0-20)\n");
scanf("%d%d",&a,&b);
while(a<=b||(a<0||b<0||a>20||b>20))
{
printf("输入错误请重新输入!\n");
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!\n");
scanf("%d",&flag2);
if(flag2==1)
{
printf("请输入您想上楼还是想下搂\n");
printf("上楼请输入1,下楼请输入2:\n");
scanf("%d",&flag1);
if(flag1==1)
{
printf("请输入您当前所在楼层和要去的楼层(0-20)\n");
scanf("%d%d",&a,&b);
while(a>=b||(a<0||b<0||a>20||b>20))
{
printf("输入错误请重新输入!\n");
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)\n");
scanf("%d%d",&a,&b);
while(a>=b||(a<0||b<0||a>20||b>20))
{
printf("输入错误请重新输入!\n");
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("电梯正在下降\n");
Sleep(N);
printf("电梯到达第%d楼\n",num+1);
}
else if(lift[num].flag3%2==flag1)
{
printf("电梯到达你所在楼层\n");
printf("电梯正在上下人请等待!\n");
Sleep(N);
overload1();
printf("电梯正在上升\n");
Sleep(N);
printf("电梯到达第%d楼\n",num+1);
}
}
printf("电梯到达最低目标楼层!\n");
}
四 这是主函数用于用户选则
void main()
{
int i;
printf("请输入您选择的电梯!\n");
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("输入错误请重新输入!\n");break;
}
}
}
4 程序运行调试:
5 总结:
对于这次结对编程我是怀着尝试和好奇的心情开始的,在老师发布结对作业第二天我就开始着手想这个电梯调度该怎么写,虽然没开始编程,但是大体思路已经在构思了。电梯是人们日常生活中时时用到的东西,觉着很有实际意义。我们学过c和c++但我还是习惯于用c,但是c我无法做出好的用户界面,在与同学的交流中我发现他们用java开发的界面就非常好看,但是我不会java,知道了它的优点之后,我当时就决定买java书和下载视频自学。所谓技多不压身,多会点东西总是好的,虽然我更对硬件感兴趣。我找我的队友讨论如何实现这个电梯调度,但它兴趣不在这上面,我也不好强求,就决定自己一人写,虽然工作量比其他组大点,我想我多花点时间就行了。但在实际开发中还是遇到了很多困难,无法模拟现实生活中电梯的运行,无法让四部电梯独立运行,对于电梯在运行过程中如果有人按电梯该如何响应,如何实现上下人,困扰了我很久。一度想到了放弃,心想队友对此不上心,一个人也想不明白,但我看到了软工群里发的有其他人写的好的博客,行百里者半九十,也许现实生活中遇到的困难比这大多了,坚持最难!于是我就开始查资料和同学交流,着手开始编程,这一个星期除了上课时间,基本就用来想这个程序了,我已经确定是考研的,每天都给自己安排了考研的书看,虽然这一个星期没看考研书,但我觉得值,考研也是如此,最难的是坚持。对于这个电梯程序还有许多不够完善的地方,比如不能四部电梯独立运行,测试数据不够多,界面不太美观,代码效率不高,有些功能未能实现,但我会继续改进的。通过这次编程我知道了自己的代码还不够规范,基础还不够扎实,有些心浮气躁,自己要学的东西还有很多不能够局限于书本,要有克服困难的勇和决心。
队友:张心语 博客链接:http://www.cnblogs.com/XinyuZL/
结对编程照片: