Book Package Classes
Book Class
package library;
public class Book {
private String title;
private String writer;
private int cost;
private String category;
private boolean borrowed;
public Book(String title, String writer, int cost, String category) {
this.title = title;
this.writer = writer;
this.cost = cost;
this.category = category;
}
@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", writer='" + writer + '\'' +
", cost=" + cost +
", category='" + category + '\'' +
"," + (borrowed ? "borrowed" : "available") +
'}';
}
// Getters and setters
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getWriter() { return writer; }
public void setWriter(String writer) { this.writer = writer; }
public int getCost() { return cost; }
public void setCost(int cost) { this.cost = cost; }
public String getCategory() { return category; }
public void setCategory(String category) { this.category = category; }
public boolean isBorrowed() { return borrowed; }
public void setBorrowed(boolean borrowed) { this.borrowed = borrowed; }
}
BookCollection Class
package library;
public class BookCollection {
private Book[] inventory;
private int count;
public BookCollection() {
inventory = new Book[10];
inventory[0] = new Book("The Three Kingdoms", "Luo Guanzhong", 12, "Fiction");
inventory[1] = new Book("Dream of the Red Chamber", "Cao Xueqin", 13, "Fiction");
inventory[2] = new Book("Journey to the West", "Wu Cheng'en", 22, "Fiction");
count = 3;
}
public int getCount() { return count; }
public void setCount(int count) { this.count = count; }
public Book[] getInventory() { return inventory; }
public void setInventory(Book[] inventory) { this.inventory = inventory; }
public Book getBook(int position) { return inventory[position]; }
public void setBook(int position, Book book) { inventory[position] = book; }
}
Operations Package Classes
Action Interface
package operations;
import library.BookCollection;
public interface Action {
void execute(BookCollection collection);
}
AddBook Operation
package operations;
import library.Book;
import library.BookCollection;
import java.util.Scanner;
public class AddBook implements Action {
@Override
public void execute(BookCollection collection) {
Scanner input = new Scanner(System.in);
System.out.print("Enter book title: ");
String title = input.nextLine();
System.out.print("Enter author: ");
String author = input.nextLine();
System.out.print("Enter category: ");
String category = input.nextLine();
System.out.print("Enter price: ");
int price = input.nextInt();
Book newBook = new Book(title, author, price, category);
int currentCount = collection.getCount();
// Check for duplicate
for (int i = 0; i < currentCount; i++) {
if (collection.getBook(i).getTitle().equals(title)) {
System.out.println("Duplicate book found!");
return;
}
}
// Check capacity
if (currentCount == collection.getInventory().length) {
System.out.println("Collection full!");
} else {
collection.setBook(currentCount, newBook);
collection.setCount(currentCount + 1);
System.out.println("Book added!");
}
}
}
BorrowBook Operation
package operations;
import library.Book;
import library.BookCollection;
import java.util.Scanner;
public class BorrowBook implements Action {
@Override
public void execute(BookCollection collection) {
Scanner input = new Scanner(System.in);
System.out.print("Enter book title: ");
String title = input.nextLine();
for (int i = 0; i < collection.getCount(); i++) {
Book current = collection.getBook(i);
if (current.getTitle().equals(title)) {
current.setBorrowed(true);
System.out.println("Book borrowed: " + current);
return;
}
}
System.out.println("Book not found!");
}
}
RemoveBook Operation
package operations;
import library.Book;
import library.BookCollection;
import java.util.Scanner;
public class RemoveBook implements Action {
@Override
public void execute(BookCollection collection) {
Scanner input = new Scanner(System.in);
System.out.print("Enter book title: ");
String title = input.nextLine();
int position = -1;
for (int i = 0; i < collection.getCount(); i++) {
if (collection.getBook(i).getTitle().equals(title)) {
position = i;
break;
}
}
if (position == -1) {
System.out.println("Book not found!");
return;
}
int lastIndex = collection.getCount() - 1;
for (int j = position; j < lastIndex; j++) {
collection.setBook(j, collection.getBook(j + 1));
}
collection.setBook(lastIndex, null);
collection.setCount(lastIndex);
System.out.println("Book removed!");
}
}
ExitSystem Operation
package operations;
import library.BookCollection;
public class ExitSystem implements Action {
@Override
public void execute(BookCollection collection) {
System.out.println("Exiting system...");
System.exit(0);
}
}
FindBook Operation
package operations;
import library.Book;
import library.BookCollection;
import java.util.Scanner;
public class FindBook implements Action {
@Override
public void execute(BookCollection collection) {
Scanner input = new Scanner(System.in);
System.out.print("Enter book title: ");
String title = input.nextLine();
for (int i = 0; i < collection.getCount(); i++) {
Book current = collection.getBook(i);
if (current.getTitle().equals(title)) {
System.out.println("Book found: " + current);
return;
}
}
System.out.println("Book not found!");
}
}
ReturnBook Operation
package operations;
import library.Book;
import library.BookCollection;
import java.util.Scanner;
public class ReturnBook implements Action {
@Override
public void execute(BookCollection collection) {
Scanner input = new Scanner(System.in);
System.out.print("Enter book title: ");
String title = input.nextLine();
for (int i = 0; i < collection.getCount(); i++) {
Book current = collection.getBook(i);
if (current.getTitle().equals(title)) {
current.setBorrowed(false);
System.out.println("Book returned: " + current);
return;
}
}
System.out.println("Book not found!");
}
}
DisplayBooks Operation
package operations;
import library.Book;
import library.BookCollection;
public class DisplayBooks implements Action {
@Override
public void execute(BookCollection collection) {
System.out.println("Book Collection:");
for (int i = 0; i < collection.getCount(); i++) {
System.out.println(collection.getBook(i));
}
}
}
User Package Classes
Administrator Class
package users;
import operations.*;
public class Administrator extends SystemUser {
public Administrator(String name) {
super(name);
this.actions = new Action[]{
new ExitSystem(),
new AddBook(),
new RemoveBook(),
new FindBook(),
new DisplayBooks()
};
}
@Override
public int showMenu() {
System.out.println("\nAdministrator Menu");
System.out.println("0. Exit");
System.out.println("1. Add Book");
System.out.println("2. Remove Book");
System.out.println("3. Find Book");
System.out.println("4. Display Books");
return getChoice();
}
}
Main Class
package users;
import library.BookCollection;
import java.util.Scanner;
public class Main {
public static SystemUser authenticate() {
Scanner input = new Scanner(System.in);
System.out.print("Enter username: ");
String username = input.nextLine();
System.out.print("Select role (1: Admin, 2: User): ");
int role = input.nextInt();
return role == 1 ? new Administrator(username) : new RegularUser(username);
}
public static void main(String[] args) {
SystemUser user = authenticate();
BookCollection collection = new BookCollection();
while (true) {
int choice = user.showMenu();
user.actions[choice].execute(collection);
}
}
}
RegularUser Class
package users;
import operations.*;
public class RegularUser extends SystemUser {
public RegularUser(String name) {
super(name);
this.actions = new Action[]{
new ExitSystem(),
new FindBook(),
new DisplayBooks(),
new BorrowBook(),
new ReturnBook()
};
}
@Override
public int showMenu() {
System.out.println("\nRegular User Menu");
System.out.println("0. Exit");
System.out.println("1. Find Book");
System.out.println("2. Display Books");
System.out.println("3. Borrow Book");
System.out.println("4. Return Book");
return getChoice();
}
}
SystemUser Abstract Class
package users;
import library.BookCollection;
import operations.Action;
public abstract class SystemUser {
protected String username;
Action[] actions;
public SystemUser(String username) {
this.username = username;
}
protected int getChoice() {
System.out.print("Select action: ");
return new java.util.Scanner(System.in).nextInt();
}
public abstract int showMenu();
}