DSA C++ Project – Traffic Light Simulation

Program 1

// Project: Traffic Light Simulation Using Queue Linked List 
//----------------------------------------------------------
// Features:
// Add vehicles to queue (simulating arrival)
// Process vehicles when the signal turns green
// Show vehicles in the queue
// Count waiting vehicles
// Clear All Vehicles (Emergency Clear Signal)
//Search for a Vehicle by Number
//Display First and Last Vehicle in Queue
//Log of Passed Vehicles

#include <iostream>
#include <string>
using namespace std;

class Vehicle               // Node Class 
{
public:
    string number;
    Vehicle* next;
    // Vehicle(string num)
    // {
    //     this->number=num;
    //     this->next=nullptr;
    // }
    Vehicle(string num) : number(num), next(nullptr) {}
};

class TrafficQueue 
{
public:
    Vehicle* front;
    Vehicle* rear;
    Vehicle* passedLog;

public:
    TrafficQueue() : front(nullptr), rear(nullptr), passedLog(nullptr) {}

    void arriveVehicle(const string& number) 
    {
        Vehicle* temp = new Vehicle(number);
        if (rear==nullptr) 
        {
            front = rear = temp;
        } 
        else 
        {
            rear->next = temp;
            rear = temp;
        }
        cout << "\n Vehicle " << number << " arrived at the signal." << endl;
    }

    void logPassedVehicle(const string& number) 
    {
        Vehicle* temp = new Vehicle(number);
        if (passedLog==nullptr) 
        {
            passedLog = temp;
        } else 
        {
            Vehicle* ptr = passedLog;
            while (ptr->next)
                ptr = ptr->next;
            ptr->next = temp;
        }
    }

    void passVehicle() 
    {
        if (front==nullptr) 
        {
            cout << "\nNo vehicles waiting at the signal." << endl;
            return;
        }
        Vehicle* temp = front;
        cout << "\nVehicle " << temp->number << " passed the signal." << endl;
        logPassedVehicle(temp->number);
        front = front->next;
        if (front==nullptr) 
        rear = nullptr;

        delete temp;
    }

    void displayQueue() 
    {
       if (front==nullptr) 
        {
            cout << "\n No vehicles in the queue." << endl;
            return;
        }
        cout << "\n Vehicles at signal:" << endl;
        Vehicle* temp = front;
        while (temp!=nullptr)
        {
            cout << "  -> " << temp->number << endl;
            temp = temp->next;
        }
    }

    void countQueue() 
    {
        int count = 0;
        Vehicle* temp = front;
        while (temp) 
        {
            count++;
            temp = temp->next;
        }
        cout << "\nTotal vehicles waiting: " << count << endl;
    }

    void clearQueue() 
    {
        while (front!=nullptr) 
        {
            Vehicle* temp = front;
            front = front->next;
            delete temp;
        }
        rear = nullptr;
        cout << "\n All vehicles cleared from the signal!" << endl;
    }

    void searchVehicle(const string& number) 
    {

        Vehicle* temp = front;
        while (temp!=nullptr)
         {
            if (temp->number == number) 
            {
                cout << "\n Vehicle " << number << " is currently in the queue." << endl;
                return;
            }
            temp = temp->next;
        }
        cout << "\n Vehicle " << number << " not found in queue." << endl;
    }

    void showFirstAndLast() 
    {
        if (front==nullptr) 
        {
            cout << "\nNo vehicles in the queue." << endl;
            return;
        }
        cout << "\nFirst Vehicle: " << front->number << endl;
        cout << "Last Vehicle: " << rear->number << endl;
    }

    void showPassedLog() 
    {
        if (passedLog==nullptr) 
        {
            cout << "\nNo vehicles have passed the signal yet." << endl;
            return;
        }
        cout << "\nPassed Vehicles Log:" << endl;
        Vehicle* temp = passedLog;
        while (temp!=nullptr) 
        {
            cout << "  -> " << temp->number << endl;
            temp = temp->next;
        }
    }
};

void menu() 
{
    TrafficQueue tq;
    int choice;
    string number;

    do 
    {
        cout << "\n========== Traffic Light Simulation ==========";
        cout << "\n1. Vehicle Arrives";
        cout << "\n2. Signal Turns Green (Vehicle Passes)";
        cout << "\n3. Show Vehicles in Queue";
        cout << "\n4. Count Waiting Vehicles";
        cout << "\n5. Emergency Clear All Vehicles";
        cout << "\n6. Search Vehicle by Number";
        cout << "\n7. Show First and Last Vehicle";
        cout << "\n8. Show Passed Vehicle Log";
        cout << "\n9. Exit\n";
        cout << "Choose an option: ";
        cin >> choice;
        cin.ignore();

        switch (choice) 
        {
            case 1:
                cout << "Enter vehicle number: ";
                getline(cin, number);
                tq.arriveVehicle(number);
                break;
            case 2:
                tq.passVehicle();
                break;
            case 3:
                tq.displayQueue();
                break;
            case 4:
                tq.countQueue();
                break;
            case 5:
                tq.clearQueue();
                break;
            case 6:
           if (tq.front==nullptr) 
           {
            cout << "\nNo vehicles in the queue." << endl;
           }
           else
           {
                cout << "Enter vehicle number to search: ";
                getline(cin, number);
                tq.searchVehicle(number);
           }    
                break;
            case 7:
                tq.showFirstAndLast();
                break;
            case 8:
                tq.showPassedLog();
                break;
            case 9:
                cout << "\n Exiting simulation. Goodbye!" << endl;
                break;
            default:
                cout << "\n Invalid option. Try again." << endl;
        }
    } while (choice != 9);
}

int main() 
{
    menu();
    return 0;
}

 

 

courses

DataFlair Team

DataFlair Team provides high-impact content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. We make complex concepts easy to grasp, helping learners of all levels succeed in their tech careers.

Leave a Reply

Your email address will not be published. Required fields are marked *