简易十字路口智能红绿灯系统

/*(1)简易十字路口智能红绿灯系统
南北方向和东西方向的车辆交替运行,每个方向绿灯亮30秒,
两个方向可以根据车流量的大小自动调节通行时间。车流量大,通行时间增加30秒,车流量小,通行时间仍是30秒。

(2)在路灯转为红灯时,要求黄灯先亮3秒钟,才能变换运行车道。
*/

#include
#include
#include
#include
#include
using namespace std;


//绿灯30秒,黄灯3秒,红灯30秒。
//车流量大时增加30秒。 
//多一秒避免界面在跳灯的时刻同时显示两个灯亮 
int green[2]={31,61};
int yellow=4;
int red[3]={34,64};

//方案1
//当前东西车道车流量较大,通行时间增加30秒
void way1(int a,int b)
{
	//变量初始化 
	//东西车道:绿灯green1,黄灯yellow1,红灯red1
	//南北车道:绿灯green2,黄灯yellow2,红灯red2
	int green1=green[a],green2=0;
	int yellow1=0,yellow2=0;
	int red1=0,red2=red[a];
	
	printf("当前东西车道车流量较大,执行方案1,通行时间增加30秒\n");
	printf("\n\n系统将在5秒后开始演示:");
	for(int i=5;i>0;i--)
	{
		printf("%d ",i);
		Sleep(1000);
	}
	//Sleep(5000);//页面信息停留5秒后清屏 
	system("cls");//清屏 
	
	while(1)
	{
		for(int i=97;i>0;i--)//方案1演示一次最多97秒 63+3+30+1(初始化耗时1秒)
		{
			if(i==97)//丰富页面显示,可删除 
			{
				printf(">>>>>> 初始化完毕! <<<<<<\n");
			}
			printf("****** 开始演示 ******\n");
			printf("当前演示倒计时:%d秒\n\n",i);
			printf("当前东西车道车流量较大,执行方案1,通行时间增加30秒\n");
			printf("\n------ 东西车道 ------\n");
			//绿跳黄,黄跳红,红跳绿 
			if(green1>0)					//东西车道绿灯还有时间 
			{
				if(green1==green[a])		//东西车道绿灯还有31秒或61秒(初始化的1秒在这里) 
				{
					green1--;				//东西车道绿灯设置成30秒或60秒 
				}
				else						//东西车道绿灯还有时间,输出绿灯时间并-1s 
				{
					printf(">>>>>>   绿灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",green1);
					green1--; 
				}
				if(green1==0)				//东西车道绿灯时间为0,黄灯初始化
				{
					yellow1=yellow;
				} 
			}
			
			if(yellow1>0)					//东西车道黄灯还有时间
			{
				if(yellow1==4)				//东西车道黄灯还有4秒
				{
					yellow1--;				//东西车道黄灯设置成3秒
				}
				else						//东西车道黄灯还有时间,输出黄灯时间并-1s 
				{
					printf(">>>>>>   黄灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",yellow1);
					
					yellow1--;
				}
				if(yellow1==0)				//东西车道黄灯时间为0,红灯初始化
				{
					red1=red[b];
				}
			}
			
			if(red1>0)					//东西车道红灯还有时间
			{
				if(red1==red[b])		//东西车道红灯还有34秒或64秒
				{
					red1--;				//东西车道红灯设置成33秒或63秒 
				}
				else					//东西车道红灯还有时间,输出红灯时间并-1s 
				{
					printf(">>>>>>   红灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",red1);
					red1--;
				}
				if(red1==0)				//东西车道红灯时间为0,绿灯初始化
				{
					green1=green[a];
				}
			}
			
			
			printf("\n------ 南北车道 ------\n");//南北车道的交通灯
			//红跳绿,绿跳黄,黄跳红 
			if(red2>0)
			{
				if(red2==red[a])
				{
					red2--;
				}
				else
				{
					printf(">>>>>>   红灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",red2);
					red2--;
				}
				if(red2==0)
				{
					green2=green[b];
				}
			}
			
			if(green2>0)
			{
				if(green2==green[b])
				{
					green2--;
				}
				else
				{
					printf(">>>>>>   绿灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",green2);
					green2--;
				}
				if(green2==0)
				{
					yellow2=yellow;
				}
			}
			
			if(yellow2>0)
			{
				if(yellow2==4)
				{
					yellow2--;
				}
				else
				{
					printf(">>>>>>   黄灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",yellow2);
					yellow2--;
				}
				if(yellow2==0)
				{
					red2=red[a];
				}
			}
			
			
			Sleep(1000);//在Windows系统中作用是休眠一秒
			system("cls");//在小黑框中运行作用是清屏
			
		}
		
		
		//页面交互 
		printf("****** 演示完毕! ******\n\n");
		printf("若想重新演示请按C,若想返回上一级设置车道车辆数请按R。\n");
		getchar();//接收最后一个回车 
		char c;
		scanf("%c",&c);
		if(c=='c'||c=='C')
		{
			printf("\n");
			continue;
		}
		else if(c=='r'||c=='R')
		{
			printf("\n\n");
			break;
		}
	}
}

//方案2
//当前南北车道车流量较大,通行时间增加30秒
void way2(int a,int b)
{					  
	
	//东西车道:绿灯green1,黄灯yellow1,红灯red1
	//南北车道:绿灯green2,黄灯yellow2,红灯red2
	int green1=green[b],green2=0;
	int yellow1=0,yellow2=0;
	int red1=0,red2=red[b];
	
	printf("当前南北车道车流量较大,执行方案2,通行时间增加30秒\n");
	printf("\n\n系统将在5秒后开始演示:");
	for(int i=5;i>0;i--)
	{
		printf("%d ",i);
		Sleep(1000);
	}
	//Sleep(5000); 
	system("cls");
	
	while(1)
	{
		for(int i=97;i>0;i--)//演示一次最多97秒 
		{
			if(i==97)
			{
				printf(">>>>>> 初始化完毕! <<<<<<\n");
			}
			printf("****** 开始演示 ******\n");
			printf("当前演示倒计时:%d秒\n\n",i);
			printf("当前南北车道车流量较大,执行方案2,通行时间增加30秒\n");
			printf("\n------ 东西车道 ------\n");
			//绿跳黄,黄跳红,红跳绿 
			if(green1>0)					//东西车道绿灯还有时间 
			{
				if(green1==green[b])		//东西车道绿灯还有31秒或61秒 
				{
					green1--;				//东西车道绿灯设置成30秒或60秒 
				}
				else						//东西车道绿灯还有时间,输出绿灯时间并-1s 
				{
					printf(">>>>>>   绿灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",green1);
					green1--; 
				}
				if(green1==0)				//东西车道绿灯时间为0,黄灯初始化
				{
					yellow1=yellow;
				} 
			}
			
			if(yellow1>0)					//东西车道黄灯还有时间
			{
				if(yellow1==4)				//东西车道黄灯还有4秒
				{
					yellow1--;				//东西车道黄灯设置成3秒
				}
				else						//东西车道黄灯还有时间,输出黄灯时间并-1s 
				{
					printf(">>>>>>   黄灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",yellow1);
					yellow1--;
				}
				if(yellow1==0)				//东西车道黄灯时间为0,红灯初始化
				{
					red1=red[a];
				}
			}
			
			if(red1>0)					//东西车道红灯还有时间
			{
				if(red1==red[a])		//东西车道红灯还有34秒或64秒
				{
					red1--;				//东西车道红灯设置成33秒或63秒 
				}
				else					//东西车道红灯还有时间,输出红灯时间并-1s 
				{
					printf(">>>>>>   红灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",red1);
					red1--;
				}
				if(red1==0)				//东西车道红灯时间为0,绿灯初始化
				{
					green1=green[b];
				}
			}
			
			
			printf("\n------ 南北车道 ------\n");//南北车道的交通灯
			//红跳绿,绿跳黄,黄跳红 
			if(red2>0)
			{
				if(red2==red[b])
				{
					red2--;
				}
				else
				{
					printf(">>>>>>   红灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",red2);
					red2--;
				}
				if(red2==0)
				{
					green2=green[a];
				}
			}
			
			if(green2>0)
			{
				if(green2==green[a])
				{
					green2--;
				}
				else
				{
					printf(">>>>>>   绿灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",green2);
					green2--;
				}
				if(green2==0)
				{
					yellow2=yellow;
				}
			}
			
			if(yellow2>0)
			{
				if(yellow2==4)
				{
					yellow2--;
				}
				else
				{
					printf(">>>>>>   黄灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",yellow2);
					yellow2--;
				}
				if(yellow2==0)
				{
					red2=red[b];
				}
			}
			
			
			Sleep(1000);//在Windows系统中作用是休眠一秒
			system("cls");//在小黑框中运行作用是清屏
			
		}
		
		
		//页面交互
		printf("****** 演示完毕! ******\n\n"); 
		printf("若想重新演示请按C,若想返回上一级设置车道车辆数请按R。\n");
		getchar();//接收最后一个回车 
		char c;
		scanf("%c",&c);
		if(c=='c'||c=='C')
		{
			printf("\n");
			continue;
		}
		else if(c=='r'||c=='R')
		{
			printf("\n\n");
			break;
		}
	}
}

//车流量小,通行时间仍然是30秒
void way3(int b)//way2(0),执行方案2 
{
	int green1=green[b],green2=0;
	int yellow1=0,yellow2=0;
	int red1=0,red2=red[b];
	
	printf("当前车流量正常,执行方案3,路口通行时间为30秒\n");
	printf("\n\n系统将在5秒后开始演示:");
	for(int i=5;i>0;i--)
	{
		printf("%d ",i);
		Sleep(1000);
	}
	//Sleep(5000); 
	system("cls");
	
	while(1)
	{
		for(int i=67;i>0;i--)//演示一次最多67秒 30+3+33+1(初始化耗时1秒)
		{
			if(i==67)
			{
				printf(">>>>>>初始化完毕!<<<<<<\n");
			}
			printf("****** 开始演示 ******\n");
			printf("当前演示倒计时:%d秒\n\n",i);
			printf("当前车流量正常,执行方案3,路口通行时间为30秒\n"); 
			printf("\n------ 东西车道 ------\n");
			if(green1>0)
			{
				if(green1==green[b])
				{
					green1--;
				}
				else
				{
					printf(">>>>>>   绿灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",green1);
					green1--;
				}
				if(green1==0)
				{
					yellow1=yellow;
				}
			}
			if(yellow1>0)
			{
				if(yellow1==4)
				{
					yellow1--;	
				}
				else
				{
					printf(">>>>>>   黄灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",yellow1);
					yellow1--;
				}
				if(yellow1==0)
				{
					red1=red[b];
				}
			}
			if(red1>0)
			{
				if(red1==red[b])
				{
					red1--;
				}
				else
				{
					printf(">>>>>>   红灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",red1);
					red1--;
				}
				if(red1==0)
				{
					green1=green[b];
				}
			}
			
			printf("\n------ 南北车道 ------\n");
			if(red2>0)
			{
				if(red2==red[b])
				{
					red2--;
				}
				else
				{
					printf(">>>>>>   红灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",red2);
					red2--;
				}
				if(red2==0)
				{
					green2=green[b];
				}
			}
			if(green2>0)
			{
				if(green2==green[b])
				{
					green2--;
				}
				else
				{
					printf(">>>>>>   绿灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",green2);
					green2--;
				}
				if(green2==0)
				{
					yellow2=yellow;
				}
			}
			if(yellow2>0)
			{
				if(yellow2==4)
				{
					yellow2--;
				}
				else
				{
					printf(">>>>>>   黄灯   <<<<<<\n");
					printf(">>>>>>   %02d秒   <<<<<<\n\n",yellow2);
					yellow2--;
				}
				if(yellow2==0)
				{
					red2=red[b];
				}
			}
			
			Sleep(1000);//在Windows系统中作用是休眠一秒
			system("cls");//在小黑框中运行作用是清屏
			
		}
		
		
		//页面交互 
		printf("****** 演示完毕! ******\n\n");
		printf("若想重新演示请按C,若想返回上一级设置车道车辆数请按R。\n");
		getchar();//接收最后一个回车 
		char c;
		scanf("%c",&c);
		if(c=='c'||c=='C')
		{
			printf("\n");
			continue;
		}
		else if(c=='r'||c=='R')
		{
			printf("\n\n");
			break;
		}
	}
}



int main()
{
	int car1,car2,car3,car4;
	printf("\n****** 欢迎使用智能红绿灯系统 ******\n\n");
	while(1)
	{
		printf("请设置东车道车辆数:");
		scanf("%d",&car1);//东车道车辆数
		
		printf("请设置西车道车辆数:");
		scanf("%d",&car2);//西车道车辆数
		
		printf("请设置北车道车辆数:");
		scanf("%d",&car3);//北车道车辆数
		
		printf("请设置南车道车辆数:");
		scanf("%d",&car4);//南车道车辆数
		
		printf("****** 当前各车道车辆数设置完毕! ******\n"); 
		printf("\n\n****** 开始演示 ******\n");
		
		//根据车辆数来选择交通灯计时函数
		if((car1+car2)-(car3+car4)>10)//东西车辆比南北车辆多10辆以上 
		{
			//printf("东西车辆比南北车辆多10辆以上,执行方案1\n");
			way1(1,0); 
		}
		else if((car3+car4)-(car1+car2)>10)//东西车辆比南北车辆多10辆以下 
		{
			//printf("南北车辆比东西车辆多10辆以上,执行方案2\n"); 
			way2(0,1);
			
		}
		else东西车辆不比南北车辆多
		{
			//printf("车流量较少执行方案3\n"); 
			way3(0);
		}
		
		
		getchar();//接收最后一个回车 
		printf("若想重新设置车辆数请按Y,若退出请按N:");
		char d;
		scanf("%c",&d);
		if(d=='y'||d=='Y')
		{
			printf("\n****** 欢迎使用智能红绿灯系统 ******\n\n");
			continue;
		}
		else if(d=='n'||d=='N')
		{
			printf("\n\n系统将在5秒后退出:");
			for(int i=5;i>0;i--)
			{
				printf("%d ",i);
				Sleep(1000);
			}
			printf("\n系统已退出,欢迎下次使用!\n");
			break;
		}
		
	}
	return 0;
}

你可能感兴趣的:(红绿灯,交通灯)