Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

// PLEASE READ THE QUESTION PROPERLY. i don\'t need a gui or i/o just a java sim

ID: 3679560 • Letter: #

Question

// PLEASE READ THE QUESTION PROPERLY. i don't need a gui or i/o just a java simple classes as stated below - ANY HELP WOULD BE GREATLY APPRECIATED!

This question will test your skills in object-oriented programming with multiple classes and the use of ArrayLists as the data structure. You are to design a program that implements a basic Airline Booking System (ABS). The ABS allows a client program to create airports, airlines, and flights. Each flight has an originating airport (origin) and a destination airport (destination). The origin and destination cannot be the same. Each flight consists of seats organized in rows. Each row has six seats (“A”, “B”, “C”, “D”, “E”, “F”). Your program should have the following functionality:

1. Create an airport: An airport must have a name consisting of exactly three alphabetic characters. No two airports can have the same name.

2. Create an airline: An airline has a name that must have length less than 6 alphabetic characters. No two airlines can have the same name

3. Create a flight given an airline name, the name of the originating airport, the name of a destination airport, and a flight number: A flight has an identifier that is a string of alphanumeric characters.

4. Create seats for a flight: The number of rows of seats for this flight is provided.

5. Find available flights: Finds all flights from an originating airport to a destination airport.

6. Book a seat: Books an available seat from a given origin to a given destination on a given flight.

7. Print system details: Displays attributes of all objects (e.g., airports, airlines, etc.) in the system. Your program must have the following classes:

1. System Manager class: This is the main class that aggregates the other classes and provides functionality to the client program. A client program with a main method accesses the System Manager class. This class has the following attributes:

Airports – an arraylist of airport objects, initially empty.

Airlines – an arraylist of airline objects, initially empty.

Flights – an arraylist of flight objects, initially empty. If required, add other attributes.

The class has the following methods:

createAirport(String n): Creates an airport object and updates the appropriate arraylist. The airport will have a name (code) n; n must have exactly three alphabetic characters. No two airports can have the same name.

createAirline(String n): Creates an airline object with name n and updates the appropriate arraylist. An airline has a name that must have a length less than 6. No two airlines can have the same name.

createFlight(String aname, String orig, String dest, String id): Creates a flight for an airline named aname, from an originating airport (orig) to a destination airport (dest). The flight has an identifier (id).

createSeats(String air, String flID, int rows): Creates seats with the given number of rows for a flight with identifier flID, associated with an airline, air.

findAvailableFlights(String orig, String dest): Finds all flights from airport orig to airport dest.

bookSeat(String air, String fl, int row, char col): Books seat in given row and column on flight fl of airline air, if that particular seat is still available.

displaySystemDetails(): Displays attribute values for all objects (e.g., airports, flights) in the system.

2. Airport class: The only information that is maintained in this class is the name, which must be three alphabetic characters. Add the appropriate get, set and toString methods.

3. Airline class: This class maintains information about airlines. All flights for a given airline must have unique ids.

4. Flight class: This class maintains information about flights. It has the following attributes: a. Airline b. Flight id c. Seats: An array of Seat objects. Add appropriate methods.

5. Seat class: This class maintains information about seats. Each seat has an identifier (a seat is identified by a row number and a column character, which is a letter from A to F), and a status which indicates if the seat is booked or available. Add the appropriate attributes and methods. The following is a sample client program with a main method that calls operations in the SystemManager. You must create your own test program

public class Client{
public static void main (String[] args){
SystemManager res = new SystemManager();
//create airports
   res.createAirport(“YHZ”);
   res.createAirport(“YYZ”);
   res.createAirport(“YUL”);
   res.createAirport(“YVR”);
   res.createAirport(“YYC”);
   res.createAirport(“LONDON”); //invalid
   res.createAirport(“123”); //invalid
   res.createAirport(“YEG”);
   res.createAirport(“BOS”);
   res.createAirport(“JFK”);
   //create airlines
   res.createAirline(“AC”);
   res.createAirline(“DELTA”);
   res.createAirline(“USAIR”);
   res.createAirline(“WSJET”);
   res.createAirline(“FRONTIER”); //invalid
   //create flights
   res.createFlight(“AC”, “YHZ”, “YUL”, “123”);
   res.createFlight(“AC”, “YHZ”, “YYZ”, “567”);
   res.createFlight(“AC”, “YUL”, “YHZ”, “789”);
   res.createFlight(“AC”, “YUL”, “YVR”, “123”);
   //invalid – AC cannot have two flights with same id.
   res.createFlight(“AC”, “YHZ”, “YYZ”, “689”);
   res.createFlight(“DELTA”, “YHZ”, “BOS”, “123”);
   //etc.
   //create seats
   res.createSeats(“AC”, “123”, 40);
   res.createSeats(“DELTA”, “123”, 25);
   //etc.
   //find available flights
   res.findAvailableFlights(“YHZ”, “YYZ”);
   //book seats
   res.bookSeat(“AC”, “123”, 1, ‘A’);
   res.bookSeat(“AC”,“123”,20,‘F’);
   res.bookSeat(“AC”, “506”, 2, ‘B’); //invalid – 506 not created
   res.bookSeat(“AC”, “123”, 55, ‘C’); //invalid – row 55 doesn’t exist
   //display system details
   res.displaySystemDetails();
   }
}

Submit ABS.java, Client.java and sample outputs.

THANKS IN ADVANCE!

Explanation / Answer

Client.java

public class Client
{
   public static void main (String[] args)
   {
       SystemManager res = new SystemManager();

       //create airports
       res.createAirport("YHZ");
       res.createAirport("R34");//invalid
       res.createAirport("bei");
       res.createAirport("JFK");
       res.createAirport("YYC");
       res.createAirport("BEIJING");   //invalid
       res.createAirport("123");//invalid
       res.createAirport("YEG");

       //create airlines
       res.createAirline("AC");
       res.createAirline("CA");
       res.createAirline("HNAIR");
       res.createAirline("WSJET");
       res.createAirline("FRONTIER"); //invalid

       //create flights
       res.createFlight("AC", "YHZ", "JFK", "3867");
       res.createFlight("CA", "YEG", "YYC", "567");
       res.createFlight("HNAIR", "YHZ", "JFK", "3867");
       res.createFlight("AC", "YYC", "YHZ", "3867");//invalid. same ID for the same airline
       res.createFlight("HNAIR", "YEG", "YEG", "3579");//invalid. Airport is the same
       res.createFlight("WSJET", "YHZ", "BOS", "3867");


       //find available flights
       res.findAvailableFlights("YHZ", "JFK");


       //create seats
       res.createSeats("AC", "3867", 40);
       res.createSeats("HNAIR", "7842", 25);//invalid-7842 not created
       res.createSeats("WSJET", "3867", 36);
      

  
       //book seats
       res.bookSeat("AC", "3867", 15, 'C');
       res.bookSeat("AC", "3867", 20, 'N');   //invalid - N doesn't exist
       res.bookSeat("WSJET", "2671", 2, 'F');       // invalid - 2671 not created
       res.bookSeat("AC", "3867", 78, 'C');       // invalid - row 78 doesn't exist

       //display system details
       res.displaySystemDetails();
   }
}


Airline.java
public class Airline
{  
   private String name;
  
   //constructor
   public Airline(String n)
   {
       name = n;
   }  
      
   //get and set name
   public String getName()
   {
       return name;
   }
   public void setName(String n)
   {
       name = n;
   }
  
   public String toString()
   {
       return "Airline Name: "+name;
   }
}

Airport.java
public class Airport
{  
   private String name;
  
   //constructor
   public Airport(String n)
   {
       name = n;
   }  
  
   //get and set name
   public String getName()
   {
       return name;
   }
   public void setName(String n)
   {
       name = n;
   }
  
   public String toString()
   {
       return "Airport Name: "+name;
   }
}

Flight.java
public class Flight
{  
   private String line;
   private String id;
   private Seat[][] seat;
   private String orig, dest;
  
   //constructor
   public Flight(String l, String id, String o, String d)
   {
       line = l;
       this.id = id;
       orig = o;
       dest = d;
   }
  
   //set and get methods
   public void setLine(String l)
   {
       line = l;
   }
   public void setID(String id)
   {
       this.id = id;
   }
  
   public void setOrig(String o)
   {
       orig = o;
   }
   public void setDest(String d)
   {
       dest = d;
   }
  
   public String getLine()
   {
       return line;
   }
   public String getId()
   {
       return id;
   }
   public String getOrig()
   {
       return orig;
   }
   public String getDest()
   {
       return dest;
   }
   public Seat getSeat(int i, int j)
   {
       return seat[i][j];
   }
  
   //create seat and book seat
   public void createSeat(int row)
   {
       seat = new Seat[row][6];
      
       for (int i = 0; i < row; i++)
           for (int j = 0; j < 6; j++)
               seat[i][j] = new Seat(i, (char)(j + 65));
   }
  
   public void bookSeat(int row, char col)
   {
       if (row > seat.length || col > 70 || col < 65)
           System.out.printf("Seat (%d,%c) is invaild. ",row,col);
       else{
           if(!seat[row-1][(int)col - 65].getStatus())
               seat[row-1][(int)col - 65].setStatus();
           else
               System.out.printf("Seat (%d,%c) has been reserved. ",row,col);
       }
   }
  
   //toString method
   public String toString()
   {
       String seats = "";
       if (seat != null){
           for (int i = 0; i < seat.length; i++)
               for (int j = 0; j < seat[i].length; j++)
                   if (seat[i][j].getStatus())
                       seats += seat[i][j].toString()+" ";
       }
       else
           seats = "None";
       if (seats.equals(""))
           seats = "Not reserved";
       return "Airline: "+line+"      Flight ID: "+id+"     Originating Airport: "+orig+"     Destination Airpot: "+dest+"    Reserved seat: "+seats;
   }
}

Seat.java

public class Seat
{  
   private boolean status;
   private int row;
   private char col;
  
   //constructor
   public Seat(int r, char c)
   {
       row = r;
       col = c;
       status = false;
   }
  
   //set and get methods
   public void setRow(int row)
   {
       this.row = row;
   }
   public void setCol(char col)
   {
       this.col = col;
   }
   public void setStatus()
   {
       status = true;
   }
  
   public int getRow()
   {
       return row;
   }
   public char getCol()
   {
       return col;
   }
   public boolean getStatus()
   {
       return status;
   }  

   public String toString()
   {
       return ""+(row+1)+col;
   }      
  
}                       

SystemManager.java
import java.util.ArrayList;

public class SystemManager
{
   private ArrayList<Airport> airport;
   private ArrayList<Airline> airline;
   private ArrayList<Flight> flight;

   public SystemManager()
   {
       airport = new ArrayList <Airport>();
       airline = new ArrayList <Airline>();
       flight = new ArrayList <Flight>();
   }
  
   //create Airport
   public void createAirport(String n)
   {
       boolean check = true;
       String pattern = "[a-zA-Z][a-zA-Z][a-zA-Z]";
       if (!n.matches(pattern))//check pattern
           System.out.printf("The name of airport %s should be only three alphabetic characters. ", n);
      
       else{
           if(airport.size() != 0)//check if already been contained
               for(int i=0; i<airport.size()&& check; i++)
                   if(airport.get(i).getName()== n){
                       System.out.printf("The Airport %s has already been created. ",n);
                       check = false;
                   }
           if(check)
               airport.add(new Airport(n));
       }  
   }
  
   //create Airline
   public void createAirline(String n)
   {
       int length = n.length();
       boolean check = true;
       if (length>=6)//check pattern
           System.out.printf("The name of airline %s should have less than 6 characters. ",n);
      
       else{
           if(airline.size() != 0)//check if already been contained
               for(int i=0; i<airline.size()&& check; i++)
                   if(airline.get(i).getName() == n){
                       System.out.printf("The Airline %s has already been created. ",n);
                       check = false;
                   }
           if(check)
               airline.add(new Airline(n));

       }  
   }
  
   //create flight
   public void createFlight(String aname, String orig, String dest, String id)
   {  
       boolean check = true;
       if(flight.size() != 0)//check if already been contained
           for(int i=0; i<flight.size()&& check; i++)
               if(flight.get(i).getId().equals(id) && flight.get(i).getLine().equals(aname)){
                   System.out.printf("The flight Id %s for Airline %s has already been used. ",id,aname);
                   check = false;
               }
       if(orig == dest){
           check = false;
           System.out.printf("The originating and destination airport %s cannot be the same. ",orig);
       }
       if(check)
           flight.add(new Flight(aname,id,orig,dest));
   }
  
   //create seat
   public void createSeats(String air, String flID, int rows)
   {
       boolean check = true;
       for(int j=0;j<flight.size()&& check;j++)
           if(flight.get(j).getId() == flID && flight.get(j).getLine() == air){
               flight.get(j).createSeat(rows);
               check = false;
           }
       if (check)//check if the flID is correct
           System.out.printf("The flight %s does not exist. ",flID);      
   }
  
   //find flight
   public void findAvailableFlights(String orig, String dest)
   {
       int count=0;
       System.out.println(" The flights from " + orig + " to " + dest + ":");
      
       for(int i=0; i<flight.size(); i++)
           if (flight.get(i).getOrig()== orig && flight.get(i).getDest() == dest){
               System.out.println(flight.get(i));
               count++;
           }  
       System.out.println();
       if(count==0)
           System.out.println("No flight is available.");  
   }
  
   //book seat
   public void bookSeat(String air, String fl, int row, char col)
   {
       boolean check = true;
       for(int i=0; i<flight.size()&& check; i++)
           if (flight.get(i).getLine()== air && flight.get(i).getId() == fl){
               flight.get(i).bookSeat(row,col);
               check = false;
           }
       if (check)  
           System.out.println("The flight does not exist.");  
   }
  
   public void displaySystemDetails()
   {
       System.out.println(" Airports:");
       for (int i = 0; i < airport.size(); i++)
           System.out.println(airport.get(i));
       System.out.println(" Airlines:");
       for (int i = 0; i < airline.size(); i++)
           System.out.println(airline.get(i));
       System.out.println(" Flights:");
       for (int i = 0; i < flight.size(); i++)
           System.out.println(flight.get(i));
   }
}


output

The name of airport R34 should be only three alphabetic characters.                                                                                         
The name of airport BEIJING should be only three alphabetic characters.                                                                                     
The name of airport 123 should be only three alphabetic characters.                                                                                         
The name of airline FRONTIER should have less than 6 characters.                                                                                            

The flight Id 3867 for Airline AC has already been used.                                                                                                    
The originating and destination airport YEG cannot be the same.                                                                                             
                                                                                                                                                            
The flights from YHZ to JFK:                                                                                                                                
Airline: AC      Flight ID: 3867     Originating Airport: YHZ     Destination Airpot: JFK    Reserved seat: None                                            
Airline: HNAIR      Flight ID: 3867     Originating Airport: YHZ     Destination Airpot: JFK    Reserved seat: None                                         
                                                                                                                                                            
The flight 7842 does not exist.                                                                                                                             
                                                                                                                                                            
Seat (20,N) is invaild.                                                                                                                                     
The flight does not exist.                                                                                                                                  
Seat (78,C) is invaild.                                                                                                                                     
                                                                                                                                                            
Airports:                                                                                                                                                   
Airport Name: YHZ                                                                                                                                           
Airport Name: bei                                                                                                                                           
Airport Name: JFK                                                                                                                                           
Airport Name: YYC                                                                                                                                           
Airport Name: YEG                                                                                                                                           
                                                                                                                                                            
Airlines:                                                                                                                                                   
Airline Name: AC                                                                                                                                            
Airline Name: CA                                                                                                                                            
Airline Name: HNAIR                                                                                                                                         
Airline Name: WSJET                                                                                                                                         
                                                                                                                                                            
Flights:                                                                                                                                                    
Airline: AC      Flight ID: 3867     Originating Airport: YHZ     Destination Airpot: JFK    Reserved seat: 15C                                             
Airline: CA      Flight ID: 567     Originating Airport: YEG     Destination Airpot: YYC    Reserved seat: None                                             
Airline: HNAIR      Flight ID: 3867     Originating Airport: YHZ     Destination Airpot: JFK    Reserved seat: None                                         
Airline: WSJET      Flight ID: 3867     Originating Airport: YHZ     Destination Airpot: BOS    Reserved seat: Not reserved