Question: Java: Create a book Library in Java. I have a Java code that emulates a library. It does simple functions such as checkout, check in,
Java: Create a book Library in Java.
I have a Java code that emulates a library. It does simple functions such as checkout, check in, set due dates, return list if books, etc.
Revise the code to take into account the fact that libraries typically contain other materials in addition to books.
Create aLibraryMaterialclass. EachLibraryMaterialconsists of a title and an ISBN.* LibraryMaterialCopy has alibrarycard and due date, but they DO NOT contain aLibraryMaterial. Instead, we're going to declare LibraryMaterialCopy an abstract class. More on this later.
What sort ofLibraryMaterialsdoes thelibraryhave?
* Books. These have the same basics as aLibraryMaterial, plus an author.
* DVDs are NOT Books (for starters, they don't have authors). TheyareLibraryMaterials, and they have a "main actor" (on the BPL website, there is a list of "additional contributors," but I'm simplifying here).
For each type ofLibraryMaterial, there is also a copy class -- Book and BookCopy, DVD and DVDCopy.
LibraryMaterialCopy is an abstract class. The reason behind this is because there's no such thing as a LibraryMaterialCopy; it must be either a Book or a DVD. SoLibraryMaterialis in charge of all basic functionality for checking in and out, but is not associated with a specificLibraryMaterialat the superclass level.
The abstract LibraryMaterialCopy class should have an abstract method, getLibraryMaterial() which will return either a Book or a DVD, depending on the subclass. You may also have abstract getTitle() and getISBN().
In addition to all of the standard methods needed for accessing data and checking out / checking in / renewing / etc., each class should have a print method.
LibraryMaterials(and all superclasses) should print all of the basic information: ISBN, title and (if any): author, main actor.
LibraryMaterialCopy should printLibraryCard checked out to and dueDate. BookCopy and DVDCopy should print all of the details of the Book/DVD plus the LibraryCard and dueDate. Print to standard output. Theonlytime that you should do that in a class is within a print() method.
To make matters more complicated, thelibraryhas set the following rules for checking out materials:
1. Overdue fines for books are $.10 per day, $1.00 per day for DVDs. Hint: you probably want an abstract getFinePerDay() method.
2. Books are checked out for three weeks. DVDs are checked out for only two weeks. Hint: you probably want an abstract getBorrowingPeriod() method.
3. Books are renewable for two weeks. DVDs maynotbe renewed.
The LibraryCard class should not have any additional functionalities, but will need to be changed to accommodate the changes to thelibrarymaterials. Please think carefully about the inheritance hierarchyand polymorphism.
* Note that DVDs do not typically have ISBN and have ISAN instead, and that really thelibraryshould just give unique ID numbers to eachlibrarymaterial. But for simplicity, we're just going to call everything ISBN
My Code ************************************************ class Book { private String isbn; private String title; private String author; public Book (String i, String t, String a) { isbn = i; title = t; author = a; } public String getIsbn () {return isbn;} public String getTitle() {return title;} public String getAuthor() {return author;} }
************************************************* import java.time.LocalDate; public class BookCopy { public static final int BORROWING_WEEKS = 3; public static final int RENEWAL_WEEKS = 2; public static final double FINE_PER_DAY = .10; private Book book; private LibraryCard card; private LocalDate dueDate; public BookCopy(Book b) { book = b; card = null; dueDate = null; } public Book getBook() {return book;} public String getTitle() {return book.getTitle();} public LibraryCard getCard() {return card;} public LocalDate getDueDate() {return dueDate;} public boolean checkOut(LibraryCard borrower, LocalDate dateOfBorrowing) /*checks book out by setting card reference to borrower. returns false if book is already checked out sets due date to BORROWING_WEEKS after current date passed */ { if (card != null) return false; card = borrower; dueDate = dateOfBorrowing.plusWeeks(BORROWING_WEEKS); return true; } public boolean checkOut (LibraryCard borrower) //default check out method that uses todays' date { return checkOut(borrower, LocalDate.now()); } public boolean returnBook() //returns book by removing card reference //returns false if there is no reference to a card { if (card == null) return false; card = null; return true; } public boolean renew (LocalDate renewalDate) //renews book using RENEWAL_WEEKS as interval //returns false if books is not checked out { if (card == null) return false; dueDate = renewalDate.plusWeeks(RENEWAL_WEEKS); return true; } public boolean renew () //default method uses todays date as renewal date { return renew(LocalDate.now()); } }
************************************************ import java.util.ArrayList; import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class LibraryCard { private String id; private String cardholderName; private ArrayList
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
