Project Title: Library Management System (LMS)
A Library Management System allows a librarian to manage books, users, and transactions
using OOP principles.
OOP Concepts Applied
● Encapsulation → Data hiding using private attributes and providing public
getters/setters.
● Abstraction → Abstract classes and interfaces for common behavior.
● Inheritance → Book class inherits from Item, Student class inherits from User, etc.
● Polymorphism → Method overriding in Book and EBook, method overloading in
User class.
Project Structure
LibraryManagementSystem/
│── src/
│ ├── models/
│ │ ├── Item.java
│ │ ├── Book.java
│ │ ├── EBook.java
│ │ ├── User.java
│ │ ├── Student.java
│ │ ├── Librarian.java
│ │ ├── Transaction.java
│ ├── services/
│ │ ├── Library.java
│ │ ├── LibraryManagement.java
│ ├── Main.java
1 Item Class (Abstraction)
1️⃣
package models;
public abstract class Item {
protected String title;
protected String author;
protected int itemId;
protected boolean isAvailable;
public Item(String title, String author, int itemId) {
this.title = title;
this.author = author;
this.itemId = itemId;
this.isAvailable = true;
}
public abstract void displayDetails();
public boolean isAvailable() {
return isAvailable;
}
public void setAvailability(boolean status) {
this.isAvailable = status;
}
public int getItemId() {
return itemId;
}
}
2️⃣Book Class (Inheritance & Polymorphism)
package models;
public class Book extends Item {
private int numPages;
public Book(String title, String author, int itemId, int numPages) {
super(title, author, itemId);
this.numPages = numPages;
}
@Override
public void displayDetails() {
System.out.println("Book ID: " + itemId);
System.out.println("Title: " + title);
System.out.println("Author: " + author);
System.out.println("Pages: " + numPages);
System.out.println("Availability: " + (isAvailable ? "Available" : "Not Available"));
}
}
3️⃣EBook Class (Polymorphism & Inheritance)
package models;
public class EBook extends Item {
private String downloadLink;
public EBook(String title, String author, int itemId, String downloadLink) {
super(title, author, itemId);
this.downloadLink = downloadLink;
}
@Override
public void displayDetails() {
System.out.println("E-Book ID: " + itemId);
System.out.println("Title: " + title);
System.out.println("Author: " + author);
System.out.println("Download Link: " + downloadLink);
}
}
4️⃣User Class (Encapsulation & Method Overloading)
package models;
public class User {
protected String name;
protected int userId;
protected int borrowedItems;
public User(String name, int userId) {
this.name = name;
this.userId = userId;
this.borrowedItems = 0;
}
public void borrowItem() {
borrowedItems++;
}
public void returnItem() {
borrowedItems--;
}
public void displayUserDetails() {
System.out.println("User ID: " + userId);
System.out.println("Name: " + name);
System.out.println("Borrowed Items: " + borrowedItems);
}
}
5️⃣Student Class (Inheritance)
package models;
public class Student extends User {
private int maxBooksAllowed = 5;
public Student(String name, int userId) {
super(name, userId);
}
@Override
public void borrowItem() {
if (borrowedItems < maxBooksAllowed) {
super.borrowItem();
System.out.println(name + " borrowed an item.");
} else {
System.out.println(name + " has reached the limit of borrowed items.");
}
}
}
6️⃣Librarian Class
package models;
public class Librarian extends User {
public Librarian(String name, int userId) {
super(name, userId);
}
public void addBook(Book book) {
System.out.println("Book added: " + book.title);
}
public void removeBook(Book book) {
System.out.println("Book removed: " + book.title);
}
}
7️⃣Transaction Class
package models;
import java.util.Date;
public class Transaction {
private int transactionId;
private int userId;
private int itemId;
private Date borrowDate;
private Date returnDate;
public Transaction(int transactionId, int userId, int itemId, Date borrowDate) {
this.transactionId = transactionId;
this.userId = userId;
this.itemId = itemId;
this.borrowDate = borrowDate;
}
public void setReturnDate(Date returnDate) {
this.returnDate = returnDate;
}
public void displayTransaction() {
System.out.println("Transaction ID: " + transactionId);
System.out.println("User ID: " + userId);
System.out.println("Item ID: " + itemId);
System.out.println("Borrow Date: " + borrowDate);
System.out.println("Return Date: " + (returnDate != null ? returnDate : "Not Returned Yet"));
}
}
8️⃣Library Class (Service Layer)
package services;
import models.Book;
import models.User;
import java.util.ArrayList;
import java.util.List;
public class Library {
private List<Book> books;
private List<User> users;
public Library() {
this.books = new ArrayList<>();
this.users = new ArrayList<>();
}
public void addBook(Book book) {
books.add(book);
System.out.println("Book added to library: " + book.title);
}
public void registerUser(User user) {
users.add(user);
System.out.println("User registered: " + user.name);
}
public Book findBook(int itemId) {
for (Book book : books) {
if (book.getItemId() == itemId) {
return book;
}
}
return null;
}
}
9️⃣Main Class (Entry Point)
package main;
import models.*;
import services.Library;
public class Main {
public static void main(String[] args) {
Library library = new Library();
Book book1 = new Book("Java Programming", "James Gosling", 101, 500);
Book book2 = new Book("Data Structures", "Robert Lafore", 102, 700);
library.addBook(book1);
library.addBook(book2);
Student student = new Student("Alice", 201);
library.registerUser(student);
System.out.println("\nLibrary Books:");
book1.displayDetails();
book2.displayDetails();
System.out.println("\nStudent Info:");
student.displayUserDetails();
System.out.println("\nBorrowing Book:");
student.borrowItem();
student.displayUserDetails();
}
}