Schedule The Schedule class implements the \"Serializable\" interface so that it
ID: 3864039 • Letter: S
Question
Schedule
The Schedule class implements the "Serializable" interface so that its object can be stored. (The Serializable interface is defined in the "java.io" package.) It needs to define the following method:
public void copy(Schedule other)
It needs to copy every member variable value from "other" parameter to their corresponding variable of the object itself using "this" reference. For instance, if we have two objects of Schedule, schedule1 and schedule2, then, executing the following statement:
schedule1.copy(schedule2)
should resulting to have the object schedule1 to have the same city, year, month, date, and time value as the ones for schedule2, but schedule1 and schedule2 should not become aliases.
Flight
The Flight class implements the "Serializable" interface so that its object can be stored. (The Serializable interface is defined in the "java.io" package.) It needs to define the following method:
public void copy(Flight other)
It needs to copy every member variable value from "other" parameter to their corresponding variable of the object itself using "this" reference.
FlightNumberComparator
The FlightNumberComparator class implements the "Comparator" interface (The Comparator interface is in "java.util" package.). It needs to define the following method that was an inherited abstract method from Comparator interface:
public int compare(Object first, Object second)
(Note that you can also define:
public int compare(Flight first, Flight second)
instead by making the class implements Comparator<Flight>.
If the first argument object has a name of its airlines lexicographically less than that of the second argument, an int less than zero is returned. If the first argument object has a name of its airlines lexicographically larger than that of the second argument, an int greater than zero is returned. If their airlines names are same, then their flight numbers should be compared. If they have same airlines and flight numbers, then 0 should be returned.
DepartureComparator
The DepartureComparator class implements the "Comparator" interface (The Comparator interface is in "java.util" package.). It needs to define the following method that was an inherited abstract method from Comparator interface:
public int compare(Object first, Object second)
(Note that you can also define:
public int compare(Flight first, Flight second)
instead by making the class implements Comparator<Flight>.
If the first argument object has a city lexicographically less than that of the second argument, an int less than zero is returned. If the first argument object has a city lexicographically larger than that of the second argument, an int greater than zero is returned. If their cities are same, then their departure years should be compared. (if the first argument object has a smaller year, then it should return a negative integer. If the first argument object has a larger year, then it should return a positive integer.) If their cities and departure years are same, then their departure months should be compared. If their cities, departure years, and departure months are same, then their departure date should be compared. If their cities, departure years, departure months, and departure dates are same, then their departure time should be compared. If their cities, departure years, departure months, departure dates, and departure time are same, then 0 should be returned.
Sorts
The Sorts class is a utility class that will be used to sort a list of Flight objects. Sorting algorithms are described in the algorithm note posted under Notes section of the course web site. These algorithms sort numbers stored in an array. It is your job to modify it to sort an array of objects.
The Sorts class object will never be instantiated. It must have the following methods:
public static void sort(Flight[] flightList, int size, Comparator<Flight>)
Your sort method utilizes the compare method of the parameter Comparator object to sort. You can use one of Selection sort or Insertion Sort. The parameter size specifies how many first elements should be sorted. Note that not all elements in the array should be sorted, since some of them will be null pointers.
FlightManagement
The FlightManagement class has a list of Flight objects that can be organized at the flight management system. The flight management system will be a fully encapsulated object. The FlightManagement class implements the Serializable interface.
It has the following attributes:
The following public methods should be provided to interact with the flight management system:
No input/output should occur in the flight management system. User interaction should be handled only by the driver class.
You may add other methods to the class in order to make your life easier.
Assignment8
All input and output should be handled in Assignment8 class. The main method should start by displaying this updated menu in this exact format:
Choice Action
------ ------
A Add Flight
C Create FlightManagement
D Search by Flight Number
E Search by Departure
L List Flights
O Sort by Flight Number
P Sort by Departure
Q Quit
R Remove by Flight Number
T Close FlightManagement
U Write Text to File
V Read Text from File
W Serialize FlightManagement to File
X Deserialize FlightManagement from File
? Display Help
Next, the following prompt should be displayed:
What action would you like to perform?
Read in the user input and execute the appropriate command. After the execution of each command, redisplay the prompt. Commands should be accepted in both lowercase and uppercase. The following commands are modified or new.
Add Flight
This part is already implemented in Assignment8.java file.
Please see the case A in the main of Assignment8.java.
Create FlightManagement
This part is already implemented in Assignment8.java file.
Please see the case C in the main of Assignment8.java.
Search by Flight Number
This part is already implemented in Assignment8.java file.
Please see the case D in the main of Assignment8.java.
Search by Departure
This part is already implemented in Assignment8.java file.
Please see the case E in the main of Assignment8.java.
Sort by Flight Number
This part is already implemented in Assignment8.java file.
Please see the case O in the main of Assignment8.java.
Remove by Flight Number
This part is already implemented in Assignment8.java file.
Please see the case R in the main of Assignment8.java.
List Flights
Each Flight object information in the flight list should be displayed using the toString method provided in the Flight class. (and use listFlights( ) method in the FlightManagement class.)
This part is already implemented in Assignment8.java file.
Please see the case L in the main of Assignment8.java.
Close FlightManagement
Delete all Flight objects. Then, display the following:
flight management system closed
This part is already implemented in Assignment8.java file.
Please see the case R in the main of Assignment8.javaT
Write Text to File
Your program should display the following prompt:
Please enter a file name to write:
Read in the filename and create an appropriate object to get ready to read from the file. Then it should display the following prompts:
Please enter a string to write in the file:
Read in the string that a user types, say "input", then attach " " at the end of the string, and write it to the file. (i.e. input+" " string will be written in the file.)
If the operation is successful, display the following:
FILENAME was written
Replace FILENAME with the actual name of the file.
Use try and catch statements to catch IOException. The file should be closed in a finally statement.
Read Text from File
Your program should display the following prompt:
Please enter a file name to read:
Read in the file name create appropriate objects to get ready to read from the file. If the operation is successful, display the following (replace FILENAME with the actual name of the file):
FILENAME was read
Then read only the first line in the file, and display:
The first line of the file is:
CONTENT
where CONTENT should be replaced by the actual first line in the file.
Your program should catch the exceptions if there are. (Use try and catch statement to catch, FileNotFoundException, and the rest of IOException.)
If the file name cannot be found, display
FILENAME was not found
where FILENAME is replaced by the actual file name.
Serialize FlightManagement to File
Your program should display the following prompt:
Please enter a file name to write:
Read in the filename and write the serialized FlightManagement object out to it. Note that any objects to be stored must implement Serializable interface. The Serializable interface is defined in java.io.* package. If the operation is successful, display the following:
FILENAME was written
Replace FILENAME with the actual name of the file.
Use try and catch statements to catch NotSerializableExeption and IOException.
Deserialize FlightManagement from File
Your program should display the following prompt:
Please enter a file name to read:
Read in the file name and attempt to load the FlightManagement object from that file. Note that there is only one FlightManagement object in the Assignment8 class, and the first object read from the file should be assigned to the FlightManagement object. If the operation is successful, display the following (replace FILENAME with the actual name of the file):
FILENAME was read
Your program should catch the exceptions if there are.
(Use try and catch statement to catch ClassNotFoundException, FileNotFoundException, and the rest of IOException.)
Assignment8.java
import java.io.*;
Flight Class
public class Flight
Schedule Class
other classes needs to be created:
FlightNumberComparator.java
DepartureComparator.java
Sorts.java
FlightManagement.java
Explanation / Answer
Hi,
Please see below the classes.
Thanks.
import java.io.*;
public class Assignment8
{
public static void main (String[] args)
{
char input1;
String airlines, depCity, depTime, arrCity, arrTime;
String flightNumStr, depYearStr, depMonthStr, depDateStr, arrYearStr, arrMonthStr, arrDateStr;;
int flightNum, depYear, depMonth, depDate, arrYear, arrMonth, arrDate;
boolean operation = false;
int operation2 = 0;
String line;
String filename;
BufferedWriter bw = null;
FileWriter fw = null;
BufferedReader br =null;
FileReader fr = null;
// create a FlightManagement object. This is used throughout this class.
FlightManagement manage1 = null;
try
{
// print out the menu
printMenu();
// create a BufferedReader object to read input from a keyboard
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader stdin = new BufferedReader (isr);
System.out.print("Please enter a maximum number of flights ");
String maxStr = stdin.readLine().trim(); //read in the max number as a string
int max = Integer.parseInt(maxStr);
manage1 = new FlightManagement(max);
do
{
System.out.print("What action would you like to perform? ");
line = stdin.readLine().trim(); //read a line
input1 = line.charAt(0);
input1 = Character.toUpperCase(input1);
if (line.length() == 1) //check if a user entered only one character
{
switch (input1)
{
case 'A': //Add Flight
System.out.print("Please enter a flight to add: ");
System.out.print("Please enter its airlines to add: ");
airlines = stdin.readLine().trim();
System.out.print("Please enter its flight number to add: ");
flightNumStr = stdin.readLine().trim();
flightNum = Integer.parseInt(flightNumStr);
System.out.print("Please enter its departure city to add: ");
depCity = stdin.readLine().trim();
System.out.print("Please enter its departure year to add: ");
depYearStr = stdin.readLine().trim();
depYear = Integer.parseInt(depYearStr);
System.out.print("Please enter its departure month to add: ");
depMonthStr = stdin.readLine().trim();
depMonth = Integer.parseInt(depMonthStr);
System.out.print("Please enter its departure date to add: ");
depDateStr = stdin.readLine().trim();
depDate = Integer.parseInt(depDateStr);
System.out.print("Please enter its departure time to add: ");
depTime = stdin.readLine().trim();
System.out.print("Please enter its arrival city to add: ");
arrCity = stdin.readLine().trim();
System.out.print("Please enter its arrival year to add: ");
arrYearStr = stdin.readLine().trim();
arrYear = Integer.parseInt(arrYearStr);
System.out.print("Please enter its arrival month to add: ");
arrMonthStr = stdin.readLine().trim();
arrMonth = Integer.parseInt(arrMonthStr);
System.out.print("Please enter its arrival date to add: ");
arrDateStr = stdin.readLine().trim();
arrDate = Integer.parseInt(arrDateStr);
System.out.print("Please enter its arrival time to add: ");
arrTime = stdin.readLine().trim();
operation = manage1.addFlight(airlines, flightNum, depCity, depYear, depMonth, depDate,
depTime, arrCity, arrYear, arrMonth, arrDate, arrTime);
if (operation == true)
System.out.print("flight added ");
else
System.out.print("flight not added ");
break;
case 'C': //Create a new flight management
System.out.print("Please enter a new maximum number of flights: ");
maxStr = stdin.readLine().trim(); //read in the max number as a string
max = Integer.parseInt(maxStr);
manage1 = new FlightManagement(max);
break;
case 'D': //Search by flight number
System.out.print("Please enter Airlines to search: ");
airlines = stdin.readLine().trim();
System.out.print("Please enter flight number to search: ");
flightNumStr = stdin.readLine().trim();
flightNum = Integer.parseInt(flightNumStr);
operation2=manage1.flightNumberExists(airlines, flightNum);
if (operation2 > -1)
System.out.print("flight number " + airlines + flightNum + " found ");
else
System.out.print("flight number " + airlines + flightNum + " not found ");
break;
case 'E': //Search by departure
System.out.print("Please enter departure city to search: ");
depCity = stdin.readLine().trim();
System.out.print("Please enter its departure year to search: ");
depYearStr = stdin.readLine().trim();
depYear = Integer.parseInt(depYearStr);
System.out.print("Please enter its departure month to search: ");
depMonthStr = stdin.readLine().trim();
depMonth = Integer.parseInt(depMonthStr);
System.out.print("Please enter its departure date to search: ");
depDateStr = stdin.readLine().trim();
depDate = Integer.parseInt(depDateStr);
System.out.print("Please enter its departure time to search: ");
depTime = stdin.readLine().trim();
operation2=manage1.departureExists(depCity, depYear, depMonth, depDate, depTime);
if (operation2 > -1)
{
System.out.print("flight departure " + depCity + "," + depMonth
+ "-" + depDate + "-" + depYear +"," + depTime + " found ");
}
else
{
System.out.print("flight departure " + depCity + "," + depMonth
+ "-" + depDate + "-" + depYear +"," + depTime + " not found ");
}
break;
case 'L': //List flights
System.out.print(manage1.listFlights());
break;
case 'O': // Sort by flight numbers
manage1.sortByFlightNumber();
System.out.print("sorted by flight numbers ");
break;
case 'P': // Sort by departure information
manage1.sortByDeparture();
System.out.print("sorted by departures ");
break;
case 'Q': //Quit
break;
case 'R': //Remove by flight number
System.out.print("Please enter Airlines to remove: ");
airlines = stdin.readLine().trim();
System.out.print("Please enter flight number to remove: ");
flightNumStr = stdin.readLine().trim();
flightNum = Integer.parseInt(flightNumStr);
operation=manage1.removeFlightNumber(airlines, flightNum);
if (operation == true)
System.out.print("flight number " + airlines + flightNum + " removed ");
else
System.out.print("flight number " + airlines + flightNum + " not found ");
break;
case 'T': //Close FlightManagement
manage1.closeFlightManagement();
System.out.print("flight management system closed ");
break;
case 'U': //Write Text to a File
System.out.print("Please enter a file name to write: ");
filename = stdin.readLine().trim();
System.out.println("Please enter a string to write in the file: ");
String textToWrite = stdin.readLine().trim();
try {
fw = new FileWriter(filename);
bw = new BufferedWriter(fw);
bw.write(textToWrite);
} catch (IOException e) {
e.printStackTrace();
}
break;
case 'V': //Read Text from a File
System.out.print("Please enter a file name to read: ");
filename = stdin.readLine().trim();
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(filename));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
}
break;
case 'W': //Serialize FlightManagement to a File
System.out.print("Please enter a file name to write: ");
filename = stdin.readLine().trim();
try {
FileOutputStream fileOut =
new FileOutputStream(filename);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(manage1);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in "+filename);
}catch(IOException i) {
i.printStackTrace();
}
break;
case 'X': //Deserialize FlightManagement from a File
System.out.print("Please enter a file name to read: ");
filename = stdin.readLine().trim();
FlightManagement mSer = null;
try {
FileInputStream fileIn = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(fileIn);
mSer = (FlightManagement) in.readObject();
in.close();
fileIn.close();
}catch(IOException i) {
i.printStackTrace();
return;
}catch(ClassNotFoundException c) {
System.out.println("FlightManagement class not found");
c.printStackTrace();
return;
}
break;
case '?': //Display Menu
printMenu();
break;
default:
System.out.print("Unknown action ");
break;
}
}
else
{
System.out.print("Unknown action ");
}
} while (input1 != 'Q' || line.length() != 1);
}
catch (IOException exception)
{
System.out.print("IO Exception ");
}
}
/** The method printMenu displays the menu to a user **/
public static void printMenu()
{
System.out.print("Choice Action " +
"------ ------ " +
"A Add Flight " +
"C Create FlightManagement " +
"D Search by Flight Number " +
"E Search by Departure " +
"L List Flights " +
"O Sort by Flight Number " +
"P Sort by Departure " +
"Q Quit " +
"R Remove by Flight Number " +
"T Close FlightManagement " +
"U Write Text to File " +
"V Read Text from File " +
"W Serialize FlightManagement to File " +
"X Deserialize FlightManagement from File " +
"? Display Help ");
}
} // end of Assignment8 class
Flight.java
import java.io.Serializable;
public class Flight implements Serializable
{
private String airlines;
private int flightNum;
private Schedule departure;
private Schedule arrival;
//Constructor method to initialize each variable.
public Flight()
{
airlines = new String("?");
flightNum = 0;
departure = new Schedule();
arrival = new Schedule();
}
//Accessor methods
public String getAirlines()
{
return airlines;
}
public int getFlightNum()
{
return flightNum;
}
public Schedule getDeparture()
{
return departure;
}
public Schedule getArrival()
{
return arrival;
}
//Mutator methods
public void setAirlines(String airlinesName )
{
airlines = airlinesName;
}
public void setFlightNum(int fNumber)
{
flightNum = fNumber;
}
public void setDeparture(String someCity, int someYear, int someMonth, int someDate, String someTime)
{
departure.setCity(someCity);
departure.setYear(someYear);
departure.setMonth(someMonth);
departure.setDate(someDate);
departure.setTime(someTime);
}
public void setArrival(String someCity, int someYear, int someMonth, int someDate, String someTime)
{
arrival.setCity(someCity);
arrival.setYear(someYear);
arrival.setMonth(someMonth);
arrival.setDate(someDate);
arrival.setTime(someTime);
}
/*************************************
Define a copy method that copies every member variable value from "other" parameter to
their corresponding variable of the object itself using "this" reference
**************************************/
public void copy(Flight other)
{
this.airlines = other.airlines;
this.flightNum = other.flightNum;
this.departure = other.departure;
this.arrival = other.arrival;
}
//This method returns a String containing attribute(variable) values
//of a flight.
public String toString()
{
String result = " Airlines: " + airlines + " " +
"Number: " + flightNum + " " +
"Departure: " + departure.toString() + " " +
"Arrival: " + arrival.toString() + " ";
result += " ";
return result;
}
}
Schedule.java
import java.io.Serializable;
public class Schedule implements Serializable
{
private String city;
private int year;
private int month;
private int date;
private String time;
//Constructor method to initialize intance variables.
public Schedule()
{
city = new String("?");
time= new String("?");
year = 0;
month = 0;
date = 0;
}
//Accessor methods
public String getCity()
{
return city;
}
public String getTime()
{
return time;
}
public int getYear()
{
return year;
}
public int getMonth()
{
return month;
}
public int getDate()
{
return date;
}
//Modifier methods
public void setCity(String place)
{
city = place;
}
public void setTime(String someTime)
{
time = someTime;
}
public void setDate(int someDate)
{
date = someDate;
}
public void setYear(int someYear)
{
year = someYear;
}
public void setMonth(int someMonth)
{
month = someMonth;
}
/*************************************
Define a copy method that copies every member variable value from "other" parameter to
their corresponding variable of the object itself using "this" reference
**************************************/
public void copy(Schedule other)
{
this.city = other.city;
this.year = other.year;
this.month = other.month;
this.date = other.date;
this.time = other.time;
}
//This method return a string containing the attribute information in
//departure or arrival.
public String toString()
{
String result;
result = city + "," + month + "-" + date + "-" + year + "," + time;
return result;
}
}
FlightNumberComparator.java
import java.util.Comparator;
public class FlightNumberComparator implements Comparator<Flight> {
@Override
public int compare(Flight first, Flight second) {
int retVal;
retVal= first.getAirlines().compareTo(second.getAirlines());
if(retVal==0){
String flytNum1 = String.valueOf(first.getFlightNum());
String flytNum2 = String.valueOf(second.getFlightNum());
retVal= flytNum1.compareTo(flytNum2);
}
else{
return retVal;
}
return retVal;
}
}
DepartureComparator.java
import java.util.Comparator;
public class DepartureComparator implements Comparator<Flight> {
public DepartureComparator() {
// TODO Auto-generated constructor stub
}
@Override
public int compare(Flight first, Flight second) {
int retVal;
int retVal2;
int retVal3;
int retVal4;
int retVal5;
retVal= first.getDeparture().getCity().compareTo(second.getDeparture().getCity());
if(retVal==0){
String yr1 = String.valueOf(first.getDeparture().getYear());
String yr2 = String.valueOf(second.getDeparture().getYear());
retVal2= yr1.compareTo(yr2);
if(retVal2==0){
String month1 = String.valueOf(first.getDeparture().getMonth());
String month2 = String.valueOf(second.getDeparture().getMonth());
retVal3= month1.compareTo(month2);
if(retVal3 ==0){
String date1 = String.valueOf(first.getDeparture().getDate());
String date2 = String.valueOf(second.getDeparture().getDate());
retVal4= date1.compareTo(date2);
if(retVal4 == 0){
String time1 = String.valueOf(first.getDeparture().getTime());
String time2 = String.valueOf(second.getDeparture().getTime());
return ( time1.compareTo(time2));
}
else{
return retVal4;
}
}
else{
return retVal3;
}
}
else{
return retVal2;
}
}
else{
return retVal;
}
}
}
Sorts.java
import java.util.Arrays;
import java.util.Comparator;
public class Sorts {
public static void sort(Flight[] flightList, int size, Comparator<Flight> comparator){
Arrays.sort(flightList, comparator);
//comparator.compare(o1, o2)
}
}
FlightManagement.java
import java.io.Serializable;
public class FlightManagement implements Serializable {
private Flight[] flightList;
private int currentFlightsCount;
private int maxSize;
public FlightManagement(int maximumsize){
this.maxSize =maximumsize;
flightList = new Flight[maxSize];
for(int i=0; i<this.maxSize ;i++){
flightList[i] = null;
}
currentFlightsCount =0;
}
public int flightNumberExists(String airlines, int flightNumber){
for(int i=0; i<this.maxSize ;i++){
Flight currFlight = this.flightList[i];
if(currFlight.getAirlines().equalsIgnoreCase(airlines) && currFlight.getFlightNum() == flightNumber){
return i;
}
}
return -1;
}
public int departureExists(String city, int year, int month, int date, String time){
for(int i=0; i<this.maxSize ;i++){
Flight currFlight = this.flightList[i];
if(null!=currFlight){
if(city.equalsIgnoreCase(currFlight.getDeparture().getCity())
&& year == currFlight.getDeparture().getYear()
&& month == currFlight.getDeparture().getMonth()
&& date== currFlight.getDeparture().getDate()
&& time.equalsIgnoreCase(currFlight.getDeparture().getTime())){
return i;
}
}
}
return -1;
}
public boolean addFlight(String airlines, int flightNum, String depCity, int depYear, int depMonth, int depDate, String depTime, String arrCity,int arrYear, int arrMonth, int arrDate, String arrTime){
Flight flight = new Flight();
flight.setAirlines(airlines);
flight.setFlightNum(flightNum);
flight.setDeparture(depCity, depYear, depMonth, depDate, depTime);
flight.setArrival(arrCity, arrYear, arrMonth, arrDate, arrTime);
if(departureExists(depCity,depYear,depMonth,depDate,depTime)<0){
if(this.currentFlightsCount != this.maxSize){
flightList[currentFlightsCount] = flight;
this.currentFlightsCount++;
return true;
}
}
return false;
}
boolean removeFlightNumber(String airlines, int flightNumber){
for(int i=0; i<this.maxSize ;i++){
Flight currFlight = this.flightList[i];
if(currFlight.getAirlines().equalsIgnoreCase(airlines) && currFlight.getFlightNum() == flightNumber){
flightList[i] = null;
return true;
}
}
return false;
}
public String listFlights(){
if(currentFlightsCount>0){
for(int i=0; i<this.maxSize ;i++){
Flight currFlight = this.flightList[i];
return currFlight.toString();
}
}
else{
return " no flight ";
}
}
public void closeFlightManagement(){
for(int i=0; i<this.maxSize ;i++){
flightList[i] = null;
}
currentFlightsCount =0;
}
public void sortByFlightNumber(){
Sorts.sort(flightList, maxSize, new FlightNumberComparator());
}
public void sortByDeparture(){
Sorts.sort(flightList, maxSize, new DepartureComparator());
}
public Flight[] getFlightList() {
return flightList;
}
public void setFlightList(Flight[] flightList) {
this.flightList = flightList;
}
public int getCurrentFlightsCount() {
return currentFlightsCount;
}
public void setCurrentFlightsCount(int currentFlightsCount) {
this.currentFlightsCount = currentFlightsCount;
}
public int getMaxSize() {
return maxSize;
}
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.