Instructions
Requirements and Specifications
Source Code
CRUISE
public class Cruise {
// Instance 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() {
// Using String.format method instead of appending spaces manually
// Format line '%-{length}s' allows string to occupy {length} spaces with content aligned to the left
String cruiseDetails = String.format("%-20s", cruiseName) +
String.format("%-20s", cruiseShipName) +
String.format("%-20s", departurePort) +
String.format("%-20s", destination) +
returnPort;
System.out.println(cruiseDetails);
}
// method added to print ship's name vice memory address
@Override
public String toString() {
return cruiseName;
}
}
DRIVER
import java.util.ArrayList;
import java.util.Scanner;
import static java.lang.Integer.parseInt;
public class Driver {
// instance variables (add more as needed)
private static ArrayList<Ship> shipList = new ArrayList();
private static ArrayList<Cruise> cruiseList = new ArrayList();
private static ArrayList<Passenger> 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
boolean isFinished = false;
while (!isFinished) {
displayMenu();
Scanner menuScan = new Scanner(System.in);
String userInput = menuScan.nextLine().toLowerCase();
switch (userInput) {
case "1":
addShip();
break;
case "2":
editShip();
break;
case "3":
addCruise();
break;
case "4":
editCruise();
break;
case "5":
addPassenger();
break;
case "6":
editPassenger();
break;
case "x":
isFinished = true;
break;
case "a":
printShipList("name");
break;
case "b":
printShipList("active");
break;
case "c":
printShipList("full");
break;
case "d":
printCruiseList("list");
break;
case "e":
printCruiseList("details");
break;
case "f":
printPassengerList();
break;
default:
System.out.println("Invalid input");
}
}
}
// 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");
printShipListHeader();
// iterating over ships, printing only those, which are in service
for (Ship eachShip: shipList)
if (eachShip.getInService())
eachShip.printShipData();
} else if (listType == "full") {
System.out.println("\n\nSHIP LIST - Full");
printShipListHeader();
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() {
Scanner newShipInput = new Scanner(System.in);
System.out.println("Enter the new ship's name: ");
String newShipName = newShipInput.nextLine();
// ensure new ship name does not already exist
for (Ship eachShip: shipList) {
if (eachShip.getShipName().equalsIgnoreCase(newShipName)) {
System.out.println("That ship is already in the system. Exiting to menu...");
return; // quits addShip() method processing
}
}
// get balcony rooms for ship
System.out.println("Enter number of balcony rooms: ");
int bal = tryGetIntFromInput(newShipInput);
if (bal < 0)
// parsing method returned -1
return; // quits addShip() method processing
// get ocean view rooms for ship
System.out.println("Enter number of ocean view rooms: ");
int ov = tryGetIntFromInput(newShipInput);
if (ov < 0)
// parsing method returned -1
return; // quits addShip() method processing
// get suite rooms for ship
System.out.println("Enter number of suite rooms: ");
int ste = tryGetIntFromInput(newShipInput);
if (ste < 0)
// parsing method returned -1
return; // quits addShip() method processing
// get interior rooms for ship
System.out.println("Enter number of interior rooms: ");
int interior = tryGetIntFromInput(newShipInput);
if (interior < 0)
// parsing method returned -1
return; // quits addShip() method processing
// get is in service
System.out.println("Enter if ship is in service or not ('y' - if is service, otherwise - not): ");
boolean inService = tryGetBoolFromInput(newShipInput);
shipList.add(new Ship(newShipName, bal, ov, ste, interior, inService));
}
// 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() {
Scanner newCruiseInput = new Scanner(System.in);
System.out.println("Enter the new cruise's name: ");
String newCruiseName = newCruiseInput.nextLine();
// ensure new cruise name does not already exist
for (Cruise eachCruise: cruiseList) {
if (eachCruise.getCruiseName().equalsIgnoreCase(newCruiseName)) {
System.out.println("That cruise is already in the system. Exiting to menu...");
return; // quits addCruise() method processing
}
}
System.out.println("Enter the new cruise ship's name: ");
String newCruiseShipName = newCruiseInput.nextLine();
// Validating ship name:
// ensure cruise ship name exists
boolean exists = false;
for (Ship eachShip: shipList) {
if (eachShip.getShipName().equalsIgnoreCase(newCruiseShipName)) {
exists = true;
break;
}
}
if (!exists) {
// if ship is not found - exiting
System.out.println("That ship is not in the system. Exiting to menu...");
return; // quits addCruise() method processing
}
// ensure cruise ship is not already assigned
for (Cruise eachCruise: cruiseList) {
if (eachCruise.getCruiseShipName().equalsIgnoreCase(newCruiseShipName)) {
System.out.println("That ship is already assigned to another cruise. Exiting to menu...");
return; // quits addCruise() method processing
}
}
System.out.println("Enter the new cruise departure port: ");
String newCruiseDeparturePort = newCruiseInput.nextLine();
System.out.println("Enter the new cruise destination: ");
String newCruiseDestination = newCruiseInput.nextLine();
System.out.println("Enter the new cruise return port: ");
String newCruiseReturnPort = newCruiseInput.nextLine();
cruiseList.add(new Cruise(newCruiseName, newCruiseShipName, newCruiseDeparturePort,
newCruiseDestination, newCruiseReturnPort));
}
// 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;
}
// common header printing method for tables generated in method printShipList with different arguments
private static void printShipListHeader() {
System.out.println("-----------------------------------------------");
System.out.println(" Number of Rooms In");
System.out.print("SHIP NAME Bal OV Ste Int Service");
System.out.println("\n-----------------------------------------------");
}
// method for parsing non-negative integer from user input
// returns -1 if attempt was unsuccessful
private static int tryGetIntFromInput(Scanner input) {
int result = 0;
try {
// try parse non-negative int number from user input
result = Integer.parseInt(input.nextLine());
if (result < 0)
throw new IllegalArgumentException();
return result;
}
catch (IllegalArgumentException e) {
System.out.println("Invalid input. Exiting to menu...");
return -1;
}
}
// method for parsing boolean from user input
// 'y' ignore case is for true, otherwise - false
private static boolean tryGetBoolFromInput(Scanner input) {
return input.nextLine().trim().equalsIgnoreCase("y");
}
}
PASSENGER
public class Passenger {
// Instance variables
private String passengerName;
private String passengerCruise;
private String passengerRoomType;
// Constructor - default
Passenger() {
}
// Constructor - full
Passenger(String pName, String pCruise, String pRoomType) {
passengerName = pName;
passengerCruise = pCruise;
passengerRoomType = pRoomType; // should be BAL, OV, STE, or INT
}
// Accessors
public String getPassengerName() {
return passengerName;
}
public String getPassengerCruise() {
return passengerCruise;
}
public String getPassengerRoomType() {
return passengerRoomType;
}
// Mutators
public void setPassengerName(String tVar) {
passengerName = tVar;
}
public void setPassengerCruise(String tVar) {
passengerCruise = tVar;
}
public void setPassengerRoomType(String tVar) {
passengerRoomType = tVar;
}
// print method
public void printPassenger() {
int spaceCount;
String spaces1 = "";
String spaces2 = "";
spaceCount = 20 - passengerName.length();
for (int i = 1; i <= spaceCount; i++) {
spaces1 = spaces1 + " ";
}
spaceCount = 20 - passengerCruise.length();
for (int i = 1; i <= spaceCount; i++) {
spaces2 = spaces2 + " ";
}
System.out.println(passengerName + spaces1 + passengerCruise + spaces2 +
passengerRoomType);
}
// method added to print passenger's name vice memory address
@Override
public String toString() {
return passengerName;
}
}
SHIP
public class Ship {
// Instance Variables
private String shipName;
private int roomBalcony;
private int roomOceanView;
private int roomSuite;
private int roomInterior;
private boolean inService;
// Constructor - default
Ship() {
}
// Constructor - full
Ship(String tName, int tBalcony, int tOceanView,
int tSuite, int tInterior, boolean tInService) {
shipName = tName;
roomBalcony = tBalcony;
roomOceanView = tOceanView;
roomSuite = tSuite;
roomInterior = tInterior;
inService = tInService;
}
// Accessors
public String getShipName() {
return shipName;
}
public int getRoomBalcony() {
return roomBalcony;
}
public int getRoomOceanView() {
return roomOceanView;
}
public int getRoomSuite() {
return roomSuite;
}
public int getRoomInterior() {
return roomInterior;
}
public boolean getInService() {
return inService;
}
// Mutators
public void setShipName(String tVar) {
shipName = tVar;
}
public void setRoomBalcony(int tVar) {
roomBalcony = tVar;
}
public void setRoomOceanView(int tVar) {
roomOceanView = tVar;
}
public void setRoomSuite(int tVar) {
roomSuite = tVar;
}
public void setRoomInterior(int tVar) {
roomInterior = tVar;
}
public void setInService(boolean tVar) {
inService = tVar;
}
// print method
public void printShipData() {
int spaceCount;
String spaces = "";
spaceCount = 20 - shipName.length();
for (int i = 1; i <= spaceCount; i++) {
spaces = spaces + " ";
}
System.out.println(shipName + spaces + roomBalcony + "\t" +
roomOceanView + "\t" + roomSuite + "\t" +
roomInterior + "\t\t" + inService);
}
// method added to print ship's name vice memory address
@Override
public String toString() {
return shipName;
}
}