OneCompiler

RDX_AMS_final

1613
 import java.util.*;

class Flight {
    private static int idCounter = 1;
    private int flightID;
    private int carrierID;
    private String origin;
    private String destination;
    private int airFare;
    private int seatCapacityBusiness;
    private int seatCapacityEconomy;
    private int seatCapacityExecutive;

    public Flight(int carrierID, String origin, String destination, int airFare, int seatCapacityBusiness, int seatCapacityEconomy, int seatCapacityExecutive) {
        this.flightID = idCounter++;
        this.carrierID = carrierID;
        this.origin = origin;
        this.destination = destination;
        this.airFare = airFare;
        this.seatCapacityBusiness = seatCapacityBusiness;
        this.seatCapacityEconomy = seatCapacityEconomy;
        this.seatCapacityExecutive = seatCapacityExecutive;
    }

    // Getters for flight details
    public int getFlightID() { return flightID; }
    public int getCarrierID() { return carrierID; }
    public String getOrigin() { return origin; }
    public String getDestination() { return destination; }
    public int getAirFare() { return airFare; }
    public int getSeatCapacityBusiness() { return seatCapacityBusiness; }
    public int getSeatCapacityEconomy() { return seatCapacityEconomy; }
    public int getSeatCapacityExecutive() { return seatCapacityExecutive; }

    // Method to display flight details
    public void displayFlightDetails() {
        System.out.printf("Flight ID: %d\nCarrier ID: %d\nOrigin: %s\nDestination: %s\nAir Fare: %d\nBusiness Seats: %d\nEconomy Seats: %d\nExecutive Seats: %d\n", 
                flightID, carrierID, origin, destination, airFare, seatCapacityBusiness, seatCapacityEconomy, seatCapacityExecutive);
    }
}

class Admin {
    private List<Flight> flights = new ArrayList<>();

    // Add new flight
    public void addFlight(Scanner sc) {
        System.out.println("Enter Carrier ID: ");
        int carrierID = sc.nextInt();
        sc.nextLine(); // Consume newline
        System.out.println("Enter Origin: ");
        String origin = sc.nextLine();
        System.out.println("Enter Destination: ");
        String destination = sc.nextLine();
        System.out.println("Enter Air Fare: ");
        int airFare = sc.nextInt();
        System.out.println("Enter Business Class Seat Capacity: ");
        int businessSeats = sc.nextInt();
        System.out.println("Enter Economy Class Seat Capacity: ");
        int economySeats = sc.nextInt();
        System.out.println("Enter Executive Class Seat Capacity: ");
        int executiveSeats = sc.nextInt();

        Flight flight = new Flight(carrierID, origin, destination, airFare, businessSeats, economySeats, executiveSeats);
        flights.add(flight);
        System.out.println("Flight Information Saved Successfully in the System.");
    }
    public List<Flight> getFlight(){
        return flights;
    } 

    // View all flights
    public void viewAllFlights() {
        if (flights.isEmpty()) {
            System.out.println("No flights available.");
        } else {
            System.out.printf("%-10s %-10s %-15s %-15s %-10s %-10s %-10s %-10s\n", "Flight ID", "Carrier ID", "Origin", "Destination", "AirFare", "Business", "Economy", "Executive");
            for (Flight flight : flights) {
                System.out.printf("%-10d %-10d %-15s %-15s %-10d %-10d %-10d %-10d\n",
                        flight.getFlightID(), flight.getCarrierID(), flight.getOrigin(), flight.getDestination(), flight.getAirFare(),
                        flight.getSeatCapacityBusiness(), flight.getSeatCapacityEconomy(), flight.getSeatCapacityExecutive());
            }
        }
    }

    // Search flight by ID
    public void searchFlightByID(int flightID) {
        for (Flight flight : flights) {
            if (flight.getFlightID() == flightID) {
                flight.displayFlightDetails();
                return;
            }
        }
        System.out.println("Either the data is incorrect or no Flight Information is available for the given Flight ID.");
    }

    // Remove flight by ID
    public void removeFlight(int flightID) {
        Iterator<Flight> iterator = flights.iterator();
        while (iterator.hasNext()) {
            Flight flight = iterator.next();
            if (flight.getFlightID() == flightID) {
                iterator.remove();
                System.out.println("Flight Information successfully removed from system.");
                return;
            }
        }
        System.out.println("Either the data is incorrect or no Flight Information is available for the given Flight ID.");
    }
}

class Customer {
    // Bookings map (can include more functionality based on requirements)
    private Map<Integer, String> bookings = new HashMap<>();

    // Search flight by origin and destination
    public void searchFlightByRoute(Scanner sc, List<Flight> flights) {
        System.out.println("Enter Origin: ");
        String origin = sc.next();
        System.out.println("Enter Destination: ");
        String destination = sc.next();

        for (Flight flight : flights) {
            if (flight.getOrigin().equalsIgnoreCase(origin) && flight.getDestination().equalsIgnoreCase(destination)) {
                flight.displayFlightDetails();
            }
        }
    }

    // Book flight (basic implementation)
    public void bookFlight(Scanner sc, List<Flight> flights) {
        System.out.println("Enter Flight ID: ");
        int flightID = sc.nextInt();
        System.out.println("Enter Number of Seats: ");
        int seats = sc.nextInt();
        sc.nextLine(); // Consume newline
        System.out.println("Enter Seat Category (Business/Economy/Executive): ");
        String seatCategory = sc.nextLine();

        for (Flight flight : flights) {
            if (flight.getFlightID() == flightID) {
                // Check seat availability based on seatCategory
                System.out.println("Booking successful! Booking ID: " + (bookings.size() + 1));
                bookings.put(bookings.size() + 1, "Flight ID: " + flightID + ", Seats: " + seats + ", Category: " + seatCategory);
                return;
            }
        }
        System.out.println("No seats available under this category for booking.");
    }

    // View all bookings
    public void viewBookings() {
        if (bookings.isEmpty()) {
            System.out.println("No bookings available.");
        } else {
            for (Map.Entry<Integer, String> entry : bookings.entrySet()) {
                System.out.println("Booking ID: " + entry.getKey() + ", Details: " + entry.getValue());
            }
        }
    }
}

public class AMS {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Admin admin = new Admin();
        Customer customer = new Customer();
        boolean running = true;

        while (running) {
            System.out.println("Select Role: \n1. Admin\n2. Customer\n3. Exit");
            int role = sc.nextInt();

            switch (role) {
                case 1: // Admin
                    System.out.println("Admin Options: \n1. Add Flight\n2. View All Flights\n3. Search Flight by ID\n4. Remove Flight\n5. Exit");
                    int adminChoice = sc.nextInt();
                    switch (adminChoice) {
                        case 1:
                            admin.addFlight(sc);
                            break;
                        case 2:
                            admin.viewAllFlights();
                            break;
                        case 3:
                            System.out.println("Enter Flight ID: ");
                            int flightID = sc.nextInt();
                            admin.searchFlightByID(flightID);
                            break;
                        case 4:
                            System.out.println("Enter Flight ID to remove: ");
                            int removeFlightID = sc.nextInt();
                            admin.removeFlight(removeFlightID);
                            break;
                        case 5:
                            running = false;
                            break;
                        default:
                            System.out.println("Invalid choice.");
                    }
                    break;
                case 2: // Customer
                    System.out.println("Customer Options: \n1. Search Flight\n2. Book Flight\n3. View Bookings\n4. Exit");
                    int customerChoice = sc.nextInt();
                    switch (customerChoice) {
                        case 1:
                            customer.searchFlightByRoute(sc, admin.getFlight());
                            break;
                        case 2:
                            customer.bookFlight(sc, admin.getFlight());
                            break;
                        case 3:
                            customer.viewBookings();
                            break;
                        case 4:
                            running = false;
                            break;
                        default:
                            System.out.println("Invalid choice.");
                    }
                    break;
                case 3: // Exit
                    running = false;
                    break;
                default:
                    System.out.println("Invalid choice.");
            }
        }
        sc.close();
    }
}