From e2bd453330c37213f63c21380c460e2f4d2a52dc Mon Sep 17 00:00:00 2001 From: heimoshuiyu Date: Tue, 24 May 2022 22:32:29 +0800 Subject: [PATCH] final project q4 --- finalproject/Question4/Borrower.java | 63 +++++++++++ finalproject/Question4/IUser.java | 13 +++ finalproject/Question4/Lender.java | 42 ++++++++ finalproject/Question4/Library.java | 100 ++++++++++++++++++ .../Question4/NotALenderException.java | 5 + finalproject/Question4/Test.java | 8 ++ .../Question4/UnknownUserException.java | 5 + finalproject/Question4/User.java | 69 ++++++++++++ 8 files changed, 305 insertions(+) create mode 100644 finalproject/Question4/Borrower.java create mode 100644 finalproject/Question4/IUser.java create mode 100644 finalproject/Question4/Lender.java create mode 100644 finalproject/Question4/Library.java create mode 100644 finalproject/Question4/NotALenderException.java create mode 100644 finalproject/Question4/Test.java create mode 100644 finalproject/Question4/UnknownUserException.java create mode 100644 finalproject/Question4/User.java diff --git a/finalproject/Question4/Borrower.java b/finalproject/Question4/Borrower.java new file mode 100644 index 0000000..64b700c --- /dev/null +++ b/finalproject/Question4/Borrower.java @@ -0,0 +1,63 @@ +/* + * Author: CHEN Yongyuan (Walter) 1930006025 from OOP(1007) + * Date: 2022-04-25 + * Description: This is the borrower class. + */ + +public class Borrower extends User { + /** + * Constructor. + * + * @param name Borrower's name + * @param int book number of books borrowed by user + */ + public Borrower(String name, int book) throws NotALenderException { + super(name, book); + + // check + if (book < 0) { + throw new NotALenderException("A new borrower cannot lend books."); + } + } + + /** + * increase the number of books borrowed by the user. + * + * @param number Incrased number of books + * @throws NotALenderException + */ + public void moreBook(int number) throws NotALenderException { + int newBook = getBook() + number; + if (number < 0 && newBook < 0) { + throw new NotALenderException("A borrower cannot lend " + (-newBook) + " book(s)."); + } + setBook(newBook); + } + + /** + * Test. + */ + public static void testBorrower() { + try { + Borrower b = new Borrower("Bob", -1); + } catch (NotALenderException e) { + System.out.println(e.getMessage().equals("A new borrower cannot lend books.")); + } + try { + Borrower b = new Borrower("Bob", 10); + System.out.println(b.getName() == "Bob"); + System.out.println(b.getBook() == 10); + b.setBook(5); + System.out.println(b.getBook() == 5); + b.moreBook(2); + System.out.println(b.getBook() == 7); + b.moreBook(-2); + System.out.println(b.getBook() == 5); + b.moreBook(-5); + System.out.println(b.getBook() == 0); + b.moreBook(-1); + } catch (NotALenderException e) { + System.out.println(e.getMessage().equals("A borrower cannot lend 1 book(s).")); + } + } +} diff --git a/finalproject/Question4/IUser.java b/finalproject/Question4/IUser.java new file mode 100644 index 0000000..f2f1b19 --- /dev/null +++ b/finalproject/Question4/IUser.java @@ -0,0 +1,13 @@ +/* + * Author: CHEN Yongyuan (Walter) 1930006025 from OOP(1007) + * Date: 2022-04-25 + * Description: This is the interface of IUser. + */ + +public interface IUser { + public String getName(); + + public int getBook(); + + public void moreBook(int number) throws NotALenderException; +} diff --git a/finalproject/Question4/Lender.java b/finalproject/Question4/Lender.java new file mode 100644 index 0000000..8d719bf --- /dev/null +++ b/finalproject/Question4/Lender.java @@ -0,0 +1,42 @@ +/* + * Author: CHEN Yongyuan (Walter) 1930006025 from OOP(1007) + * Date: 2022-04-25 + * Description: This is the Lender class. + */ + +public class Lender extends User { + /** + * Constructor. + * + * @param name The user's name. + * @param book number of bookds lent by the user. This will be store in negetive value. + */ + public Lender(String name, int book) { + // lender negetive book value + super(name, -book); + } + + /** + * Increases the number of bookds. + * + * @param book the number of books. + */ + public void moreBook(int book) { + setBook(getBook() - book); + } + + /** + * Test. + */ + public static void testLender() { + Lender l = new Lender("Anna", 5); + System.out.println(l.getName() == "Anna"); + System.out.println(l.getBook() == -5); + l.setBook(-6); + System.out.println(l.getBook() == -6); + l.moreBook(2); + System.out.println(l.getBook() == -8); + l.moreBook(-9); + System.out.println(l.getBook() == 1); + } +} diff --git a/finalproject/Question4/Library.java b/finalproject/Question4/Library.java new file mode 100644 index 0000000..a244bc8 --- /dev/null +++ b/finalproject/Question4/Library.java @@ -0,0 +1,100 @@ +import java.util.ArrayList; + +public class Library { + private String name; + private ArrayList users; + + /** + * Constructor. + * + * @param name + */ + public Library(String name) { + this.name = name; + + // init array list + users = new ArrayList(); + } + + /** + * Add the user to the array list. + * + * @param user The user to be added + */ + public void addUser(IUser user) { + users.add(user); + } + + /** + * The total number of bookds borrowed by all users. + * + * @return the number of books. + */ + public int totalBorrowedBooks() { + int total = 0; + for (IUser user : users) { + total += user.getBook(); + } + return total; + } + + /** + * Get the number of books borrowed by this user. + * + * @param name the name of the query user + * @return the number of books + * @throws UnknownUserException if user not found + */ + public int getBook(String name) throws UnknownUserException { + for (IUser user : users) { + if (user.getName().equals(name)) { + return user.getBook(); + } + } + // user not found + throw new UnknownUserException("User " + name + " unknown."); + } + + /** + * Change the number of books currently borrowed by that user. + * + * @param name the user's name + * @param number the number of books + * @throws UnknownUserException user not found + * @throws NotALenderException can not lend book + */ + public void moreBook(String name, int number) throws UnknownUserException, NotALenderException { + for (IUser user : users) { + if (user.getName().equals(name)) { + user.moreBook(number); + return; + } + } + // user not found + throw new UnknownUserException("User " + name + " unknown."); + } + + /** + * Test. + */ + public static void testLibrary() { + Library li = new Library("UIC Library"); + System.out.println(li.totalBorrowedBooks() == 0); + li.addUser(new Lender("L1", 10)); + try { + System.out.println(li.getBook("L1") == -10); + System.out.println(li.totalBorrowedBooks() == -10); + li.addUser(new Borrower("B1", 20)); + System.out.println(li.getBook("L1") == -10); + System.out.println(li.getBook("B1") == 20); + System.out.println(li.totalBorrowedBooks() == 10); + li.getBook("B2"); + } catch (UnknownUserException ex) { + System.out.println(ex.getMessage().equals("User B2 unknown.")); + } catch (NotALenderException ex) { + // This should never happen! + System.out.println(false); + } + // More test cases are needed + } +} diff --git a/finalproject/Question4/NotALenderException.java b/finalproject/Question4/NotALenderException.java new file mode 100644 index 0000000..377f323 --- /dev/null +++ b/finalproject/Question4/NotALenderException.java @@ -0,0 +1,5 @@ +public class NotALenderException extends Exception { + public NotALenderException(String message) { + super(message); + } +} diff --git a/finalproject/Question4/Test.java b/finalproject/Question4/Test.java new file mode 100644 index 0000000..d7fc547 --- /dev/null +++ b/finalproject/Question4/Test.java @@ -0,0 +1,8 @@ +public class Test { + public static void main(String[] args) { + User.testUser(); + Lender.testLender(); + Borrower.testBorrower(); + Library.testLibrary(); + } +} diff --git a/finalproject/Question4/UnknownUserException.java b/finalproject/Question4/UnknownUserException.java new file mode 100644 index 0000000..9f9f04a --- /dev/null +++ b/finalproject/Question4/UnknownUserException.java @@ -0,0 +1,5 @@ +public class UnknownUserException extends Exception { + public UnknownUserException(String message) { + super(message); + } +} diff --git a/finalproject/Question4/User.java b/finalproject/Question4/User.java new file mode 100644 index 0000000..6eec5a9 --- /dev/null +++ b/finalproject/Question4/User.java @@ -0,0 +1,69 @@ +/* + * Author: CHEN Yongyuan (Walter) 1930006025 from OOP(1007) + * Date: 2022-04-25 + * Description: This is the User class. + */ + +public abstract class User implements IUser { + /** + * The user's name. + */ + private String name; + + /** + * The number of books borrowed by the user. + */ + private int book; + + /** + * Constructor. + * + * @param name The user's name. + * @param book The number of books borrowed by the user. + */ + public User(String name, int book) { + this.name = name; + this.book = book; + } + + /** + * Getter of the user's name. + * + * @return The user's name. + */ + public String getName() { + return name; + } + + /** + * Getter of the number of books borrowed by the user. + * + * @return The number of books borrowed by the user. + */ + public int getBook() { + return book; + } + + /** + * Change the number of books borrowed by the user. + * + * @param book The number of books borrowed by the user. + */ + protected void setBook(int book) { + this.book = book; + } + + /** + * Increase the number of books borrowed by the user. + * + * @param book The number of books borrowed by the user. + */ + public abstract void moreBook(int number) throws NotALenderException; + + /** + * Test. + */ + public static void testUser() { + // abstract class not testing + } +}