Initial Commit
This commit is contained in:
8
Source Code/Assignment12Q2/.idea/.gitignore
generated
vendored
Normal file
8
Source Code/Assignment12Q2/.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Datasource local storage ignored files
|
||||
/../../../../../../:\ProgrammingProjects\JavaProjects\JavaYear1\Assignment12Q2\.idea/dataSources/
|
||||
/dataSources.local.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
7
Source Code/Assignment12Q2/.idea/codeStyles/Project.xml
generated
Normal file
7
Source Code/Assignment12Q2/.idea/codeStyles/Project.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<ScalaCodeStyleSettings>
|
||||
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
|
||||
</ScalaCodeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
5
Source Code/Assignment12Q2/.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
5
Source Code/Assignment12Q2/.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||
</state>
|
||||
</component>
|
6
Source Code/Assignment12Q2/.idea/discord.xml
generated
Normal file
6
Source Code/Assignment12Q2/.idea/discord.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DiscordProjectSettings">
|
||||
<option name="show" value="PROJECT" />
|
||||
</component>
|
||||
</project>
|
6
Source Code/Assignment12Q2/.idea/misc.xml
generated
Normal file
6
Source Code/Assignment12Q2/.idea/misc.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
8
Source Code/Assignment12Q2/.idea/modules.xml
generated
Normal file
8
Source Code/Assignment12Q2/.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/Assignment12Q2.iml" filepath="$PROJECT_DIR$/Assignment12Q2.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
11
Source Code/Assignment12Q2/Assignment12Q2.iml
Normal file
11
Source Code/Assignment12Q2/Assignment12Q2.iml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
47
Source Code/Assignment12Q2/src/LendingItem.java
Normal file
47
Source Code/Assignment12Q2/src/LendingItem.java
Normal file
@ -0,0 +1,47 @@
|
||||
/**
|
||||
* This class holds info for the lent item
|
||||
* @author Isaac Shoebottom (3429069)
|
||||
*/
|
||||
|
||||
public class LendingItem {
|
||||
private final String description;
|
||||
private final double price;
|
||||
private final boolean recommended;
|
||||
|
||||
/**
|
||||
* Constructor for items
|
||||
* @param description Description of item
|
||||
* @param price The price of the item
|
||||
* @param recommended If the item is recommended or not
|
||||
*/
|
||||
public LendingItem(String description, double price, boolean recommended) {
|
||||
this.description = description;
|
||||
this.price = price;
|
||||
this.recommended = recommended;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the description of item
|
||||
* @return The item description
|
||||
*/
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the price of the item
|
||||
* @return The price of the item
|
||||
*/
|
||||
public double getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets if the item is recommended by the book club
|
||||
* @return Boolean of if the item is recommended by the book club
|
||||
*/
|
||||
public boolean isBookClubRecommended() {
|
||||
return recommended;
|
||||
}
|
||||
}
|
||||
|
278
Source Code/Assignment12Q2/src/LendingLibraryTestDriver.java
Normal file
278
Source Code/Assignment12Q2/src/LendingLibraryTestDriver.java
Normal file
@ -0,0 +1,278 @@
|
||||
import java.text.NumberFormat;
|
||||
|
||||
/**
|
||||
* Test driver class to test the ResidentMember, ShortTermResidentMember
|
||||
* and LendingItem classes.
|
||||
*/
|
||||
public class LendingLibraryTestDriver {
|
||||
public static void main(String[] args) {
|
||||
NumberFormat formatter = NumberFormat.getCurrencyInstance();
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n*** Test case #1: Create a Tenant object & test accessors");
|
||||
ResidentMember maria = new ResidentMember("Maria Melani", 152, "555-1234");
|
||||
System.out.println("Name: " + maria.getName()
|
||||
+ "\nAppt #: " + maria.getRoomNumber()
|
||||
+ "\nPhone: " + maria.getPhoneNumber()
|
||||
+ "\nMember #: " + maria.getMembershipNumber());
|
||||
|
||||
LendingItem[] mariasItemList = maria.getSignedOutItems();
|
||||
if (mariasItemList.length == 0) {
|
||||
System.out.println("Correct result: Maria has zero lending items.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria has more than zero lending items.");
|
||||
}
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println
|
||||
("\n*** Test case #2: Create a ShortTermResidentMember object & test accessors");
|
||||
ShortTermResidentMember tommy = new ShortTermResidentMember("Tommy Black",
|
||||
302,
|
||||
"555-4321",
|
||||
"Dec. 15, 2020");
|
||||
System.out.println("Name: " + tommy.getName()
|
||||
+ "\nAppt #: " + tommy.getRoomNumber()
|
||||
+ "\nPhone: " + tommy.getPhoneNumber()
|
||||
+ "\nMember #: " + tommy.getMembershipNumber()
|
||||
+ "\nDeparts: " + tommy.getDepartureDate());
|
||||
|
||||
LendingItem[] tommysItemList = tommy.getSignedOutItems();
|
||||
if (tommysItemList.length == 0) {
|
||||
System.out.println("Correct result: Tommy has zero lending items.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Tommy has more than zero lending items.");
|
||||
}
|
||||
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n*** Test case #3: Automatically generate a member number");
|
||||
ResidentMember testMember = new ResidentMember("Test", 1, "455-1111");
|
||||
if (testMember.getMembershipNumber() == 10002) {
|
||||
System.out.println("Correct result: 10002 is the correct member number.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Invalid member number: " +
|
||||
testMember.getMembershipNumber());
|
||||
}
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println
|
||||
("\n*** Test case #4: Create a LendingItem object & test accessors");
|
||||
|
||||
// Create several LendingItem objects and test the first one
|
||||
final int MAXITEMS = 8;
|
||||
LendingItem[] testItemList = new LendingItem[MAXITEMS + 1];
|
||||
String[] testItemDescription = {"Lean In - Sheryl Sandberg - BOOK",
|
||||
"Maclean's - 23/11/2020 - MAGAZINE",
|
||||
"Headstrong: 52 Women Who Changed Science and the World - Rachel Swaby - BOOK",
|
||||
"The Time Machine - H.G. Wells - BOOK",
|
||||
"The Confidence Code - Katty Kay & Claire Shipman - BOOK",
|
||||
"The Immortal Life of Henrietta Lacks - Rebecca Skloot - BOOK",
|
||||
"Grit - Angela Duckworth - BOOK",
|
||||
"Yoga Journal - October 2020 - MAGAZINE",
|
||||
"Wild - Cheryl Strayed - BOOK"};
|
||||
for (int i = 0; i <= MAXITEMS; i++) {
|
||||
testItemList[i] = new LendingItem(testItemDescription[i],
|
||||
10.00 + (i * 0.25), // Made-up prices
|
||||
(i % 2) == 0); // Every 2nd item is recommended
|
||||
} // end for loop
|
||||
|
||||
System.out.println("Description: " + testItemList[0].getDescription()
|
||||
+ "\nOrig. Price: " + formatter.format(testItemList[0].getPrice())
|
||||
+ "\nBook Club Recommended: " + testItemList[0].isBookClubRecommended());
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n*** Test case #5: Change phone number for both Resident types");
|
||||
String testPhone1 = "555-5566";
|
||||
String testPhone2 = "555-1212";
|
||||
maria.setPhoneNumber(testPhone1);
|
||||
tommy.setPhoneNumber(testPhone2);
|
||||
|
||||
if (maria.getPhoneNumber().equals(testPhone1)) {
|
||||
System.out.println("Correct result: Maria's phone number successfully changed.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria's phone number is incorrect: "
|
||||
+ maria.getPhoneNumber());
|
||||
}
|
||||
|
||||
if (tommy.getPhoneNumber().equals(testPhone2)) {
|
||||
System.out.println("Correct result: Tommy's phone number successfully changed.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Tommy's phone number is incorrect: "
|
||||
+ tommy.getPhoneNumber());
|
||||
}
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n*** Test case #6: Sign out one LendingItem");
|
||||
|
||||
if (maria.signOut(testItemList[0])) {
|
||||
System.out.println("Correct result: Maria signed out an item successfully.");
|
||||
mariasItemList = maria.getSignedOutItems();
|
||||
if (mariasItemList.length == 1) {
|
||||
System.out.println("Correct result: Maria has one lending item.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria has other than one lending item.");
|
||||
}
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria was unable to sign out an item.");
|
||||
}
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n*** Test case #7: Sign out multiple LendingItems");
|
||||
|
||||
boolean successfulSignOut = true;
|
||||
for (int i = 1; i <= 2; i++) {
|
||||
successfulSignOut = successfulSignOut && maria.signOut(testItemList[i]);
|
||||
}
|
||||
if (successfulSignOut) {
|
||||
System.out.println("Correct result: Maria signed out two more items successfully.");
|
||||
mariasItemList = maria.getSignedOutItems();
|
||||
if (mariasItemList.length == 3) {
|
||||
System.out.println("Correct result: Maria has three lending items.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria has other than three lending items.");
|
||||
}
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria was unable to sign out two more items.");
|
||||
}
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n*** Test case #8: Intentionally exceed the sign out limit");
|
||||
|
||||
for (int i = 3; i < MAXITEMS; i++) {
|
||||
maria.signOut(testItemList[i]);
|
||||
}
|
||||
if (!maria.signOut(testItemList[MAXITEMS])) {
|
||||
System.out.println("Correct result: Maria was prevented from signing out more than "
|
||||
+ MAXITEMS + " lending items.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria was able to sign out more than "
|
||||
+ MAXITEMS + " lending items.");
|
||||
}
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println
|
||||
("\n*** Test case #9: A short-term resident tries to sign out a recommended item");
|
||||
|
||||
LendingItem tommysItem = null;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (tommy.signOut(testItemList[i])) {
|
||||
tommysItem = testItemList[i]; // Remember this for Test case #10
|
||||
if (testItemList[i].isBookClubRecommended()) {
|
||||
System.out.println
|
||||
(">> ERROR: Tommy was able to sign out a book club recommended item.");
|
||||
} else {
|
||||
System.out.println
|
||||
("Correct result: Tommy was able to sign out a non recommended item.");
|
||||
}
|
||||
} else {
|
||||
if (testItemList[i].isBookClubRecommended()) {
|
||||
System.out.println
|
||||
("Correct result: Tommy was prevented from signing out a recommended item.");
|
||||
} else {
|
||||
System.out.println
|
||||
(">> ERROR: Tommy was prevented from signing out a non recommended item.");
|
||||
}
|
||||
}
|
||||
}//end for
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println
|
||||
("\n*** Test case #10: Returning the only item that was signed out");
|
||||
|
||||
int tommyListLength = tommy.getSignedOutItems().length;
|
||||
|
||||
if (tommy.returnItem(tommysItem)) {
|
||||
System.out.println("Correct result: Tommy's item was successfully returned.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Tommy's item was not successfully returned.");
|
||||
}
|
||||
|
||||
if (tommy.getSignedOutItems().length == tommyListLength - 1) {
|
||||
System.out.println("Correct result: Tommy's list length changed appropriately.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Tommy's list length did not change appropriately.");
|
||||
}
|
||||
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n*** Test case #11: Returning an item that was not signed out");
|
||||
|
||||
if (tommy.returnItem(testItemList[3])) {
|
||||
System.out.println(">> ERROR: Returned an item that was not signed out.");
|
||||
} else {
|
||||
System.out.println
|
||||
("Correct result: Unsuccessful attempt to return an item that was not signed out.");
|
||||
}
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println
|
||||
("\n*** Test case #12: Returning the first item that was signed out");
|
||||
|
||||
int mariaListLength = maria.getSignedOutItems().length;
|
||||
|
||||
if (maria.returnItem(testItemList[0])) {
|
||||
System.out.println("Correct result: Maria's first item was successfully returned.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria's first item was not successfully returned.");
|
||||
}
|
||||
|
||||
if (maria.getSignedOutItems().length == mariaListLength - 1) {
|
||||
System.out.println("Correct result: Maria's list length changed appropriately.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria's list length did not change appropriately.");
|
||||
}
|
||||
|
||||
System.out.println
|
||||
("\nConfirm return: Lean In should be absent from the following list:");
|
||||
mariasItemList = maria.getSignedOutItems();
|
||||
for (int i = 0; i < mariasItemList.length; i++) {
|
||||
System.out.println(mariasItemList[i].getDescription());
|
||||
}
|
||||
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n*** Test case #13: Returning a mid-list item");
|
||||
|
||||
mariaListLength = maria.getSignedOutItems().length;
|
||||
|
||||
if (maria.returnItem(testItemList[3])) {
|
||||
System.out.println("Correct result: The Time Machine was successfully returned.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: The Time Machine was not successfully returned.");
|
||||
}
|
||||
|
||||
if (maria.getSignedOutItems().length == mariaListLength - 1) {
|
||||
System.out.println("Correct result: Maria's list length changed appropriately.");
|
||||
} else {
|
||||
System.out.println(">> ERROR: Maria's list length did not change appropriately.");
|
||||
}
|
||||
|
||||
System.out.println
|
||||
("\nConfirm return: The Time Machine should be absent from the following list:");
|
||||
mariasItemList = maria.getSignedOutItems();
|
||||
for (int i = 0; i < mariasItemList.length; i++) {
|
||||
System.out.println(mariasItemList[i].getDescription());
|
||||
}
|
||||
|
||||
//*********************************************************************************
|
||||
|
||||
System.out.println("\n************* End of Test Cases ***************\n");
|
||||
|
||||
} // end main method
|
||||
|
||||
|
||||
} // end LendingTestDriver class
|
113
Source Code/Assignment12Q2/src/ResidentMember.java
Normal file
113
Source Code/Assignment12Q2/src/ResidentMember.java
Normal file
@ -0,0 +1,113 @@
|
||||
/**
|
||||
* This class holds info for members
|
||||
* @author Isaac Shoebottom (3429069)
|
||||
*/
|
||||
|
||||
|
||||
public class ResidentMember {
|
||||
private static int membership = 9999;
|
||||
private final String name;
|
||||
private final int room;
|
||||
private final LendingItem[] list;
|
||||
private String phone;
|
||||
private int bookCounter;
|
||||
|
||||
/**
|
||||
* Constructor for members
|
||||
* @param name Name of member
|
||||
* @param room Room of member
|
||||
* @param phone Phone of member
|
||||
*/
|
||||
public ResidentMember(String name, int room, String phone) {
|
||||
this.name = name;
|
||||
this.room = room;
|
||||
this.phone = phone;
|
||||
list = new LendingItem[8];
|
||||
bookCounter = 0;
|
||||
membership++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the signed out items of a member
|
||||
* @return The updated list item list
|
||||
*/
|
||||
public LendingItem[] getSignedOutItems() {
|
||||
LendingItem[] updatedItemList = new LendingItem[bookCounter];
|
||||
for (int i = 0; i < bookCounter; i++) {
|
||||
updatedItemList[i] = list[i];
|
||||
}
|
||||
return updatedItemList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to sign out items for members
|
||||
* @param input The item to be lent
|
||||
* @return Boolean for if the item was signed out or not
|
||||
*/
|
||||
public boolean signOut(LendingItem input) {
|
||||
if (bookCounter < 8) {
|
||||
list[bookCounter] = input;
|
||||
bookCounter++;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns and item for members
|
||||
* @param input The item to be returned
|
||||
* @return Boolean if the item was returned
|
||||
*/
|
||||
public boolean returnItem(LendingItem input) {
|
||||
boolean success = false;
|
||||
for (int i = 0; i < bookCounter; i++) {
|
||||
if (list[i] == input) {
|
||||
list[i] = list[bookCounter - 1];
|
||||
bookCounter--;
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of member
|
||||
* @return The name of member
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the room of member
|
||||
* @return The room of member
|
||||
*/
|
||||
public int getRoomNumber() {
|
||||
return room;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the phone number of member
|
||||
* @return The phone number of member
|
||||
*/
|
||||
public String getPhoneNumber() {
|
||||
return phone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the phone of member
|
||||
* @param phone
|
||||
*/
|
||||
public void setPhoneNumber(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the membership number of member
|
||||
* @return The membership number of member
|
||||
*/
|
||||
public int getMembershipNumber() {
|
||||
return membership;
|
||||
}
|
||||
|
||||
}
|
43
Source Code/Assignment12Q2/src/ShortTermResidentMember.java
Normal file
43
Source Code/Assignment12Q2/src/ShortTermResidentMember.java
Normal file
@ -0,0 +1,43 @@
|
||||
/**
|
||||
* This class holds info for short term members
|
||||
* @author Isaac Shoebottom (3429069)
|
||||
*/
|
||||
|
||||
|
||||
public class ShortTermResidentMember extends ResidentMember {
|
||||
private final String departureDate;
|
||||
|
||||
/**
|
||||
* Constructor for short term members
|
||||
* @param name Name of short term member
|
||||
* @param room Room of short term member
|
||||
* @param phone Phone of short term member
|
||||
* @param departureDate The departure date of short term members
|
||||
*/
|
||||
public ShortTermResidentMember(String name, int room, String phone, String departureDate) {
|
||||
super(name, room, phone);
|
||||
this.departureDate = departureDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to sign out items for short term members
|
||||
* @param input The item to be signed out
|
||||
* @return Boolean for if the item was signed out or not
|
||||
*/
|
||||
public boolean signOut(LendingItem input) {
|
||||
if (input.isBookClubRecommended()) {
|
||||
super.signOut(input);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the departure date for short term members
|
||||
* @return The departure date
|
||||
*/
|
||||
public String getDepartureDate() {
|
||||
return departureDate;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user