All Projects
intermediate

Library Management System

A library management system with book catalog, member management, borrowing/returning functionality.

Features
  • Book catalog management
  • Member registration
  • Borrow and return books
  • Search books
  • Fine calculation for late returns
Technologies Used
OOPInheritanceFile Handlingdatetime moduleCollections
Explanation

Models Library, Book, and Member using classes. Tracks which books are borrowed, by whom, and calculates fines for late returns. Data is persisted in JSON files.

Source Code
from datetime import datetime, timedelta
import json

class Book:
    def __init__(self, isbn, title, author, copies=1):
        self.isbn = isbn
        self.title = title
        self.author = author
        self.copies = copies
        self.available = copies

    def __str__(self):
        return f"[{self.isbn}] {self.title} by {self.author} ({self.available}/{self.copies} available)"

class Member:
    def __init__(self, member_id, name):
        self.member_id = member_id
        self.name = name
        self.borrowed_books = []  # list of {"isbn": ..., "date": ...}

    def __str__(self):
        return f"[{self.member_id}] {self.name} - {len(self.borrowed_books)} books borrowed"

class Library:
    def __init__(self):
        self.books = {}
        self.members = {}

    def add_book(self):
        isbn = input("ISBN: ")
        title = input("Title: ")
        author = input("Author: ")
        copies = int(input("Copies: "))
        self.books[isbn] = Book(isbn, title, author, copies)
        print(f"✅ Book '{title}' added!")

    def register_member(self):
        mid = input("Member ID: ")
        name = input("Name: ")
        self.members[mid] = Member(mid, name)
        print(f"✅ Member '{name}' registered!")

    def borrow_book(self):
        mid = input("Member ID: ")
        isbn = input("Book ISBN: ")
        if mid not in self.members:
            print("Member not found!")
            return
        if isbn not in self.books or self.books[isbn].available <= 0:
            print("Book not available!")
            return
        self.books[isbn].available -= 1
        self.members[mid].borrowed_books.append({
            "isbn": isbn, "date": datetime.now().strftime("%Y-%m-%d")
        })
        print(f"✅ Book borrowed successfully!")

    def return_book(self):
        mid = input("Member ID: ")
        isbn = input("Book ISBN: ")
        member = self.members.get(mid)
        if not member:
            print("Member not found!")
            return
        for b in member.borrowed_books:
            if b["isbn"] == isbn:
                member.borrowed_books.remove(b)
                self.books[isbn].available += 1
                borrow_date = datetime.strptime(b["date"], "%Y-%m-%d")
                days = (datetime.now() - borrow_date).days
                fine = max(0, (days - 14)) * 5  # ₹5/day after 14 days
                print(f"✅ Book returned! Days: {days}" + (f", Fine: ₹{fine}" if fine > 0 else ""))
                return
        print("Book not found in member's borrowed list!")

    def search(self):
        query = input("Search: ").lower()
        results = [b for b in self.books.values() if query in b.title.lower() or query in b.author.lower()]
        for b in results:
            print(f"  {b}")
        if not results:
            print("No books found!")

    def list_books(self):
        for b in self.books.values():
            print(f"  {b}")

def main():
    lib = Library()
    while True:
        print("\n1.Add Book 2.Register Member 3.Borrow 4.Return 5.Search 6.List Books 7.Exit")
        ch = input("Choice: ")
        if ch == "1": lib.add_book()
        elif ch == "2": lib.register_member()
        elif ch == "3": lib.borrow_book()
        elif ch == "4": lib.return_book()
        elif ch == "5": lib.search()
        elif ch == "6": lib.list_books()
        elif ch == "7": break

main()