Python 语言 用 SQLAlchemy 实现图书馆管理系统 图书借阅 + 读者证 + 逾期罚款

Python阿木 发布于 9 小时前 1 次阅读


SQLAlchemy 实现的图书馆管理系统

随着信息技术的飞速发展,图书馆管理系统作为信息管理的重要组成部分,其重要性日益凸显。本文将使用 SQLAlchemy,一个流行的Python对象关系映射(ORM)工具,来实现一个简单的图书馆管理系统。该系统将包括图书借阅、读者证管理以及逾期罚款等功能。

系统需求分析

在开始编码之前,我们需要明确系统的基本需求:

1. 图书管理:包括图书的添加、查询、修改和删除。
2. 读者管理:包括读者的添加、查询、修改和删除。
3. 借阅管理:包括图书的借出、归还以及逾期罚款的计算。
4. 数据持久化:使用数据库来存储和管理数据。

系统设计

数据库设计

我们需要设计数据库模型。以下是几个主要的实体及其属性:

- Book(图书):id, title, author, isbn, category, status
- Reader(读者):id, name, phone, email, card_number
- BorrowRecord(借阅记录):id, book_id, reader_id, borrow_date, return_date, fine

SQLAlchemy 配置

在开始编码之前,我们需要配置 SQLAlchemy。以下是配置数据库连接的代码:

python
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

创建数据库引擎
engine = create_engine('sqlite:///library.db', echo=True)

创建基类
Base = declarative_base()

创建会话
Session = sessionmaker(bind=engine)
session = Session()

实体定义

接下来,我们定义实体类:

python
class Book(Base):
__tablename__ = 'books'
id = Column(Integer, primary_key=True)
title = Column(String)
author = Column(String)
isbn = Column(String)
category = Column(String)
status = Column(String) 'available', 'borrowed', 'lost'

class Reader(Base):
__tablename__ = 'readers'
id = Column(Integer, primary_key=True)
name = Column(String)
phone = Column(String)
email = Column(String)
card_number = Column(String)

class BorrowRecord(Base):
__tablename__ = 'borrow_records'
id = Column(Integer, primary_key=True)
book_id = Column(Integer, ForeignKey('books.id'))
reader_id = Column(Integer, ForeignKey('readers.id'))
borrow_date = Column(Date)
return_date = Column(Date)
fine = Column(Numeric)

功能实现

图书管理

python
def add_book(title, author, isbn, category):
new_book = Book(title=title, author=author, isbn=isbn, category=category, status='available')
session.add(new_book)
session.commit()

def get_books():
return session.query(Book).all()

def update_book(book_id, title=None, author=None, isbn=None, category=None):
book = session.query(Book).filter_by(id=book_id).first()
if book:
if title:
book.title = title
if author:
book.author = author
if isbn:
book.isbn = isbn
if category:
book.category = category
session.commit()

def delete_book(book_id):
book = session.query(Book).filter_by(id=book_id).first()
if book:
session.delete(book)
session.commit()

读者管理

python
def add_reader(name, phone, email, card_number):
new_reader = Reader(name=name, phone=phone, email=email, card_number=card_number)
session.add(new_reader)
session.commit()

def get_readers():
return session.query(Reader).all()

def update_reader(reader_id, name=None, phone=None, email=None):
reader = session.query(Reader).filter_by(id=reader_id).first()
if reader:
if name:
reader.name = name
if phone:
reader.phone = phone
if email:
reader.email = email
session.commit()

def delete_reader(reader_id):
reader = session.query(Reader).filter_by(id=reader_id).first()
if reader:
session.delete(reader)
session.commit()

借阅管理

python
def borrow_book(book_id, reader_id):
book = session.query(Book).filter_by(id=book_id).first()
reader = session.query(Reader).filter_by(id=reader_id).first()
if book and book.status == 'available':
book.status = 'borrowed'
borrow_record = BorrowRecord(book_id=book_id, reader_id=reader_id, borrow_date=date.today())
session.add(borrow_record)
session.commit()

def return_book(book_id, reader_id):
book = session.query(Book).filter_by(id=book_id).first()
borrow_record = session.query(BorrowRecord).filter_by(book_id=book_id, reader_id=reader_id).first()
if book and book.status == 'borrowed':
book.status = 'available'
borrow_record.return_date = date.today()
if borrow_record.return_date > borrow_record.borrow_date + timedelta(days=30):
borrow_record.fine = 10 假设逾期罚款为每天10元
else:
borrow_record.fine = 0
session.commit()

总结

本文使用 SQLAlchemy 实现了一个简单的图书馆管理系统。通过定义实体类和数据库模型,我们实现了图书管理、读者管理和借阅管理等功能。这个系统可以作为进一步开发的基础,添加更多的功能和优化用户体验。

由于篇幅限制,本文未能涵盖所有可能的细节和错误处理。在实际应用中,还需要考虑数据验证、用户界面、日志记录、安全性等方面。