C++实现路口交通灯模拟系统

 更新时间:2022年03月22日 14:40:22   作者:KC-馮世傑  
这篇文章主要为大家详细介绍了C++实现路口交通灯模拟系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

设计要求:

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

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

系统算法设计图:

#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;
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言使用stdlib.h库函数的二分查找和快速排序的实现代码

    C语言使用stdlib.h库函数的二分查找和快速排序的实现代码

    以下是对C语言使用stdlib.h库函数的二分查找和快速排序的实现代码进行了详细的介绍,需要的朋友可以过来参考下。希望对大家有所帮助
    2013-10-10
  • C++ Boost MultiIndex使用详细介绍

    C++ Boost MultiIndex使用详细介绍

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C++中String类型的逆序方式

    C++中String类型的逆序方式

    这篇文章主要介绍了C++中String类型的逆序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解C++之C++11的牛逼特性

    详解C++之C++11的牛逼特性

    这篇文章主要介绍了C++之C++11的牛逼特性,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-09-09
  • C++深入探究类与对象之对象模型与this指针使用方法

    C++深入探究类与对象之对象模型与this指针使用方法

    C++对象模型中只有类的非static成员以及一个指向虚函数表的指针被配置于类对象内,其他都在类对象外,在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象
    2022-04-04
  • 关于define与C 的内存

    关于define与C 的内存

    本文主要介绍了C语言中#define到底存在程序的哪个区,以及工作流程和效率与普通函数的区别,希望能帮助需要的小伙伴
    2016-07-07
  • C语言链表实现销售管理系统

    C语言链表实现销售管理系统

    这篇文章主要为大家详细介绍了C语言链表实现销售管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C++中形参和实参的区别及说明

    C++中形参和实参的区别及说明

    这篇文章主要介绍了C++中形参和实参的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 一篇文章带你了解C语言函数递归

    一篇文章带你了解C语言函数递归

    这篇文章主要为大家详细介绍了C语言函数递归,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C++实现LeetCode(159.最多有两个不同字符的最长子串)

    C++实现LeetCode(159.最多有两个不同字符的最长子串)

    这篇文章主要介绍了C++实现LeetCode(159.最多有两个不同字符的最长子串),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论