Site icon DataFlair

DSA Python 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


class Vehicle:                           # Node 
    def __init__(self, number):
        self.number = number
        self.next = None

class TrafficQueue:
    def __init__(self):
        self.front = None
        self.rear = None
        self.passed_log = None
   # Create Linked List
    def arrive_vehicle(self, number):
        temp = Vehicle(number)
        if self.rear is None:
            self.front = self.rear = temp
        else:
            self.rear.next = temp
            self.rear = temp
        print(f"\n Vehicle {number} arrived at the signal.")

# Create back up of  Linked List
    def log_passed_vehicle(self, number):
        temp = Vehicle(number)
        if self.passed_log is None:
            self.passed_log = temp
        else:
            ptr = self.passed_log
            while ptr.next:
                ptr = ptr.next
            ptr.next = temp

    def pass_vehicle(self):
        if self.front is None:
            print("\n No vehicles waiting at the signal.")
            return
        temp = self.front
        print(f"\n Vehicle {temp.number} passed the signal.")
        self.log_passed_vehicle(temp.number)
        self.front = self.front.next
        if self.front is None:
            self.rear = None
            del temp

    def display_queue(self):
        if self.front is None:
            print("\n No vehicles in the queue.")
            return
        print("\n Vehicles at signal:")
        temp = self.front
        while temp!=None:
            print(f" {temp.number}")
            temp = temp.next

    def count_queue(self):
        count = 0
        temp = self.front
        while temp!=None:
            count += 1
            temp = temp.next
        print(f"\n Total vehicles waiting: {count}")

    def clear_queue(self):
        while self.front!=None:
            temp = self.front
            self.front = self.front.next
            del temp
        self.rear = None
        print("\n All vehicles cleared from the signal!")

    def search_vehicle(self, number):
        temp = self.front
        while temp!=None:
            if temp.number == number:
                print(f"\n Vehicle {number} is currently in the queue.")
                return
            temp = temp.next
        print(f"\n Vehicle {number} not found in queue.")

    def show_first_and_last(self):
        if not self.front:
            print("\n  No vehicles in the queue.")
            return
        print(f"\n First Vehicle: {self.front.number}")
        print(f" Last Vehicle: {self.rear.number}")

    def show_passed_log(self):
        if not self.passed_log:
            print("\n No vehicles have passed the signal yet.")
            return
        print("\n Passed Vehicles Log:")
        temp = self.passed_log
        while temp:
            print(f" {temp.number}")
            temp = temp.next


def menu():
    tq = TrafficQueue()
    while True:
        print("\n ========== Traffic Light Simulation ==========")
        print("Vehicle Arrives")
        print("Signal Turns Green (Vehicle Passes)")
        print("Show Vehicles in Queue")
        print("Count Waiting Vehicles")
        print("Emergency Clear All Vehicles")
        print("Search Vehicle by Number")
        print("Show First and Last Vehicle")
        print("Show Passed Vehicle Log")
        print("Exit")
        choice = input("Choose an option: ")
        if choice == "1":
            number = input(" Enter vehicle number: ")
            tq.arrive_vehicle(number)
        elif choice == "2":
            tq.pass_vehicle()
        elif choice == "3":
            tq.display_queue()
        elif choice == "4":
            tq.count_queue()
        elif choice == "5":
            tq.clear_queue()
        elif choice == "6":
            number = input(" Enter vehicle number to search: ")
            tq.search_vehicle(number)
        elif choice == "7":
            tq.show_first_and_last()
        elif choice == "8":
            tq.show_passed_log()
        elif choice == "9":
            print("\n Exiting simulation. Goodbye!")
            break
        else:
            print("\n Invalid option. Try again.")


if __name__ == "__main__":
    menu()

 

Exit mobile version