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

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


SQLAlchemy 实现的图书馆管理系统

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

系统设计

数据库设计

我们需要设计数据库模型。以下是系统所需的基本实体及其属性:

1. Book(图书)
- book_id: 主键,图书唯一标识
- title: 图书标题
- author: 作者
- isbn: 国际标准书号
- category: 分类
- status: 状态(在馆、借出、预约中)

2. Reader(读者)
- reader_id: 主键,读者唯一标识
- name: 读者姓名
- phone: 读者电话
- email: 读者邮箱
- card_number: 读者证号

3. BorrowRecord(借阅记录)
- record_id: 主键,借阅记录唯一标识
- book_id: 外键,关联图书
- reader_id: 外键,关联读者
- borrow_date: 借阅日期
- return_date: 应还日期
- actual_return_date: 实际还书日期
- fine: 逾期罚款

4. Reservation(预约记录)
- reservation_id: 主键,预约记录唯一标识
- book_id: 外键,关联图书
- reader_id: 外键,关联读者
- reservation_date: 预约日期

SQLAlchemy 配置

在开始编写代码之前,我们需要配置 SQLAlchemy。以下是配置示例:

python
from sqlalchemy import create_engine, Column, Integer, String, Date, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship

Base = declarative_base()

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

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

实体定义

接下来,我们定义上述实体:

python
class Book(Base):
__tablename__ = 'books'
book_id = Column(Integer, primary_key=True)
title = Column(String)
author = Column(String)
isbn = Column(String)
category = Column(String)
status = Column(String)
borrow_records = relationship('BorrowRecord', back_populates='book')
reservations = relationship('Reservation', back_populates='book')

class Reader(Base):
__tablename__ = 'readers'
reader_id = Column(Integer, primary_key=True)
name = Column(String)
phone = Column(String)
email = Column(String)
card_number = Column(String)
borrow_records = relationship('BorrowRecord', back_populates='reader')

class BorrowRecord(Base):
__tablename__ = 'borrow_records'
record_id = Column(Integer, primary_key=True)
book_id = Column(Integer, ForeignKey('books.book_id'))
reader_id = Column(Integer, ForeignKey('readers.reader_id'))
borrow_date = Column(Date)
return_date = Column(Date)
actual_return_date = Column(Date)
fine = Column(Integer)
book = relationship('Book', back_populates='borrow_records')
reader = relationship('Reader', back_populates='borrow_records')

class Reservation(Base):
__tablename__ = 'reservations'
reservation_id = Column(Integer, primary_key=True)
book_id = Column(Integer, ForeignKey('books.book_id'))
reader_id = Column(Integer, ForeignKey('readers.reader_id'))
reservation_date = Column(Date)
book = relationship('Book', back_populates='reservations')
reader = relationship('Reader', back_populates='reservations')

功能实现

图书借阅

python
def borrow_book(book_id, reader_id):
book = session.query(Book).filter_by(book_id=book_id).first()
reader = session.query(Reader).filter_by(reader_id=reader_id).first()

if book and book.status == '在馆' and reader:
book.status = '借出'
borrow_record = BorrowRecord(
book_id=book_id,
reader_id=reader_id,
borrow_date=date.today(),
return_date=date.today() + timedelta(days=30)
)
session.add(borrow_record)
session.commit()
return True
return False

读者证管理

python
def create_reader_card(reader_id, name, phone, email):
reader = Reader(reader_id=reader_id, name=name, phone=phone, email=email)
session.add(reader)
session.commit()

逾期罚款

python
def calculate_fine(record_id):
record = session.query(BorrowRecord).filter_by(record_id=record_id).first()
if record and record.actual_return_date > record.return_date:
fine = (record.actual_return_date - record.return_date).days 1
record.fine = fine
session.commit()
return fine
return 0

预约功能

python
def reserve_book(book_id, reader_id):
book = session.query(Book).filter_by(book_id=book_id).first()
reader = session.query(Reader).filter_by(reader_id=reader_id).first()

if book and book.status == '在馆' and reader:
book.status = '预约中'
reservation = Reservation(
book_id=book_id,
reader_id=reader_id,
reservation_date=date.today()
)
session.add(reservation)
session.commit()
return True
return False

总结

本文使用 SQLAlchemy 实现了一个简单的图书馆管理系统。通过定义数据库模型、创建实体以及实现相关功能,我们构建了一个能够处理图书借阅、读者证管理、逾期罚款以及预约的图书馆管理系统。这个系统还有很多可以改进的地方,例如增加用户界面、优化数据库性能等。希望本文能对您有所帮助。