Mini Library Create a system managing a mini library system. Every book correspo
ID: 3818235 • Letter: M
Question
Mini Library Create a system managing a mini library system. Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Checked out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22 No comma “,”in title or author name. This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. One author may have multiple books. Eg. Both book2 and book3 are written by author1 Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. A user is allowed to check out up to 3 books. The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. This system should provide a menu with following functionalities that the bookkeeper can choose from at the top level menu: 1. Enter “a” to add a book into library 1) Ask for title (read). 2) Ask for author. 3) Generate a book ID by adding one to the current largest book ID. 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1)) 2. Enter “d” to delete a book from library 1) Ask for book ID. 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) 3) Remove the book with the given book ID from the library and then go to 4). 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1)) 6 3. Enter “o” to check out a book 1) Ask for user name. 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1)) 4. Enter “r” to return a book 1) Ask for book ID. 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) 5) Output the current fine to this book. 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1)) 5. Enter “s” for book status query by name 1) Ask for book title. 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1)) 6. Enter “q” for book query by author sorted by book title. 1) Ask for author 2) List records of all books written by this author sorted by the book title. 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1)) 7 7. Enter “u” to list books checked out by a given user 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). 2) Ask for user name. 3) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1)) 8. Enter “x” to quit.
Explanation / Answer
Mini Library System code:
Project Name: Library System
Right click on source folder and create a class: Name it as Book
Import java.io.serializable;
Publick class Book Implements Serializable {
Private int isbn;
Private String title, author;
Private double Price;
Public Book()
{
Isbn = 0
Title = null;
Author = null;
Price = 0;
}
Public Book(Int isbn, String title, String author, double price) {
this.isbn = isbn;
this.title = title;
this.author = author;
this.price = price;
}
@Override
Public String toString(){
Return “ Title: “+ title + “ Author: “+ author =
“ ISBN: “+ isbn + “ Price: “ + Price + “ ”;
}
}
Create another Class with name as Library
Import java.io.Serializable;
Import java.util.ArrayList;
Import java.util.Iterator;
Import java.util.List;
Public class Library extends object implements Serializable {
Private List<Book> collection;
Public Library(){
collection = new ArrayList<Book>();
}
Public void addBook(Book book){
collection.add(book);
}
@Override
Public String toString() {
String total = “ ”;
/*
For(int i=0; i<<collection.size() i++) {
Book b = collection.get(i);
Total = total + b.toString();
}
*/
Iterator<Book> i= collection.iterator();
While(i.hasNext()){
Book b = i.next();
Total = total + b.toString();
}
Return total;
}
Create an another class with name : MainSystem
Import java.util.Scanner;
Public class MainSystem {
Static String filename = null;
Static Library lib = new Library();
Static Scanner in = new Scanner(System.in);
Static Boolean running = true;
Public static void main(String[] args) {
While (running) {
System.out.println(“ Enter 0 for load a library.”
+” Enter 1 for Save and Quit”
+” Enter 2 for list all books in library”
+” Enter 3 for add book to library”);
Int answer = in.nextint();
Switch(answer){
Case 0:
System.out.println(“Enter the filename to load”);
Filename = in.next();
loadScript(in.next());
Break;
Case 1:
saveAndQuit();
break;
Case 2:
System.out.println(lib.toString());
break;
Case 3;
addBook();
break;
}
}
System.exit(0);
}
Private static void addBook() {
int isbn;
String title, author;
double Price;
System.out.println(“ Enter Title: ”);
Title = in.next();
System.out.println(“ Enter Author: ”);
Title = in.next();
System.out.println(“ Enter ISBN: ”);
Title = in.next();
System.out.println(“ Enter Price: ”);
Title = in.nextDouble();
Book b = new Book(isbn, title, author, price);
Lib.addBook(b);
}
Private static void saveAndQuite(){
System.out.println(“Enter file name:”);
Filename = in.next() + “.ser”;
Running = false;
FileOutputStream fos = null;
ObjectOutputStream out = null;
try{
Fos = new FileOutputStream(filename);
Out = new ObjectoutputStream(fos);
Out.writeObject(lib);
Fos.close();
Out.close();
}
Private static void loadScript(String name) {
FileinputStreem fis = null;
ObjectInputStream in =null;
File File = new File(name +”.ser”);
If (file.exists()){
try {
Fis = new FileInputStream(file);
In= new ObjectInputStream(fis);
lib= (Library) in.readObject();
fis.close();
in.close();
} Catch (FileNotFoundException e);
e.printStackTrace();
}
} else {
System.out.println(“ The file does not exist!”);
}
run the program.