Designing an Airline Reservation System in Java: A Comprehensive Exploration of Seats, Flights, and User Reservations

In this Java implementation, we designed a basic Airline Reservation System, focusing on seats, flights, and user reservations. The system comprises key classes such as Seat, SeatFare, Airport, Flight, FlightInstance, User, and Reservation.

  • Seats and Fares: The Seat class represents different seat types with associated fares, including dynamic pricing based on specific dates. Each seat type has a corresponding SeatFare object, allowing for flexible and dynamic pricing strategies.
  • Airports and Flights: The Airport class captures airport information, while the Flight class represents a flight route between source and destination airports. The Flight class includes a list of seats available for reservation.
  • Flight Instances: The FlightInstance class handles specific instances of flights, including departure times, gates, and pricing for individual seats. It associates seats with dynamic prices for a particular date.
  • User Management: The User class provides a basic representation of users with usernames and email addresses. The Reservation class links a specific user with reserved seats on a particular flight instance, enabling user-specific booking information.
  • Reservation Process: The Reservation class allows users to make reservations by associating specific seats with their user account. Users can also cancel reservations, freeing up seats for others.

The example application in the main method demonstrates the creation of seat types, airports, flights, flight instances, users, and reservations. The code emphasizes the association between users and their reserved seats, providing a foundation for a more comprehensive airline reservation system.

import java.util.*;

enum SeatType {
    ECONOMY,
    BUSINESS,
    FIRST_CLASS
}

class SeatFare {
    private SeatType seatType;
    private double baseFare;
    private Map<Date, Double> dynamicFares;

    public SeatFare(SeatType seatType, double baseFare) {
        this.seatType = seatType;
        this.baseFare = baseFare;
        this.dynamicFares = new HashMap<>();
    }

    public SeatType getSeatType() {
        return seatType;
    }

    public double getBaseFare() {
        return baseFare;
    }

    public void setDynamicFare(Date date, double fare) {
        dynamicFares.put(date, fare);
    }

    public double getDynamicFare(Date date) {
        return dynamicFares.getOrDefault(date, baseFare);
    }
}

class Seat {
    private int seatNumber;
    private SeatType seatType;
    private boolean isReserved;
    private SeatFare seatFare;

    public Seat(int seatNumber, SeatType seatType, SeatFare seatFare) {
        this.seatNumber = seatNumber;
        this.seatType = seatType;
        this.seatFare = seatFare;
        this.isReserved = false;
    }

    public double getSeatFare(Date date) {
        return seatFare.getDynamicFare(date);
    }

    public void reserve() {
        isReserved = true;
    }

    public void cancelReservation() {
        isReserved = false;
    }
}

class Airport {
    private String code;
    private String name;

    public Airport(String code, String name) {
        this.code = code;
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
}

class Flight {
    private String flightNumber;
    private Airport sourceAirport;
    private Airport destinationAirport;
    private List<Seat> seats;

    public Flight(String flightNumber, Airport sourceAirport, Airport destinationAirport) {
        this.flightNumber = flightNumber;
        this.sourceAirport = sourceAirport;
        this.destinationAirport = destinationAirport;
        this.seats = new ArrayList<>();
    }

    public String getFlightNumber() {
        return flightNumber;
    }

    public Airport getSourceAirport() {
        return sourceAirport;
    }

    public Airport getDestinationAirport() {
        return destinationAirport;
    }

    public List<Seat> getSeats() {
        return seats;
    }

    public void addSeat(Seat seat) {
        seats.add(seat);
    }
}

class FlightInstance {
    private Flight flight;
    private Date departureDateTime;
    private String gate;
    private Map<Seat, Double> seatPrices;

    public FlightInstance(Flight flight, Date departureDateTime, String gate) {
        this.flight = flight;
        this.departureDateTime = departureDateTime;
        this.gate = gate;
        this.seatPrices = new HashMap<>();
    }

    public Flight getFlight() {
        return flight;
    }

    public Date getDepartureDateTime() {
        return departureDateTime;
    }

    public String getGate() {
        return gate;
    }

    public List<Seat> getSeats() {
        return flight.getSeats();
    }

    public Map<Seat, Double> getSeatPrices() {
        return seatPrices;
    }

    public void addSeatWithPrice(Seat seat, double price) {
        seatPrices.put(seat, price);
    }

    public double getSeatPrice(Seat seat) {
        return seatPrices.getOrDefault(seat, 0.0);
    }
}

class User {
    private String username;
    private String email;

    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public String getEmail() {
        return email;
    }
}

class Reservation {
    private int reservationId;
    private List<Seat> reservedSeats;
    private FlightInstance flightInstance;
    private User user; // New field to store user information

    public Reservation(int reservationId, FlightInstance flightInstance, User user) {
        this.reservationId = reservationId;
        this.reservedSeats = new ArrayList<>();
        this.flightInstance = flightInstance;
        this.user = user;
    }

    public int getReservationId() {
        return reservationId;
    }

    public List<Seat> getReservedSeats() {
        return reservedSeats;
    }

    public FlightInstance getFlightInstance() {
        return flightInstance;
    }

    public User getUser() {
        return user;
    }

    public void addReservedSeat(Seat seat) {
        reservedSeats.add(seat);
        seat.reserve();
    }

    public void cancelReservedSeat(Seat seat) {
        reservedSeats.remove(seat);
        seat.cancelReservation();
    }
}

class AirlineApplication {
    public static void main(String[] args) {
        // Sample usage with dynamic SeatFare
        SeatFare economyFare = new SeatFare(SeatType.ECONOMY, 100.0);
        economyFare.setDynamicFare(new Date(), 120.0);
        economyFare.setDynamicFare(addDays(new Date(), 7), 110.0);

        Seat economySeat = new Seat(1, SeatType.ECONOMY, economyFare);

        Airport sourceAirport = new Airport("SFO", "San Francisco International Airport");
        Airport destinationAirport = new Airport("JFK", "John F. Kennedy International Airport");

        Flight flight = new Flight("FL123", sourceAirport, destinationAirport);
        flight.addSeat(economySeat);

        FlightInstance instance = new FlightInstance(flight, new Date(), "Gate A1");
        instance.addSeatWithPrice(economySeat, economyFare.getDynamicFare(new Date()));

        User user = new User("john_doe", "[email protected]");

        // Example: Making a reservation
        Reservation reservation = new Reservation(1, instance, user);
        Seat seatToReserve = economySeat;

        reservation.addReservedSeat(seatToReserve);

        // Display reservation details
        System.out.println("Reservation Details:");
        System.out.println("Reservation ID: " + reservation.getReservationId());
        System.out.println("Flight Number: " + instance.getFlight().getFlightNumber());
        System.out.println("Departure Date: " + instance.getDepartureDateTime());
        System.out.println("Reserved Seats: " + reservation.getReservedSeats().size());
        System.out.println("Reserved Seat Type: " + seatToReserve.getSeatType());
        System.out.println("Reserved Seat Price: " + instance.getSeatPrice(seatToReserve));
        System.out.println("Reserved By User: " + reservation.getUser().getUsername());
    }

 }

You may also like...