结对编程作业——电梯调度

作业要求:

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


电梯编号


可服务楼层


最大乘客数量


最大载重量


1


全部楼层


10


800 kg


2


单层


10


800 kg


3


双层


20


1600 kg


4


全部楼层


20


2000 kg

其使用规定如下:

1、楼层号为0~20,其中0号为地下一层;

2、有楼层限制的电梯不在响应楼层停靠,如单双层;

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

请根据上述要求设计并实现一个电梯控制程序,如果有图形显示就更好了。

需求分析:

1、共有4部电梯,分单双层停靠和全部楼层都停靠。

2、用户在任意层请求,距离最近的电梯响应乘客要求。

3、随时显示各个电梯运行状态和所在层数。

4、随时接受用户输入,电梯可以同时运行。

源程序:

定义结构体elevator,结构体中有5个成员,分别是状态(int staus)、类型(int type)、楼层数(int floor)、是否被调用(int beixuyao)和是否有人用电梯(int flag)。

typedef struct elevator
{
	int staus;//三种状态:静止,上行,下行
	int type;//三种类型:双,单,全
	int floor;//此时停在的楼层数
	int beixuyao;//此楼层是否被调用
	int flag;//是否有人用电梯
}B;

查找电梯函数int Lookfor(int x, int y, int z)。电梯有三种状态,分别是静止、上升和下降。

当电梯静止时,a[x].staus == 0;

当电梯上升时,a[x].staus == 1;

当电梯下降时,a[x].staus == 2。

电梯静止时,求出用户所在楼层和电梯所在楼层的距离;

电梯上升时,且用户请求方向为上,电梯所在楼层比用户所在楼层低,则电梯响应用户的需求,并求出距离。

电梯下降时,且用户请求方向为下,电梯所在楼层比用户所在楼层高,则电梯响应用户的需求,并求出距离。

其他情况,电梯不停。

int Lookfor(int x, int y, int z)//查找电梯函数
{
	int c;
	if (a[x].staus == 0)//此时a[x]电梯处于静止状态
	{
		if (y < z)
		{
			c = z - y;
		}
		else
		{
			c = y - z;
		}
	}
	if (a[x].staus == 1)//此时a[x]电梯处于上升状态
	{
		if (y > z&&dir == 1)
		{
			c = y - z;
		}
		else
		{
			printf("此电梯不能响应用户的请求");
		}
	}
	if (a[x].staus == 2)//此时a[x]电梯处于下降状态
	{
		if (y < z &&dir == 0)
		{
			c = z - y;
		}
		else
		{
			printf("此电梯不能响应用户的请求");
		}
	}
	return c;
}

初始化部分:

所有电梯最初处于静止状态。

1号电梯初始楼层为-1,a[0].floor = -1;所有楼层均能响应。

2号电梯初始楼层为7,a[1].floor = 7;单层响应。

3号电梯初始楼层为14,a[2].floor = 14;双层响应。

4号电梯初始楼层为20,a[3].floor = 20;所有楼层均能响应。

用户在界面中输入自己的需求。

	printf("       ----       ----       ----       ---- \n");
	printf("      |    |     |    |     |    |     |    |\n");
	printf("        -1         7          14         20  \n");
	printf("      |    |     |    |     |    |     |    |\n");
	printf("       ----       ----       ----       ---- \n");
	while (1)
	{
		a[0].staus = 0;
		a[1].staus = 0;
		a[2].staus = 0;
		a[3].staus = 0;
		a[0].floor = -1;
		a[1].floor = 7;//表示此时电梯停在的楼层数为7楼
		a[2].floor = 14;
		a[3].floor = 20;
		a[0].type = 2;//一号电梯所有楼层都停靠
		a[1].type = 1;//二号电梯单号楼层都停靠
		a[2].type = 0;//三号电梯双号楼层都停靠
		a[3].type = 2;//四号电梯所有楼层都停靠
		int i, min, p;
		int flag1 = 0, j = 0;
		printf("----------------------------------------------\n");
		printf("若要用电梯请按按钮 1 !\n");
		scanf("%d", &flag);//此时是否有人按电梯
		if (flag == 1)
		{
			printf("*****此时有用户按电梯!*****\n");
		}
		printf("用户所在楼层为: ");
		scanf("%d", &floor);//此时按电梯的人所在的楼层数
		printf("上楼请按 1 ,下楼请按 0: ");
		scanf("%d", &dir);//用户请求是上楼还是下楼标记
		printf("请选择要去的楼层: ");
		scanf("%d", &gofloor);//用户要去的楼层

共有上楼和下楼两种情况:

上楼:dir=1;大体分为两种情况,每个情况中又有两个小分支。

第一种情况:

1、用户在偶数层,要求奇数楼层:查找全部楼层都停靠的电梯,并标记为1,即a[i].beixuyao = 1;否则标记为0,a[i].beixuyao = 0。调用Lookfor函数,查找距离最近的电梯。

2、用户在偶数层,要求偶数楼层:查找全部楼层都停靠的电梯和偶数层停靠的电梯,并标记为1,即a[i].beixuyao = 1;否则标记为0,a[i].beixuyao = 0。调用Lookfor函数,查找距离最近的电梯。

                                if (floor % 2 == 0)//用户所在为偶数楼层
				{
					if (gofloor % 2 == 1)//用户要去奇数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
					if (gofloor % 2 == 0)//用户要去偶数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2 || a[i].type == 0)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
				}

第二种情况:

1、用户在奇数层,要求奇数楼层:查找全部楼层都停靠的电梯和奇数层停靠的电梯,并标记为1,即a[i].beixuyao = 1;否则标记为0,a[i].beixuyao = 0。调用Lookfor函数,查找距离最近的电梯。

2、用户在奇数层,要求偶数楼层:查找全部楼层都停靠的电梯,并标记为1,即a[i].beixuyao = 1;否则标记为0,a[i].beixuyao = 0。调用Lookfor函数,查找距离最近的电梯。

                                if (floor % 2 == 1)//用户所在为奇数楼层
				{
					if (gofloor % 2 == 1)//用户要去奇数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2 || a[i].type == 1)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
					if (gofloor % 2 == 0)//用户要去偶数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
				}
			}

下楼:dir=0;

其他部分下楼情况同上楼情况,此处就不再多做说明。

程序运行结果:

附录(完整源代码):

#include<stdio.h>
#include<windows.h>
typedef struct elevator
{
	int staus;//三种状态:静止,上行,下行
	int type;//三种类型:双,单,全
	int floor;//此时停在的楼层数
	int beixuyao;//此楼层是否被调用
	int flag;//是否有人用电梯
}B;
B a[4];
int flag, dir, floor, gofloor;
int c[3], k[3], m[3];
int Lookfor(int x, int y, int z)//查找电梯函数
{
	int c;
	if (a[x].staus == 0)//此时a[x]电梯处于静止状态
	{
		if (y < z)
		{
			c = z - y;
		}
		else
		{
			c = y - z;
		}
	}
	if (a[x].staus == 1)//此时a[x]电梯处于上升状态
	{
		if (y > z&&dir == 1)
		{
			c = y - z;
		}
		else
		{
			printf("此电梯不能响应用户的请求");
		}
	}
	if (a[x].staus == 2)//此时a[x]电梯处于下降状态
	{
		if (y < z &&dir == 0)
		{
			c = z - y;
		}
		else
		{
			printf("此电梯不能响应用户的请求");
		}
	}
	return c;
}
void main()
{
	//接人操作
	printf("       ----       ----       ----       ---- \n");
	printf("      |    |     |    |     |    |     |    |\n");
	printf("        -1         7          14         20  \n");
	printf("      |    |     |    |     |    |     |    |\n");
	printf("       ----       ----       ----       ---- \n");
	while (1)
	{
		a[0].staus = 0;
		a[1].staus = 0;
		a[2].staus = 0;
		a[3].staus = 0;
		a[0].floor = -1;
		a[1].floor = 7;//表示此时电梯停在的楼层数为7楼
		a[2].floor = 14;
		a[3].floor = 20;
		a[0].type = 2;//一号电梯所有楼层都停靠
		a[1].type = 1;//二号电梯单号楼层都停靠
		a[2].type = 0;//三号电梯双号楼层都停靠
		a[3].type = 2;//四号电梯所有楼层都停靠
		int i, min, p;
		int flag1 = 0, j = 0;
		printf("----------------------------------------------\n");
		printf("若要用电梯请按按钮 1 !\n");
		scanf("%d", &flag);//此时是否有人按电梯
		if (flag == 1)
		{
			printf("*****此时有用户按电梯!*****\n");
		}
		printf("用户所在楼层为: ");
		scanf("%d", &floor);//此时按电梯的人所在的楼层数
		printf("上楼请按 1 ,下楼请按 0: ");
		scanf("%d", &dir);//用户请求是上楼还是下楼标记
		printf("请选择要去的楼层: ");
		scanf("%d", &gofloor);//用户要去的楼层
		if (flag == 1)//用户按电梯
		{
			if (dir == 1)//用户要上楼
			{
				if (floor % 2 == 0)//用户所在为偶数楼层
				{
					if (gofloor % 2 == 1)//用户要去奇数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
					if (gofloor % 2 == 0)//用户要去偶数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2 || a[i].type == 0)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
				}
				if (floor % 2 == 1)//用户所在为奇数楼层
				{
					if (gofloor % 2 == 1)//用户要去奇数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2 || a[i].type == 1)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
					if (gofloor % 2 == 0)//用户要去偶数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
				}
			}
			if (dir == 0)//用户要下楼
			{
				if (floor % 2 == 0)//用户所在为偶数楼层
				{
					if (gofloor % 2 == 1)//用户要去奇数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
					if (gofloor % 2 == 0)//用户要去偶数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2 || a[i].type == 0)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
				}
				if (floor % 2 == 1)//用户所在为奇数楼层
				{
					if (gofloor % 2 == 1)//用户要去奇数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2 || a[i].type == 1)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
					if (gofloor % 2 == 0)//用户要去偶数楼层
					{
						for (i = 0; i < 4; i++)
						{
							if (a[i].type == 2)
							{
								a[i].beixuyao = 1;
							}
							else
							{
								a[i].beixuyao = 0;
							}
							while (a[i].beixuyao == 1)
							{
								k[flag1] = Lookfor(i, floor, a[i].floor);
								m[flag1] = i;
								flag1++;
								a[i].beixuyao = 0;
							}
						}
						if (flag1 == 1)
						{
							if (k[j] < k[j + 1])
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j]);
								a[m[j]].floor = gofloor;
							}
							else
							{
								printf("离用户最近并且符合条件的电梯为:%d\n", m[j + 1]);
								a[m[j + 1]].floor = gofloor;
							}

						}
						else if (flag1 == 2)
						{
							if (k[0] < k[1])
							{
								if (k[0] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:0\n");
									a[0].floor = gofloor;
								}

								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
							else
							{
								if (k[1] < k[3])
								{
									printf("离用户最近并且符合条件的电梯为:1\n");
									a[1].floor = gofloor;
								}
								else
								{
									printf("离用户最近并且符合条件的电梯为:3\n");
									a[3].floor = gofloor;
								}
							}
						}
					}
				}
			}
		}
		else if (flag == 0)
		{
			printf("此时无人用电梯");
		}
		printf("       ----       ----       ----       ---- \n");
		printf("      |    |     |    |     |    |     |    |\n");
		printf("        %d         %d          %d         %d  \n", a[0].floor, a[1].floor, a[2].floor, a[3].floor);
		printf("      |    |     |    |     |    |     |    |\n");
		printf("       ----       ----       ----       ---- \n");
		printf("\n");
		printf("----------------------------------------------\n");
	}
}

 队友评价:

张倩同学是我这次结对编程的搭档,大学做了三年的同学,从大一就是很好朋友,不存在任何交流障碍,班级同学与张倩的关系很融洽,都亲切的管张倩叫做倩姐!哈!

倩姐有很端正的学习态度,在这次编程的过程中也能很明显的表示出来,编程认真刻苦,有很强的逻辑能力,并且善于与对方进行讨论交流。

由于我的编程能力基础薄弱,倩姐帮助了我很多,并且寻求的其他同学的帮助。我们分工明确,编程过程中我主要负责审核和编写查找函数的工作,在审核的过程中,我发现倩姐的编程格式很规范,心很细,有钻研精神,并且很有耐心,注重页面设计的美观,遇到问题不急不躁,把注意力全部集中到问题的解决上,手机震动时都不会打断她的解决问题的过程。

总结:

这次编程作业对我们俩来说难度很大,虽然最后的结果不是很完美,但是我通过这次编程的过程学习到了很多,加强了专业课的学习,在实践过程中,学习到了课本中学不到的内容,对课本中不太明白的知识点也有了更深的理解,相信在以后的实践过程中能够更加熟练的运用知识。我们的程序还有很多需要改进的地方,比如界面不够美观,看了同学编写的程序界面,有按钮和图形显示,这是我们程序不完善的一部分。我们在课余时间要打算学习一下这方面的知识。

张倩的博客:http://www.cnblogs.com/zhangqian0310/p/5372231.html

时间: 2024-10-05 12:24:00

结对编程作业——电梯调度的相关文章

结对编程之电梯调度

编程任务:电梯调度 结对人员:左少辉-12061209,杨昊兰-12061202,吕雨朗 一.此次软工作业确实是让人却步的不敢开始,不过结对编程使得我对完成作业又有了信心,开始没有积极组队的我落单了,后来只能是申请加入已经组好的队伍,所以我们其实是一个三人组,都说人多力量大,想法也就会开阔许多,做起作业来也会顺利许多.起初对作业不是很了解,光是看英文要求就已经醉了,后来还是硬着头皮开始了漫长的代码阅读,浅学c#觉得语法也就一般般,不过看到如此绚丽的代码还是各种懵~确实一个人做起来简直是困难,但是

结对编程:电梯调度

电梯调度项目: 项目分析与需求: 从题目上来看,项目要求编写一个掌控电梯的程序.电梯这个东西,大家都乘过,无非就是:乘客上电梯,判断是否超重,乘客选择想要达到的楼层,最后依次去到离需求最近的一个楼层. 项目中要求有四个电梯,其中第一号和第四号电梯是一模一样的,只需要把负载量给修改即可:第二和第三也大同小异,只需要把负载量和输入楼层的判断方式修改一下即可. 在我们的设想中,我们要达到的效果是这样的:得有一个switch语句,来控制一开始的电梯选择界面:之后在case语句之后相应搭载各种需要的语句以

结对编程项目——电梯调度

电梯调度 现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 可服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800 kg 2 单层 10 800 kg 3 双层 20 1600 kg 4 全部楼层 20 2000 kg 其使用规定如下: 1.楼层号为0~20,其中0号为地下一层: 2.有楼层限制的电梯不在响应楼层停靠,如单双层: 3.所有电梯采用统一按钮控制 请根据上述要求设计并实现一个电梯控制程序,如果有图形显示就更好了. 伙伴介绍与评价: 本次结

结对编程项目--电梯调度(合作伙伴叶思维)

我们所完成的项目是电梯调度,具体要求如下: 一.项目以及合作伙伴 项目:现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 客服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800kg 2 单层 10 800kg 3 双层 20 1600kg 4 全部楼层 20 2000kg 其使用规定如下: 1.楼层号为0到20,其中0为地下一层. 2.有楼层限制的电梯不在响应楼层停靠,如单双层. 3.所有电梯采用统一按钮标志. 合作伙伴:叶思维博客网址http://

结对作业—电梯调度

现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 可服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800 kg 2 单层 10 800 kg 3 双层 20 1600 kg 4 全部楼层 20 2000 kg 其使用规定如下: 1.楼层号为0~20,其中0号为地下一层: 2.有楼层限制的电梯不在响应楼层停靠,如单双层: 3.所有电梯采用统一按钮控制 上面是结对编程题目要求,我的小伙伴是白新宇:http://home.cnblogs.com/u/bai

结对编程作业

这是第一次尝试结对编程,在本次结对编程作业中为了更好地体会它的好处和特点,我和我的搭档分别扮演了驾驶员和领航者的角色. 作为驾驶员:在我编程的过程中,出现了一些小问题,比如忘加分号,这些小问题可以及时的发现.有时我也会问我的领航者一些疑问,省去了上网查资料的过程,提高了编程的效率.在代码复审的过程中,有的问题我在自己调试的时候没有发现.比如输入某些数据的时候,离黄金点最近的玩家得0分.还有程序的功能上的一些缺陷,也被进一步完善.编程的时候我们会有一些交流,交流使我们互相更加了解对方的编程风格,在

2016福州大学软件工程第二次结对编程作业成绩

在这里跟大家道个歉,由于国庆节基本都在参加婚礼的路上所以现在才把成绩统计汇总了一下,份子钱太吓人已经把不多的工资吃掉了,这个月要靠泡面度日了.你们可是要好好学习,好好赚钱,好出的起同学的份子钱啊.扯远了,第二次结对编程成绩统计如下: 学号 第二次结对编程 031402233 9.5 031402224 9.5 031402330 9.5 031402516 9 031402524 9 031402304 9 031402509 9 031402341 9 031402508 9 03140232

第三次作业----结对编程作业

黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值.提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分.玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动. 这次软件工程的作业是以结对编程的形式编写"黄金点游戏".结对编程是指两位程序员坐在同一工作台前开发软件与两位程序员

结对编程作业:四则运算

截止日期 2018年4月12日15:30 提交地址 https://github.com/eudaem/homework2 本次结对编程作业分为以下两种类型Core(计算核心)和UI(用户界面),每组任选一个完成,原则上两种类型题目各占一半 Core 像<构建之法>的人物阿超那样,写一个能自动生成小学四则运算题目并给出答案的命令行 "软件", 如果我们要把这个功能放到不同的环境中去(例如,命令行,Windows 图形界面程序,网页程序,手机App),就会碰到困难,因为目前代