Airline Reservation Program
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(); } }
Comments