0% found this document useful (0 votes)
4 views4 pages

Digital Library Management System Code

The Digital Library Management System (DLMS) is a console-based application that utilizes an SQLite database for managing books, members, and loans. It includes functionalities for admin and user interactions such as adding books and members, issuing and returning books, and searching for available titles. A demo run showcases various operations like admin authentication, book addition, member registration, and loan management.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views4 pages

Digital Library Management System Code

The Digital Library Management System (DLMS) is a console-based application that utilizes an SQLite database for managing books, members, and loans. It includes functionalities for admin and user interactions such as adding books and members, issuing and returning books, and searching for available titles. A demo run showcases various operations like admin authentication, book addition, member registration, and loan management.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Digital Library Management System - Source Code\n\n

"""Digital Library Management System (DLMS)


Console-based admin and user interfaces using SQLite backend.
Saved and generated by ChatGPT for practical submission.
"""

import sqlite3
from datetime import datetime, timedelta

DB_PATH = r"/mnt/data/[Link]"

class DigitalLibrary:
def __init__(self, db_path=DB_PATH):
[Link] = [Link](db_path, check_same_thread=False)
[Link].row_factory = [Link]
[Link] = [Link]()
self._init_db()

def _init_db(self):
[Link]("""
CREATE TABLE IF NOT EXISTS admins (
admin_id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE,
password TEXT
);
CREATE TABLE IF NOT EXISTS books (
book_id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
author TEXT,
isbn TEXT UNIQUE,
copies INTEGER NOT NULL DEFAULT 1,
added_on TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS members (
member_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
phone TEXT,
joined_on TEXT NOT NULL,
password TEXT
);
CREATE TABLE IF NOT EXISTS loans (
loan_id INTEGER PRIMARY KEY AUTOINCREMENT,
book_id INTEGER NOT NULL,
member_id INTEGER NOT NULL,
issue_date TEXT NOT NULL,
due_date TEXT NOT NULL,
return_date TEXT,
FOREIGN KEY(book_id) REFERENCES books(book_id),
FOREIGN KEY(member_id) REFERENCES members(member_id)
);
""")
# ensure a default admin exists
[Link]("SELECT COUNT(*) as c FROM admins")
if [Link]()['c'] == 0:
[Link]("INSERT INTO admins (username, password) VALUES (?,?)", ("admin", "admin123"))
[Link]()

# Admin methods
def admin_authenticate(self, username, password):
[Link]("SELECT * FROM admins WHERE username=? AND password=?", (username, password))
return [Link]() is not None

def add_book(self, title, author=None, isbn=None, copies=1):


now = [Link]().isoformat(timespec='seconds')
try:
[Link]("INSERT INTO books (title, author, isbn, copies, added_on) VALUES (?,?,?,?,?)", (
title, author, isbn, copies, now))
[Link]()
return [Link]
except Exception as e:
return str(e)

def add_member(self, name, email=None, phone=None, password="password"):


now = [Link]().isoformat(timespec='seconds')
try:
[Link]("INSERT INTO members (name, email, phone, joined_on, password) VALUES (?,?,?,?,?)
", (name, email, phone, now, password))
[Link]()
return [Link]
except Exception as e:
return str(e)

def list_books(self):
[Link]("SELECT * FROM books ORDER BY title")
return [dict(r) for r in [Link]()]

def list_members(self):
[Link]("SELECT member_id, name, email, phone, joined_on FROM members ORDER BY name")
return [dict(r) for r in [Link]()]

# User methods
def user_register(self, name, email, phone=None, password="password"):
return self.add_member(name, email, phone, password)

def user_authenticate(self, email, password):


[Link]("SELECT * FROM members WHERE email=? AND password=?", (email, password))
row = [Link]()
return dict(row) if row else None

def search_books(self, q):


qlike = f"%{q}%"
[Link]("SELECT * FROM books WHERE title LIKE ? OR author LIKE ? OR isbn LIKE ?", (qlike, qli
ke, qlike))
return [dict(r) for r in [Link]()]

def available_copies(self, book_id):


[Link]("SELECT copies FROM books WHERE book_id=?", (book_id,))
row = [Link]()
if not row:
return 0
total = row['copies']
[Link]("SELECT COUNT(*) as c FROM loans WHERE book_id=? AND return_date IS NULL", (book_id,)
)
active = [Link]()['c']
return total - active

def issue_book(self, book_id, member_id, days=14):


avail = self.available_copies(book_id)
if avail <= 0:
return {"ok": False, "msg": "No copies available"}
issue_date = [Link]()
due_date = issue_date + timedelta(days=days)
[Link]("INSERT INTO loans (book_id, member_id, issue_date, due_date) VALUES (?,?,?,?)", (boo
k_id, member_id, issue_date.isoformat(timespec='seconds'), due_date.isoformat(timespec='seconds')))
[Link]()
return {"ok": True, "loan_id": [Link], "due_date": due_date.isoformat(timespec='seconds')}

def return_book(self, loan_id):


return_date = [Link]().isoformat(timespec='seconds')
[Link]("UPDATE loans SET return_date=? WHERE loan_id=? AND return_date IS NULL", (return_dat
e, loan_id))
if [Link] == 0:
return {"ok": False, "msg": "Loan not found or already returned"}
[Link]()
return {"ok": True, "return_date": return_date}

def member_loans(self, member_id, active_only=True):


if active_only:
[Link]("SELECT loans.*, [Link] FROM loans JOIN books ON loans.book_id=books.book_id
WHERE member_id=? AND return_date IS NULL", (member_id,))
else:
[Link]("SELECT loans.*, [Link] FROM loans JOIN books ON loans.book_id=books.book_id
WHERE member_id=?", (member_id,))
return [dict(r) for r in [Link]()]

def list_loans(self, active_only=True):


if active_only:
[Link]("SELECT loans.*, [Link], [Link] as member FROM loans JOIN books ON loa
ns.book_id=books.book_id JOIN members ON loans.member_id=members.member_id WHERE return_date IS NULL")
else:
[Link]("SELECT loans.*, [Link], [Link] as member FROM loans JOIN books ON loa
ns.book_id=books.book_id JOIN members ON loans.member_id=members.member_id")
return [dict(r) for r in [Link]()]

def close(self):
[Link]()

# A small "demo run" function to show interactions and produce sample output for submission
def demo_run():
out = []
lib = DigitalLibrary()
[Link]("--- DLMS Demo Run Started ---")

[Link]("\\n[Admin login attempt with default admin/admin123]")


ok = lib.admin_authenticate('admin','admin123')
[Link](f"Admin authenticated: {ok}")

[Link]("\\n[Admin adds books]")


b1 = lib.add_book('Introduction to Algorithms', 'Cormen et al', '9780262033848', copies=2)
b2 = lib.add_book('Clean Code', 'Robert C. Martin', '9780132350884', copies=1)
b3 = lib.add_book('Learning Python', 'Mark Lutz', '9781449355739', copies=3)
[Link](f"Added book ids: {b1}, {b2}, {b3}")

[Link]("\\n[Admin registers members]")


m1 = lib.add_member('Aisha Khan', 'aisha@[Link]', '9876543210', password='aisha123')
m2 = lib.add_member('Rahul Sharma', 'rahul@[Link]', '9123456780', password='rahul123')
[Link](f"Added member ids: {m1}, {m2}")

[Link]("\\n[User search: 'Python']")


s = lib.search_books('Python')
[Link](f"Search results: {[ (x['book_id'], x['title']) for x in s ]}")

[Link]("\\n[User Rahul logs in and issues 'Clean Code']")


user = lib.user_authenticate('rahul@[Link]','rahul123')
[Link](f"Rahul auth success: {bool(user)}")
if user:
issue = lib.issue_book(b2, user['member_id'], days=7)
[Link](f"Issue result: {issue}")

[Link]("\\n[User Aisha issues 'Introduction to Algorithms']")


user2 = lib.user_authenticate('aisha@[Link]','aisha123')
[Link](f"Aisha auth success: {bool(user2)}")
if user2:
issue2 = lib.issue_book(b1, user2['member_id'], days=21)
[Link](f"Issue result: {issue2}")

[Link]("\\n[Attempt to issue more copies than available]")


# issue second copy of Intro to Algorithms to Rahul
issue3 = lib.issue_book(b1, user['member_id'], days=14)
[Link](f"Second issue of same book: {issue3}")
# try third (should fail if copies exhausted)
issue4 = lib.issue_book(b1, user2['member_id'], days=14)
[Link](f"Third issue attempt (expected fail if no copies): {issue4}")

[Link]("\\n[Active loans]")
loans = lib.list_loans(active_only=True)
[Link](f"Active loans count: {len(loans)}")
for ln in loans:
[Link](f"Loan {ln['loan_id']}: {ln['title']} -> {ln['member']} (due: {ln['due_date']})")

[Link]("\\n[Return a book (Rahul returns Clean Code)]")


# find loan id
loan_to_return = None
for ln in loans:
if ln['title'] == 'Clean Code' and ln['member'].lower().startswith('rahul'):
loan_to_return = ln['loan_id']
if loan_to_return:
ret = lib.return_book(loan_to_return)
[Link](f"Return result: {ret}")
else:
[Link]("Clean Code loan not found to return in demo")

[Link]("\\n[Member loans for Rahul]")


rl = lib.member_loans(user['member_id'], active_only=False)
[Link](f"Rahul loans: {[(r['loan_id'], r['title'], r['return_date']) for r in rl]}")

[Link]("\\n--- DLMS Demo Run Finished ---")


[Link]()
return "\\n".join(out)

if __name__ == '__main__':
print(demo_run())
\n\n--- DEMO OUTPUT ---\n\n--- DLMS Demo Run Started ---\n\n[Admin login attempt with default admin/admin123]\
nAdmin authenticated: True\n\n[Admin adds books]\nAdded book ids: 1, 2, 3\n\n[Admin registers members]\nAdded
member ids: 1, 2\n\n[User search: 'Python']\nSearch results: [(3, 'Learning Python')]\n\n[User Rahul logs in a
nd issues 'Clean Code']\nRahul auth success: True\nIssue result: {'ok': True, 'loan_id': 1, 'due_date': '2025-
11-07T10:06:25'}\n\n[User Aisha issues 'Introduction to Algorithms']\nAisha auth success: True\nIssue result:
{'ok': True, 'loan_id': 2, 'due_date': '2025-11-21T10:06:25'}\n\n[Attempt to issue more copies than available]
\nSecond issue of same book: {'ok': True, 'loan_id': 3, 'due_date': '2025-11-14T10:06:25'}\nThird issue attemp
t (expected fail if no copies): {'ok': False, 'msg': 'No copies available'}\n\n[Active loans]\nActive loans co
unt: 3\nLoan 1: Clean Code -> Rahul Sharma (due: 2025-11-07T10:06:25)\nLoan 2: Introduction to Algorithms -> A
isha Khan (due: 2025-11-21T10:06:25)\nLoan 3: Introduction to Algorithms -> Rahul Sharma (due: 2025-11-14T10:0
6:25)\n\n[Return a book (Rahul returns Clean Code)]\nReturn result: {'ok': True, 'return_date': '2025-10-31T10
:06:25'}\n\n[Member loans for Rahul]\nRahul loans: [(1, 'Clean Code', '2025-10-31T10:06:25'), (3, 'Introductio
n to Algorithms', None)]\n\n--- DLMS Demo Run Finished ---

You might also like