See More

import java.util.ArrayList; import java.util.Scanner; // Base Class for Users abstract class User { String name; User(String name) { this.name = name; } abstract void viewBooks(Library library); } // Admin class inheriting from User class Admin extends User { Admin(String name) { super(name); } @Override void viewBooks(Library library) { library.displayBooks(); } // Add book to the library void addBook(Library library, Book book) { library.addBook(book); System.out.println("Book added successfully."); } // Issue a book to the user void issueBook(Library library, String bookName, User user) { if (library.issueBook(bookName, user)) { System.out.println("Book issued successfully to " + user.name); } else { System.out.println("Book is not available."); } } // View all issued books void viewIssuedBooks(Library library) { library.displayIssuedBooks(); } } // Regular User class inheriting from User class RegularUser extends User { RegularUser(String name) { super(name); } @Override void viewBooks(Library library) { library.displayBooks(); } // Return a book to the library void returnBook(Library library, String bookName) { library.returnBook(bookName, this); } } // Book Class class Book { String name; boolean isIssued; User issuedTo; Book(String name) { this.name = name; this.isIssued = false; this.issuedTo = null; } } // Library Class managing the books class Library { ArrayList books = new ArrayList<>(); ArrayList issuedBooks = new ArrayList<>(); // Add book to library void addBook(Book book) { books.add(book); } // Issue book to user boolean issueBook(String bookName, User user) { for (Book book : books) { if (book.name.equalsIgnoreCase(bookName) && !book.isIssued) { book.isIssued = true; book.issuedTo = user; issuedBooks.add(book); return true; } } return false; } // Return book to the library void returnBook(String bookName, User user) { for (Book book : issuedBooks) { if (book.name.equalsIgnoreCase(bookName) && book.issuedTo == user) { book.isIssued = false; book.issuedTo = null; issuedBooks.remove(book); System.out.println("Book returned successfully."); return; } } System.out.println("No such issued book found."); } // Display available books void displayBooks() { System.out.println("Available books in the library:"); for (Book book : books) { if (!book.isIssued) { System.out.println("- " + book.name); } } } // Display all issued books void displayIssuedBooks() { System.out.println("Issued books:"); for (Book book : issuedBooks) { System.out.println("- " + book.name + " issued to " + book.issuedTo.name); } } } // Main class to run the program public class LibraryManagementSystem { public static void main(String[] args) { Library library = new Library(); Admin admin = new Admin("Admin"); RegularUser user1 = new RegularUser("User1"); RegularUser user2 = new RegularUser("User2"); // Add some books to the library admin.addBook(library, new Book("Java Programming")); admin.addBook(library, new Book("Data Structures")); admin.addBook(library, new Book("Operating Systems")); // Admin issuing book to users admin.issueBook(library, "Java Programming", user1); // Users viewing available books user1.viewBooks(library); user2.viewBooks(library); // Admin viewing issued books admin.viewIssuedBooks(library); // User returning a book user1.returnBook(library, "Java Programming"); // Viewing books again after return user1.viewBooks(library); } }