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

Hey guys, i\'m working on a Java Exception Handling assignment and could use som

ID: 3710188 • Letter: H

Question

Hey guys, i'm working on a Java Exception Handling assignment and could use some help with the last couple requirements. A good portion of the code is already done, and it’s just some fault tolerance left. Any help would be appreciated. My current code and requirements are here in the description. My code is in 3 packages, with their beginning and end stated in bold and each class is separated by "#########". The requirements are as follows:

Requirement 6:

Create a package called exception. This package should be used to store any Exception classes that are created.

Create an Exception class called RoomExistException.

Create an Exception class called RoomReservationException.

Requirement 7:

When the user chooses to reserve a room and the room either does not exist or is already reserved, an exception should be thrown. If the room does not exist, the reserveRoom method should throw a RoomExistException. If the room is already reserved, the reserveRoom method should throw a RoomReservationException.

The main method should catch this exception and display a message that the room can not be reserved.

The same approach should be used when the user opts to release a room.

Requirement 8:

Throughout the entire program when the user has an option to enter an option, ensure that the user entry is validated using a try...catch approach. If an Exception is caught, notify the user and allow the program to continue.

My current code is:

---Start of "room.bo" package---

package room.bo;
import java.util.Scanner;
/**
* Biology lab is equipped to allow working with biology.
*
* @since
* @author
*/
public class BiologyLab extends Room {

private int numberOfMicroscopes;
private boolean hasFumeHood;
private boolean hasBunsonBurners;

/**
* default constructor
*
* @since
* @author
*/
public BiologyLab() {
}

/**
* Custom constructor that sets all attributes
*
* @param numberOfMicroscopes
* @param hasFumeHood
* @param hasBunsonBurners
* @param roomNumber
* @param numberOfSeats
* @param reserved
* @param hasSmartBoard
* @since
* @author
*/
public BiologyLab(int numberOfMicroscopes, boolean hasFumeHood, boolean hasBunsonBurners, int roomNumber, int numberOfSeats, boolean reserved, boolean hasSmartBoard) {
super(roomNumber, numberOfSeats, reserved, hasSmartBoard);
this.numberOfMicroscopes = numberOfMicroscopes;
this.hasFumeHood = hasFumeHood;
this.hasBunsonBurners = hasBunsonBurners;
}

public int getNumberOfMicroscopes() {
return numberOfMicroscopes;
}

public void setNumberOfMicroscopes(int numberOfMicroscopes) {
this.numberOfMicroscopes = numberOfMicroscopes;
}

public boolean isHasFumeHood() {
return hasFumeHood;
}

public void setHasFumeHood(boolean hasFumeHood) {
this.hasFumeHood = hasFumeHood;
}

public boolean isHasBunsonBurners() {
return hasBunsonBurners;
}

public void setHasBunsonBurners(boolean hasBunsonBurners) {
this.hasBunsonBurners = hasBunsonBurners;
}

@Override
public String toString() {
return super.toString() + " Number of microscopes: " + numberOfMicroscopes + " Has fumehood: " + hasFumeHood + " Has Bunson burners: " + hasBunsonBurners;
}

/**
* Get the details from the user about this class. This will invoke the
* super method to get the base class attributes.
*
* @since
* @author
*/
@Override
public void getRoomDetailsFromUser() {
super.getRoomDetailsFromUser();
Scanner input = new Scanner(System.in);
System.out.print("How many microscopes does this room have? ");
numberOfMicroscopes = input.nextInt();
input.nextLine();
System.out.print("Does this lab have a fume hood (y/n)? ");
hasFumeHood = input.nextLine().equalsIgnoreCase("y");
System.out.print("Does this lab have bunson burners(y/n)? ");
hasBunsonBurners = input.nextLine().equalsIgnoreCase("y");
}
}
##################################################################################
package room.bo;
import java.util.Scanner;
/**
* BoardRoom is a type of room used for meetings
*
* @since
* @author
*/
public class BoardRoom extends Room {

private boolean hasTeleconferencing;

/**
* default constructor
*
* @since
* @author
*/
public BoardRoom() {
}

/**
* Custom constructor which sets all attributes of the class
*
* @param hasTeleconferencing
* @param roomNumber
* @param numberOfSeats
* @param reserved
* @param hasSmartBoard
* @author
* @since
*/
public BoardRoom(boolean hasTeleconferencing, int roomNumber, int numberOfSeats, boolean reserved, boolean hasSmartBoard) {
super(roomNumber, numberOfSeats, reserved, hasSmartBoard);
this.hasTeleconferencing = hasTeleconferencing;
}

public boolean isHasTeleconferencing() {
return hasTeleconferencing;
}

public void setHasTeleconferencing(boolean hasTeleconferencing) {
this.hasTeleconferencing = hasTeleconferencing;
}

public String toString() {
return super.toString() + " Has teleconferencing: " + hasTeleconferencing;
}

/**
* Get the details from the user about this class. This will invoke the
* super method to get the base class attributes.
*
* @since
* @author
*/
public void getRoomDetailsFromUser() {
super.getRoomDetailsFromUser();
Scanner input = new Scanner(System.in);
System.out.print("Does this room have teleconferencing (y/n) ");
hasTeleconferencing = input.nextLine().equalsIgnoreCase("y");
;
}
}
##################################################################################
package room.bo;
import java.util.Scanner;
/**
* Computer room is a room which is equipped with computer stations.
*
* @since
* @author
*/
public class ComputerRoom extends Room {

int numberOfComputers;

/**
* Default constructor
*/
public ComputerRoom() {
}

/**
* Custom constructor that sets all of the class attributes.
*
* @param numberOfComputers
* @param roomNumber
* @param numberOfSeats
* @param reserved
* @param hasSmartBoard
* @since
* @author
*/
public ComputerRoom(int numberOfComputers, int roomNumber, int numberOfSeats, boolean reserved, boolean hasSmartBoard) {
super(roomNumber, numberOfSeats, reserved, hasSmartBoard);
this.numberOfComputers = numberOfComputers;
}

/**
* Get the details from the user about this class. This will invoke the
* super method to get the base class attributes.
*
* @since
* @author
*/
public void getRoomDetailsFromUser() {
super.getRoomDetailsFromUser();
Scanner input = new Scanner(System.in);
System.out.print("Enter number of computers: ");
numberOfComputers = input.nextInt();
input.nextLine();
}

public int getNumberOfComputer() {
return numberOfComputers;
}

public void setNumberOfComputer(int numberOfComputer) {
this.numberOfComputers = numberOfComputer;
}

public String toString() {
return super.toString() + " Number of Computers" + numberOfComputers;
}
}
##################################################################################


package room.bo;
import java.util.Scanner;
/**
*
* This is the base type of room. Has the basics for a class room but not much specialized
* equipment.
*
* @since
* @author
*/
public class Room {

Scanner input = new Scanner(System.in);
private int roomNumber;
private int numberOfSeats;
private String reservedBy = "";
private boolean reserved;
private boolean hasSmartBoard;

/**
* Default constructor
* @since
* @author
*/
public Room() {
}

/**
* Custom constructor that accepts all of the attributes of the class.
* @param roomNumber
* @param numberOfSeats
* @param reserved
* @param hasSmartBoard
* @since
* @author
*/

public Room(int roomNumber, int numberOfSeats, boolean reserved, boolean hasSmartBoard) {
this.roomNumber = roomNumber;
this.numberOfSeats = numberOfSeats;
this.reserved = reserved;
this.hasSmartBoard = hasSmartBoard;
}

/**
* Get the attribute values from the user.
*
* @since
* @author
*/
public void getRoomDetailsFromUser() {

System.out.print("Enter number of seats: ");
numberOfSeats = input.nextInt();
input.nextLine();
System.out.print("Does this classroom have a smart board? (y/n)");
hasSmartBoard = input.nextLine().equalsIgnoreCase("y");

}

public boolean isHasSmartBoard() {
return hasSmartBoard;
}

public void setHasSmartBoard(boolean hasSmartBoard) {
this.hasSmartBoard = hasSmartBoard;
}

public int getNumberOfSeats() {
return numberOfSeats;
}

public void setNumberOfSeats(int numberOfSeats) {
this.numberOfSeats = numberOfSeats;
}

public String getReservedBy() {
return reservedBy;
}

public void setReservedBy(String reservedBy) {
this.reservedBy = reservedBy;
}

public boolean isReserved() {
return reserved;
}

public void setReserved(boolean reserved) {
this.reserved = reserved;
}

public void setRoomNumber(int roomNumber) {
this.roomNumber = roomNumber;
}

public int getRoomNumber() {
return roomNumber;
}

/**
* Update the room to reserved and get the reserved by.
*
* @since
* @author
*/
public void reserveThisRoom() {
this.reserved = true;
System.out.println("Enter the name of the person reserving this room: ");
reservedBy = input.nextLine();
}

/**
* Update the room to not reserved and clear the reserved by.
*
* @since
* @author
*/
public void releaseThisRoom() {
this.reserved = false;
reservedBy = "";
System.out.println("Room has been released ");

}

public String toString() {
String output = " "
+ " Room Number: " + roomNumber
+ " Number of Seats: " + numberOfSeats
+ " Reserved By: " + reservedBy
+ " Reserved: " + reserved
+ " Smart Board: " + hasSmartBoard;
return output;
}
}
---End of "room.bo" package---
##################################################################################

--- Start of "room.main" package---

package room.main;


import room.bo.ComputerRoom;
import room.bo.BiologyLab;
import room.bo.BoardRoom;
import room.bo.Room;
import room.util.RoomUtil;
import java.util.ArrayList;
import java.util.Scanner;

/**
* This main method will invoke functionality for booking college rooms.
*
* Detailed description:
* https://docs.google.com/document/d/1jyrvSJHXS6BZuXKVswYkmt2muBmPI71OxXTLQxerDVU/edit
*
* @author
*/
public class RoomMain {

private static final int ROOM_DOES_NOT_EXIST = -1;
private static ArrayList rooms = new ArrayList();

/**
* Main method controls program and user interface.
*
* @param args the command line arguments
* @since
* @author
*/
public static void main(String[] args) {

RoomUtil.createTestRooms(rooms);

Scanner input = new Scanner(System.in);
String menu = "------------------------ - CIS Room Booking "
+ "------------------------ "
+ "Choose an option: "
+ "1) Add Room "
+ "2) Reserve Room "
+ "3) Release Room "
+ "4) Show Rooms "
+ "5) Show Room Count Details "
+ "6) Search For Room "
+ "7) Exit";
int selection = 0;


while (selection != 7) {
System.out.println(menu);
selection = input.nextInt();
input.nextLine();
switch (selection) {
case 1:
addRoom();
break;
case 2:
reserveRoom();
break;
case 3:
releaseRoom();
break;
case 4:
showRooms();
break;
case 5:
break;
case 6:
break;
case 7:
System.out.println("Goodbye");
break;
default:
System.out.println("Invalid option.");
}
}

}

/**
* Loop through the rooms to check if the room already exists.
*
* @param roomNumber
* @return the index of the room number
* @since
* @author
*/
public static int getRoomNumberIfExists(int roomNumber) {
int index = -1;
for (int i = 0; i < rooms.size(); i++) {
if (rooms.get(i).getRoomNumber() == roomNumber) {
index = i;
}
}
return index;
}

/**
* This method will allow the user to add a new room to the collection of rooms.
*
*/
public static void addRoom() {

//***********************************************************
//Ask which room number the user wants to add
//***********************************************************
Room room = null;
Scanner input = new Scanner(System.in);
System.out.print("Enter room number: ");
int roomNumber = input.nextInt();
input.nextLine();

//***********************************************************
//Check to see if the room already exists
//***********************************************************

int roomNumberIndex = getRoomNumberIfExists(roomNumber);

//If the room does not already exist.
if (roomNumberIndex == ROOM_DOES_NOT_EXIST) {
roomNumberIndex = rooms.size();
boolean finished = false;
do {
System.out.print("What type of room is this? " + "1) Add Room "
+ "2) Computer Lab "
+ "3) Board Room "
+ "4) Biology lab ");
String choice = input.nextLine();


//***********************************************************
//Based on the user input, create the correct type of room.
//***********************************************************

switch (choice) {
case "1":
room = new Room();
finished = true;
break;
case "2":
room = new ComputerRoom();
finished = true;
break;
case "3":
room = new BoardRoom();
finished = true;
break;
case "4":
room = new BiologyLab();
finished = true;
break;
default:
System.out.println("Invalid option");

}
} while (!finished);

//Set the details for the room
room.setRoomNumber(roomNumber);

//Note the correct method will be invoked based on which type of room was created above.
room.getRoomDetailsFromUser();

//Add the room to the collection of rooms. Note that as long as an object 'is a' Room
//(all of the types of rooms above are rooms), then it can be added to the collection of
//rooms.
rooms.add(room);

} else {
String choice = "";
System.out.println("Room already exists. Do you want to continue? (Y/N)");
choice = input.nextLine();

//If the user wants to continue, invoke the method to change the value of attributes in
//the room
if (choice.equalsIgnoreCase("y")) {
rooms.get(roomNumberIndex).getRoomDetailsFromUser();
}
}
}

/**
* This method will allow the user to reserve a room.
*/

public static void reserveRoom() {

Scanner input = new Scanner(System.in);
System.out.println("Enter the room number you would like to book");
int roomNumber = input.nextInt();
input.nextLine();

//Check to see if the room exists.
int roomNumberIndex = getRoomNumberIfExists(roomNumber);
if (roomNumberIndex < 0) {
System.out.println("This room does not exist");
} else {
//Put the room from the ArrayList into a local variable.
Room room = rooms.get(roomNumberIndex);
if (!room.isReserved()) {
room.reserveThisRoom();
} else {
System.out.println("This room is already booked!");
}
}
}

public static void releaseRoom() {

Scanner input = new Scanner(System.in);
System.out.println("Enter the room number you would like to release");
int roomNumber = input.nextInt();
input.nextLine();

//Check if the room exists.
int roomNumberIndex = getRoomNumberIfExists(roomNumber);

if (roomNumberIndex < 0) {
System.out.println("This room does not exist");
} else {
//Put the room from the ArrayList into a local variable.
Room room = rooms.get(roomNumberIndex);
//If the room is reserved, allow them to release.
if (room.isReserved()) {
room.releaseThisRoom();
} else {
System.out.println("This room is not booked!");
}
}
}

/**
* Show the details for each room
*/
public static void showRooms() {
System.out.println("");
System.out.println("------------------------");
System.out.println("- Room List");
System.out.println("------------------------");
if(rooms.size() == 0){
System.out.println("There are no rooms.");
}
for (int i = 0; i < rooms.size(); i++) {
System.out.println(rooms.get(i));
}
System.out.println("");
}
}
---End of "room.main" package---
##################################################################################
---Start of "room.util" package---

package room.util;

import room.bo.BoardRoom;
import room.bo.ComputerRoom;
import room.bo.Room;
import java.util.ArrayList;

/**
*
* @author
*/
public class RoomUtil {
public static void createTestRooms(ArrayList rooms){
rooms.add(new ComputerRoom(20,107, 24, false, true));
rooms.add(new ComputerRoom(18,110, 18, false, true));
rooms.add(new ComputerRoom(20,205, 24, false, true));
rooms.add(new BoardRoom(true,15, 10, false, false));
rooms.add(new Room(118, 28, false, false));
rooms.add(new Room(124, 40, false, false));
}
}
##################################################################################

package room.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import javax.swing.JOptionPane;

/**
* Utility class for generic program functions.
*
* @author
* @since
*/
public class Util {

public static final boolean DEBUGGING = false;
private static Scanner input = new Scanner(System.in);
private static boolean isGUI = false;

/**
* Get a scanner object.
*
* @return Scanner
* @since
* @author
*/
public static Scanner getInput() {
return input;
}

/**
* Get input from the user using the appropriate input method
*
* @return String entered by user.
* @since
* @author
*/
public static String getInputString(String output) {
if (isGUI) //use JoptionPane
{
return JOptionPane.showInputDialog(output);
} else {
display(output);
return input.nextLine();
}
}

/**
* Get input from the user using the appropriate input method
*
* @return int entered by user
* @since
* @author
*/
public static int getInputInt(String output) {
if (isGUI) //use JoptionPane
{
return Integer.parseInt(JOptionPane.showInputDialog(output));
} else {
display(output);
return Integer.parseInt(input.nextLine());
}
}

/**
* Get input from the user using the appropriate input method
*
* @return double entered by user
* @since
* @author
*/
public static double getInputDouble(String output) {
if (isGUI) //use JoptionPane
{
return Double.parseDouble(JOptionPane.showInputDialog(output));
} else {
display(output);
return Double.parseDouble(input.nextLine());
}
}
/**
* Get input from the user using the appropriate input method
*
* @param output
* @return boolean entered by user.
* @since
* @author
*/
public static boolean getInputBoolean(String output) {

boolean answer = false;

if (isGUI) { //use JoptionPane
if (JOptionPane.showInputDialog(output).equalsIgnoreCase("Y")) {
answer = true;
}
} else {
display(output);
if (input.nextLine().equalsIgnoreCase("Y")) {
answer = true;
}

}
return answer;
}

/**
* Display output to the user using the appropriate input method
*
* @return void
* @since
* @author
*/
public static void display(String output) {
if (isGUI) {
JOptionPane.showMessageDialog(null, output);
} else {
System.out.println(output);
}
}

/**
* Set the gui indicator. If gui then JOptionPane will be used.
*
* @author
* @param setter
*/
public static void setGUI(boolean setter) {
isGUI = setter;
}

/**
* Get today in the specified format
*
* @since
* @author
* @param format The format for the date
*/
public static String getNow(String format) {
if (format.isEmpty()) {
format = "yyyy/MM/dd HH:mm:ss"; //Default
}
DateFormat dateFormat = new SimpleDateFormat(format);
Date date = new Date();
return dateFormat.format(date);
}
}
---End of "room.util" package---
##################################################################################

Explanation / Answer

room.bo

------------------------

package room.bo;

import java.util.Scanner;

/**

* Biology lab is equipped to allow working with biology.

*

* @since

* @author

*/

public class BiologyLab extends Room {

private int numberOfMicroscopes;

private boolean hasFumeHood;

private boolean hasBunsonBurners;

/**

* default constructor

*

* @since

* @author

*/

public BiologyLab() {

}

/**

* Custom constructor that sets all attributes

*

* @param numberOfMicroscopes

* @param hasFumeHood

* @param hasBunsonBurners

* @param roomNumber

* @param numberOfSeats

* @param reserved

* @param hasSmartBoard

* @since

* @author

*/

public BiologyLab(int numberOfMicroscopes, boolean hasFumeHood, boolean hasBunsonBurners, int roomNumber,

int numberOfSeats, boolean reserved, boolean hasSmartBoard) {

super(roomNumber, numberOfSeats, reserved, hasSmartBoard);

this.numberOfMicroscopes = numberOfMicroscopes;

this.hasFumeHood = hasFumeHood;

this.hasBunsonBurners = hasBunsonBurners;

}

public int getNumberOfMicroscopes() {

return numberOfMicroscopes;

}

public void setNumberOfMicroscopes(int numberOfMicroscopes) {

this.numberOfMicroscopes = numberOfMicroscopes;

}

public boolean isHasFumeHood() {

return hasFumeHood;

}

public void setHasFumeHood(boolean hasFumeHood) {

this.hasFumeHood = hasFumeHood;

}

public boolean isHasBunsonBurners() {

return hasBunsonBurners;

}

public void setHasBunsonBurners(boolean hasBunsonBurners) {

this.hasBunsonBurners = hasBunsonBurners;

}

@Override

public String toString() {

return super.toString() + " Number of microscopes: " + numberOfMicroscopes + " Has fumehood: " + hasFumeHood

+ " Has Bunson burners: " + hasBunsonBurners;

}

/**

* Get the details from the user about this class. This will invoke the

* super method to get the base class attributes.

*

* @since

* @author

*/

@Override

public void getRoomDetailsFromUser() {

super.getRoomDetailsFromUser();

Scanner input = new Scanner(System.in);

System.out.print("How many microscopes does this room have? ");

numberOfMicroscopes = input.nextInt();

input.nextLine();

System.out.print("Does this lab have a fume hood (y/n)? ");

hasFumeHood = input.nextLine().equalsIgnoreCase("y");

System.out.print("Does this lab have bunson burners(y/n)? ");

hasBunsonBurners = input.nextLine().equalsIgnoreCase("y");

}

}

############################################################################################

package room.bo;

import java.util.Scanner;

/**

* BoardRoom is a type of room used for meetings

*

* @since

* @author

*/

public class BoardRoom extends Room {

private boolean hasTeleconferencing;

/**

* default constructor

*

* @since

* @author

*/

public BoardRoom() {

}

/**

* Custom constructor which sets all attributes of the class

*

* @param hasTeleconferencing

* @param roomNumber

* @param numberOfSeats

* @param reserved

* @param hasSmartBoard

* @author

* @since

*/

public BoardRoom(boolean hasTeleconferencing, int roomNumber, int numberOfSeats, boolean reserved,

boolean hasSmartBoard) {

super(roomNumber, numberOfSeats, reserved, hasSmartBoard);

this.hasTeleconferencing = hasTeleconferencing;

}

public boolean isHasTeleconferencing() {

return hasTeleconferencing;

}

public void setHasTeleconferencing(boolean hasTeleconferencing) {

this.hasTeleconferencing = hasTeleconferencing;

}

public String toString() {

return super.toString() + " Has teleconferencing: " + hasTeleconferencing;

}

/**

* Get the details from the user about this class. This will invoke the

* super method to get the base class attributes.

*

* @since

* @author

*/

public void getRoomDetailsFromUser() {

super.getRoomDetailsFromUser();

Scanner input = new Scanner(System.in);

System.out.print("Does this room have teleconferencing (y/n) ");

hasTeleconferencing = input.nextLine().equalsIgnoreCase("y");

;

}

}

############################################################################################

package room.bo;

import java.util.Scanner;

/**

* Computer room is a room which is equipped with computer stations.

*

* @since

* @author

*/

public class ComputerRoom extends Room {

int numberOfComputers;

/**

* Default constructor

*/

public ComputerRoom() {

}

/**

* Custom constructor that sets all of the class attributes.

*

* @param numberOfComputers

* @param roomNumber

* @param numberOfSeats

* @param reserved

* @param hasSmartBoard

* @since

* @author

*/

public ComputerRoom(int numberOfComputers, int roomNumber, int numberOfSeats, boolean reserved,

boolean hasSmartBoard) {

super(roomNumber, numberOfSeats, reserved, hasSmartBoard);

this.numberOfComputers = numberOfComputers;

}

/**

* Get the details from the user about this class. This will invoke the

* super method to get the base class attributes.

*

* @since

* @author

*/

public void getRoomDetailsFromUser() {

super.getRoomDetailsFromUser();

Scanner input = new Scanner(System.in);

System.out.print("Enter number of computers: ");

numberOfComputers = input.nextInt();

input.nextLine();

}

public int getNumberOfComputer() {

return numberOfComputers;

}

public void setNumberOfComputer(int numberOfComputer) {

this.numberOfComputers = numberOfComputer;

}

public String toString() {

return super.toString() + " Number of Computers" + numberOfComputers;

}

}

############################################################################################

package room.bo;

import java.util.Scanner;

/**

*

* This is the base type of room. Has the basics for a class room but not much

* specialized equipment.

*

* @since

* @author

*/

public class Room {

Scanner input = new Scanner(System.in);

private int roomNumber;

private int numberOfSeats;

private String reservedBy = "";

private boolean reserved;

private boolean hasSmartBoard;

/**

* Default constructor

*

* @since

* @author

*/

public Room() {

}

/**

* Custom constructor that accepts all of the attributes of the class.

*

* @param roomNumber

* @param numberOfSeats

* @param reserved

* @param hasSmartBoard

* @since

* @author

*/

public Room(int roomNumber, int numberOfSeats, boolean reserved, boolean hasSmartBoard) {

this.roomNumber = roomNumber;

this.numberOfSeats = numberOfSeats;

this.reserved = reserved;

this.hasSmartBoard = hasSmartBoard;

}

/**

* Get the attribute values from the user.

*

* @since

* @author

*/

public void getRoomDetailsFromUser() {

System.out.print("Enter number of seats: ");

numberOfSeats = input.nextInt();

input.nextLine();

System.out.print("Does this classroom have a smart board? (y/n)");

hasSmartBoard = input.nextLine().equalsIgnoreCase("y");

}

public boolean isHasSmartBoard() {

return hasSmartBoard;

}

public void setHasSmartBoard(boolean hasSmartBoard) {

this.hasSmartBoard = hasSmartBoard;

}

public int getNumberOfSeats() {

return numberOfSeats;

}

public void setNumberOfSeats(int numberOfSeats) {

this.numberOfSeats = numberOfSeats;

}

public String getReservedBy() {

return reservedBy;

}

public void setReservedBy(String reservedBy) {

this.reservedBy = reservedBy;

}

public boolean isReserved() {

return reserved;

}

public void setReserved(boolean reserved) {

this.reserved = reserved;

}

public void setRoomNumber(int roomNumber) {

this.roomNumber = roomNumber;

}

public int getRoomNumber() {

return roomNumber;

}

/**

* Update the room to reserved and get the reserved by.

*

* @since

* @author

*/

public void reserveThisRoom() {

this.reserved = true;

System.out.println("Enter the name of the person reserving this room: ");

reservedBy = input.nextLine();

}

/**

* Update the room to not reserved and clear the reserved by.

*

* @since

* @author

*/

public void releaseThisRoom() {

this.reserved = false;

reservedBy = "";

System.out.println("Room has been released ");

}

public String toString() {

String output = " " + " Room Number: " + roomNumber + " Number of Seats: " + numberOfSeats

+ " Reserved By: " + reservedBy + " Reserved: " + reserved + " Smart Board: " + hasSmartBoard;

return output;

}

}

############################################################################################

room.exception

-------------------------------

package room.exception;

public class RoomExistException extends Exception {

private static final long serialVersionUID = 1L;

public RoomExistException() {

// No Logic

}

public RoomExistException(String message) {

// No Logic

}

}

############################################################################################

package room.exception;

public class RoomReservationException extends Exception {

private static final long serialVersionUID = 1L;

public RoomReservationException() {

// No Logic

}

public RoomReservationException(String message) {

// No Logic

}

}

############################################################################################

room.main

---------------------------

package room.main;

import room.bo.ComputerRoom;

import room.bo.BiologyLab;

import room.bo.BoardRoom;

import room.bo.Room;

import room.exception.RoomExistException;

import room.exception.RoomReservationException;

import room.util.RoomUtil;

import java.util.ArrayList;

import java.util.Scanner;

/**

* This main method will invoke functionality for booking college rooms.

*

* Detailed description: https://docs.google.com/document/d/

* 1jyrvSJHXS6BZuXKVswYkmt2muBmPI71OxXTLQxerDVU/edit

*

* @author

*/

public class RoomMain {

private static final int ROOM_DOES_NOT_EXIST = -1;

private static ArrayList rooms = new ArrayList();

/**

* Main method controls program and user interface.

*

* @param args

* the command line arguments

* @since

* @author

*/

public static void main(String[] args) {

RoomUtil.createTestRooms(rooms);

Scanner input = new Scanner(System.in);

String menu = "------------------------ - CIS Room Booking " + "------------------------ "

+ "Choose an option: " + "1) Add Room " + "2) Reserve Room " + "3) Release Room "

+ "4) Show Rooms " + "5) Show Room Count Details " + "6) Search For Room " + "7) Exit";

int selection = 0;

while (selection != 7) {

System.out.println(menu);

selection = input.nextInt();

input.nextLine();

switch (selection) {

case 1:

addRoom();

break;

case 2:

try {

reserveRoom();

} catch (RoomExistException roomExistException) {

roomExistException.printStackTrace();

} catch (RoomReservationException roomReservationException) {

roomReservationException.printStackTrace();

}

break;

case 3:

releaseRoom();

break;

case 4:

showRooms();

break;

case 5:

break;

case 6:

break;

case 7:

System.out.println("Goodbye");

break;

default:

System.out.println("Invalid option.");

}

}

}

/**

* Loop through the rooms to check if the room already exists.

*

* @param roomNumber

* @return the index of the room number

* @since

* @author

*/

public static int getRoomNumberIfExists(int roomNumber) {

int index = -1;

for (int i = 0; i < rooms.size(); i++) {

if (((Room) rooms.get(i)).getRoomNumber() == roomNumber) {

index = i;

}

}

return index;

}

/**

* This method will allow the user to add a new room to the collection of

* rooms.

*

*/

public static void addRoom() {

// ***********************************************************

// Ask which room number the user wants to add

// ***********************************************************

Room room = null;

Scanner input = new Scanner(System.in);

System.out.print("Enter room number: ");

int roomNumber = input.nextInt();

input.nextLine();

// ***********************************************************

// Check to see if the room already exists

// ***********************************************************

int roomNumberIndex = getRoomNumberIfExists(roomNumber);

// If the room does not already exist.

if (roomNumberIndex == ROOM_DOES_NOT_EXIST) {

roomNumberIndex = rooms.size();

boolean finished = false;

do {

System.out.print("What type of room is this? " + "1) Add Room " + "2) Computer Lab "

+ "3) Board Room " + "4) Biology lab ");

String choice = input.nextLine();

// ***********************************************************

// Based on the user input, create the correct type of room.

// ***********************************************************

switch (choice) {

case "1":

room = new Room();

finished = true;

break;

case "2":

room = new ComputerRoom();

finished = true;

break;

case "3":

room = new BoardRoom();

finished = true;

break;

case "4":

room = new BiologyLab();

finished = true;

break;

default:

System.out.println("Invalid option");

}

} while (!finished);

// Set the details for the room

room.setRoomNumber(roomNumber);

// Note the correct method will be invoked based on which type of

// room was created above.

room.getRoomDetailsFromUser();

// Add the room to the collection of rooms. Note that as long as an

// object 'is a' Room

// (all of the types of rooms above are rooms), then it can be added

// to the collection of

// rooms.

rooms.add(room);

} else {

String choice = "";

System.out.println("Room already exists. Do you want to continue? (Y/N)");

choice = input.nextLine();

// If the user wants to continue, invoke the method to change the

// value of attributes in

// the room

if (choice.equalsIgnoreCase("y")) {

((ComputerRoom) rooms.get(roomNumberIndex)).getRoomDetailsFromUser();

}

}

}

/**

* This method will allow the user to reserve a room.

*

* @throws RoomExistException

* @throws RoomReservationException

*/

public static void reserveRoom() throws RoomExistException, RoomReservationException {

Scanner input = new Scanner(System.in);

System.out.println("Enter the room number you would like to book");

int roomNumber = input.nextInt();

input.nextLine();

// Check to see if the room exists.

int roomNumberIndex = getRoomNumberIfExists(roomNumber);

if (roomNumberIndex < 0) {

System.out.println("This room does not exist");

throw new RoomExistException("room does not exist");

} else {

// Put the room from the ArrayList into a local variable.

Room room = (Room) rooms.get(roomNumberIndex);

if (!room.isReserved()) {

room.reserveThisRoom();

} else {

System.out.println("This room is already booked!");

throw new RoomReservationException("room is already reserved");

}

}

}

public static void releaseRoom() {

Scanner input = new Scanner(System.in);

System.out.println("Enter the room number you would like to release");

int roomNumber = input.nextInt();

input.nextLine();

// Check if the room exists.

int roomNumberIndex = getRoomNumberIfExists(roomNumber);

if (roomNumberIndex < 0) {

System.out.println("This room does not exist");

} else {

// Put the room from the ArrayList into a local variable.

Room room = (Room) rooms.get(roomNumberIndex);

// If the room is reserved, allow them to release.

if (room.isReserved()) {

room.releaseThisRoom();

} else {

System.out.println("This room is not booked!");

}

}

}

/**

* Show the details for each room

*/

public static void showRooms() {

System.out.println("");

System.out.println("------------------------");

System.out.println("- Room List");

System.out.println("------------------------");

if (rooms.size() == 0) {

System.out.println("There are no rooms.");

}

for (int i = 0; i < rooms.size(); i++) {

System.out.println(rooms.get(i));

}

System.out.println("");

}

}

###########################################################################################

room.util

-------------------

package room.util;

import room.bo.BoardRoom;

import room.bo.ComputerRoom;

import room.bo.Room;

import java.util.ArrayList;

/**

*

* @author

*/

public class RoomUtil {

public static void createTestRooms(ArrayList rooms) {

rooms.add(new ComputerRoom(20, 107, 24, false, true));

rooms.add(new ComputerRoom(18, 110, 18, false, true));

rooms.add(new ComputerRoom(20, 205, 24, false, true));

rooms.add(new BoardRoom(true, 15, 10, false, false));

rooms.add(new Room(118, 28, false, false));

rooms.add(new Room(124, 40, false, false));

}

}

############################################################################################

package room.util;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Scanner;

import javax.swing.JOptionPane;

/**

* Utility class for generic program functions.

*

* @author

* @since

*/

public class Util {

public static final boolean DEBUGGING = false;

private static Scanner input = new Scanner(System.in);

private static boolean isGUI = false;

/**

* Get a scanner object.

*

* @return Scanner

* @since

* @author

*/

public static Scanner getInput() {

return input;

}

/**

* Get input from the user using the appropriate input method

*

* @return String entered by user.

* @since

* @author

*/

public static String getInputString(String output) {

if (isGUI) // use JoptionPane

{

return JOptionPane.showInputDialog(output);

} else {

display(output);

return input.nextLine();

}

}

/**

* Get input from the user using the appropriate input method

*

* @return int entered by user

* @since

* @author

*/

public static int getInputInt(String output) {

if (isGUI) // use JoptionPane

{

return Integer.parseInt(JOptionPane.showInputDialog(output));

} else {

display(output);

return Integer.parseInt(input.nextLine());

}

}

/**

* Get input from the user using the appropriate input method

*

* @return double entered by user

* @since

* @author

*/

public static double getInputDouble(String output) {

if (isGUI) // use JoptionPane

{

return Double.parseDouble(JOptionPane.showInputDialog(output));

} else {

display(output);

return Double.parseDouble(input.nextLine());

}

}

/**

* Get input from the user using the appropriate input method

*

* @param output

* @return boolean entered by user.

* @since

* @author

*/

public static boolean getInputBoolean(String output) {

boolean answer = false;

if (isGUI) { // use JoptionPane

if (JOptionPane.showInputDialog(output).equalsIgnoreCase("Y")) {

answer = true;

}

} else {

display(output);

if (input.nextLine().equalsIgnoreCase("Y")) {

answer = true;

}

}

return answer;

}

/**

* Display output to the user using the appropriate input method

*

* @return void

* @since

* @author

*/

public static void display(String output) {

if (isGUI) {

JOptionPane.showMessageDialog(null, output);

} else {

System.out.println(output);

}

}

/**

* Set the gui indicator. If gui then JOptionPane will be used.

*

* @author

* @param setter

*/

public static void setGUI(boolean setter) {

isGUI = setter;

}

/**

* Get today in the specified format

*

* @since

* @author

* @param format

* The format for the date

*/

public static String getNow(String format) {

if (format.isEmpty()) {

format = "yyyy/MM/dd HH:mm:ss"; // Default

}

DateFormat dateFormat = new SimpleDateFormat(format);

Date date = new Date();

return dateFormat.format(date);

}

}