Python 语言 用 Flask SQLAlchemy 构建图书管理系统 借阅记录 + 逾期提醒 + 库存预警

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


Python Flask-SQLAlchemy 图书管理系统实现

随着数字化时代的到来,图书管理系统的需求日益增长。传统的纸质图书管理方式已经无法满足现代图书馆的需求,开发一个基于Web的图书管理系统显得尤为重要。本文将使用Python语言和Flask框架结合SQLAlchemy ORM工具,实现一个具有借阅记录、逾期提醒和库存预警功能的图书管理系统。

系统需求分析

在开始编写代码之前,我们需要对系统进行需求分析,明确系统的功能模块和业务流程。

功能模块

1. 图书管理:包括图书的增删改查功能。
2. 用户管理:包括用户的增删改查功能。
3. 借阅管理:包括借阅、归还、续借等功能。
4. 逾期提醒:自动检测逾期图书,并提醒用户。
5. 库存预警:自动检测图书库存,并提醒管理员。

业务流程

1. 用户注册并登录系统。
2. 用户浏览图书信息,选择借阅。
3. 系统记录借阅信息,并设置借阅期限。
4. 用户在借阅期限到期前归还图书,或申请续借。
5. 系统自动检测逾期图书,并提醒用户。
6. 系统自动检测图书库存,并提醒管理员。

技术选型

1. Python:作为后端开发语言。
2. Flask:作为Web框架。
3. SQLAlchemy:作为ORM工具。
4. MySQL:作为数据库。

系统设计

数据库设计

我们需要设计数据库表结构。以下是主要表的设计:

1. 图书表(books):存储图书信息。
- id:主键,自增。
- title:书名。
- author:作者。
- isbn:ISBN号。
- category:分类。
- stock:库存数量。

2. 用户表(users):存储用户信息。
- id:主键,自增。
- username:用户名。
- password:密码。
- email:邮箱。

3. 借阅记录表(borrow_records):存储借阅信息。
- id:主键,自增。
- user_id:外键,关联用户表。
- book_id:外键,关联图书表。
- borrow_date:借阅日期。
- return_date:归还日期。
- due_date:应还日期。

代码实现

以下是使用Flask和SQLAlchemy实现图书管理系统的核心代码:

python
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
db = SQLAlchemy(app)

定义模型
class Book(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(50), nullable=False)
author = db.Column(db.String(50), nullable=False)
isbn = db.Column(db.String(20), nullable=False)
category = db.Column(db.String(20), nullable=False)
stock = db.Column(db.Integer, nullable=False)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), nullable=False)
password = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(50), nullable=False)

class BorrowRecord(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
book_id = db.Column(db.Integer, db.ForeignKey('book.id'), nullable=False)
borrow_date = db.Column(db.DateTime, nullable=False)
return_date = db.Column(db.DateTime)
due_date = db.Column(db.DateTime, nullable=False)

创建数据库表
db.create_all()

借阅图书
@app.route('/borrow', methods=['POST'])
def borrow():
data = request.json
user_id = data['user_id']
book_id = data['book_id']
borrow_date = data['borrow_date']
due_date = data['borrow_date'] + timedelta(days=30)
borrow_record = BorrowRecord(user_id=user_id, book_id=book_id, borrow_date=borrow_date, due_date=due_date)
db.session.add(borrow_record)
db.session.commit()
return jsonify({'message': 'Borrowed successfully.'})

归还图书
@app.route('/return', methods=['POST'])
def return_book():
data = request.json
record_id = data['record_id']
return_date = data['return_date']
borrow_record = BorrowRecord.query.get(record_id)
borrow_record.return_date = return_date
db.session.commit()
return jsonify({'message': 'Returned successfully.'})

逾期提醒
@app.route('/overdue', methods=['GET'])
def overdue():
overdue_records = BorrowRecord.query.filter(BorrowRecord.return_date.is_(None)).all()
return jsonify([{'id': record.id, 'user_id': record.user_id, 'book_id': record.book_id, 'due_date': record.due_date} for record in overdue_records])

库存预警
@app.route('/stock', methods=['GET'])
def stock():
low_stock_books = Book.query.filter(Book.stock < 5).all()
return jsonify([{'id': book.id, 'title': book.title, 'stock': book.stock} for book in low_stock_books])

if __name__ == '__main__':
app.run(debug=True)

总结

本文介绍了使用Python、Flask和SQLAlchemy实现一个图书管理系统的过程。通过设计数据库表结构、编写核心代码,实现了图书管理、用户管理、借阅管理、逾期提醒和库存预警等功能。在实际应用中,可以根据需求进行扩展和优化。