软件工程——实验二-结对编程

现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示,其使用规定如下:

① 楼层号为0~20,其中0号为地下一层

② 有楼层限制的电梯不在相应楼层停靠,如单双层

③ 所有电梯采用统一按钮控制

④ 请根据上述要求设计并实现一个电梯控制程序,使得用户平均等待时间尽可能小,如果有图形显示就更好了。

电梯编号

可服务楼层

最大乘客数量

最大载重量

1

全部楼层

10

800 kg

2

单层

10

800 kg

3

双层

10

800 kg

4

全部楼层

20

2000 kg

程序源码:

#include<stdio.h>
struct DTZT
{
    int ZT;
    int DSQTYPE;
    int CSTKLC;
    int BDY;
    int flag;
}a[4];
int flag, slxl, szlc, golc, lccz[3], dth[3], i, flag1 = 0;
int js(int x, int y, int z, int g) //计算楼层差值函数
{
    int c, b, sum;
    if (a[x].ZT == 0)//此时a[x]电梯处于静止状态
    {
        if (y == z)
            return 0;
        else if (y < z)
        {
            c = z - y;
            if (y > g)
            {
                b = y - g;
            }
            else
            {
                b = g - y;
            }
            sum = c + b;
        }
        else if (y > z)
        {
            c = y - z;
            if (y > g)
            {
                b = y - g;
            }
            else
            {
                b = g - y;
            }
            sum = c + b;
        }
        return sum;
    }
}

void SL_XL_formOtoJ_AND_fromJtoO()
{
    lccz[0] = js(0, szlc, a[0].CSTKLC, golc);
    lccz[1] = js(1, szlc, a[3].CSTKLC, golc);
    if (lccz[0] < lccz[1])
    {
        printf("离用户最近并且符合条件的电梯为:1号\n");
        a[0].CSTKLC = golc;
    }
    else
    {
        printf("离用户最近并且符合条件的电梯为:4号\n");
        a[3].CSTKLC = golc;
    }

}
void XL_SL_fromOtoO()
{
    lccz[0] = js(0, szlc, a[0].CSTKLC, golc);
    lccz[1] = js(1, szlc, a[2].CSTKLC, golc);
    lccz[2] = js(2, szlc, a[3].CSTKLC, golc);
    if (lccz[0] < lccz[1])
    {
        if (lccz[0] < lccz[2])
        {
            printf("离用户最近并且符合条件的电梯为:1号\n");
            a[0].CSTKLC = golc;
        }
        else
        {
            printf("离用户最近并且符合条件的电梯为:4号\n");
            a[3].CSTKLC = golc;
        }
    }
    else
    {
        if (lccz[1] < lccz[2])
        {
            printf("离用户最近并且符合条件的电梯为:3号\n");
            a[2].CSTKLC = golc;
        }
        else
        {
            printf("离用户最近并且符合条件的电梯为:4号\n");
            a[3].CSTKLC = golc;
        }
    }

}

void SL_XL_fromJtoJ()
{
    lccz[0] = js(0, szlc, a[0].CSTKLC, golc);
    lccz[1] = js(1, szlc, a[1].CSTKLC, golc);
    lccz[2] = js(2, szlc, a[3].CSTKLC, golc);
    if (lccz[0] < lccz[1])
    {
        if (lccz[0] < lccz[2])
        {
            printf("离用户最近并且符合条件的电梯为:1号\n");
            a[0].CSTKLC = golc;

        }
        else
        {
            printf("离用户最近并且符合条件的电梯为:4号\n");
            a[3].CSTKLC = golc;

        }
    }
    else
    {
        if (lccz[1] < lccz[2])
        {
            printf("离用户最近并且符合条件的电梯为:2号\n");
            a[1].CSTKLC = golc;

        }
        else
        {
            printf("离用户最近并且符合条件的电梯为:4号\n");
            a[3].CSTKLC = golc;

        }
    }
}

int  main() //接人操作
{
    printf("*   全部楼层    单层       双层      全部楼层\n");
    printf("*   ******     ******     ******     ******   *\n");
    printf("*    1号          2号        3号        4号    *\n");
    printf("***********************************************\n");
    printf("*   ******     ******     ******     ******   *\n");
    printf("*   |    |     |    |     |    |     |    |   *\n");
    printf("*     2          11         8          19    *\n");
    printf("*   |    |     |    |     |    |     |    |   *\n");
    printf("*   ******     ******     ******     ******   *\n");
    printf("***********************************************\n");
    a[0].ZT = 0;//三种状态:静止,上行,下行
    a[1].ZT = 0;
    a[2].ZT = 0;
    a[3].ZT = 0;
    a[0].CSTKLC = 2;//表示此时电梯停在的楼层数为1楼
    a[1].CSTKLC = 11;//表示此时电梯停在的楼层数为7楼
    a[2].CSTKLC = 8;//表示此时电梯停在的楼层数为14楼
    a[3].CSTKLC = 19;//表示此时电梯停在的楼层数为20楼
    a[0].DSQTYPE = 2;//一号电梯所有楼层都停靠
    a[1].DSQTYPE = 1;//二号电梯单号楼层都停靠
    a[2].DSQTYPE = 0;//三号电梯双号楼层都停靠
    a[3].DSQTYPE = 2;//四号电梯所有楼层都停靠
    int i;
    int flag1 = 0;
    int j = 0;
    printf("--------------------------------------------------\n");
    printf("使用电梯请按按钮 1 \n");
    scanf_s("%d", &flag);//此时是否有人按电梯 1
    if (flag == 1)
    {
        printf("*****此时有用户按电梯!*****\n");
    }
    printf("您所在楼层为: ");
    scanf_s("%d", &szlc);//此时按电梯的人所在的楼层数 5
    printf("上楼请按 1 ,下楼请按 0: ");
    scanf_s("%d", &slxl);//用户请求是上楼还是下楼标记 1
    printf("请选择要去的楼层: ");
    scanf_s("%d", &golc);//用户要去的楼层 15
    if (flag == 1 && slxl == 1 && szlc % 2 == 0 && golc % 2 == 1)//用户需要电梯上楼在偶数层要去奇数层
        SL_XL_formOtoJ_AND_fromJtoO();//计算上楼下楼奇数层去偶数层和偶数层去奇数层
    if (flag == 1 && slxl == 1 && szlc % 2 == 0 && golc % 2 == 0)//用户需要电梯上楼在偶数层要去偶数层
        XL_SL_fromOtoO();//计算上楼下楼偶数层去偶数层
    if (flag == 1 && slxl == 1 && szlc % 2 == 1 && golc % 2 == 0)//用户需要电梯上楼在奇数层要去偶数层
        SL_XL_formOtoJ_AND_fromJtoO();
    if (flag == 1 && slxl == 1 && szlc % 2 == 1 && golc % 2 == 1)//用户需要电梯上楼在奇数层要去奇数层
        SL_XL_fromJtoJ();//计算上楼下楼奇数层去奇数层
    if (flag == 1 && slxl == 0 && szlc % 2 == 0 && golc % 2 == 1)//用户需要电梯下楼在偶数层要去奇数层
        SL_XL_formOtoJ_AND_fromJtoO();
    if (flag == 1 && slxl == 0 && szlc % 2 == 0 && golc % 2 == 0)//用户需要电梯下楼在偶数层要去偶数层
        XL_SL_fromOtoO();
    if (flag == 1 && slxl == 0 && szlc % 2 == 1 && golc % 2 == 0)//用户需要电梯下楼在奇数层要去偶数层
        SL_XL_formOtoJ_AND_fromJtoO();
    if (flag == 1 && slxl == 0 && szlc % 2 == 1 && golc % 2 == 1)//用户需要电梯下楼在奇数层要去奇数层
        SL_XL_fromJtoJ();
    printf("***********************************************\n");
    printf("*   ******     ******     ******     ******   *\n");
    printf("*   |    |     |    |     |    |     |    |   *\n");
    printf("*   *  %2d     * %2d      *  %2d        *%2d     *\n", a[0].CSTKLC, a[1].CSTKLC, a[2].CSTKLC, a[3].CSTKLC);
    printf("*   |    |     |    |     |    |     |    |   *\n");
    printf("*   ******     ******     ******     ******   *\n");
    printf("***********************************************\n");
    return 0;
}

 

posted on 2022-11-13 09:48  AceSpilker  阅读(57)  评论(0)    收藏  举报

导航