模拟智能交通信号灯系统
设计一个智能信号灯系统,在十字路口控制东西南北四个方向交通信号,当然是红灯停绿灯行了,一般情况是四个方向每次绿灯亮30秒,只不过在绿灯熄灭后亮3秒黄灯再转红灯。现要求系统能够根据各个方向路口来的车流情况动态分配信号灯在来车多的方向绿灯可以綖长30秒时间,为此在各个路口设有车流信号统计器,可以向系统动态发送车流信息。
特别说明:系统分为两种工作状态(正常状态和紧急疏通状态)
(1)正常状态
如图所示
说明:图中红色箭头表示该车道规定的车流方向(一条车道有两个车流方向),当其中一个车道出现绿色信号时(当那个车道为多车流车道时,信号持续60秒,否则持续30秒)在该车道的车就允许向前走和向左走。例如,当图中南车道出现绿色信号时,在南车道的车就允许向北走和向西走,北车道的车允许向东走,东车道的车允许向南走。如图蓝色箭头所示。
(2)紧急疏通状态(当一条或两条车道出现拥挤时特别有效)
如图所示
说明:
当其中一个车道出现绿色信号时,在该车道的车允许向任何方向转。其它车道为红灯,即不能通过十字路口。如果绿色信号出现在拥挤车道时,信号持续60秒,否则持续15秒。这个方案在一条或两条车道出现拥挤时特别有效!
(1)正常状态
其中一个方向的车道
东车道
if(e<10) es=30; else es=60; for(;es>0;es--) { system("cls"); cout<<"东往西、东往南车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"西往北、北往南车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } es=3; for(;es>0;es--) { system("cls"); cout<<"东往西、东往南车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"西往北、北往南车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); }
(2)紧急疏通状态
其中一个方向的车道
东车道
if(ech=='n') es=15; if(ech=='y') es=60; for(;es>0;es--) { system("cls"); cout<<"东车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"南车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"西车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"北车道现在为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } es=3; for(;es>0;es--) { system("cls"); cout<<"东车道现在为>>黄灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"南车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"西车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"北车道现在为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); }
最终全部方向的程序和在一起
#include <iostream> #include <windows.h> #include <ctime> using namespace std; int main() { int es,ss,ws,ns; int e,s,w,n; char ch; cout<<"*****欢迎使用交通信号灯系统*****"<<endl; cout<<"是否使用紧急交通疏通方案?(y/n)\n当一条或两条车道拥挤时,此方案特别有效!"<<endl; cin>>ch; if(ch=='n') { cout<<"请输入各个车道的车流量,当车道车流量大于10时为多车流车道。"<<endl; cout<<"东车道车流量:"<<endl; cin>>e; cout<<"南车道车流量:"<<endl; cin>>s; cout<<"西车道车流量:"<<endl; cin>>w; cout<<"北车道车流量:"<<endl; cin>>n; while(1) { if(e<10) es=30; else es=60; for(;es>0;es--) { system("cls"); cout<<"东往西、东往南车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"西往北、北往南车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } es=3; for(;es>0;es--) { system("cls"); cout<<"东往西、东往南车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"西往北、北往南车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } if(s<10) ss=30; else ss=60; for(;ss>0;ss--) { system("cls"); cout<<"南往北、南往西车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ss<< "秒" << endl; cout<<"北往东、东往南车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ss<< "秒" << endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } ss=3; for(;ss>0;ss--) { system("cls"); cout<<"南往北、南往西车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"北往东、东往南车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } if(w<10) ws=30; else ws=60; for(;ws>0;ws--) { system("cls"); cout<<"西往东、西往北车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ws<< "秒" <<endl; cout<<"南往西、东往南车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ws<< "秒" <<endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } ws=3; for(;ws>0;ws--) { system("cls"); cout<<"西往东、西往北车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<ws<< "秒" <<endl; cout<<"南往西、东往南车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<ws<< "秒" <<endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } if(n<10) ns=30; else ns=60; for(;ns>0;ns--) { system("cls"); cout<<"北往南、北往东车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ns<< "秒" << endl; cout<<"南往西、西往北车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ns<< "秒" << endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } ns=3; for(;ns>0;ns--) { system("cls"); cout<<"北往南、北往东车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<ns<< "秒" <<endl; cout<<"南往西、西往北车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<ns<< "秒" <<endl; cout<<"其余方向车道为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } } } if(ch=='y') { char ech,sch,wch,nch; cout<< "请输入你想紧急疏通的车道"<<endl; cout<<"东车道是否疏通?(y/n)"<<endl; cin>>ech; cout<<"南车道是否疏通?(y/n)"<<endl; cin>>sch; cout<<"西车道是否疏通?(y/n)"<<endl; cin>>wch; cout<<"北车道是否疏通?(y/n)"<<endl; cin>>nch; while(1) { if(ech=='n') es=15; if(ech=='y') es=60; for(;es>0;es--) { system("cls"); cout<<"东车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"南车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"西车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"北车道现在为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } es=3; for(;es>0;es--) { system("cls"); cout<<"东车道现在为>>黄灯<<"<<endl; cout<<" 剩余时间"<<es<< "秒" << endl; cout<<"南车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"西车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"北车道现在为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } if(sch=='n') ss=15; if(sch=='y') ss=60; for(;ss>0;ss--) { system("cls"); cout<<"东车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"南车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ss<<"秒"<<endl; cout<<"西车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"北车道现在为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } ss=3; for(;ss>0;ss--) { system("cls"); cout<<"东车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"南车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<ss<<"秒"<<endl; cout<<"西车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"北车道现在为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } if(wch=='n') ws=15; if(wch=='y') ws=60; for(;ws>0;ws--) { system("cls"); cout<<"东车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"南车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"西车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ws<<endl; cout<<"北车道现在为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } ws=3; for(;ws>0;ws--) { system("cls"); cout<<"东车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"南车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"西车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<ws<<endl; cout<<"北车道现在为"<<'\n'<<" >>红灯<<"<<endl; Sleep(1000); } if(nch=='n') ns=15; if(nch=='y') ns=60; for(;ns>0;ns--) { system("cls"); cout<<"东车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"南车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"西车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"北车道现在为"<<'\n'<<" >>绿灯<<"<<endl; cout<<" 剩余时间"<<ns<<endl; Sleep(1000); } ns=3; for(;ns>0;ns--) { system("cls"); cout<<"东车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"南车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"西车道现在为"<<'\n'<<" >>红灯<<"<<endl; cout<<"北车道现在为"<<'\n'<<" >>黄灯<<"<<endl; cout<<" 剩余时间"<<ns<<endl; Sleep(1000); } } } return 0; }
附上程序运行时的图片
(1)正常状态
(2)紧急疏通状态
总结:
程序能正常运行,语句使用非常简单、明了。系统分为两种工作状态,可以根据需求来选择合适的状态。但是由于没有调用到函数,程序中的输出要依靠很多个"cout"语句来实现。其实我刚开始时也是调用了函数,但由于出现了很多错误,最终没能实现。(可能是我能力的原因吧)
在做这个课程设计时,我发现有很多同学都有上网复制其他人的现象,程序写得很漂亮。断断续续得做了一个星期的课程设计,有很多次想要放弃,想要复制别人,非常担心自己写得不好,写了最后还没复制别人的高分!但在各种压力之下,最终还是坚持了下来,独立写下了程序。若程序有误,还请老师指点一下,多多包含。这是我第一次写这么长的程序。