DEV Community

Cover image for Projects focused on Python Object-Oriented Programming (OOP) concepts.
Karthick (k)
Karthick (k)

Posted on

Projects focused on Python Object-Oriented Programming (OOP) concepts.

Library Management System

A simple console-based Library Management System built with Python.

Description

This project allows a librarian or users to manage books and members of a library.

It supports adding books, registering users, borrowing/returning books, searching books, and viewing user details.

Features

  • View all books with ID, title, author, and available quantity
  • Add new books
  • Search books by title (case-insensitive)
  • Borrow a book (only if available)
  • Return a book
  • View borrowed books of a specific user
  • Register new users
  • View all registered users
  • Pre-loaded with 10 sample books and 3 sample users

Classes Used

Class Purpose
Book Stores book details and manages quantity
User Stores user details and borrowed books list
Library Manages the collection of books and users

How to Run

  1. Make sure you have Python 3 installed.
  2. Save the code in a file named library_management.py
  3. Open the terminal/command prompt
  4. Run the command:

python library_management.py

class Book:
    def __init__(self, book_id, title, author, quantity):
        self.book_id = book_id
        self.title = title
        self.author = author
        self.quantity = quantity

    def display_book_info(self):
        print(f"ID: {self.book_id}, Title: {self.title}, Author: {self.author}, Available Quantity: {self.quantity}")

    def check_availability(self):
        return self.quantity > 0

    def update_quantity(self, change):
        self.quantity += change


class User:
    def __init__(self, user_id, name, place):
        self.user_id = user_id
        self.name = name
        self.place = place
        self.borrowed_books = []


    def borrow_book(self, book):
        if book.check_availability():
            self.borrowed_books.append(book)
            book.update_quantity(-1)
            print(f"{self.name} has borrowed '{book.title}'")
        else:
            print(f"Sorry, '{book.title}' is not available for borrowing.")

    def return_book(self, book):
        if book in self. borrowed_books:
            self.borrowed_books.remove(book)
            book.update_quantity(1)
            print(f"{self.name} has returned '{book.title}'")
        else:
            print(f"{self.name} does not have '{book.title}' borrowed.")

    def view_borrowed_books(self):
        if self.borrowed_books:
            print(f"{self.name}'s Borrowed Books:")
            for book in self. borrowed_books:
                print(f" - {book.title}")
        else:
            print(f"{self.name} has not borrowed any books.")

class Library:
    def __init__(self):
        self.books = []
        self.users = []

    def add_book(self, book):
        self.booksappend(book)

    def list_users(self):
        if self.users:
            print("\nRegistered Users:")
            for user in self.users:
                print(f"ID: {user.user_id}, Name: {user.name}, Place: {user.place}")
        else:
            print("No users registered yet.")

    def register_user(self, user):
        if any(u.user_id == user.user_id for u in self.users):
            print("User with the same ID already exists! Try another ID.")
            return
        self.usersappend(user)
        print(f"New user {user.name} added successfully.")

    def search_book_by_title(self, title):
        return [book for book in selfbooks if title.lower() in book.title.lower()]

    def list_books(self):
        if self.books:
            print("Books in the library:")
            for book in self. books:
                book.display_book_info()
        else:
            print("No books available in the library.")

    def add_new_book(self):
        book_id = int(input("Enter Book ID: "))
        if any(book.book_id == book_id for book in self.books):
            print("Book with the same ID already exists, please try another ID.")
            return

        title = input("Enter the book title: ")
        author = input("Enter author name: ")
        quantity = int(input("Enter the quantity of book: "))

        new_book = Book(book_id, title, author, quantity)
        self.add_book(new_book)
        print("Book added successfully!")
        new_book.display_book_info()


def main():
    library = Library()

    # Sample books
    book1 = Book(1, "Harry Potter and the Philosopher's Stone", "J.K. Rowling", 5)
    book2 = Book(2, "The Hobbit", "J.R.R. Tolkien", 3)
    book3 = Book(3, "1984", "George Orwell", 2)
    book4 = Book(4,"AI Rising: India’s Artificial Intelligence Growth Story"," Jayanth N. Kolla, Leslie D’Monte",5)
    book5 = Book(5, "The Great Gatsby", "F. Scott Fitzgerald", 4)
    book6 = Book(6, "To Kill a Mockingbird", "Harper Lee", 3)
    book7 = Book(7,"The Power of Critical Thinking","Richard Paul",5)
    book8 = Book(8, "From Dump to Design", "John Doe", 2)
    book9 = Book(9, "The Catcher in the Rye", "J.D. Salinger", 3)
    book10= Book(10, "The Alchemist", "Paulo Coelho", 4)

    library.add_book(book1)
    library.add_book(book2)
    library.add_book(book3)
    library.add_book(book4)
    library.add_book(book5)
    library.add_book(book6)
    library.add_book(book7)
    library.add_book(book8)
    library.add_book(book9)
    library.add_book(book10)

    # Sample users (now properly registered)
    user1 = User(1, "Karthick", "Chennai")
    user2 = User(2, "Kaviya", "Perambalur")
    user3 = User(3, "Praveen", "Trichy")

    library.register_user(user1)
    library.register_user(user2)
    library.register_user(user3)

    while True:
        print("\nWelcome to the Library Management System")
        print("1. View all books")
        print("2. Add Books")
        print("3. Search for a book by title")
        print("4. Borrow a book")
        print("5. Return a book")
        print("6. View borrowed books")
        print("7. Add new User")
        print("8. Exit")
        print("9. View all users")


        choice = input("Enter your choice: ")

        if choice == "1":
            library.list_books()

        elif choice == "2":
            library.add_new_book()

        elif choice == "3":
            title = input("Enter the book title to search: ")
            found_books = library.search_book_by_title(title)
            if found_books:
                for book in found_books:
                    book.display_book_info()
            else:
                print(f"No book found with the title '{title}'")

        elif choice == "4":
            user_id = int(input("Enter User ID: "))
            book_id = int(input("Enter Book ID to Borrow: "))
            user = next((u for u in library.users if u.user_id == user_id), None)
            book = next((b for b in library.books if b.book_id == book_id), None)
            if user and book:
                user.borrow_book(book)
            else:
                print("Invalid User ID or Book ID")

        elif choice == "5":
            user_id = int(input("Enter your user ID: "))
            book_id = int(input("Enter the book ID to return: "))
            user = next((u for u in library.users if u.user_id == user_id), None)
            book = next((b for b in library.books if b.book_id == book_id), None)
            if user and book:
                user.return_book(book)
            else:
                print("Invalid user or book ID.")

        elif choice == "6":
            user_id = int(input("Enter your user ID: "))
            user = next((u for u in library.users if u.user_id == user_id), None)
            if user:
                user.view_borrowed_books()
            else:
                print("Invalid user ID.")

        elif choice == "7":
            user_id = int(input("Enter user id: "))
            name = input("Enter user's name: ")
            place = input("Enter user's place: ")
            user = User(user_id, name, place)
            library.register_user(user)

        elif choice == "8":
            print("Exiting the system. Goodbye!")
            break
        elif choice == "9":
            library.list_users()

        else:
            print("Invalid choice, please try again.")


if __name__ == "__main__":
    main()
Enter fullscreen mode Exit fullscreen mode

Top comments (0)