final project q3

This commit is contained in:
2022-05-24 22:23:20 +08:00
parent 6347507ede
commit 1c6ea20c0a
6 changed files with 199 additions and 0 deletions

View File

@@ -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)."));
}
}
}

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,5 @@
public class NotALenderException extends Exception {
public NotALenderException(String message) {
super(message);
}
}

View File

@@ -0,0 +1,7 @@
public class Test {
public static void main(String[] args) {
User.testUser();
Lender.testLender();
Borrower.testBorrower();
}
}

View File

@@ -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
}
}