课程综合设计

课程设计需求分析

交通灯信号控制是交通工具现代化的产物,在平面交叉口,为了把可能发生冲突的车流从时空上分离,必须通过交通信号对交通流进行有效的引导和调度。

设计要求:

(1)  设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两个交叉路口的车辆交替运行,每个方向绿灯亮30秒,两个方向能根据车流量的大小自动调节通行时间,车流量大,通行时间增加30秒,车流量小,通行时间仍然是30秒。

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


系统算法设计图:



<span style="font-size:18px;">#include<iostream>  
#include<windows.h>  
using namespace std;  
  
int main()  
{
	while(1)       //让交通灯循环运行
	{
		int g;  
		for(g=30;g>=0;g--)  
		{  
			cout<<" >>>>>>>> 绿灯<<<<<<<< 剩 "<<g<<" 秒"<<'\n';  
			Sleep (1000);  
			system("cls");
		}  
		int y=3;  
		for(;y>=0;y--)  
		{  
			cout<<" >>>>>>>> 黄灯<<<<<<<< 剩 "<<y<<" 秒"<<'\n';  
			Sleep (1000);  
			system("cls");
		}  
		int r=33;  
		for(;r>=0;r--)  
		{  
			cout<<" >>>>>>>> 红灯<<<<<<<< 剩 "<<r<<" 秒"<<'\n';  
			Sleep (1000);                  //计时速度设置指令
			system("cls");                //清屏指令
		}
	}  
  
    return 0;    
}  </span>

这是一个方向上的交通灯计时。。。


#include<iostream>  
#include<windows.h>  
using namespace std;  
  
void way1(int a,int y);                         //交通灯的函数
void way2(int b);

int green1, green2;                             //定义交通灯的红,黄,绿灯的变量和赋初值
int yellow1, yellow2;
int red1, red2;
int green[2] = {31,61};
int yellow = 4;
int red[3] = {34,64};

int main()
{
	int car1, car2, car3, car4;                       //车辆数变量
	int i = 0, j;
	char d;
	cout<<endl<<"***欢迎来到模拟智能交通灯系统***"<<endl<<endl;
	while(1)
	{
		cout<<"请设置东车道车辆数:";                         //设置车辆数
		cin>>car1;
		cout<<"请设置西车道车辆数:";
		cin>>car2;
		cout<<"请设置北车道车辆数:";
		cin>>car3;
		cout<<"请设置南车道车辆数:";
		cin>>car4;
		cout<<endl<<endl;
		cout<<"******模拟开始******"<<endl;
		if((car1+car2)-(car3+car4)>10)                             //根据车辆数来选择交通灯计时函数
		{
			j = i+1;
			way1(j, i);
		}
		else if(((car1+car2)-(car3+car4)>=0)&&((car1+car2)-(car3+car4)<=10))
		{
			way2(i);
		}
		else
		{
			j = i+1;
			way1(i, j);
		}
		cout<<"若想重新设置车辆数请按Y,若退出请按N。";
		cin>>d;
		if(d == 'Y'||d == 'y')
		{
			cout<<endl;
			continue;
		}
		else if(d == 'N'||d == 'n')
			break;
	}

	return 0;
}

我首先是先编写好系统的主函数,定义way1,way2函数作为不同情况的计时函数。我编写的交通灯系统是东西方向同时通行、南北方向同时通行;还有,只有在东西方向的车流量比南北方向的车流量多10辆时 或者东西方向的车流量比南北方向的车流量少10辆时 ,才增加30秒时间。程序中我还设置了重置车流量的功能,这样就方便系统能根据不同的情况去选择不同的函数来运行。


<span style="font-size:18px;">void way1(int a,int y)
{
	green1=green[a];                                      //先给交通灯赋初值
	green2=0;
	yellow1=yellow2=0;
	red1=0;
	red2=red[a];
	int c;
	char d;
	while(1)                                              //东西车道的交通灯
	{
		for(c=99;c>0;c--)
		{  
			cout<<endl<<"------东西车道------"<<endl; 
			if(green1>0)
			{
				if(green1==green[a])
				{
					green1--;
				}
				else
				{
					cout<<"   >>> 绿灯 <<< "<<green1<<" 秒\n";  
					green1--;
				}
				if(green1==0)  
					yellow1=yellow;  
			}  
			if(yellow1>0)  
			{  
				if(yellow1==4)  
					yellow1--;    
				else  
				{  
					cout<<"   >>> 黄灯 <<< "<<yellow1<<" 秒\n";  
					yellow1--;  
				}  
				if(yellow1==0)  
				{       
					red1=red[y];  
				}  
			}  
			if(red1>0)  
			{  
				if(red1==red[y])  
					red1--;  
				else   
				{ 
					cout<<"   >>> 红灯 <<< "<<red1<<" 秒\n";  
					red1--;  
				}  
				if(red1==0)  
				{  
					green1=green[a];    
				}  
			}
			/***********************************************************************************/
			cout<<endl<<"------南北车道------"<<endl;                   //南北车道的交通灯
			if(red2>0)
			{
				if(red2==red[a])
				{
					red2--;
				}
				else
				{
					cout<<"   >>> 红灯 <<< "<<red2<<" 秒\n";  
					red2--;
				}  
				if(red2==0)  
					green2=green[y];  
			}  
			if(green2>0)  
			{  
				if(green2==green[y])  
					green2--;    
				else  
				{  
					cout<<"   >>> 绿灯 <<< "<<green2<<" 秒\n";  
					green2--;  
				}  
				if(green2==0)  
				{       
					yellow2=yellow;  
				}  
			}  
			if(yellow2>0)  
			{  
				if(yellow2==4)  
					yellow2--;  
				else   
				{  
					cout<<"   >>> 黄灯 <<< "<<yellow2<<" 秒\n";  
					yellow2--;  
				}  
				if(yellow2==0)  
				{  
					red2=red[a];    
				}  
			}  


			Sleep(1000);
			system("cls");
			
		}
		cout<<"若想继续请按C,若想返回上一级请按R。";
		cin>>d;
		if(d == 'C'||d == 'c')
		{
			cout<<endl;
			continue;
		}
		else if(d == 'R'||d == 'r')
		{
			cout<<endl<<endl;
			break;
		}
	}
}</span>
函数way1是车流量大的时候的计时函数,绿灯计时时间增加30秒。


<span style="font-size:18px;">void way2(int b)
{
	green1=green[b];
	green2=0;
	yellow1=yellow2=0;
	red1=0;
	red2=red[b];
	int c;
	char d;
	while(1)
	{
		for(c=69;c>0;c--)
		{  
			cout<<endl<<"------东西车道------"<<endl; 
			if(green1>0)
			{
				if(green1==green[b])
				{
					green1--;
				}
				else
				{
					cout<<"   >>> 绿灯 <<< "<<green1<<" 秒"<<endl;  
					green1--;
				}
				if(green1==0)  
					yellow1=yellow;  
			}  
			if(yellow1>0)  
			{	 
				if(yellow1==4)  
					yellow1--;    
				else  
				{  
					cout<<"   >>> 黄灯 <<< "<<yellow1<<" 秒"<<endl;  
					yellow1--;  
				}  
				if(yellow1==0)  
				{       
					red1=red[b];  
				}  
			}  
			if(red1>0)  
			{  
				if(red1==red[b])  
					red1--;  
				else   
				{ 
					cout<<"   >>> 红灯 <<< "<<red1<<" 秒"<<endl;  
					red1--;  
				}  
				if(red1==0)  
				{  
					green1=green[b];    
				}	
			}
			/***********************************************************************************/
			cout<<endl<<"------南北车道------"<<endl; 
			if(red2>0)
			{
				if(red2==red[b])
				{
					red2--;
				}
				else
				{
					cout<<"   >>> 红灯 <<< "<<red2<<" 秒"<<endl;  
					red2--;
				}  
				if(red2==0)  
					green2=green[b];  
			}  
			if(green2>0)  
			{  
				if(green2==green[b])  
					green2--;    
				else  
				{  
					cout<<"   >>> 绿灯 <<< "<<green2<<" 秒"<<endl;  
					green2--;  
				}  
				if(green2==0)  
				{       
					yellow2=yellow;  
				}  
			}  
			if(yellow2>0)  
			{  
				if(yellow2==4)  
					yellow2--;  
				else   
				{  
					cout<<"   >>> 黄灯 <<< "<<yellow2<<" 秒"<<endl;  
					yellow2--;  
				}  
				if(yellow2==0)  
				{  
					red2=red[b];    
				}	
			}  


			Sleep(1000);
			system("cls");
			
		}
		cout<<"若想继续请按C,若想返回上一级请按R。";
		cin>>d;
		if(d == 'C'||d == 'c')
		{
			cout<<endl;
			continue;
		}
		else if(d == 'R'||d == 'r')
		{
			cout<<endl<<endl;
			break;
		}
	}
}</span>

函数way2是每个方向车流量都差不多的时候的计时函数。绿灯计时时间为30秒。


源程序:

#include<iostream>  
#include<windows.h>  
using namespace std;  
  
void way1(int a,int y);                         //交通灯的函数
void way2(int b);

int green1, green2;                             //定义交通灯的红,黄,绿灯的变量和赋初值
int yellow1, yellow2;
int red1, red2;
int green[2] = {31,61};
int yellow = 4;
int red[3] = {34,64};

int main()
{
	int car1, car2, car3, car4;                       //车辆数变量
	int i = 0, j;
	char d;
	cout<<endl<<"***欢迎来到模拟智能交通灯系统***"<<endl<<endl;
	while(1)
	{
		cout<<"请设置东车道车辆数:";                         //设置车辆数
		cin>>car1;
		cout<<"请设置西车道车辆数:";
		cin>>car2;
		cout<<"请设置北车道车辆数:";
		cin>>car3;
		cout<<"请设置南车道车辆数:";
		cin>>car4;
		cout<<endl<<endl;
		cout<<"******模拟开始******"<<endl;
		if((car1+car2)-(car3+car4)>10)                             //根据车辆数来选择交通灯计时函数
		{
			j = i+1;
			way1(j, i);
		}
		else if(((car1+car2)-(car3+car4)>=0)&&((car1+car2)-(car3+car4)<=10))
		{
			way2(i);
		}
		else
		{
			j = i+1;
			way1(i, j);
		}
		cout<<"若想重新设置车辆数请按Y,若退出请按N。";
		cin>>d;
		if(d == 'Y'||d == 'y')
		{
			cout<<endl;
			continue;
		}
		else if(d == 'N'||d == 'n')
			break;
	}

	return 0;
}

void way1(int a,int y)
{
	green1=green[a];                                      //先给交通灯赋初值
	green2=0;
	yellow1=yellow2=0;
	red1=0;
	red2=red[a];
	int c;
	char d;
	while(1)                                              //东西车道的交通灯
	{
		for(c=99;c>0;c--)
		{  
			cout<<endl<<"------东西车道------"<<endl; 
			if(green1>0)
			{
				if(green1==green[a])
				{
					green1--;
				}
				else
				{
					cout<<"   >>> 绿灯 <<< "<<green1<<" 秒\n";  
					green1--;
				}
				if(green1==0)  
					yellow1=yellow;  
			}  
			if(yellow1>0)  
			{  
				if(yellow1==4)  
					yellow1--;    
				else  
				{  
					cout<<"   >>> 黄灯 <<< "<<yellow1<<" 秒\n";  
					yellow1--;  
				}  
				if(yellow1==0)  
				{       
					red1=red[y];  
				}  
			}  
			if(red1>0)  
			{  
				if(red1==red[y])  
					red1--;  
				else   
				{ 
					cout<<"   >>> 红灯 <<< "<<red1<<" 秒\n";  
					red1--;  
				}  
				if(red1==0)  
				{  
					green1=green[a];    
				}  
			}
			/***********************************************************************************/
			cout<<endl<<"------南北车道------"<<endl;                   //南北车道的交通灯
			if(red2>0)
			{
				if(red2==red[a])
				{
					red2--;
				}
				else
				{
					cout<<"   >>> 红灯 <<< "<<red2<<" 秒\n";  
					red2--;
				}  
				if(red2==0)  
					green2=green[y];  
			}  
			if(green2>0)  
			{  
				if(green2==green[y])  
					green2--;    
				else  
				{  
					cout<<"   >>> 绿灯 <<< "<<green2<<" 秒\n";  
					green2--;  
				}  
				if(green2==0)  
				{       
					yellow2=yellow;  
				}  
			}  
			if(yellow2>0)  
			{  
				if(yellow2==4)  
					yellow2--;  
				else   
				{  
					cout<<"   >>> 黄灯 <<< "<<yellow2<<" 秒\n";  
					yellow2--;  
				}  
				if(yellow2==0)  
				{  
					red2=red[a];    
				}  
			}  


			Sleep(1000);
			system("cls");
			
		}
		cout<<"若想继续请按C,若想返回上一级请按R。";
		cin>>d;
		if(d == 'C'||d == 'c')
		{
			cout<<endl;
			continue;
		}
		else if(d == 'R'||d == 'r')
		{
			cout<<endl<<endl;
			break;
		}
	}
}


void way2(int b)
{
	green1=green[b];
	green2=0;
	yellow1=yellow2=0;
	red1=0;
	red2=red[b];
	int c;
	char d;
	while(1)
	{
		for(c=69;c>0;c--)
		{  
			cout<<endl<<"------东西车道------"<<endl; 
			if(green1>0)
			{
				if(green1==green[b])
				{
					green1--;
				}
				else
				{
					cout<<"   >>> 绿灯 <<< "<<green1<<" 秒"<<endl;  
					green1--;
				}
				if(green1==0)  
					yellow1=yellow;  
			}  
			if(yellow1>0)  
			{	 
				if(yellow1==4)  
					yellow1--;    
				else  
				{  
					cout<<"   >>> 黄灯 <<< "<<yellow1<<" 秒"<<endl;  
					yellow1--;  
				}  
				if(yellow1==0)  
				{       
					red1=red[b];  
				}  
			}  
			if(red1>0)  
			{  
				if(red1==red[b])  
					red1--;  
				else   
				{ 
					cout<<"   >>> 红灯 <<< "<<red1<<" 秒"<<endl;  
					red1--;  
				}  
				if(red1==0)  
				{  
					green1=green[b];    
				}	
			}
			/***********************************************************************************/
			cout<<endl<<"------南北车道------"<<endl; 
			if(red2>0)
			{
				if(red2==red[b])
				{
					red2--;
				}
				else
				{
					cout<<"   >>> 红灯 <<< "<<red2<<" 秒"<<endl;  
					red2--;
				}  
				if(red2==0)  
					green2=green[b];  
			}  
			if(green2>0)  
			{  
				if(green2==green[b])  
					green2--;    
				else  
				{  
					cout<<"   >>> 绿灯 <<< "<<green2<<" 秒"<<endl;  
					green2--;  
				}  
				if(green2==0)  
				{       
					yellow2=yellow;  
				}  
			}  
			if(yellow2>0)  
			{  
				if(yellow2==4)  
					yellow2--;  
				else   
				{  
					cout<<"   >>> 黄灯 <<< "<<yellow2<<" 秒"<<endl;  
					yellow2--;  
				}  
				if(yellow2==0)  
				{  
					red2=red[b];    
				}	
			}  


			Sleep(1000);
			system("cls");
			
		}
		cout<<"若想继续请按C,若想返回上一级请按R。";
		cin>>d;
		if(d == 'C'||d == 'c')
		{
			cout<<endl;
			continue;
		}
		else if(d == 'R'||d == 'r')
		{
			cout<<endl<<endl;
			break;
		}
	}
}











这就是我所做的课程综合设计,在这几周来做这个课程设计,让我学到了很多,在设计之前,我要上网去寻找怎样去设置红绿灯的计时问题,如何让红绿灯清屏,在这次的课程设计中我增强了资料收集的能力,完成了这次的课程设计,让我感到高兴。。得意得意得意

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值