📚
Storage & Management

Library Management System

Books, Members Aur Fines
💡 Library EK BAHUT PURAANA RENTAL BUSINESS hai — saamaan udhaar jaata hai, waapsi ki taareekh hoti hai, aur der karne par jurmana. Design ka core wahi hai jo har rental system ka hai.

Sabse important distinction: BOOK aur BOOK_ITEM. "Harry Potter" ek Book hai (title, author, ISBN), par library mein uski 5 COPIES hain — har copy ek BookItem hai apne barcode ke saath. Member Book search karta hai, par issue ek BookItem hota hai. Ye farak na karna sabse common galti hai.

Baaki rules straightforward hain: member ki max book limit, due date, fine calculation (FineStrategy — per day rate, cap ke saath), aur RESERVATION jab saari copies issued hon. Copy wapas aane par reservation queue ke pehle member ko notify karo — Observer pattern.

class Book {                 // catalogue entry
  String isbn, title, author;
}

class BookItem {             // physical copy — barcode ke saath
  String barcode;
  Book book;
  BookStatus status;         // AVAILABLE, ISSUED, RESERVED, LOST
}

class Loan {
  BookItem item; Member member;
  LocalDate issuedOn, dueOn, returnedOn;
}

interface FineStrategy { Money fine(Loan loan, LocalDate today); }
// PerDayFine with maxCap — fine kitaab ki keemat se zyada nahi honi chahiye
📚
Library EK BAHUT PURAANA RENTAL BUSINESS hai — saamaan udhaar jaata hai, waapsi ki taareekh hoti hai, aur der karne par jurmana. Design ka core wahi hai jo har rental system ka hai.
1 / 2
⚡ Quick Recap
  • Book (catalogue) aur BookItem (physical copy) alag entities hain
  • FineStrategy interface — per-day rate with max cap
  • Reservation queue + Observer se copy free hone par notification
Is page mein (2 subtopics)

Saari copies issued hon to member RESERVE kar sakta hai. Reservations ek FIFO queue hai — copy free hone par sabse pehle reserve karne wale ko notification jaata hai.

Notification ke baad ek HOLD PERIOD hota hai (jaise 48 ghante) — us waqt tak wo copy sirf usi member ke liye rakhi rehti hai. Na aaye to agle member par chali jaati hai. Ye detail batana real system ki samajh dikhata hai.

class ReservationQueue {
  private final Deque<Reservation> queue = new ArrayDeque<>();

  void onCopyReturned(BookItem item) {
    var next = queue.poll();
    if (next == null) { item.setStatus(AVAILABLE); return; }
    item.setStatus(RESERVED);
    notifier.notify(next.member(), item);
    scheduler.schedule(() -> expireHold(item, next), Duration.ofHours(48));
  }
}

Search title, author, subject aur ISBN par honi chahiye. Har field par index rakho — Map<String, List<Book>> in-memory ke liye, ya proper search engine bade catalogue ke liye.

Search result Book level par aana chahiye (kitni copies available hain, ye dikhao), par issue BookItem level par hoga. Ye wahi Book/BookItem distinction hai jo poore design mein chalti hai.

💡Tip: Partial aur fuzzy search mention karo — log title galat spell karte hain. Interview mein implement mat karo, par bolna achha impression deta hai.