结对编程——电梯调度

一.题目要求

二.程序设计

定义三个函数

int abs_(int a, int b, int c, int d);//判断响应满足请求最近的电梯号
int check(int goTo, int now);//检查电梯状态,并判断最近电梯是否满足条件(是否超重)
int call(int now, int goTo, int dir, int a);//响应用户请求

主函数

void main()
{
    while(1)
    {
        printf("输入所在楼层,前去的楼层,方向\n");
        int dir;
        int goTo, now;
        int i;
        scanf("%d%d%d", &now, &goTo, &dir);
        i = check(goTo, now);
        call(now, goTo, dir, i);
    }
}

判断满足相应的最近的电梯号函数

n为用户所在楼层,b,c,d是满足条件的电梯号。n与其他满足条件的电梯所在楼层做差,找出差值最小的电梯号,并返回。

int abs_(int n, int b, int c,int d)
{
    int a1, a2, a3,caller;
    a1 = n -ele[b].now;
    if (a1 < 0)
        a1 = -a1;
    a2 = n- ele[c].now;
    if (a2 < 0)
        a2 = -a2;
    a3 = n-ele[d].now;
    if (a3 < 0)
        a3 = -a3;
    if (a1 < a2)
    {
        caller = b;
        if (a1 < a3)
            caller = b;
        else
            caller = d;
    }
    else
    {
        caller = c;
        if (a2 < a3)
            caller = c;
        else
            caller = d;
    }
    return caller;
}

查询函数,形参是用户所在楼层以及要去的楼层,若所在楼层与要到达楼层同为奇数或同为偶数则调用abs_()函数判断最近电梯号,反之直接判断全停的电梯是否满足。并判断满足条件的电梯是否人满。返回满足条件的电梯号。

int check (int goTo, int now)
{
    int a;
    if (now % 2 == 0&&goTo%2==0)
    {
        if (ele[0].num > 10)//一号电梯是满
        {
            if (ele[2].now < ele[3].now)
                a = 2;
            else
                a = 3;
        }
        else if (ele[2].num>20)//三号电梯满
        {
            if (ele[0].now < ele[3].now)
                a = 0;
            else
                a = 3;
        }
        else if (ele[3].num>20)//四号电梯满
        {
            if (ele[2].now < ele[0].now)
                a = 2;
            else
                a = 0;
        }
        else            //都不满
            a = abs_(now, 0, 2, 3);
    }
    if (now % 2 == 0 && goTo % 2 == 1)//位于偶数层要去奇数层
    {
        if (ele[0].now<ele[3].now)
            a = 0;
        else
            a = 3;
    }
    if (now % 2 == 1 && goTo % 2 == 0)//位于奇数层要去偶数层
    {
        if (ele[0].now<ele[3].now)
            a = 0;
        else
            a = 3;
    }
    if (now % 2 == 1&&goTo%2==1)
    {
        if (ele[0].num > 10)//一号电梯是满
        {
            if (ele[1].now < ele[3].now)
                a = 1;
            else
                a = 3;
        }
        else if (ele[1].num>10)//二号电梯满
        {
            if (ele[0].now < ele[3].now)
                a = 0;
            else
                a = 3;
        }
        else if (ele[3].num>20)//四号电梯满
        {
            if (ele[1].now < ele[0].now)
                a = 1;
            else
                a = 0;
        }
        else            //都不满
            a = abs_(now, 0, 1, 3);
    }
    return a;
}

调用电梯函数。形参为用户所在楼层,目的楼层,运行方向(1上,-1下,0静止)。如果电梯满足条件,则更改电梯的楼层为用户目的楼层,运行状态也随之更改,人员数增加;

到达后电梯运行状态更改静止,人员数减少

int call(int now,int goTo,int dir,int a)
{
    if (dir == 1 && ele[a].dir == 1 && now > ele[a].now)//等于1为向上运行
    {
        ele[a].num++;
        ele[a].now = now;
        printf("the elevator %d is coming to your spot -- %d\n",a,now);
        printf("now,the are/is %d people in elevator\n", ele[a].num);
        ele[a].now = goTo;
        ele[a].dir = 1;
        printf("now,we are goning to floor %d\n",goTo);
        printf("OK!Here we are!\n");
        ele[a].num--;
        ele[a].dir = 0;
        printf("now,the are/is %d people in elevator\n", ele[a].num);
    }
    else if (dir == 1 && ele[a].dir == 0)
    {
        ele[a].num++;
        ele[a].now = now;
        printf("the elevator %d is coming to your spot -- %d\n",a, now);
        printf("the are/is %d people in elevator\n", ele[a].num);
        ele[a].now = goTo;
        ele[a].dir = 1;
        printf("now,we are goning to floor %d\n", goTo);
        printf("OK!Here we are!\n");
        ele[a].num--;
        ele[a].dir = 0;
        printf("now,the are/is %d people in elevator\n", ele[a].num);
    }
    if (dir == -1 && ele[a].dir == -1 && now < ele[a].now)//-1向下运行
    {
        ele[a].num++;
        ele[a].now = now;
        printf("the elevator %d is coming to your spot -- %d\n", a, now);
        printf("the are/is %d people in elevator\n", ele[a].num);
        ele[a].now = goTo;
        ele[a].dir = -1;
        printf("now,we are goning to floor %d\n", goTo);
        printf("OK!Here we are!\n");
        ele[a].num--;
        ele[a].dir = 0;
        printf("now,the are/is %d people in elevator\n", ele[a].num);
    }
    else if (dir == -1 && ele[a].dir == 0)
    {
        ele[a].num++;
        ele[a].now = now;
        printf("the elevator %d is coming to your spot -- %d\n", a, now);
        printf("the are/is %d people in elevator\n", ele[a].num);
        ele[a].now = goTo;
        ele[a].dir = -1;
        printf("now,we are goning to floor %d\n", goTo);
        printf("OK!Here we are!\n");
        ele[a].num--;
        ele[a].dir = 0;
        printf("now,the are/is %d people in elevator\n", ele[a].num);
    }
    return 0;
}

三.运行结果截图

图形学学术不精,便在输出上做文章。。。

四.过程总结

1.结对人员,孙宇宏,博客链接http://www.cnblogs.com/u/syh111/

团队工作照

2.对队友的评价

    其实在结对编程前跟队友并没有太多的交流,因为这次作业才有了解。初次接触孙宇宏同学感觉他的性格可能有点内向,不过我们的作业完成的很顺利。

3.对于编程

    开始之前,我们对于需求分析进行了详细的讨论,并且很快的达成一致,开始程序设计。我们采用一人编程,一人审核的形式,我来编程,孙宇宏同学负责审核。个人觉得审核的工作很重要,当然也不轻松。

     为了避免出现格式错误,我们严格按照代码规范写程序。

4.此次作业总结

经过这次的编程,对老师所说的结对编程有了更深层的体会,对于上课听得觉得不理解的地方也是经过这次作业而明白的其中问题,解决方法。

再就是对于自己能力问题的思考了。开始前,我们对需求分析做的很多,认为电梯程序就应该是那样,毕竟每天都在用,有什么功能也都很清楚。但是开始写代码的时候却有点力不从心了。觉得对于有的功能就自己目前的能力没办法实现,不禁的怀疑自己上课都干嘛了……没时间自怨自艾了,现在开始,就自己现在的水平尽力去做!虽然对于现在完成的程序不太满意,但是我不会停止学习的步伐!待我学成之日,便是电梯运行之时!!

posted @ 2016-04-09 09:26  崔露露  阅读(232)  评论(5编辑  收藏  举报