Java Library Management System Implementation

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

Tags: java LibrarySystem OOP Interface Inheritance

Posted on Fri, 29 May 2026 23:28:12 +0000 by $phpNut