Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
8 views11 pages

Python Project 1

The document outlines a Python application for an Airport Management System, which includes classes for managing database connections, passengers, airlines, flights, and bookings. It provides functionalities such as adding, searching, and updating passenger and airline information, as well as managing flight details and bookings. The system uses MySQL for data storage and requires the 'mysql-connector-python' package for database operations.

Uploaded by

void
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views11 pages

Python Project 1

The document outlines a Python application for an Airport Management System, which includes classes for managing database connections, passengers, airlines, flights, and bookings. It provides functionalities such as adding, searching, and updating passenger and airline information, as well as managing flight details and bookings. The system uses MySQL for data storage and requires the 'mysql-connector-python' package for database operations.

Uploaded by

void
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 11

"""

Airport Management System - Python Application


Required packages: pip install mysql-connector-python
"""

import mysql.connector
from mysql.connector import Error
import datetime
import random
import string
from typing import List, Dict, Optional, Tuple
from decimal import Decimal

class DatabaseConnection:
"""Handle MySQL database connections and operations"""

def __init__(self, host='localhost', database='airport_management',


user='root', password='wizard04'):
self.host = host
self.database = database
self.user = user
self.password = password
self.connection = None

def connect(self):
"""Establish database connection"""
try:
self.connection = mysql.connector.connect(
host=self.host,
database=self.database,
user=self.user,
password=self.password
)
if self.connection.is_connected():
print("Successfully connected to MySQL database")
return True
except Error as e:
print(f"Error connecting to MySQL database: {e}")
return False

def disconnect(self):
"""Close database connection"""
if self.connection and self.connection.is_connected():
self.connection.close()
print("MySQL connection closed")

def execute_query(self, query: str, params: tuple = None) -> Optional[List]:


"""Execute SELECT queries"""
try:
cursor = self.connection.cursor(dictionary=True)
cursor.execute(query, params)
result = cursor.fetchall()
cursor.close()
return result
except Error as e:
print(f"Error executing query: {e}")
return None
def execute_update(self, query: str, params: tuple = None) -> bool:
"""Execute INSERT, UPDATE, DELETE queries"""
try:
cursor = self.connection.cursor()
cursor.execute(query, params)
self.connection.commit()
cursor.close()
return True
except Error as e:
print(f"Error executing update: {e}")
self.connection.rollback()
return False

class PassengerManager:
"""Manage passenger operations"""

def __init__(self, db: DatabaseConnection):


self.db = db

def add_passenger(self, first_name: str, last_name: str, email: str,


phone: str, passport_number: str, date_of_birth: str,
nationality: str, gender: str, address: str = None) -> bool:
query = """
INSERT INTO passengers (first_name, last_name, email, phone,
passport_number,
date_of_birth, nationality, gender, address)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
params = (first_name, last_name, email, phone, passport_number,
date_of_birth, nationality, gender, address)

if self.db.execute_update(query, params):
print(f"Passenger {first_name} {last_name} added successfully!")
return True
else:
print("Failed to add passenger")
return False

def search_passenger(self, search_term: str, search_by: str = 'passport') ->


List[Dict]:
if search_by == 'passport':
query = "SELECT * FROM passengers WHERE passport_number = %s"
elif search_by == 'email':
query = "SELECT * FROM passengers WHERE email = %s"
elif search_by == 'name':
query = "SELECT * FROM passengers WHERE CONCAT(first_name, ' ',
last_name) LIKE %s"
search_term = f"%{search_term}%"
else:
print("Invalid search criteria")
return []

result = self.db.execute_query(query, (search_term,))


return result if result else []

def get_all_passengers(self) -> List[Dict]:


query = "SELECT * FROM passengers ORDER BY created_at DESC"
result = self.db.execute_query(query)
return result if result else []

def update_passenger(self, passenger_id: int, **kwargs) -> bool:


if not kwargs:
print("No data to update")
return False

set_clause = ", ".join([f"{key} = %s" for key in kwargs.keys()])


query = f"UPDATE passengers SET {set_clause} WHERE passenger_id = %s"
params = tuple(kwargs.values()) + (passenger_id,)

if self.db.execute_update(query, params):
print("Passenger updated successfully!")
return True
else:
print("Failed to update passenger")
return False

class AirlineManager:
"""Manage airline operations"""

def __init__(self, db: DatabaseConnection):


self.db = db

def add_airline(self, code: str, name: str, country: str,


email: str = None, phone: str = None) -> bool:
query = """
INSERT INTO airlines (airline_code, airline_name, country, contact_email,
contact_phone)
VALUES (%s, %s, %s, %s, %s)
"""
params = (code.upper(), name, country, email, phone)

if self.db.execute_update(query, params):
print(f"Airline {name} ({code.upper()}) added successfully!")
return True
else:
print("Failed to add airline. Check for duplicate code.")
return False

def view_airlines(self):
query = "SELECT * FROM airlines ORDER BY airline_code"
airlines = self.db.execute_query(query)
if airlines:
print("\n--- Airline List ---")
for a in airlines:
print(f"{a['airline_code']} - {a['airline_name']}
({a['country']})")
else:
print("No airlines found.")

class FlightManager:
"""Manage flight operations"""

def __init__(self, db: DatabaseConnection):


self.db = db
def add_flight(self, flight_number: str, airline_id: int, departure_airport:
str,
arrival_airport: str, departure_date: str, departure_time: str,
arrival_date: str, arrival_time: str, base_price: float,
available_seats: int, aircraft_id: int = None,
gate_number: str = None, terminal: str = None) -> bool:
query = """
INSERT INTO flights (flight_number, airline_id, aircraft_id,
departure_airport,
arrival_airport, departure_date, departure_time,
arrival_date,
arrival_time, base_price, available_seats, gate_number,
terminal)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
params = (flight_number, airline_id, aircraft_id, departure_airport,
arrival_airport, departure_date, departure_time, arrival_date,
arrival_time, base_price, available_seats, gate_number, terminal)

if self.db.execute_update(query, params):
print(f"Flight {flight_number} added successfully!")
return True
else:
print("Failed to add flight")
return False

def search_flights(self, departure_airport: str = None, arrival_airport: str =


None,
departure_date: str = None) -> List[Dict]:
conditions = []
params = []

if departure_airport:
conditions.append("departure_airport = %s")
params.append(departure_airport)

if arrival_airport:
conditions.append("arrival_airport = %s")
params.append(arrival_airport)

if departure_date:
conditions.append("departure_date = %s")
params.append(departure_date)

where_clause = " AND ".join(conditions) if conditions else "1=1"

query = f"""
SELECT f.*, a.airline_name
FROM flights f
JOIN airlines a ON f.airline_id = a.airline_id
WHERE {where_clause}
ORDER BY f.departure_date, f.departure_time
"""

result = self.db.execute_query(query, tuple(params))


return result if result else []

def get_flight_by_id(self, flight_id: int) -> Optional[Dict]:


query = """
SELECT f.*, a.airline_name, ac.aircraft_model
FROM flights f
JOIN airlines a ON f.airline_id = a.airline_id
LEFT JOIN aircraft ac ON f.aircraft_id = ac.aircraft_id
WHERE f.flight_id = %s
"""
result = self.db.execute_query(query, (flight_id,))
return result[0] if result else None

def update_flight_status(self, flight_id: int, status: str) -> bool:


query = "UPDATE flights SET status = %s WHERE flight_id = %s"
if self.db.execute_update(query, (status, flight_id)):
print(f"Flight status updated to {status}")
return True
return False

class BookingManager:
"""Manage booking operations"""

def __init__(self, db: DatabaseConnection):


self.db = db

def generate_booking_reference(self) -> str:


return ''.join(random.choices(string.ascii_uppercase + string.digits, k=6))

def create_booking(self, passenger_id: int, flight_id: int, seat_number: str =


None,
class_type: str = 'Economy') -> Optional[str]:
flight_query = "SELECT available_seats, base_price FROM flights WHERE
flight_id = %s"
flight_info = self.db.execute_query(flight_query, (flight_id,))

if not flight_info or flight_info[0]['available_seats'] <= 0:


print("Flight not available or no seats remaining")
return None

booking_reference = self.generate_booking_reference()

base_price = flight_info[0]['base_price']

price_multiplier = {
'Economy': Decimal('1.0'),
'Business': Decimal('2.0'),
'First': Decimal('3.0')
}

class_type = (class_type or 'Economy').title()


total_amount = (base_price * price_multiplier.get(class_type,
Decimal('1.0'))).quantize(Decimal('0.01'))

query = """
INSERT INTO bookings (booking_reference, passenger_id, flight_id,
seat_number,
class, total_amount, booking_status)
VALUES (%s, %s, %s, %s, %s, %s, 'Confirmed')
"""
params = (booking_reference, passenger_id, flight_id, seat_number,
class_type, total_amount)
if self.db.execute_update(query, params):
self.db.execute_update(
"UPDATE flights SET available_seats = available_seats - 1 WHERE
flight_id = %s",
(flight_id,)
)
print(f"Booking created successfully! Reference: {booking_reference}")
return booking_reference
else:
print("Failed to create booking")
return None

def get_booking_details(self, booking_reference: str) -> Optional[Dict]:


query = """
SELECT b.*, p.first_name, p.last_name, p.email, p.phone,
f.flight_number, f.departure_airport, f.arrival_airport,
f.departure_date, f.departure_time, a.airline_name
FROM bookings b
JOIN passengers p ON b.passenger_id = p.passenger_id
JOIN flights f ON b.flight_id = f.flight_id
JOIN airlines a ON f.airline_id = a.airline_id
WHERE b.booking_reference = %s
"""
result = self.db.execute_query(query, (booking_reference,))
return result[0] if result else None

def cancel_booking(self, booking_reference: str) -> bool:


booking_query = "SELECT flight_id, booking_status FROM bookings WHERE
booking_reference = %s"
booking_info = self.db.execute_query(booking_query, (booking_reference,))

if not booking_info or booking_info[0]['booking_status'] == 'Cancelled':


print("Booking not found or already cancelled")
return False

update_query = "UPDATE bookings SET booking_status = 'Cancelled' WHERE


booking_reference = %s"
if self.db.execute_update(update_query, (booking_reference,)):
flight_id = booking_info[0]['flight_id']
seat_query = "UPDATE flights SET available_seats = available_seats + 1
WHERE flight_id = %s"
self.db.execute_update(seat_query, (flight_id,))
print(f"Booking {booking_reference} cancelled successfully")
return True
return False

class AirportManagementSystem:
"""Main airport management system"""

def __init__(self):
self.db = DatabaseConnection()
self.passenger_manager = None
self.flight_manager = None
self.booking_manager = None
self.airline_manager = None
def initialize(self) -> bool:
if self.db.connect():
self.passenger_manager = PassengerManager(self.db)
self.flight_manager = FlightManager(self.db)
self.booking_manager = BookingManager(self.db)
self.airline_manager = AirlineManager(self.db)
return True
return False

def cleanup(self):
self.db.disconnect()

def display_menu(self):
print("\n" + "=" * 50)
print(" AIRPORT MANAGEMENT SYSTEM")
print("=" * 50)
print("1. Passenger Management")
print("2. Flight Management")
print("3. Booking Management")
print("4. Airline Management")
print("5. Reports")
print("6. Exit")
print("=" * 50)

def passenger_menu(self):
while True:
print("\n--- PASSENGER MANAGEMENT ---")
print("1. Add New Passenger")
print("2. Search Passenger")
print("3. View All Passengers")
print("4. Update Passenger")
print("5. Back to Main Menu")

choice = input("\nEnter your choice (1-5): ")

if choice == '1':
self.add_passenger_interactive()
elif choice == '2':
self.search_passenger_interactive()
elif choice == '3':
self.view_all_passengers()
elif choice == '4':
self.update_passenger_interactive()
elif choice == '5':
break
else:
print("Invalid choice! Please try again.")

def airline_menu(self):
while True:
print("\n--- AIRLINE MANAGEMENT ---")
print("1. Add New Airline")
print("2. View All Airlines")
print("3. Back to Main Menu")

choice = input("Enter your choice (1-3): ")

if choice == '1':
self.add_airline_interactive()
elif choice == '2':
self.airline_manager.view_airlines()
elif choice == '3':
break
else:
print("Invalid choice. Please try again.")

def add_airline_interactive(self):
code = input("Airline code (e.g., 6E): ").strip().upper()
name = input("Airline name: ").strip()
country = input("Country: ").strip()
email = input("Contact email (optional): ").strip() or None
phone = input("Contact phone (optional): ").strip() or None

self.airline_manager.add_airline(code, name, country, email, phone)

def add_passenger_interactive(self):
print("\n--- ADD NEW PASSENGER ---")
first_name = input("First Name: ")
last_name = input("Last Name: ")
email = input("Email: ")
phone = input("Phone: ")
passport = input("Passport Number: ")
dob = input("Date of Birth (YYYY-MM-DD): ")
nationality = input("Nationality: ")
gender = input("Gender (Male/Female/Other): ")
address = input("Address (optional): ")

self.passenger_manager.add_passenger(
first_name, last_name, email, phone, passport,
dob, nationality, gender, address if address else None
)

def search_passenger_interactive(self):
print("\n--- SEARCH PASSENGER ---")
print("1. By Passport Number")
print("2. By Email")
print("3. By Name")

choice = input("Search by (1-3): ")


search_term = input("Enter search term: ")

search_by_map = {'1': 'passport', '2': 'email', '3': 'name'}


search_by = search_by_map.get(choice, 'passport')

passengers = self.passenger_manager.search_passenger(search_term,
search_by)

if passengers:
print(f"\nFound {len(passengers)} passenger(s):")
for p in passengers:
print(f"ID: {p['passenger_id']}, Name: {p['first_name']}
{p['last_name']}, "
f"Passport: {p['passport_number']}, Email: {p['email']}")
else:
print("No passengers found")

def view_all_passengers(self):
passengers = self.passenger_manager.get_all_passengers()
if passengers:
print(f"\nTotal Passengers: {len(passengers)}")
print("-" * 80)
for p in passengers:
print(f"ID: {p['passenger_id']:3d} | {p['first_name']}
{p['last_name']:20s} | "
f"{p['passport_number']:12s} | {p['email']:25s}")
else:
print("No passengers found")

def flight_search_interactive(self):
print("\n--- SEARCH FLIGHTS ---")
departure = input("Departure Airport (3-letter code, optional): ").upper()
arrival = input("Arrival Airport (3-letter code, optional): ").upper()
date = input("Departure Date (YYYY-MM-DD, optional): ")

flights = self.flight_manager.search_flights(
departure if departure else None,
arrival if arrival else None,
date if date else None
)

if flights:
print(f"\nFound {len(flights)} flight(s):")
print("-" * 100)
for f in flights:
print(f"Flight: {f['flight_number']:8s} | {f['airline_name']:15s} |
"
f"{f['departure_airport']}->{f['arrival_airport']} | "
f"{f['departure_date']} {f['departure_time']} | "
f"₹{f['base_price']:8.2f} | Seats: {f['available_seats']}")
else:
print("No flights found")

def create_booking_interactive(self):
print("\n--- CREATE BOOKING ---")

passport = input("Enter passenger passport number: ")


passengers = self.passenger_manager.search_passenger(passport, 'passport')

if not passengers:
print("Passenger not found!")
return

passenger = passengers[0]
print(f"Passenger: {passenger['first_name']} {passenger['last_name']}")

print("\nAvailable flights:")
departure = input("Departure airport: ").upper()
arrival = input("Arrival airport: ").upper()
date = input("Departure date (YYYY-MM-DD): ")

flights = self.flight_manager.search_flights(departure, arrival, date)

if not flights:
print("No flights found!")
return

for i, f in enumerate(flights, 1):


print(f"{i}. {f['flight_number']} - {f['airline_name']} - "
f"₹{f['base_price']} - {f['available_seats']} seats available")

try:
flight_choice = int(input("Select flight (number): ")) - 1
selected_flight = flights[flight_choice]

class_type = input("Class (Economy/Business/First) [Economy]: ") or


"Economy"
seat_number = input("Seat number (optional): ") or None

booking_ref = self.booking_manager.create_booking(
passenger['passenger_id'],
selected_flight['flight_id'],
seat_number,
class_type
)

if booking_ref:
print(f"\nBooking created successfully!")
print(f"Booking Reference: {booking_ref}")

except (ValueError, IndexError):


print("Invalid selection!")

def run(self):
if not self.initialize():
print("Failed to initialize the system!")
return

print("Airport Management System initialized successfully!")

try:
while True:
self.display_menu()
choice = input("\nEnter your choice (1-6): ")

if choice == '1':
self.passenger_menu()
elif choice == '2':
self.flight_search_interactive()
elif choice == '3':
print("\n--- BOOKING MANAGEMENT ---")
print("1. Create Booking")
print("2. View Booking Details")
print("3. Cancel Booking")
print("4. Back to Main Menu")
sub_choice = input("Enter choice: ")
if sub_choice == '1':
self.create_booking_interactive()
elif sub_choice == '2':
ref = input("Enter booking reference: ")
booking = self.booking_manager.get_booking_details(ref)
if booking:
print(f"\nBooking Details:")
print(f"Reference: {booking['booking_reference']}")
print(f"Passenger: {booking['first_name']}
{booking['last_name']}")
print(f"Flight: {booking['flight_number']}
({booking['airline_name']})")
print(f"Route: {booking['departure_airport']} ->
{booking['arrival_airport']}")
print(f"Date: {booking['departure_date']} at
{booking['departure_time']}")
print(f"Class: {booking['class']}")
print(f"Amount: ₹{booking['total_amount']}")
print(f"Status: {booking['booking_status']}")
elif sub_choice == '3':
ref = input("Enter booking reference to cancel: ")
self.booking_manager.cancel_booking(ref)
elif choice == '4':
self.airline_menu()
elif choice == '5':
print("Reports feature - Coming soon!")
elif choice == '6':
print("Thank you for using Airport Management System!")
break
except KeyboardInterrupt:
print("\nSystem interrupted by user")
finally:
self.cleanup()

if __name__ == "__main__":
system = AirportManagementSystem()
system.run()

You might also like