Airline Reservation Program

PHOTO EMBED

Sat Oct 05 2024 16:56:38 GMT+0000 (Coordinated Universal Time)

Saved by @cjadl24

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

// Base Passenger class
abstract class Passenger {
    private String name;
    private int seatRow;
    private int seatCol;
    private int age;
    protected double ticketPrice;

    public Passenger(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters and Setters
    public String getName() {
        return name;
    }

    public int getSeatRow() {
        return seatRow;
    }

    public void setSeatRow(int seatRow) {
        this.seatRow = seatRow;
    }

    public int getSeatCol() {
        return seatCol;
    }

    public void setSeatCol(int seatCol) {
        this.seatCol = seatCol;
    }

    public int getAge() {
        return age;
    }

    public double getTicketPrice() {
        return ticketPrice;
    }

    public abstract void calculateFinalPrice(double basePrice);  // Abstract method to calculate price

    public void getPassengerDetails() {
        System.out.println("Passenger Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("Seat: " + seatRow + "," + seatCol);
        System.out.println("Ticket Price: $" + ticketPrice);
    }
}

// RegularPassenger class (inherits from Passenger)
class RegularPassenger extends Passenger {
    public RegularPassenger(String name, int age) {
        super(name, age);
    }

    @Override
    public void calculateFinalPrice(double basePrice) {
        super.ticketPrice = basePrice;  // Regular passengers pay the base price
    }
}

// VIPPassenger class (inherits from Passenger)
class VIPPassenger extends Passenger {
    private double vipSurcharge = 100;  // VIP passengers have a surcharge

    public VIPPassenger(String name, int age) {
        super(name, age);
    }

    @Override
    public void calculateFinalPrice(double basePrice) {
        super.ticketPrice = basePrice + vipSurcharge;  // Add VIP surcharge to the base price
    }

    @Override
    public void getPassengerDetails() {
        super.getPassengerDetails();
        System.out.println("VIP Surcharge: $" + vipSurcharge);
    }
}

// Seat Availability Class (Encapsulated for seat handling)
class SeatAvailability {
    private char[][] seats;

    public SeatAvailability(int rows, int cols) {
        seats = new char[rows][cols];
        initializeSeats();
    }

    private void initializeSeats() {
        for (int i = 0; i < seats.length; i++) {
            Arrays.fill(seats[i], 'O');  // 'O' for available
        }
    }

    public boolean isSeatAvailable(int row, int col) {
        return seats[row][col] == 'O';
    }

    public boolean bookSeat(int row, int col) {
        if (isSeatAvailable(row, col)) {
            seats[row][col] = 'X';  // Mark seat as booked
            return true;
        }
        return false;
    }

    public boolean cancelSeat(int row, int col) {
        if (seats[row][col] == 'X') {
            seats[row][col] = 'O';  // Mark seat as available
            return true;
        }
        return false;
    }

    public void displaySeats() {
        System.out.println("Seat Map:");
        for (char[] row : seats) {
            System.out.println(Arrays.toString(row));
        }
    }
}

// Pricing Class (Encapsulated for pricing)
class Pricing {
    private double basePrice;

    public Pricing(double basePrice) {
        this.basePrice = basePrice;
    }

    public double getBasePrice() {
        return basePrice;
    }

    public void setBasePrice(double basePrice) {
        this.basePrice = basePrice;
    }
}

// Reservation System Class
class ReservationSystem {
    private SeatAvailability seatAvailability;
    private Pricing pricing;
    private Scanner scanner;
    private List<Passenger> passengers;

    public ReservationSystem(SeatAvailability seatAvailability, Pricing pricing) {
        this.seatAvailability = seatAvailability;
        this.pricing = pricing;
        this.scanner = new Scanner(System.in);
        this.passengers = new ArrayList<>();
    }

    public void displaySeatMap() {
        seatAvailability.displaySeats();
    }

    public void handleBooking() {
        System.out.print("Enter passenger name: ");
        String name = scanner.nextLine();
        System.out.print("Enter passenger age: ");
        int age = scanner.nextInt();

        System.out.print("Choose passenger type (1: Regular, 2: VIP): ");
        int typeChoice = scanner.nextInt();
        Passenger passenger;
        if (typeChoice == 2) {
            passenger = new VIPPassenger(name, age);
        } else {
            passenger = new RegularPassenger(name, age);
        }

        boolean bookingSuccessful = false;
        while (!bookingSuccessful) {
            // Display seat map before booking
            displaySeatMap();

            System.out.print("Enter seat row (0-3): ");
            int row = scanner.nextInt();
            System.out.print("Enter seat column (0-3): ");
            int col = scanner.nextInt();

            // Check for valid seat input
            if (row < 0 || row >= 4 || col < 0 || col >= 4) {
                System.out.println("Seat number is invalid. Please enter a seat number between 0 and 3.");
                continue;  // Ask for input again
            }

            // Check if seat is available
            if (seatAvailability.bookSeat(row, col)) {
                passenger.setSeatRow(row);
                passenger.setSeatCol(col);
                passenger.calculateFinalPrice(pricing.getBasePrice());
                passengers.add(passenger);
                System.out.println("Seat booked successfully!");
                bookingSuccessful = true;  // Exit loop on successful booking
                // Display the seat map after the booking
                displaySeatMap();
                passenger.getPassengerDetails();
            } else {
                System.out.println("Seat is already booked. Please choose another seat.");
            }
        }
        scanner.nextLine();  // Clear buffer
    }

    public void handleCancellation() {
        System.out.print("Enter passenger name to cancel: ");
        String name = scanner.nextLine();
        boolean found = false;

        for (Passenger p : passengers) {
            if (p.getName().equalsIgnoreCase(name)) {
                int row = p.getSeatRow();
                int col = p.getSeatCol();
                seatAvailability.cancelSeat(row, col);
                passengers.remove(p);
                found = true;
                System.out.println("Booking canceled for " + name);
                break;
            }
        }

        if (!found) {
            System.out.println("No booking found for passenger: " + name);
        }
    }

    public void handleSearch() {
        System.out.print("Enter passenger name to search: ");
        String name = scanner.nextLine();
        boolean found = false;

        for (Passenger p : passengers) {
            if (p.getName().equalsIgnoreCase(name)) {
                p.getPassengerDetails();
                found = true;
                break;
            }
        }

        if (!found) {
            System.out.println("No passenger found with name: " + name);
        }
    }

    public void showMenu() {
        while (true) {
            System.out.println("\nMenu:");
            System.out.println("1. Book a seat");
            System.out.println("2. Cancel a booking");
            System.out.println("3. Search for a passenger");
            System.out.println("4. Display seat map");
            System.out.println("5. Exit");
            System.out.print("Choose an option: ");
            int choice = scanner.nextInt();
            scanner.nextLine();  // Clear buffer

            switch (choice) {
                case 1:
                    handleBooking();
                    break;
                case 2:
                    handleCancellation();
                    break;
                case 3:
                    handleSearch();
                    break;
                case 4:
                    displaySeatMap();
                    break;
                case 5:
                    System.out.println("Exiting the system. Thank you!");
                    return;
                default:
                    System.out.println("Invalid choice. Please try again.");
            }
        }
    }
}

// Main Class
public class AirlineReservationSystem {
    public static void main(String[] args) {
        SeatAvailability seatAvailability = new SeatAvailability(4, 4); // 4x4 seats
        Pricing pricing = new Pricing(500); // Base price $500

        ReservationSystem reservationSystem = new ReservationSystem(seatAvailability, pricing);
        reservationSystem.showMenu();
    }
}
content_copyCOPY