Thursday, June 19, 2025

BUS TICKET BOOKING USING TKINTER

 

CODE :

from tkinter import *

from tkinter import messagebox

from tkcalendar import DateEntry  # You need to install tkcalendar using: pip install tkcalendar

from datetime import date

import sqlite3

import random

import string


# Initialize main window

top = Tk()

top.geometry('550x300')

top.title('Ticket Booking System')


# Connect to the database

conn = sqlite3.connect('ticket_booking_database.db')

cursor = conn.cursor()


# Create table if it doesn't exist

cursor.execute("""

    CREATE TABLE IF NOT EXISTS ticket (

        name TEXT,

        ticket_id TEXT PRIMARY KEY,

        ticket_date TEXT,

        ticket_validity TEXT

    )

""")


# Fetch existing ticket IDs

cursor.execute('SELECT * FROM ticket')

tickets = cursor.fetchall()

tickets_id = [i[1] for i in tickets]

conn.commit()


# UI Header

Label(top, text='Ticket Management System', font=('Arial', 18)).grid(

    row=0, column=0, columnspan=2, padx=80, pady=20

)


# Helper functions

def show_message(title, message):

    messagebox.showinfo(title, message)



def get_random_string():

    letters = string.ascii_lowercase

    return ''.join(random.choice(letters) for _ in range(8))



def Book():

    top1 = Toplevel()

    top1.geometry('350x300')

    top1.title('Book')


    name = StringVar(top1)

    ticket_id = StringVar(top1)

    ticket_date = StringVar(top1)

    ticket_date.set(date.today())

    ticket_validity = StringVar(top1)


    # Generate unique ticket ID

    while True:

        t_id = get_random_string()

        if t_id not in tickets_id:

            ticket_id.set(t_id)

            break


    def BookNow():

        if len(name.get()) < 3 or len(ticket_date.get()) < 7 or len(ticket_validity.get()) < 7:

            show_message('Error', 'Enter valid details')

            return

        try:

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

            cursor = conn.cursor()

            cursor.execute(

                "INSERT INTO ticket (name, ticket_id, ticket_date, ticket_validity) VALUES (?, ?, ?, ?)",

                (name.get(), ticket_id.get(), ticket_date.get(), ticket_validity.get())

            )

            conn.commit()

            show_message('Successful', f'Booking successful!\nYour Ticket ID: {ticket_id.get()}')

            top1.destroy()

        except sqlite3.Error as e:

            show_message('Error', str(e))

        finally:

            conn.close()


    # Booking form layout

    Label(top1, text='Enter details', font=('Arial', 14)).grid(row=0, column=0, padx=10, pady=10, columnspan=2)

    Label(top1, text='Name', font=('Arial', 12)).grid(row=1, column=0, padx=10, pady=10, sticky='w')

    Entry(top1, textvariable=name).grid(row=1, column=1)


    Label(top1, text='Ticket ID', font=('Arial', 12)).grid(row=2, column=0, padx=10, pady=10, sticky='w')

    Entry(top1, textvariable=ticket_id, state='disabled').grid(row=2, column=1)


    Label(top1, text='Booking Date', font=('Arial', 12)).grid(row=3, column=0, padx=10, pady=10, sticky='w')

    DateEntry(top1, selectmode='day', textvariable=ticket_date).grid(row=3, column=1)


    Label(top1, text='Validity', font=('Arial', 12)).grid(row=4, column=0, padx=10, pady=10, sticky='w')

    DateEntry(top1, selectmode='day', textvariable=ticket_validity).grid(row=4, column=1)


    Button(top1, text='Confirm', bg='green', fg='white', font=('Arial', 14), width=10, command=BookNow).grid(row=5, column=1, pady=10)



def ViewHistory():

    top2 = Toplevel()

    top2.geometry('750x300')

    top2.title('View Ticket Booking History')


    headers = ['Customer Name', 'Ticket ID', 'Date of Booking', 'Ticket Validity(Date)']

    for i, text in enumerate(headers):

        Label(top2, text=text, font=('Arial', 12), borderwidth=1, relief="solid", width=20).grid(row=0, column=i, pady=10)


    conn = sqlite3.connect('ticket_booking_database.db')

    cursor = conn.cursor()

    cursor.execute('SELECT * FROM ticket')

    tickets = cursor.fetchall()

    conn.close()


    for i, ticket in enumerate(tickets):

        for j, item in enumerate(ticket):

            Label(top2, text=item, borderwidth=1, relief="solid", width=20).grid(row=i + 1, column=j)



def DeleteBooking():

    top3 = Toplevel()

    top3.geometry('800x300')

    top3.title('Delete Ticket Booking')


    headers = ['Customer Name', 'Ticket ID', 'Date of Booking', 'Ticket Validity(Date)', 'Action']

    for i, text in enumerate(headers):

        Label(top3, text=text, font=('Arial', 12), borderwidth=1, relief="solid", width=20).grid(row=0, column=i, pady=10)


    def delete_rows(ticket_id):

        try:

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

            cursor = conn.cursor()

            cursor.execute("DELETE FROM ticket WHERE ticket_id = ?", (ticket_id,))

            conn.commit()

            show_message('Success', 'Ticket deleted successfully!')

            top3.destroy()

            DeleteBooking()  # Refresh the window

        except sqlite3.Error as e:

            show_message('Error', str(e))

        finally:

            conn.close()


    conn = sqlite3.connect('ticket_booking_database.db')

    cursor = conn.cursor()

    cursor.execute('SELECT * FROM ticket')

    tickets = cursor.fetchall()

    conn.close()


    for i, ticket in enumerate(tickets):

        for j, item in enumerate(ticket):

            Label(top3, text=item, borderwidth=1, relief="solid", width=20).grid(row=i + 1, column=j)

        Button(top3, text='Delete', command=lambda t_id=ticket[1]: delete_rows(t_id)).grid(row=i + 1, column=4)



# Main buttons

Button(top, text='Book Ticket', font=('Arial', 14), fg='white', width=12, height=2, bg='Green', command=Book).grid(row=1, column=0, padx=80, pady=20)

Button(top, text='View History', font=('Arial', 14), fg='white', width=12, height=2, bg='Green', command=ViewHistory).grid(row=1, column=1, pady=20)

Button(top, text='Delete Booking', font=('Arial', 14), fg='white', width=12, height=2, bg='Green', command=DeleteBooking).grid(row=2, column=0, pady=30)

Button(top, text='Quit', font=('Arial', 14), fg='white', width=12, height=2, bg='Green', command=top.destroy).grid(row=2, column=1, pady=30)


# Start the app

top.mainloop()


OUTPUT :

HOME PAGE :



BOOK TICKET :




BOOKING SUCCESSFUL MESSAGE :




VIEW HISTORY :





DELETE BOOKING :



AFTER DELETION :




CHATBOT USING TKINTER

  CODE : from tkinter import * # Create main window window = Tk() window.title("Healthcare Chatbot") window.geometry('600x600...