MAHATMA EDUCATION SOCIETY’S
PILLAI COLLEGE OF ARTS, COMMERCE & SCIENCE
(Autonomous)
NEW PANVEL
IN PARTIAL FULFILLMENT OF
DEGREE OF BACHELOR OF SCIENCE IN
INFORMATION TECHNOLOGY
SEMESTER 4- 2025/ 26
PROJECT ON :Railway Ticket Reservation System
PROJECT GUIDE : Nikita Mam
SUBMITTED BY: Siddharth Sanjay Pawar
CLASS: SY IT (C)
Roll no : 5658
CERTIFICATE
This is to verify that Mr Siddharth Sanjay Pawar
Examination Seat no. 5658 has successfully completed
Practical of the subject Data Structure Using Python
In partial fulfillment for the degree of [Link]. (Information
Technology)
SEM IV, affiliated to the University of
Mumbai for the academic year 2025-2026.
Internal Examiner
Head of the department
External Examiner
Code :
import tkinter as tk
from tkinter import messagebox
from tkinter import simpledialog
# ---------------- LINKED LIST FOR CONFIRMED TICKETS ---------------- #
class Node:
def __init__(self, ticket_id, name, age, train):
self.ticket_id = ticket_id
[Link] = name
[Link] = age
[Link] = train
[Link] = None
class LinkedList:
def __init__(self):
[Link] = None
def add_ticket(self, ticket_id, name, age, train):
new_node = Node(ticket_id, name, age, train)
if not [Link]:
[Link] = new_node
else:
temp = [Link]
while [Link]:
temp = [Link]
[Link] = new_node
def remove_ticket(self, ticket_id):
temp = [Link]
prev = None
while temp:
if temp.ticket_id == ticket_id:
if prev:
[Link] = [Link]
else:
[Link] = [Link]
return True
prev = temp
temp = [Link]
return False
def display(self):
tickets = []
temp = [Link]
while temp:
[Link](
f"ID: {temp.ticket_id} | {[Link]} | {[Link]} | {[Link]}"
)
temp = [Link]
return tickets
# ---------------- QUEUE FOR WAITING LIST ---------------- #
class Queue:
def __init__(self):
[Link] = []
def enqueue(self, item):
[Link](item)
def dequeue(self):
if not self.is_empty():
return [Link](0)
return None
def is_empty(self):
return len([Link]) == 0
def display(self):
return [Link]
# ---------------- MAIN APPLICATION ---------------- #
class RailwayReservation:
def __init__(self, root):
[Link] = root
[Link]("Railway Ticket Reservation System")
[Link]("700x600")
[Link](bg="#f0f8ff")
self.max_seats = 5
self.current_seats = 0
self.ticket_counter = 1001
self.confirmed_list = LinkedList()
self.waiting_queue = Queue()
self.create_widgets()
# ---------------- UI DESIGN ---------------- #
def create_widgets(self):
title = [Link](
[Link],
text="Railway Ticket Reservation System",
font=("Arial", 20, "bold"),
bg="#f0f8ff",
fg="#003366"
)
[Link](pady=15)
# Input Frame
frame = [Link]([Link], bg="#f0f8ff")
[Link](pady=10)
[Link](frame, text="Name:", bg="#f0f8ff").grid(row=0, column=0, pady=5)
[Link](frame, text="Age:", bg="#f0f8ff").grid(row=1, column=0, pady=5)
[Link](frame, text="Train:", bg="#f0f8ff").grid(row=2, column=0, pady=5)
self.name_entry = [Link](frame, width=25)
self.age_entry = [Link](frame, width=25)
self.train_entry = [Link](frame, width=25)
self.name_entry.grid(row=0, column=1)
self.age_entry.grid(row=1, column=1)
self.train_entry.grid(row=2, column=1)
# Buttons
btn_frame = [Link]([Link], bg="#f0f8ff")
btn_frame.pack(pady=15)
[Link](
btn_frame,
text="Book Ticket",
width=15,
bg="#4CAF50",
fg="white",
command=self.book_ticket
).grid(row=0, column=0, padx=10)
[Link](
btn_frame,
text="Cancel Ticket",
width=15,
bg="#f44336",
fg="white",
command=self.cancel_ticket
).grid(row=0, column=1, padx=10)
[Link](
btn_frame,
text="Show Status",
width=15,
bg="#2196F3",
fg="white",
command=self.show_status
).grid(row=0, column=2, padx=10)
# Display Area
display_frame = [Link]([Link], bg="#f0f8ff")
display_frame.pack(pady=10, fill="both", expand=True)
[Link](
display_frame,
text="Reservation Status",
font=("Arial", 14, "bold"),
bg="#f0f8ff"
).pack()
self.text_area = [Link](display_frame, height=18, width=80)
self.text_area.pack(pady=10)
# ---------------- FUNCTIONS ---------------- #
def book_ticket(self):
name = self.name_entry.get()
age = self.age_entry.get()
train = self.train_entry.get()
if not name or not age or not train:
[Link]("Warning", "Please fill all fields")
return
if not [Link]():
[Link]("Error", "Age must be a number")
return
ticket_id = self.ticket_counter
self.ticket_counter += 1
if self.current_seats < self.max_seats:
# Confirmed ticket
self.confirmed_list.add_ticket(ticket_id, name, age, train)
self.current_seats += 1
[Link](
"Success",
f"Ticket Confirmed!\nTicket ID: {ticket_id}"
)
else:
# Waiting list
self.waiting_queue.enqueue((ticket_id, name, age, train))
[Link](
"Waiting List",
f"Added to Waiting List!\nTicket ID: {ticket_id}"
)
self.clear_fields()
self.show_status()
def cancel_ticket(self):
ticket_id = [Link](
"Cancel Ticket",
"Enter Ticket ID:"
)
if not ticket_id:
return
removed = self.confirmed_list.remove_ticket(ticket_id)
if removed:
self.current_seats -= 1
[Link]("Cancelled", "Ticket Cancelled Successfully")
# Move from waiting list to confirmed
if not self.waiting_queue.is_empty():
data = self.waiting_queue.dequeue()
self.confirmed_list.add_ticket(*data)
self.current_seats += 1
[Link](
"Updated",
f"Waiting Ticket Confirmed!\nTicket ID: {data[0]}"
)
else:
[Link]("Error", "Ticket ID Not Found")
self.show_status()
def show_status(self):
self.text_area.delete("1.0", [Link])
self.text_area.insert([Link], "CONFIRMED TICKETS:\n")
self.text_area.insert([Link], "----------------------------\n")
confirmed = self.confirmed_list.display()
if confirmed:
for t in confirmed:
self.text_area.insert([Link], t + "\n")
else:
self.text_area.insert([Link], "No Confirmed Tickets\n")
self.text_area.insert([Link], "\nWAITING LIST:\n")
self.text_area.insert([Link], "----------------------------\n")
waiting = self.waiting_queue.display()
if waiting:
for w in waiting:
self.text_area.insert(
[Link],
f"ID: {w[0]} | {w[1]} | {w[2]} | {w[3]}\n"
)
else:
self.text_area.insert([Link], "No Waiting Tickets\n")
def clear_fields(self):
self.name_entry.delete(0, [Link])
self.age_entry.delete(0, [Link])
self.train_entry.delete(0, [Link])
# ---------------- RUN APPLICATION ---------------- #
if __name__ == "__main__":
root = [Link]()
app = RailwayReservation(root)
[Link]()
Output :