4、模拟智能交通信号灯系统
设计一个智能信号灯系统,在十字路口控制东西南北四个方向交通信号,当然是红灯停绿灯行了,一般情况是四个方向每次绿灯亮30秒,只不过在绿灯熄灭后亮3秒黄灯再转红灯。现要求系统能够根据各个方向路口来的车流情况动态分配信号灯在来车多的方向绿灯可以綖长30秒时间,为此在各个路口设有车流信号统计器,可以向系统动态发送车流信息。
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
int cars1,cars2,cars3,cars4;
struct light
{
int front;
int left;
int right;
}green1,green2,green3,green4,yellow1,yellow2,yellow3,yellow4,red1,red2,red3,red4;
while(1)
{
//--------------------路口1----------------------------------------------------------------//
cout<<"输入路口1车流量"<<endl;
cin>>cars1;
if(cars1<25){
green1.front=30;
green1.right=20;
green1.left=20;}
if(cars1>=25){
green1.front=30+(cars1-25);
green1.right=20+(cars1-25);
green1.left=20+(cars1-25);}
for(;green1.front>=0;){
cout<<"green to front:"<<green1.front<<endl;
green1.front--;
if(green1.right>=0){
cout<<"green to right:"<<green1.right<<endl;
green1.right--;
cout<<"green to left:"<<green1.left;
green1.left--;}
Sleep(1000);
system("cls");}
//--------------------路口2----------------------------------------------------------------//
cout<<"输入路口2车流量"<<endl;
cin>>cars2;
if(cars2<25){
green2.front=30;
green2.right=20;
green2.left=20;}
if(cars2>=25){
green2.front=30+(cars2-25);
green2.right=20+(cars2-25);
green2.left=20+(cars2-25);}
for(;green2.front>=0;){
cout<<"green to front:"<<green2.front<<endl;
green2.front--;
if(green2.right>=0){
cout<<"green to right:"<<green2.right<<endl;
green2.right--;
cout<<"green to left:"<<green2.left;
green2.left--;}
Sleep(1000);
system("cls");}
//--------------------路口3----------------------------------------------------------------//
cout<<"输入路口3车流量"<<endl;
cin>>cars3;
if(cars3<25){
green3.front=30;
green3.right=20;
green3.left=20;}
if(cars3>=25){
green3.front=30+(cars3-25);
green3.right=20+(cars3-25);
green3.left=20+(cars3-25);}
for(;green3.front>=0;){
cout<<"green to front:"<<green3.front<<endl;
green3.front--;
if(green3.right>=0){
cout<<"green to right:"<<green3.right<<endl;
green3.right--;
cout<<"green to left:"<<green3.left;
green3.left--;}
Sleep(1000);
system("cls");}
//--------------------路口4----------------------------------------------------------------//
cout<<"输入路口4车流量"<<endl;
cin>>cars4;
if(cars4<25){
green4.front=30;
green4.right=20;
green4.left=20;}
if(cars4>=25){
green4.front=30+(cars4-25);
green4.right=20+(cars4-25);
green4.left=20+(cars4-25);}
for(;green4.front>=0;){
cout<<"green to front:"<<green4.front<<endl;
green4.front--;
if(green4.right>=0){
cout<<"green to right:"<<green4.right<<endl;
green4.right--;
cout<<"green to left:"<<green4.left;
green4.left--;}
Sleep(1000);
system("cls");}
}
return 0;
}
说明:该程序中1234分别指东南西北方向。程序首先定义了四个路口的车流量,利用结构体变量的方法再定义了四个路口的绿黄红灯。接着,由各个路口的车流信号统计器统计出车辆数再自动给程序CIN该数量,程序将根据该车辆数大小动态延长绿灯时长(而不是简单延长30S)。四个路口读秒结束后又将重新读数,如此循环
修改中
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
int cars1,cars2,cars3,cars4;
struct light
{
int front;
int left;
int right;
}green1,green2,green3,green4,yellow1,yellow2,yellow3,yellow4,red1,red2,red3,red4;
int yellow=3,red=30;
while(1)
{
//--------------------路口1----------------------------------------------------------------//
cout<<"输入路口1车流量"<<endl;
cin>>cars1;
if(cars1<25){
green1.front=30;
green1.right=20;
green1.left=20;}
if(cars1>=25){
green1.front=30+(cars1-25);
green1.right=20+(cars1-25);
green1.left=20+(cars1-25);}
do
{
cout<<"green to front:"<<green1.front<<endl;
green1.front--;
if(yellow>=0){
if(green1.right>=0){
cout<<"green to right:"<<green1.right<<endl;
green1.right--;
cout<<"green to left:"<<green1.left;
green1.left--;}
else{
cout<<"yellow to right:"<<yellow<<endl
<<"yellow to left:"<<yellow;
yellow--;} }
Sleep(2000);
system("cls");
}while(green1.front>=0);
for(yellow=3;yellow>=0;yellow--){
cout<<"yellow to front:"<<yellow<<endl;
Sleep(2000);
system("cls");}
//--------------------路口2----------------------------------------------------------------//
cout<<"输入路口2车流量"<<endl;
cin>>cars2;
if(cars2<25){
green2.front=30;
green2.right=20;
green2.left=20;}
if(cars1>=25){
green2.front=30+(cars1-25);
green2.right=20+(cars1-25);
green2.left=20+(cars1-25);}
do
{
cout<<"green to front:"<<green2.front<<endl;
green2.front--;
if(yellow>=0){
if(green2.right>=0){
cout<<"green to right:"<<green2.right<<endl;
green2.right--;
cout<<"green to left:"<<green2.left;
green2.left--;}
else{
cout<<"yellow to right:"<<yellow<<endl
<<"yellow to left:"<<yellow;
yellow--;} }
Sleep(2000);
system("cls");
}while(green2.front>=0);
for(yellow=3;yellow>=0;yellow--){
cout<<"yellow to front:"<<yellow<<endl;
Sleep(2000);
system("cls");}
//--------------------路口3----------------------------------------------------------------//
cout<<"输入路口3车流量"<<endl;
cin>>cars3;
if(cars3<25){
green3.front=30;
green3.right=20;
green3.left=20;}
if(cars3>=25){
green3.front=30+(cars3-25);
green3.right=20+(cars3-25);
green3.left=20+(cars3-25);}
for(;green3.front>=0;){
cout<<"green to front:"<<green3.front<<endl;
green3.front--;
if(green3.right>=0){
cout<<"green to right:"<<green3.right<<endl;
green3.right--;
cout<<"green to left:"<<green3.left;
green3.left--;}
Sleep(1000);
system("cls");}
//--------------------路口4----------------------------------------------------------------//
cout<<"输入路口4车流量"<<endl;
cin>>cars4;
if(cars4<25){
green4.front=30;
green4.right=20;
green4.left=20;}
if(cars4>=25){
green4.front=30+(cars4-25);
green4.right=20+(cars4-25);
green4.left=20+(cars4-25);}
for(;green4.front>=0;){
cout<<"green to front:"<<green4.front<<endl;
green4.front--;
if(green4.right>=0){
cout<<"green to right:"<<green4.right<<endl;
green4.right--;
cout<<"green to left:"<<green4.left;
green4.left--;}
Sleep(1000);
system("cls");}
}
return 0;
}
修改后:
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
int cars1,cars2,cars3,cars4;
struct light
{
int front;
int left;
int right;
}green1,green2,green3,green4;
int yellow=3,red=30;
while(1)
{
//--------------------路口1----------------------------------------------------------------//
cout<<"输入路口1车流量"<<endl;
cin>>cars1;
if(cars1<25){
green1.front=30;
green1.right=20;
green1.left=20;}
if(cars1>=25){
green1.front=30+(cars1-25);
green1.right=20+(cars1-25);
green1.left=20+(cars1-25);}
do
{
cout<<" green to front - - - - - - - - - - - "<<green1.front<<endl;
green1.front--;
if(yellow>=0){
if(green1.right>=0){
cout<<" green to right - - - - - - - - - - - "<<green1.right<<endl;
green1.right--;
cout<<" green to left - - - - - - - - - - - "<<green1.left;
green1.left--;}
else{
cout<<" yellow to right - - - - - - - - - - "<<yellow<<endl
<<" yellow to left - - - - - - - - - - "<<yellow;
yellow--;} }
Sleep(200);
system("cls");
}while(green1.front>=0);
for(yellow=3;yellow>=0;yellow--){
cout<<" yellow to front - - - - - - - - - - "<<yellow<<endl;
Sleep(200);
system("cls");}
//--------------------路口2----------------------------------------------------------------//
yellow=3;
cout<<"输入路口2车流量"<<endl;
cin>>cars2;
if(cars2<25){
green2.front=30;
green2.right=20;
green2.left=20;}
if(cars2>=25){
green2.front=30+(cars2-25);
green2.right=20+(cars2-25);
green2.left=20+(cars2-25);}
do
{
cout<<" green to front - - - - - - - - - - - "<<green2.front<<endl;
green2.front--;
if(yellow>=0){
if(green2.right>=0){
cout<<" green to right - - - - - - - - - - - "<<green2.right<<endl;
green2.right--;
cout<<" green to left - - - - - - - - - - - "<<green2.left;
green2.left--;}
else{
cout<<" yellow to right - - - - - - - - - - "<<yellow<<endl
<<" yellow to left - - - - - - - - - - "<<yellow;
yellow--;} }
Sleep(200);
system("cls");
}while(green2.front>=0);
for(yellow=3;yellow>=0;yellow--){
cout<<" yellow to front - - - - - - - - - - "<<yellow<<endl;
Sleep(200);
system("cls");}
//--------------------路口3----------------------------------------------------------------//
yellow=3;
cout<<"输入路口3车流量"<<endl;
cin>>cars3;
if(cars3<25){
green3.front=30;
green3.right=20;
green3.left=20;}
if(cars1>=25){
green3.front=30+(cars3-25);
green3.right=20+(cars3-25);
green3.left=20+(cars3-25);}
do
{
cout<<" green to front - - - - - - - - - - - "<<green3.front<<endl;
green3.front--;
if(yellow>=0){
if(green3.right>=0){
cout<<" green to right - - - - - - - - - - - "<<green3.right<<endl;
green3.right--;
cout<<" green to left - - - - - - - - - - - "<<green3.left;
green3.left--;}
else{
cout<<" yellow to right - - - - - - - - - - "<<yellow<<endl
<<" yellow to left - - - - - - - - - - "<<yellow;
yellow--;} }
Sleep(200);
system("cls");
}while(green3.front>=0);
for(yellow=3;yellow>=0;yellow--){
cout<<" yellow to front - - - - - - - - - - "<<yellow<<endl;
Sleep(200);
system("cls");}
//--------------------路口4----------------------------------------------------------------//
yellow=3;
cout<<"输入路口4车流量"<<endl;
cin>>cars4;
if(cars4<25){
green4.front=30;
green4.right=20;
green4.left=20;}
if(cars4>=25){
green4.front=30+(cars4-25);
green4.right=20+(cars4-25);
green4.left=20+(cars4-25);}
do
{
cout<<" green to front - - - - - - - - - - - "<<green4.front<<endl;
green4.front--;
if(yellow>=0){
if(green4.right>=0){
cout<<" green to right - - - - - - - - - - - "<<green4.right<<endl;
green4.right--;
cout<<" green to left - - - - - - - - - - - "<<green4.left;
green4.left--;}
else{
cout<<" yellow to right - - - - - - - - - - "<<yellow<<endl
<<" yellow to left - - - - - - - - - - "<<yellow;
yellow--;} }
Sleep(200);
system("cls");
}while(green4.front>=0);
for(yellow=3;yellow>=0;yellow--){
cout<<" yellow to front - - - - - - - - - - "<<yellow<<endl;
Sleep(200);
system("cls");}
}
return 0;
}
在把红灯加上去的时候遇到比较大的阻力,因为一个路口中向前的绿黄红灯和转弯的绿黄红灯的读秒是同时进行但又分别工作。所以目前完成的是绿黄灯同时独立读秒