轻量级图书馆借阅管理系统(读者管理、借还书记录)
为你设计一个基于Python Flask SQLite 的轻量级图书馆借阅管理系统包含读者管理与借还书记录两个核心模块。以下是完整的功能说明与代码实现。系统功能概览1. 读者管理添加读者姓名、学号/工号、联系方式查看所有读者列表删除读者2. 借还书管理借书记录读者ID、图书ID、借书日期还书更新借书记录的还书日期查看所有借还记录含读者姓名、书名、借书日期、还书日期技术栈后端Flask (Python)数据库SQLite前端HTML Bootstrap简易界面项目结构library_system/ ├── app.py ├── templates/ │ ├── index.html │ ├── readers.html │ ├── add_reader.html │ └── records.html └── library.db (自动生成)数据库表设计-- 读者表 CREATE TABLE readers ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, student_id TEXT UNIQUE NOT NULL, phone TEXT ); -- 图书表简化 CREATE TABLE books ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, author TEXT, isbn TEXT UNIQUE ); -- 借还记录表 CREATE TABLE borrow_records ( id INTEGER PRIMARY KEY AUTOINCREMENT, reader_id INTEGER NOT NULL, book_id INTEGER NOT NULL, borrow_date DATE NOT NULL, return_date DATE, FOREIGN KEY (reader_id) REFERENCES readers(id), FOREIGN KEY (book_id) REFERENCES books(id) );核心代码 (app.py)from flask import Flask, render_template, request, redirect, url_for import sqlite3 from datetime import date app Flask(__name__) DATABASE library.db def get_db(): conn sqlite3.connect(DATABASE) conn.row_factory sqlite3.Row return conn def init_db(): with app.app_context(): db get_db() db.execute(CREATE TABLE IF NOT EXISTS readers (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, student_id TEXT UNIQUE NOT NULL, phone TEXT)) db.execute(CREATE TABLE IF NOT EXISTS books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, author TEXT, isbn TEXT UNIQUE)) db.execute(CREATE TABLE IF NOT EXISTS borrow_records (id INTEGER PRIMARY KEY AUTOINCREMENT, reader_id INTEGER NOT NULL, book_id INTEGER NOT NULL, borrow_date DATE NOT NULL, return_date DATE, FOREIGN KEY(reader_id) REFERENCES readers(id), FOREIGN KEY(book_id) REFERENCES books(id))) # 插入示例图书 if db.execute(SELECT COUNT(*) FROM books).fetchone()[0] 0: sample_books [ (Python编程从入门到实践, Eric Matthes, 978-7-115-54608-1), (数据结构与算法分析, Mark Allen Weiss, 978-7-111-12345-6), (计算机网络, James F. Kurose, 978-7-302-45678-9) ] for title, author, isbn in sample_books: db.execute(INSERT INTO books (title, author, isbn) VALUES (?, ?, ?), (title, author, isbn)) db.commit() app.route(/) def index(): return render_template(index.html) # ---- 读者管理 ---- app.route(/readers) def readers_list(): db get_db() readers db.execute(SELECT * FROM readers).fetchall() return render_template(readers.html, readersreaders) app.route(/add_reader, methods[GET, POST]) def add_reader(): if request.method POST: name request.form[name] student_id request.form[student_id] phone request.form.get(phone, ) db get_db() try: db.execute(INSERT INTO readers (name, student_id, phone) VALUES (?, ?, ?), (name, student_id, phone)) db.commit() except sqlite3.IntegrityError: return 学号已存在请重新输入 return redirect(url_for(readers_list)) return render_template(add_reader.html) app.route(/delete_reader/int:id) def delete_reader(id): db get_db() db.execute(DELETE FROM readers WHERE id?, (id,)) db.commit() return redirect(url_for(readers_list)) # ---- 借还书管理 ---- app.route(/records) def records(): db get_db() records db.execute( SELECT br.id, r.name AS reader_name, b.title AS book_title, br.borrow_date, br.return_date FROM borrow_records br JOIN readers r ON br.reader_id r.id JOIN books b ON br.book_id b.id ORDER BY br.borrow_date DESC ).fetchall() return render_template(records.html, recordsrecords) app.route(/borrow_book, methods[GET, POST]) def borrow_book(): db get_db() if request.method POST: reader_id request.form[reader_id] book_id request.form[book_id] today date.today().isoformat() db.execute(INSERT INTO borrow_records (reader_id, book_id, borrow_date) VALUES (?, ?, ?), (reader_id, book_id, today)) db.commit() return redirect(url_for(records)) readers db.execute(SELECT * FROM readers).fetchall() books db.execute(SELECT * FROM books).fetchall() return render_template(borrow_book.html, readersreaders, booksbooks) app.route(/return_book/int:record_id) def return_book(record_id): db get_db() today date.today().isoformat() db.execute(UPDATE borrow_records SET return_date? WHERE id?, (today, record_id)) db.commit() return redirect(url_for(records)) if __name__ __main__: init_db() app.run(debugTrue)HTML 模板示例templates/index.html!DOCTYPE html html langzh head meta charsetUTF-8 title图书馆借阅管理系统/title link hrefhttps://cdn.jsdelivr.net/npm/bootstrap5.3.0/dist/css/bootstrap.min.css relstylesheet /head body classcontainer mt-4 h1 图书馆借阅管理系统/h1 div classlist-group mt-3 a href/readers classlist-group-item list-group-item-action 读者管理/a a href/records classlist-group-item list-group-item-action 借还书记录/a a href/borrow_book classlist-group-item list-group-item-action 借书/a /div /body /htmltemplates/readers.html{% extends base.html %} {% block content %} h2读者列表/h2 a href/add_reader classbtn btn-success mb-3添加读者/a table classtable table-bordered theadtrthID/thth姓名/thth学号/thth电话/thth操作/th/tr/thead tbody {% for r in readers %} tr td{{ r.id }}/td td{{ r.name }}/td td{{ r.student_id }}/td td{{ r.phone or }}/td tda href/delete_reader/{{ r.id }} classbtn btn-danger btn-sm删除/a/td /tr {% endfor %} /tbody /table a href/ classbtn btn-secondary返回首页/a {% endblock %}其他模板类似可根据需要扩展。如何运行安装依赖pip install flask保存以上代码为app.py创建templates文件夹并放入上述 HTML 文件。运行python app.py打开浏览器访问http://127.0.0.1:5000可扩展功能建议✅ 图书查询与搜索✅ 借书超期提醒逾期罚款✅ 读者借阅历史统计✅ 管理员登录权限控制✅ 导出 Excel / CSV 报表如果需要我帮你扩展某个具体功能如“超期罚款计算”或“图书搜索”可以告诉我。