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.
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()