Java Programming Use object-oriented programming principles to begin to model a
ID: 3788728 • Letter: J
Question
Java Programming
Use object-oriented programming principles to begin to model a library.
A Book has a title, author, and ISBN number.
A BookCopy refers to the actual copy of the book that the library has. A library can have multiple BookCopies of the same Book. A BookCopy contains a Book. It also has a LibraryCard that is currently borrowing the book (or null if it is not checked out).
A LibraryCard has an ID number, the name of the cardholder, and a collection of BookCopies that are checked out to that account.
A LibraryCard has methods for checking books in and out. Think carefully about what those methods should look like. What does LibraryCard need to do? What does BookCopy need to do?
Create the three classes outlined above. Be sure to include constructors and accessor/mutator methods (getters and setters) as appropriate. ( As appropriate means that you should think before creating -- should a book's title ever get changed? Should a library card's ID number ever get changed? What about the cardholder name?) Also include methods for checking books in and out.
In addition to creating the three classes above, create a main tester program that tests them. You should have at least ten Books with two BookCopies each and at least three LibraryCards.
Explanation / Answer
import java.util.*;
import java.lang.*;
import java.io.*;
/*
* Class used for testing
*/
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
//List of Books and their bookCopies
Book mBook1 = new Book("Foundation", "Isaac Asimov", "1234567891234");
BookCopy mBookCopy1a = new BookCopy(mBook1, null);
BookCopy mBookCopy1b = new BookCopy(mBook1, null);
Book mBook2 = new Book("I, Robot", "Isaac Asimov", "1234567891235");
BookCopy mBookCopy2a = new BookCopy(mBook2, null);
BookCopy mBookCopy2b = new BookCopy(mBook2, null);
Book mBook3 = new Book("The Caves Of Steel", "Isaac Asimov", "1234567891236");
BookCopy mBookCopy3a = new BookCopy(mBook3, null);
BookCopy mBookCopy3b = new BookCopy(mBook3, null);
Book mBook4 = new Book("Second Foundation", "Isaac Asimov", "1234567891237");
BookCopy mBookCopy4a = new BookCopy(mBook4, null);
BookCopy mBookCopy4b = new BookCopy(mBook4, null);
Book mBook5 = new Book("The Naked Sun", "Isaac Asimov", "1234567891238");
BookCopy mBookCopy5a = new BookCopy(mBook5, null);
BookCopy mBookCopy5b = new BookCopy(mBook5, null);
Book mBook6 = new Book("Pebble in The Sky", "Isaac Asimov", "1234567891239");
BookCopy mBookCopy6a = new BookCopy(mBook6, null);
BookCopy mBookCopy6b = new BookCopy(mBook6, null);
Book mBook7 = new Book("The Stars Like Dust", "Isaac Asimov", "1234567891230");
BookCopy mBookCopy7a = new BookCopy(mBook7, null);
BookCopy mBookCopy7b = new BookCopy(mBook7, null);
Book mBook8 = new Book("The End Of Eternity", "Isaac Asimov", "1234567891231");
BookCopy mBookCopy8a = new BookCopy(mBook8, null);
BookCopy mBookCopy8b = new BookCopy(mBook8, null);
Book mBook9 = new Book("The Complete Robot", "Isaac Asimov", "1234567891232");
BookCopy mBookCopy9a = new BookCopy(mBook9, null);
BookCopy mBookCopy9b = new BookCopy(mBook9, null);
Book mBook10 = new Book("Robot Visions", "Isaac Asimov", "1234567891233");
BookCopy mBookCopy10a = new BookCopy(mBook10, null);
BookCopy mBookCopy10b = new BookCopy(mBook10, null);
//Library Cards
LibraryCard libraryCard1 = new LibraryCard(1, "Slade Wilson", null);
LibraryCard libraryCard2 = new LibraryCard(2, "Bruce Wayne", null);
LibraryCard libraryCard3 = new LibraryCard(3, "Jessica Jones", null);
libraryCard1.addBookCopy(mBookCopy1a);
libraryCard1.addBookCopy(mBookCopy1b);
libraryCard1.addBookCopy(mBookCopy2a);
libraryCard2.addBookCopy(mBookCopy2b);
libraryCard3.addBookCopy(mBookCopy10a);
//This book has been borrowed by libraryCard1Holder
libraryCard1.removeBookCopy(mBookCopy2a);
//This book hasn't been borrowed by libraryCard3Holder
libraryCard3.removeBookCopy(mBookCopy10b);
}
}
// Class Book to represent a book object
class Book
{
//Data Members
private String mTitle;
private String mAuthor;
/*
* Since ISBN numbers are 13 digits long, its better to use a String
*/
private String mIsbn;
//Parameterized Constructor
public Book(String title, String author, String isbn)
{
mTitle = title;
mAuthor = author;
mIsbn = isbn;
}
//Note that we don't need setters as a book's title, author and isbn number
//once printed wouldn't change
//Getters
public String getTitle()
{
return mTitle;
}
public String getAuthor()
{
return mAuthor;
}
public String getIsbn()
{
return mIsbn;
}
}
//LibraryCard class represents a library card
class LibraryCard
{
//Data Members
private int mID;
private String mCardHolderName;
//List to maintain collection of book copies borrowed by this library card
private ArrayList<BookCopy> mBookCopyList = new ArrayList<>();
//Constructor
public LibraryCard(int id, String cardHolderName, BookCopy bookCopy)
{
mID = id;
mCardHolderName = cardHolderName;
mBookCopyList.add(bookCopy);
}
//Getters and Setters
//We dont need setter for id as it wont change once set
public int getId()
{
return mID;
}
public String getCardHolderName()
{
return mCardHolderName;
}
public void setCardHolderName(String cardHolderName)
{
mCardHolderName = cardHolderName;
}
//Methods to Add and remove bookcopies to LibraryCard
public void addBookCopy(BookCopy bookCopy)
{
mBookCopyList.add(bookCopy);
//Adding libraryCard to bookcopy
bookCopy.setLibraryCard(this);
//Printing on screen that the book has been checked out
System.out.println("CheckOut Information: ");
System.out.println("Borrower Name: "+this.mCardHolderName);
System.out.println("Book Title: "+bookCopy.getBook().getTitle());
System.out.println("Author Name: "+bookCopy.getBook().getAuthor());
System.out.println("ISBN No.: "+bookCopy.getBook().getIsbn());
}
//Method returns true if bookCopy was successfully removed from LibraryCard
public boolean removeBookCopy(BookCopy bookCopy)
{
if(mBookCopyList.contains(bookCopy))
{
mBookCopyList.remove(bookCopy);
//resetting librarycard to null as its checked in now
bookCopy.setLibraryCard(null);
System.out.println("Book Checkd In Successfully:");
System.out.println("Book Title: "+bookCopy.getBook().getTitle());
return true;
}
System.out.println("This book is not borrowed by "+this.mCardHolderName);
return false;
}
}
//Class that represents a bookcopy
class BookCopy
{
//Data Members
private Book mBook;
private LibraryCard mLibraryCard;
//Constructor
//If book is not checked out, pass null for library card
public BookCopy(Book book, LibraryCard libraryCard)
{
mBook = book;
mLibraryCard = libraryCard;
}
//Getters and setters
public Book getBook()
{
return mBook;
}
public LibraryCard getLibraryCard()
{
return mLibraryCard;
}
//We dont need setter for mBook as a book's book copy wont change
//But we need setter for mLibraryCard, as multiple persons would borrow
//a single book copy
public void setLibraryCard(LibraryCard libraryCard)
{
mLibraryCard = libraryCard;
}
}
Output:
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.