In: Computer Science
The Luxury Ocean Cruise Outings company has provided Global Rain with a software specification document that details a menu-driven software application. Other developers on your software development team have already begun this project by creating the Ship, Cruise, Passenger, and Driver classes. You will modify the classes by including attributes and their proper data structures, writing methods to perform required functionality and behavior, and making sure that your program performs input validation and exception handling.
--------DRIVER.JAVA---------
import java.util.ArrayList;
import java.util.Scanner;
import static java.lang.Integer.parseInt;
public class Driver {
// class variables (add more as needed)
private static ArrayList shipList = new ArrayList();
private static ArrayList cruiseList = new ArrayList();
private static ArrayList passengerList = new ArrayList();
public static void main(String[] args) {
initializeShipList(); // initial ships
initializeCruiseList(); // initial cruises
initializePassengerList(); // initial passengers
// add loop and code here that accepts and validates user
input
// and takes the appropriate action. include appropriate
// user feedback and redisplay the menu as needed
}
// hardcoded ship data for testing
// Initialize ship list
public static void initializeShipList() {
add("Candy Cane", 20, 40, 10, 60, true);
add("Peppermint Stick", 10, 20, 5, 40, true);
add("Bon Bon", 12, 18, 2, 24, false);
add("Candy Corn", 12, 18, 2, 24, false);
}
// hardcoded cruise data for testing
// Initialize cruise list
public static void initializeCruiseList() {
Cruise newCruise = new Cruise("Southern Swirl", "Candy Cane",
"Miami", "Cuba", "Miami");
cruiseList.add(newCruise);
}
// hardcoded cruise data for testing
// Initialize passenger list
public static void initializePassengerList() {
Passenger newPassenger1 = new Passenger("Neo Anderson", "Southern
Swirl", "STE");
passengerList.add(newPassenger1);
Passenger newPassenger2 = new Passenger("Trinity", "Southern
Swirl", "STE");
passengerList.add(newPassenger2);
Passenger newPassenger3 = new Passenger("Morpheus", "Southern
Swirl", "BAL");
passengerList.add(newPassenger3);
}
// custom method to add ships to the shipList ArrayList
public static void add(String tName, int tBalcony, int
tOceanView,
int tSuite, int tInterior, boolean tInService) {
Ship newShip = new Ship(tName, tBalcony, tOceanView, tSuite,
tInterior, tInService);
shipList.add(newShip);
}
public static void printShipList(String listType) {
// printShipList() method prints list of ships from the
// shipList ArrayList. There are three different outputs
// based on the listType String parameter:
// name - prints a list of ship names only
// active - prints a list of ship names that are "in service"
// full - prints tabbed data on all ships
if (shipList.size() < 1) {
System.out.println("\nThere are no ships to print.");
return;
}
if (listType == "name") {
System.out.println("\n\nSHIP LIST - Name");
for (int i = 0; i < shipList.size(); i++) {
System.out.println(shipList.get(i));
}
} else if (listType == "active") {
System.out.println("\n\nSHIP LIST - Active");
// complete this code block
}
} else if (listType == "full") {
System.out.println("\n\nSHIP LIST - Full");
System.out.println("-----------------------------------------------");
System.out.println(" Number of Rooms In");
System.out.print("SHIP NAME Bal OV Ste Int Service");
System.out.println("\n-----------------------------------------------");
for (Ship eachShip: shipList)
eachShip.printShipData();
} else
System.out.println("\n\nError: List type not defined.");
}
public static void printCruiseList(String listType) {
if (cruiseList.size() < 1) {
System.out.println("\nThere are no cruises to print.");
return;
}
if (listType == "list") {
System.out.println("\n\nCRUISE LIST");
for (int i=0; i < cruiseList.size(); i++) {
System.out.println(cruiseList.get(i));
}
} else if (listType == "details") {
System.out.println("\n\nCRUISE LIST - Details");
System.out.println("------------------------------------------------------------------------------------------");
System.out.println("
|----------------------PORTS-----------------------|");
System.out.print("CRUISE NAME SHIP NAME DEPARTURE DESTINATION
RETURN");
System.out.println("\n-----------------------------------------------------------------------------------------");
for (Cruise eachCruise: cruiseList)
eachCruise.printCruiseDetails();
} else
System.out.println("\n\nError: List type not defined.");
}
public static void printPassengerList() {
if (passengerList.size() < 1) {
System.out.println("\nThere are no passengers to print.");
return;
}
System.out.println("\n\nPASSENGER LIST");
System.out.println("-----------------------------------------------------");
System.out.print("PASSENGER NAME CRUISE ROOM TYPE");
System.out.println("\n-----------------------------------------------------");
for (Passenger eachPassenger: passengerList)
eachPassenger.printPassenger();
}
// display text-based menu
public static void displayMenu() {
System.out.println("\n\n");
System.out.println("\t\t\tLuxury Ocean Cruise Outings");
System.out.println("\t\t\t\t\tSystem Menu\n");
System.out.println("[1] Add Ship [A] Print Ship Names");
System.out.println("[2] Edit Ship [B] Print Ship In Service
List");
System.out.println("[3] Add Cruise [C] Print Ship Full
List");
System.out.println("[4] Edit Cruise [D] Print Cruise List");
System.out.println("[5] Add Passenger [E] Print Cruise
Details");
System.out.println("[6] Edit Passenger [F] Print Passenger
List");
System.out.println("[x] Exit System");
System.out.println("\nEnter a menu selection: ");
}
// Add a New Ship
public static void addShip() {
// complete this method
}
// Edit an existing ship
public static void editShip() {
// This method does not need to be completed
System.out.println("The \"Edit Ship\" feature is not yet
implemented.");
}
// Add a New Cruise
public static void addCruise() {
// complete this method
}
// Edit an existing cruise
public static void editCruise() {
// This method does not need to be completed
System.out.println("The \"Edit Cruise\" feature is not yet
implemented.");
}
// Add a New Passenger
public static void addPassenger() {
Scanner newPassengerInput = new Scanner(System.in);
System.out.println("Enter the new passenger's name: ");
String newPassengerName = newPassengerInput.nextLine();
// ensure new passenger name does not already exist
for (Passenger eachPassenger: passengerList) {
if
(eachPassenger.getPassengerName().equalsIgnoreCase(newPassengerName))
{
System.out.println("That passenger is already in the system.
Exiting to menu...");
return; // quits addPassenger() method processing
}
}
// get cruise name for passenger
System.out.println("Enter cruise name: ");
String newCruiseName = newPassengerInput.nextLine();
// ensure cruise exists
for (Cruise eachCruise: cruiseList) {
if (eachCruise.getCruiseName().equalsIgnoreCase(newCruiseName))
{
// cruise does exist
} else {
System.out.println("That cruise does not exist in the system.
Exiting to menu...");
return; // quits addPassenger() method processing
}
}
// get room type
System.out.println("Enter Room Type (BAL, OV, STE, or INT:
");
String room = newPassengerInput.nextLine();
// validate room type
if ((room.equalsIgnoreCase("BAL")) || (room.equalsIgnoreCase("OV"))
||
(room.equalsIgnoreCase("STE")) || (room.equalsIgnoreCase("INT")))
{
// validation passed - add passenger
Passenger newPassenger = new Passenger(newPassengerName,
newCruiseName, room.toUpperCase());
passengerList.add(newPassenger);
} else {
System.out.println("Invalid input. Exiting to menu...");
return; // quits addPassenger() method processing
}
}
// Edit an existing passenger
public static void editPassenger() {
// This method does not need to be completed
System.out.println("The \"Edit Passenger\" feature is not yet
implemented.");
}
// Method to check if input is a number
public static boolean isANumber(String str) {
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i)) == false)
return false;
}
return true;
}
}
-------CRUISE.JAVA--------
public class Cruise {
// Class Variables
private String cruiseName;
private String cruiseShipName;
private String departurePort;
private String destination;
private String returnPort;
// Constructor - default
Cruise() {
}
// Constructor - full
Cruise(String tCruiseName, String tShipName, String tDeparture,
String tDestination, String tReturn) {
cruiseName = tCruiseName;
cruiseShipName = tShipName;
departurePort = tDeparture;
destination = tDestination;
returnPort = tReturn;
}
// Accessors
public String getCruiseName() {
return cruiseName;
}
public String getCruiseShipName() {
return cruiseShipName;
}
public String getDeparturePort() {
return departurePort;
}
public String getDestination() {
return destination;
}
public String getReturnPort() {
return returnPort;
}
// Mutators
public void setCruiseName(String tVar) {
cruiseName = tVar;
}
public void setCruiseShipName(String tVar) {
cruiseShipName = tVar;
}
public void setDeparturePort(String tVar) {
departurePort = tVar;
}
public void setDestination(String tVar) {
destination = tVar;
}
public void setReturnPort(String tVar) {
returnPort = tVar;
}
// print cruise details
public void printCruiseDetails() {
// complete this method
}
// method added to print ship's name vice memory address
@Override
public String toString() {
return cruiseName;
}
}
/********************************Driver.java**************************/
import java.util.ArrayList;
import java.util.Scanner;
public class Driver {
// class variables (add more as needed)
private static ArrayList
private static ArrayList
private static ArrayList
public static void main(String[] args) {
shipList = new
ArrayList<>();
cruiseList = new
ArrayList<>();
passengerList = new
ArrayList<>();
initializeShipList(); // initial
ships
initializeCruiseList(); // initial
cruises
initializePassengerList(); //
initial passengers
// add loop and code here that accepts and validates user
input
// and takes the appropriate action. include appropriate
// user feedback and redisplay the menu as needed
}
// hardcoded ship data for testing
// Initialize ship list
public static void initializeShipList() {
add("Candy Cane", 20, 40, 10, 60,
true);
add("Peppermint Stick", 10, 20, 5,
40, true);
add("Bon Bon", 12, 18, 2, 24,
false);
add("Candy Corn", 12, 18, 2, 24,
false);
}
// hardcoded cruise data for testing
// Initialize cruise list
public static void initializeCruiseList() {
Cruise newCruise = new
Cruise("Southern Swirl", "Candy Cane", "Miami", "Cuba",
"Miami");
cruiseList.add(newCruise);
}
// hardcoded cruise data for testing
// Initialize passenger list
public static void initializePassengerList() {
Passenger newPassenger1 = new
Passenger("Neo Anderson", "Southern Swirl", "STE");
passengerList.add(newPassenger1);
Passenger newPassenger2 = new
Passenger("Trinity", "Southern Swirl", "STE");
passengerList.add(newPassenger2);
Passenger newPassenger3 = new
Passenger("Morpheus", "Southern Swirl", "BAL");
passengerList.add(newPassenger3);
}
// custom method to add ships to the shipList
ArrayList
public static void add(String tName, int tBalcony, int
tOceanView, int tSuite, int tInterior, boolean tInService) {
Ship newShip = new Ship(tName,
tBalcony, tOceanView, tSuite, tInterior, tInService);
shipList.add(newShip);
}
public static void printShipList(String listType)
{
// printShipList() method prints
list of ships from the
// shipList ArrayList. There are
three different outputs
// based on the listType String
parameter:
// name - prints a list of ship
names only
// active - prints a list of ship
names that are "in service"
// full - prints tabbed data on all
ships
if (shipList.size() < 1)
{
System.out.println("\nThere are no ships to print.");
return;
}
if (listType == "name") {
System.out.println("\n\nSHIP LIST - Name");
for (int i = 0;
i < shipList.size(); i++) {
System.out.println(shipList.get(i));
}
} else if (listType == "active")
{
System.out.println("\n\nSHIP LIST - Active");
System.out.println("-----------------------------------------------");
System.out.println(" Number of Rooms In");
System.out.print("SHIP NAME Bal OV Ste Int Service");
System.out.println("\n-----------------------------------------------");
for (Ship
eachShip : shipList) {
if (eachShip.getType() == true)
eachShip.printShipData();
}
} else if (listType == "full")
{
System.out.println("\n\nSHIP LIST - Full");
System.out.println("-----------------------------------------------");
System.out.println(" Number of Rooms In");
System.out.print("SHIP NAME Bal OV Ste Int Service");
System.out.println("\n-----------------------------------------------");
for (Ship
eachShip : shipList)
eachShip.printShipData();
} else
System.out.println("\n\nError: List type not defined.");
}
public static void printCruiseList(String listType)
{
if (cruiseList.size() < 1)
{
System.out.println("\nThere are no cruises to print.");
return;
}
if (listType == "list") {
System.out.println("\n\nCRUISE LIST");
for (int i = 0;
i < cruiseList.size(); i++) {
System.out.println(cruiseList.get(i));
}
} else if (listType == "details")
{
System.out.println("\n\nCRUISE LIST - Details");
System.out.println(
"------------------------------------------------------------------------------------------");
System.out.println("
|----------------------PORTS-----------------------|");
System.out.print("CRUISE NAME SHIP NAME DEPARTURE DESTINATION
RETURN");
System.out.println(
"\n-----------------------------------------------------------------------------------------");
for (Cruise
eachCruise : cruiseList)
eachCruise.printCruiseDetails();
} else
System.out.println("\n\nError: List type not defined.");
}
public static void printPassengerList() {
if (passengerList.size() < 1)
{
System.out.println("\nThere are no passengers to print.");
return;
}
System.out.println("\n\nPASSENGER
LIST");
System.out.println("-----------------------------------------------------");
System.out.print("PASSENGER NAME
CRUISE ROOM TYPE");
System.out.println("\n-----------------------------------------------------");
for (Passenger eachPassenger :
passengerList)
eachPassenger.printPassenger();
}
// display text-based menu
public static void displayMenu() {
System.out.println("\n\n");
System.out.println("\t\t\tLuxury
Ocean Cruise Outings");
System.out.println("\t\t\t\t\tSystem Menu\n");
System.out.println("[1] Add Ship
[A] Print Ship Names");
System.out.println("[2] Edit Ship
[B] Print Ship In Service List");
System.out.println("[3] Add Cruise
[C] Print Ship Full List");
System.out.println("[4] Edit Cruise
[D] Print Cruise List");
System.out.println("[5] Add
Passenger [E] Print Cruise Details");
System.out.println("[6] Edit
Passenger [F] Print Passenger List");
System.out.println("[x] Exit
System");
System.out.println("\nEnter a menu
selection: ");
}
// Add a New Passenger
public static void addPassenger() {
Scanner newPassengerInput = new Scanner(System.in);
System.out.println("Enter the new passenger's name: ");
String newPassengerName = newPassengerInput.nextLine();
// ensure new passenger name does not already exist
for (Passenger eachPassenger : passengerList) {
if (eachPassenger.getPassengerName().equalsIgnoreCase(newPassengerName)) {
System.out.println("That passenger is already in the system. Exiting to menu...");
return; // quits addPassenger() method processing
}
}
// get cruise name for passenger
System.out.println("Enter cruise name: ");
String newCruiseName = newPassengerInput.nextLine();
// ensure cruise exists
int flag = 0;
for (Cruise eachCruise :
cruiseList) {
if (eachCruise.getCruiseName().equalsIgnoreCase(newCruiseName)) {
flag = 1;
}
}
if (flag == 0) {
System.out.println("That cruise does not exist in the system. Exiting to menu...");
return; // quits addPassenger() method processing
}
// get room type
System.out.println("Enter Room Type (BAL, OV, STE, or INT: ");
String room = newPassengerInput.nextLine();
// validate room type
if ((room.equalsIgnoreCase("BAL")) || (room.equalsIgnoreCase("OV")) ||
(room.equalsIgnoreCase("STE")) || (room.equalsIgnoreCase("INT"))) {
// validation passed - add passenger
Passenger newPassenger = new Passenger(newPassengerName, newCruiseName, room.toUpperCase());
passengerList.add(newPassenger);
} else {
System.out.println("Invalid input. Exiting to menu...");
return; // quits addPassenger() method processing
}
}
// Edit an existing passenger
public static void editPassenger() {
Scanner newPassengerInput = new Scanner(System.in);
System.out.println("Enter the new passenger's name: ");
String newPassengerName =
newPassengerInput.nextLine();
Passenger passenger = null;
// ensure new passenger name does
not already exist
int flag = 0;
for (Passenger eachPassenger :
passengerList) {
if (eachPassenger.getPassengerName().equalsIgnoreCase(newPassengerName)) {
flag = 1;
passenger = eachPassenger;
}
}
if (flag == 1) {
System.out.println("Enter cruise name: ");
String newCruiseName = newPassengerInput.nextLine();
// ensure
cruise exists
int flag1 =
0;
for (Cruise
eachCruise : cruiseList) {
if (eachCruise.getCruiseName().equalsIgnoreCase(newCruiseName)) {
flag1 = 1;
}
}
if (flag1 == 0)
{
System.out.println("That cruise does not exist in the system. Exiting to menu...");
return; // quits addPassenger() method processing
} else {
// get room type
System.out.println("Enter Room Type (BAL, OV, STE, or INT: ");
String room = newPassengerInput.nextLine();
// validate room type
if ((room.equalsIgnoreCase("BAL")) || (room.equalsIgnoreCase("OV")) ||
(room.equalsIgnoreCase("STE")) || (room.equalsIgnoreCase("INT"))) {
// validation passed - add passenger
passenger.setCruiseName(newCruiseName);
passenger.setRoomType(room);
} else {
System.out.println("Invalid input. Exiting to menu...");
return; // quits addPassenger() method processing
}
}
}
}
// Method to check if input is a number
public static boolean isANumber(String str) {
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i)) == false)
return false;
}
return true;
}
// Add a New Ship
public static void addShip() {
Scanner scan = new Scanner(System.in);
System.out.print("Enter Ship
Name: ");
String shipName =
scan.nextLine();
int flag = 0;
for (Ship ship : shipList) {
if (ship.getShipName().equalsIgnoreCase(shipName)) {
flag = 1;
}
}
if (flag == 1) {
System.out.println("That Ship is already in the system. Exiting to menu...");
return;
}
System.out.print("Balcony:
");
String balconyString =
scan.nextLine();
int balcony = 0;
if (isANumber(balconyString))
balcony =
Integer.parseInt(balconyString);
System.out.print("Ocean
View:");
String oceanViewString =
scan.nextLine();
int oceanView = 0;
if
(isANumber(oceanViewString))
oceanView =
Integer.parseInt(oceanViewString);
System.out.print("Room Suite:
");
String roomSuiteString =
scan.nextLine();
int roomSuite = 0;
if
(isANumber(roomSuiteString))
roomSuite =
Integer.parseInt(roomSuiteString);
System.out.print("Room Interior:
");
String roomInteriorString =
scan.nextLine();
int roomInterior = 0;
if
(isANumber(roomInteriorString))
roomInterior =
Integer.parseInt(roomInteriorString);
System.out.print("In Service:
");
boolean inService =
scan.nextBoolean();
scan.nextLine();
shipList.add(new Ship(shipName, balcony, oceanView, roomSuite, roomInterior, inService));
}
// Edit an existing ship
public static void editShip() {
Scanner scan = new
Scanner(System.in);
System.out.print("Enter shipName:
");
String shipName =
scan.nextLine();
Ship ship1 = null;
int flag = 0;
for (Ship ship : shipList) {
if (ship.getShipName().equalsIgnoreCase(shipName)) {
ship1 = ship;
flag = 1;
}
}
if (flag == 1) {
System.out.print("Balcony: ");
String
balconyString = scan.nextLine();
int balcony =
0;
if
(isANumber(balconyString))
balcony = Integer.parseInt(balconyString);
System.out.print("Ocean View:");
String
oceanViewString = scan.nextLine();
int oceanView =
0;
if
(isANumber(oceanViewString))
oceanView =
Integer.parseInt(oceanViewString);
System.out.print("Room Suite: ");
String
roomSuiteString = scan.nextLine();
int roomSuite =
0;
if
(isANumber(roomSuiteString))
roomSuite =
Integer.parseInt(roomSuiteString);
System.out.print("Room Interior: ");
String
roomInteriorString = scan.nextLine();
int roomInterior
= 0;
if
(isANumber(roomInteriorString))
roomInterior =
Integer.parseInt(roomInteriorString);
System.out.print("In Service: ");
boolean
inService = scan.nextBoolean();
scan.nextLine();
ship1.setRoomBalcony(balcony);
ship1.setRoomOceanView(oceanView);
ship1.setRoomSuite(roomSuite);
ship1.setRoomInterior(roomInterior);
ship1.setInService(inService);
} else {
System.out.println("Ship is not in system...");
return;
}
}
public static void addCruise() {
Scanner scan = new Scanner(System.in);
System.out.print("Enter Cruise
Name: ");
String cruiseName =
scan.nextLine();
int flag = 0;
for (Cruise cruise : cruiseList)
{
if (cruise.getCruiseName().equalsIgnoreCase(cruiseName)) {
flag = 1;
}
}
if (flag == 1) {
System.out.println("That Cruise is already in the system. Exiting to menu...");
return;
}
System.out.print("Enter Cruise Ship
Name: ");
String cruiseShip =
scan.nextLine();
System.out.print("Departure Port:
");
String departurePort =
scan.nextLine();
System.out.print("Destination:
");
String destination =
scan.nextLine();
System.out.print("Return Port:
");
String returnPort =
scan.nextLine();
cruiseList.add(new Cruise(cruiseName, cruiseShip, departurePort, destination, returnPort));
}
// Edit an existing cruise
public static void editCruise() {
Scanner scan = new Scanner(System.in);
System.out.print("Enter Cruise
Name: ");
String cruiseName =
scan.nextLine();
Cruise cruise1 = null;
int flag = 0;
for (Cruise cruise : cruiseList)
{
if (cruise.getCruiseName().equalsIgnoreCase(cruiseName)) {
cruise1 = cruise;
flag = 1;
}
}
if (flag == 1) {
System.out.print("Enter Cruise Ship Name: ");
String
cruiseShip = scan.nextLine();
System.out.print("Departure Port: ");
String
departurePort = scan.nextLine();
System.out.print("Destination: ");
String
destination = scan.nextLine();
System.out.print("Return Port: ");
String
returnPort = scan.nextLine();
cruise1.setCruiseShipName(cruiseShip);
cruise1.setDeparturePort(departurePort);
cruise1.setDestination(destination);
cruise1.setReturnPort(returnPort);
} else {
System.out.println("Cruise not found!");
return;
}
}
}