import mysql.
connector as c
import customtkinter as ctk
from tkinter import messagebox
from [Link] import letter
from [Link] import canvas
import os
# Cost per kilometer
COST_PER_KM = 4
# Function to create a database connection
def create_database_connection():
try:
connection = [Link](
host="localhost", # Your MySQL host
user="root", # Your MySQL username
password="your_password", # Replace with your password
database="airline_reservation" # Database name
return connection
except [Link] as err:
print(f"Error: {err}")
return None
# Function to create flights table
def create_flights_table():
conn = create_database_connection()
if conn is None:
return
cursor = [Link]()
# Create flights table if not exists
[Link]('''CREATE TABLE IF NOT EXISTS flights (
flight_id INT AUTO_INCREMENT PRIMARY KEY,
flight_number VARCHAR(10),
origin VARCHAR(100),
destination VARCHAR(100),
departure_time DATETIME,
available_seats INT,
distance INT)''')
# Insert sample flights if the table is empty
[Link]("SELECT COUNT(*) FROM flights")
if [Link]()[0] == 0:
[Link]("INSERT INTO flights (flight_number, origin, destination, departure_time,
available_seats, distance) VALUES (%s, %s, %s, %s, %s, %s)",
('AA123', 'New York', 'Los Angeles', '2024-12-15 [Link]', 50, 4000))
[Link]("INSERT INTO flights (flight_number, origin, destination, departure_time,
available_seats, distance) VALUES (%s, %s, %s, %s, %s, %s)",
('BB456', 'Chicago', 'Miami', '2024-12-16 [Link]', 30, 2000))
[Link]()
[Link]()
# Function to calculate total cost
def calculate_total_cost():
try:
num_passengers = int(passengers_entry.get())
flight_id = selected_flight_id
conn = create_database_connection()
cursor = [Link]()
[Link]("SELECT distance FROM flights WHERE flight_id=%s", (flight_id,))
distance = [Link]()[0]
total_cost = num_passengers * distance * COST_PER_KM
total_cost_label.config(text=f"Total Cost: ₹{total_cost}")
[Link]()
return total_cost
except Exception as e:
total_cost_label.config(text="Error calculating cost.")
print(e)
return 0
# Function to generate the PDF ticket
def generate_ticket_pdf(passenger_name, num_passengers, flight_details, total_cost):
flight_number, origin, destination, departure_time = flight_details
filename = f"{passenger_name}_ticket.pdf"
c = [Link](filename, pagesize=letter)
[Link](100, 750, f"Ticket for {passenger_name}")
[Link](100, 730, f"Flight Number: {flight_number}")
[Link](100, 710, f"Origin: {origin}")
[Link](100, 690, f"Destination: {destination}")
[Link](100, 670, f"Departure Time: {departure_time}")
[Link](100, 650, f"Number of Passengers: {num_passengers}")
[Link](100, 630, f"Total Cost: ₹{total_cost}")
[Link]()
[Link]("Ticket Generated", f"Your ticket has been downloaded as {filename}")
# Function to book a flight
def book_flight():
passenger_name = passenger_name_entry.get()
num_passengers = int(passengers_entry.get())
conn = create_database_connection()
if conn is None:
return
cursor = [Link]()
# Fetch selected flight details
[Link]("SELECT flight_number, origin, destination, departure_time FROM flights WHERE
flight_id=%s", (selected_flight_id,))
flight_details = [Link]()
flight_number, origin, destination, departure_time = flight_details
# Insert reservation into database
[Link]("INSERT INTO reservations (flight_id, passenger_name) VALUES (%s, %s)",
(selected_flight_id, passenger_name))
[Link]()
total_cost = calculate_total_cost()
generate_ticket_pdf(passenger_name, num_passengers, flight_details, total_cost) # Generate and
download the ticket
[Link]("Booking Confirmed", f"Your flight has been booked!\nTotal Cost:
₹{total_cost}")
[Link]()
# Function to search for flights based on origin and destination
def search_available_flights():
origin = origin_entry.get()
destination = destination_entry.get()
conn = create_database_connection()
if conn is None:
return
cursor = [Link]()
[Link]("SELECT * FROM flights WHERE origin=%s AND destination=%s", (origin, destination))
available_flights = [Link]()
# Clear previous search results
for widget in results_frame.winfo_children():
[Link]()
if available_flights:
for flight in available_flights:
flight_id = flight[0]
flight_number = flight[1]
departure_time = flight[4]
available_seats = flight[5]
[Link](results_frame, text=f"Flight {flight_number} | {departure_time} | Available Seats:
{available_seats}", anchor="w").pack()
[Link](results_frame, text="Select", command=lambda flight_id=flight_id:
select_flight(flight_id)).pack()
else:
[Link](results_frame, text="No flights found for this route.", anchor="w").pack()
[Link]()
# Function to select a flight for booking
def select_flight(flight_id):
global selected_flight_id
selected_flight_id = flight_id
calculate_total_cost()
# Create the main window
ctk.set_appearance_mode("Dark")
ctk.set_default_color_theme("blue")
root = [Link]()
[Link]("Airline Reservation System")
# Search for flights
search_frame = [Link](root)
search_frame.pack(padx=20, pady=20)
[Link](search_frame, text="Enter Origin:").grid(row=0, column=0, padx=10, pady=10)
origin_entry = [Link](search_frame)
origin_entry.grid(row=0, column=1)
[Link](search_frame, text="Enter Destination:").grid(row=1, column=0, padx=10, pady=10)
destination_entry = [Link](search_frame)
destination_entry.grid(row=1, column=1)
[Link](search_frame, text="Search Flights", command=search_available_flights).grid(row=2,
columnspan=2, pady=20)
# Results frame to display flight options
results_frame = [Link](root)
results_frame.pack(padx=20, pady=20)
# Booking details
booking_frame = [Link](root)
booking_frame.pack(padx=20, pady=20)
[Link](booking_frame, text="Passenger Name:").grid(row=0, column=0, padx=10, pady=10)
passenger_name_entry = [Link](booking_frame)
passenger_name_entry.grid(row=0, column=1)
[Link](booking_frame, text="No. of Passengers:").grid(row=1, column=0, padx=10, pady=10)
passengers_entry = [Link](booking_frame)
passengers_entry.grid(row=1, column=1)
total_cost_label = [Link](booking_frame, text="Total Cost: ₹0")
total_cost_label.grid(row=2, columnspan=2, pady=10)
[Link](booking_frame, text="Book Flight", command=book_flight).grid(row=3, columnspan=2,
pady=20)
# Set up the flights table and sample data
create_flights_table()
[Link]()