C++實現路口交通燈模擬系統(tǒng)
更新時間:2022年03月22日 14:40:22 作者:KC-馮世傑
這篇文章主要為大家詳細介紹了C++實現路口交通燈模擬系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
交通燈信號控制是交通工具現代化的產物,在平面交叉口,為了把可能發(fā)生沖突的車流從時空上分離,必須通過交通信號對交通流進行有效的引導和調度。
設計要求:
(1) 設計一個十字路口的交通燈控制電路,要求南北方向和東西方向兩個交叉路口的車輛交替運行,每個方向綠燈亮30秒,兩個方向能根據車流量的大小自動調節(jié)通行時間,車流量大,通行時間增加30秒,車流量小,通行時間仍然是30秒。
(2) 在路燈轉為紅燈時,要求黃燈先亮3秒鐘,才能變換運行車道。
系統(tǒng)算法設計圖:
#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<<"***開始模擬智能交通燈系統(tǒng)***"<<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<<"若想繼續(xù)請按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<<"若想繼續(xù)請按C,若想返回上一級請按R。"; ?? ??? ?cin>>d; ?? ??? ?if(d == 'C'||d == 'c') ?? ??? ?{ ?? ??? ??? ?cout<<endl; ?? ??? ??? ?continue; ?? ??? ?} ?? ??? ?else if(d == 'R'||d == 'r') ?? ??? ?{ ?? ??? ??? ?cout<<endl<<endl; ?? ??? ??? ?break; ?? ??? ?} ?? ?} }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C++開發(fā):為什么多線程讀寫shared_ptr要加鎖的詳細介紹
本篇文章介紹了,在C++中為什么多線程讀寫shared_ptr要加鎖的詳細說明。需要的朋友參考下2013-04-04