Smart Parking System Simulator pro

import tkinter as tk

from tkinter import messagebox

import sqlite3

import random


# -----------------------

# Database Setup

# -----------------------

def init_db():

    conn = sqlite3.connect("parking.db")

    cur = conn.cursor()

    cur.execute(

        """CREATE TABLE IF NOT EXISTS parking_slots (

                id INTEGER PRIMARY KEY,

                slot_number TEXT UNIQUE,

                status TEXT

            )"""

    )


    # Initialize 10 slots if not exist

    cur.execute("SELECT COUNT(*) FROM parking_slots")

    count = cur.fetchone()[0]

    if count == 0:

        for i in range(1, 11):

            cur.execute("INSERT INTO parking_slots (slot_number, status) VALUES (?, ?)",

                        (f"SLOT-{i}", "Free"))

    conn.commit()

    conn.close()


# -----------------------

# Database Functions

# -----------------------

def get_slots():

    conn = sqlite3.connect("parking.db")

    cur = conn.cursor()

    cur.execute("SELECT * FROM parking_slots")

    slots = cur.fetchall()

    conn.close()

    return slots


def update_slot(slot_id, status):

    conn = sqlite3.connect("parking.db")

    cur = conn.cursor()

    cur.execute("UPDATE parking_slots SET status=? WHERE id=?", (status, slot_id))

    conn.commit()

    conn.close()


# -----------------------

# GUI Functions

# -----------------------

def refresh_slots():

    for widget in frame_slots.winfo_children():

        widget.destroy()


    slots = get_slots()

    for slot in slots:

        slot_id, slot_number, status = slot

        color = "green" if status == "Free" else "red"

        btn = tk.Button(frame_slots, text=f"{slot_number}\n{status}",

                        bg=color, fg="white", width=12, height=3,

                        command=lambda s=slot: toggle_slot(s))

        btn.pack(side=tk.LEFT, padx=5, pady=5)


def toggle_slot(slot):

    slot_id, slot_number, status = slot

    if status == "Free":

        update_slot(slot_id, "Booked")

        messagebox.showinfo("Booked", f"You booked {slot_number}")

    else:

        update_slot(slot_id, "Free")

        messagebox.showinfo("Freed", f"You freed {slot_number}")

    refresh_slots()


def random_update():

    slots = get_slots()

    random_slot = random.choice(slots)

    slot_id, slot_number, status = random_slot

    new_status = "Free" if status == "Booked" else "Booked"

    update_slot(slot_id, new_status)

    refresh_slots()

    root.after(5000, random_update)  # auto change every 5s


# -----------------------

# Main App

# -----------------------

if __name__ == "__main__":

    init_db()


    root = tk.Tk()

    root.title("Smart Parking System Simulator")

    root.geometry("800x400")


    tk.Label(root, text="🚗 Smart Parking System Simulator", font=("Arial", 16, "bold")).pack(pady=10)


    frame_slots = tk.Frame(root)

    frame_slots.pack(pady=20)


    refresh_slots()


    # Auto slot updates (simulate cars parking)

    root.after(5000, random_update)


    root.mainloop()


No comments: