毕业设计-基于Python的图书馆管理系统

1. 系统定位:图书馆管理系统——读者在线查书/借书/还书 +
管理员后台管理图书,主打"轻量化"(论文原话"轻量化开发,
只完成图书管理系统最本质的工作")。
2. 技术栈(这篇的最大特色,交代得非常具体):
Python 3.6.4 + Django 3.2.12 + MySQL + PyCharm +
Navicat 15 + pymysql驱动。版本号都写明了,答辩前要记住。
★注意版本逻辑:论文说"因为Python是3.6.4,低版本Django
不支持Python3,故用Django 3.2.12"——这句话逻辑是反的
(应是"低版本Django不支持新版Python"或"高版本Django
不支持Python3.6"),Django 3.2是LTS长期支持版,适配
Python3.6-3.10,答辩要能说圆。
3. 两类角色+三个界面:
- 前台(游客/用户):图书列表(每页6本分页)、搜索
(书名/分类/作者/状态)、图书详情(收藏/评论/赞/踩/
借阅)、系统公告、信息反馈(留言板)、个人中心
- 用户后台:个人中心、图书借阅管理(可发起归还)、
图书归还管理
- 管理员后台(Django-Admin):用户管理、图书分类管理、
图书信息管理、图书借阅管理(审核)、图书归还管理
(审核+入库)、图书入库管理、信息反馈(回复)、
系统管理(轮播图/系统公告)
4. 核心业务闭环(答辩主线):
管理员入库图书 → 用户搜索/浏览 → 申请借阅(待审核) →
管理员审核通过 → 生成借阅记录(借阅天数/应还日期) →
用户发起归还 → 管理员审核归还+图书入库 → 库存恢复。
5. 8张数据表:图书借阅表、图书归还表、图书分类表、
图书入库表、系统公告表、信息反馈表、用户信息表、
图书信息表。全部拼音字段(tushubianhao图书编号、
jieyuetianshu借阅天数、yinghairiqi应还日期、
sfsh是否审核默认待审核、shhf审核回复)。
6. Django-Admin是本系统的重头戏(论文2.2节花了大篇幅):
"一行代码即可管理一张数据库表"(admin.site.register),
相比手动后台1个模型要4个urls+4个视图+4个模板,
Admin自带增删改查,对"以管理工作为重"的图书系统极度契合。
7. MTV模式(论文口径):Django将MVC的View拆成View+Template,
View管逻辑,Template管页面,Model管数据,View把两者
连起来——"每一部分只做一件事,耦合度大大降低"。
8. ORM三原则(论文原文,可能考):简单(最基本形式构建
数据)、传达性(数据库结构被任何人都能理解的语言文档化)、
精确性(基于数据模型创建正确标准化的结构)。
9. 测试方法:动态测试+黑盒测试。测试细节比一般模板论文
真实得多:借阅扣库存、库存归零不能借、库存为负不能借、
分页首页点上一页不跳转、搜索大小写切换、书名切片模糊
搜索、两次密码不同注册不通过等——都是可复述的真用例。
10. 系统自述的不足(结论章原文,答辩"缺点"题直接用):
界面生硬、未加Django Comments库、没爬虫爬书目、
没做读书喜好数据分析、没配专业服务器、无真实图书内容
——"只能算一个雏形"。
================================================================
【一、论文结构总览】(六章26页,每章带"小结"是本篇格式特色)
================================================================
1 绪论
1.1 开发背景和意义(图书馆系统60年代末起源→90年代末
革命性变革的历史脉络写得很完整)
1.2 论文的结构(逐章说明)
1.3 小结
2 相关技术简介及部署环境说明
2.1 Python(90年代Guido设计、胶水语言、知乎/豆瓣/
Youtube都是Python开发)
2.2 Django(MTV、ORM三原则、URLConf、Template、View、
Django-Admin、App应用概念)
2.3 PyCharm(JetBrains IDE)
2.4 MySQL(瑞典MySQL AB、体积小速度快开源)
2.5 Navicat Premium(香港卓软数码、Navicat15)
★注意:目录里没有2.5条目(目录从2.4直接跳2.6),正文有2.5
2.6 小结
3 需求分析
3.1 可行性分析(经济/市场/技术/用户使用/法律——五维,
比一般论文多"市场"和"法律"两维)
3.2 需求分析(6条功能需求)
3.3 小结
4 系统总体设计
4.1 总体模块设计(查询借阅模块/后台模块/管理员模块/
注册登录模块四大块)
4.2 模型的设计(8张表结构)
4.3 系统的E-R图(用户层面E-R图一张)
4.4 小结
5 系统详细设计与实现
5.1 前台功能模块(图5-1~5-6)
5.2 管理员功能模块(图5-7~5-15)
5.3 小结
6 系统测试
6.1 软件测试的定义
6.2 图书列表页模块测试(借阅/分页/图书简介/搜索)
6.3 归还模块测试
6.4 注册、登录模块测试
6.5 小结(动态测试+黑盒测试)
结论(含大段自我批评式不足陈述)/ 参考文献15篇 / 致谢
================================================================
【二、核心技术点精讲】(答辩必问,逐个吃透)
================================================================
■ Django-Admin(本系统管理员端的实现方式,最重要)
- 来自django.contrib标准库,settings.py INSTALLED_APPS
里默认启用,超级用户 python manage.py createsuperuser。
- 每个模型只需 admin.site.register(模型名) 一行代码,
就获得列表页/详情页/增删改查/搜索/过滤。
- 定制能力:ModelAdmin类可配置 list_display(列表显示
哪些列)、search_fields(可搜索字段)、list_filter
(侧边过滤器)——对应论文里"图书借阅管理可按图书编号/
名称/账号/是否通过查询"。
- 答辩被问"你的后台怎么做的":诚实答"基于Django-Admin
二次定制",并强调这是Django官方推荐做法,不是偷懒。
■ MTV与MVC的映射(口诀)
Django M(Model) = MVC的M(数据处理)
Django T(Template) = MVC的V(页面展示)
Django V(View) = MVC的C(逻辑调度)
论文说法:"Django将MVC设计模式中的视图分成了View模块和
Template模块两部分"。
■ ORM与pymysql
- Python类定义模型,类属性=数据库列;ORM把面向对象调用
映射成SQL,通过pymysql执行(论文原话)。
- Python3不再支持MySQLdb模块,所以用pymysql
(装法:pip install pymysql,并在项目__init__.py里
import pymysql; pymysql.install_as_MySQLdb())。
- settings.py数据库配置:ENGINE=
django.db.backends.mysql + NAME/USER/PASSWORD/HOST/PORT。
■ 分页实现(论文"每页六个")
- Django自带Paginator:Paginator(book_list, 6),
page = paginator.get_page(page_num),模板里渲染
object_list和page.has_previous/has_next。
- 测试细节呼应:首页点"上一页"不跳转=page.has_previous()
为False时按钮禁用。
■ 搜索实现(模糊查询)
- Django ORM的 __icontains(不区分大小写包含查询):
Book.objects.filter(tushumingcheng__icontains=kw)
——正好对应论文测试"输入字母频繁大小写切换也能搜到";
书名切片搜索=icontains本身就是模糊匹配子串。
■ 借阅审核机制
- sfsh字段默认"待审核",管理员在借阅管理里审核;
- 归还同样有sfsh待审核+shhf审核回复;
- 归还审核通过后管理员执行"图书入库"操作恢复库存。
================================================================
【三、数据库设计拆解】(8张表,重点记4张)
================================================================
★ 表4.1 图书借阅表(核心业务表):
jieyuebianhao借阅编号 / tushubianhao图书编号 /
tushumingcheng图书名称 / tushufenlei图书分类 /
fengmian封面(longtext) / zuozhe作者 /
jieyuetianshu借阅天数(int) / jieyueriqi借阅日期(date) /
yinghairiqi应还日期(date) / beizhu备注 / zhanghao账号 /
xingming姓名 / shouji手机 / sfsh是否审核(默认待审核) /
shhf审核回复 —— 借阅天数+借阅日期推算应还日期。
★ 表4.2 图书归还表:
guihaibianhao归还编号 / tushubianhao/mingcheng/fenlei /
fengmian / zuozhe / yinghairiqi应还日期 /
guihairiqi归还日期(date) / zhanghao/xingming/shouji /
sfsh待审核 / shhf审核回复 —— 与借阅表结构对称,
归还时对照应还日期可判断是否逾期。
★ 表4.8 图书信息表(主数据表):
tushubianhao图书编号 / tushumingcheng图书名称 /
tushufenlei图书分类 / fengmian封面 / zuozhe作者 /
chubanshe出版社 / tushuzhuangtai图书状态(在馆/借出) /
tushujianjie图书简介(longtext) / thumbsupnum赞(默认0) /
crazilynum踩(默认0) / clicktime最近点击时间 /
clicknum点击次数(默认0) —— 赞踩点击三计数与美食课题
同款模板结构。
★注意:此表没有"库存数量"字段!但测试章节说"借阅一本
查看图书数量是否减少、数量归零能否借出、数量为负不能借"——
表结构里根本没有数量字段,测试与表设计对不上(见雷点5)。
★ 表4.7 用户信息表:
zhanghao账号 / xingming姓名 / mima密码 / xingbie性别 /
touxiang头像(longtext) / shouji手机 —— 简洁的六字段。
其余表速记:图书分类表(tushufenlei单字段)、图书入库表
(编号/名称/分类/封面/作者/rukushijian入库时间)、系统公告表
(title/introduction/picture/content)、信息反馈表
(userid/username/avatarurl/content+cpicture留言图片/
reply+rpicture回复图片——支持图文留言和图文回复)。
----------------------------------------------------------------
E-R图:论文只给了"用户层面"一张总E-R图(图4.1),说"从
管理员的层面来说,管理员可以管理此系统中的所有实体"——
没有逐实体E-R图(比问卷课题5张E-R图少),答辩被问E-R细节
就按"用户-图书借阅-图书-图书归还"的主线口述。
----------------------------------------------------------------
================================================================
【四、功能实现细节】(对着截图能讲出来)
================================================================
前台(游客+用户):
1. 首页:首页、图书信息、系统公告、信息反馈、后台管理
五个入口;图书列表每页6本,分页切换。
2. 注册:账号/姓名/密码/性别,两次密码校验。
3. 图书信息:四种搜索字段(名称/分类/作者/状态);
详情页可收藏、评论、赞、踩、借阅。
4. 借阅操作:填写借阅天数等提交,状态"待审核"。
5. 信息反馈:查看别人的留言+自己发布(可带图)。
6. 个人中心:改个人信息、退出登录、我的收藏管理。
用户后台:
- 图书借阅管理:查看自己借阅详情,发起"归还"操作。
- 图书归还管理:查看归还记录。
管理员后台(Django-Admin):
1. 用户管理:按账号/姓名/性别查询,增删改。
2. 图书分类管理:分类名称增删改。
3. 图书信息管理:四字段查询,新增/修改/查看评论/
回复评论/删除。
4. 图书借阅管理:按图书编号/名称/账号/是否通过查询,
审核借阅申请。
5. 图书归还管理:审核归还+图书入库(恢复在馆状态)。
6. 图书入库管理:入库记录维护。
7. 信息反馈:查询/修改/回复/删除。
8. 系统管理:轮播图、系统公告。
================================================================
【五、PPT逐页要点】(22页)
================================================================
P1 封面:题目+"汇报人姓名:""汇报时间:"(★两处都空着!)
P2 摘要(论文摘要全文)
P3 概述-开发背景(60年代末起源→90年代末变革)
P4 开发意义(特性1-3:高自由度/互动性强/展现形式丰富)
P5 开发意义续(特性4-5:高检索率/节省资源)
P6 论文的结构+第1章小结
P7 Python简介(3.6.4版本、知乎/豆瓣/Youtube案例)
P8 Django简介(MTV、ORM三原则)
P9 Django续(URLConf/Template/View/Django-Admin/App
六大核心+版本3.2.12)
P10 PyCharm + MySQL(pymysql连接)
P11 Navicat + 2.6小结
P12 系统的E-R图(★只有一张E-R图,无文字说明)
P13 系统前台界面图
P14 图书信息详情界面图
P15 图书借阅界面图
P16 个人中心界面图
P17 管理员登录界面图
P18 管理员功能界面图
P19 用户后台功能界面图
P20 结论(含全部"不足"自述——PPT照搬论文结论全文,
把"只能算一个雏形"这种自贬话术放PPT上有风险,
答辩老师容易顺着追问,建议PPT版精简不足表述)
P21 致谢(论文致谢全文)
P22 THE END!谢谢观看 2022(★年份"2022"残留,若2026年
答辩需更新或删除)
PPT与论文的差异点:
- PPT结构=论文前两章全文+图集+结论致谢,缺了需求分析、
总体设计(模块设计)、系统测试三大块的文字内容
(测试只有论文6章可讲,PPT没放)。
- PPT每页都有两张装饰图片(提取时显示连续[图片])。
- PPT P12 E-R图页无任何文字解释,讲的时候要自己补:
"这是系统用户层面的E-R图,实体包括用户、图书、借阅、
归还、公告、反馈,用户与图书通过借阅/归还产生联系"。
- PPT没有参考文献页。
================================================================
【六、答辩高频问题预测】(14问,含参考答案要点)
================================================================
Q1 借阅流程完整走一遍?
A:管理员图书入库→用户前台搜索图书(名称/分类/作者/
状态四字段)→详情页点借阅→填写借阅天数提交,生成
借阅记录(sfsh=待审核)→管理员借阅管理审核通过→
图书状态改为"借出"→到期用户在个人后台发起归还→
管理员归还管理审核→执行图书入库,状态恢复"在馆"。
Q2 应还日期怎么计算的?
A:借阅日期+jieyuetianshu借阅天数。Django里
yinghairiqi = jieyueriqi + timedelta(days=n)。
归还时比较guihairiqi与yinghairiqi判断逾期。
Q3 为什么选Django-Admin做后台而不是自己写?
A:①Admin是Django标准库自带,admin.site.register
一行代码获得完整增删改查+搜索+过滤,开发效率高;
②图书管理系统以管理操作为重,Admin的列表+表单模式
契合;③Admin有权限体系(staff/superuser)和操作日志。
定制上用ModelAdmin的list_display/search_fields/
list_filter满足查询需求。
Q4 MTV和MVC的关系?
A:Django把MVC的View拆成Template(页面)+View(逻辑),
即 Django的View≈MVC的Controller,Django的Template≈
MVC的View,Model不变。好处是逻辑与展示分离,
模板可继承复用。
Q5 同一本书被两个人同时借阅怎么处理?(并发经典题)
A:借阅事务里先检查tushuzhuangtai是否"在馆",借出
改状态为"借出";并发下可能超借,严谨做法是
select_for_update()行锁或给状态加唯一约束/乐观锁,
甚至Redis分布式锁。诚实答"当前版本单机低并发没出
问题,高并发场景需要加锁"。
Q6 图书状态和库存数量什么关系?
A:本系统用tushuzhuangtai字段(在馆/借出)表达单本
借阅状态,是"一馆一本书一条记录"模型。若同一书目
有多本馆藏,应扩展kucunshuliang(库存数)字段,
借阅-1、归还+1。论文测试提到"数量减少/归零/为负",
说明设计意图是多本模型,但表里没建数量字段——
被问到就答"当前版本以状态字段实现,数量字段列入
扩展"。
Q7 数据库表之间的关联怎么设计的?
A:以zhanghao/tushubianhao做软关联(借阅表、归还表
都冗余存了图书名称、分类、封面、作者)——为查询
性能做的反范式冗余,代价是图书改信息时借阅记录
不联动。严格设计应用外键(ForeignKey),这里用冗余
换查询简单,答辩可主动讲权衡。
Q8 为什么要审核借阅/归还?
A:①控制馆藏流转(确认书在馆才放借);②记录经手人
与时间,责任可追溯;③防止恶意占用。sfsh待审核+
shhf审核回复是通用审核字段设计。
Q9 搜索功能怎么实现的?大小写都能搜到?
A:Django ORM的__icontains查询(SQL层面LIKE,
MySQL默认不区分大小写校验规则),所以大小写切换
都能命中;书名切片搜索本质是子串模糊匹配LIKE
'%切片%'。
Q10 分页怎么实现的?
A:Django Paginator(books, 6)每页6条,视图get_page
处理页码越界,模板用has_previous/has_next控制
上下页按钮——对应测试用例"第一页点上一页不跳转"。
Q11 测试怎么做的?举个具体用例?
A:动态测试+黑盒测试。举例:借阅模块——借一本看数量
是否-1;重复借到数量为0时不能借出且有提示;管理员
误操作致数量为负时用户不能借阅;归还后数量恢复。
注册模块——两次密码不同不通过;不规范姓名有提示;
非纯数字学号有提示。
Q12 系统不足与改进?(论文结论原文+延展)
A:论文自述:界面生硬、未加Comments库、无爬虫爬书目、
无读书喜好数据分析、无专业服务器、无真实图书内容。
延展答法:①库存数量字段缺失(多本馆藏场景);
②无续借/预约功能;③无逾期提醒(可用Celery定时
任务扫描yinghairiqi发站内信);④推荐系统(借阅
历史做协同过滤);⑤前后端分离(DRF)。
Q13 Python 3.6.4 + Django 3.2.12 这组合有什么讲究?
A:Django 3.2是LTS长期支持版(支持到2024年4月),
兼容Python 3.6-3.10,3.6.4配3.2.12是稳定组合。
注意:Python3.6本身2021年12月已停止官方支持,
现在新项目建议Python3.10+Django4.2 LTS——被问到
版本老就答"开发时点考虑的是稳定性与教程生态"。
Q14 部署方式?
A:开发用runserver;生产 uWSGI/Gunicorn + Nginx +
MySQL,静态文件collectdata收集后由Nginx直供,
DEBUG=False。论文自述"没有为平台配置专业服务器"
是诚实不足项。
================================================================
【七、高危雷点清单】(模板套用痕迹与数据矛盾,答辩前必查)
================================================================
雷点1【英文摘要串台·必改】Abstract里写"a simple and
light book recommendation system"(图书推荐系统)、
功能模块写成"message board"(留言板)、关键词
"Book recommendation system"——中文摘要是"图书馆管理
系统/信息反馈",中英文不对应,模板来自"图书推荐系统"
的痕迹。英文摘要必须重写对齐。
雷点2【目录缺2.5】目录从2.4 MySQL直接跳2.6小结,正文
里其实有"2.5 Navicat Premium简介"——目录漏编2.5,
答辩前更新目录域。
雷点3【版本逻辑表述反了】2.2节"因为本次使用的Python版本
为3.6.4,低版本的Django不支持Python3,故此次使用的
Django版本为3.2.12"——因果混乱:不是"低版本Django不
支持Python3",而是3.6.4这个Python版本不能配太高版本
Django。表述要改成"选用对Python 3.6兼容的LTS版Django
3.2.12"。
雷点4【序号断档】3.2需求分析6条功能列表用(1)-(6)连续,
但4.1模块设计里"注册、登录模块"标题下无内容(正文
"注册、登录模块"五个字后面直接就是4.2),疑似内容
丢失;另5.2管理员功能模块里"图书借阅管理""图书归还
管理"两段没有编号小标题(其他功能都有),格式不统一。
雷点5【表结构与测试矛盾】图书信息表只有tushuzhuangtai
状态字段,没有库存数量字段;但6.2测试大谈"图书数量
减少/归零/为负"。要么给图书表加kucunshuliang字段,
要么改测试口径为状态判断,二者必须对齐。
雷点6【信息反馈表头像字段冗余】表4.6信息反馈表存了
avatarurl头像——留言表带头像字段是通用评论模板结构
(与美食课题评论表同源),本系统用户表也有头像,属
冗余存储,无伤大雅但可说明来源。
雷点7【参考文献跑题】[9]马卫《基于ASP.NET的博客系统的
设计与实现》("基ASP.NE"还有错字,掉了T)——ASP.NET
博客系统与Python图书馆无关;[11]周仁平《教育技术学术
博客研究》同样跑题;[1]王兆媛缺编号[1]标号(格式
断档从[2]才开始有标号)。参考文献需补Django/图书馆
主题文献替换。
雷点8【PPT封面双空位+年份残留】P1"汇报人姓名:""汇报
时间:"全空;P22"THE END!谢谢观看 2022"——2026年
答辩必须改掉"2022"。
雷点9【PPT结论页自贬风险】P20原样照搬论文结论,含
"只能算上一个雏形,所达到的标准只能令我自己勉强
满意"——答辩PPT主动暴露如此多不足且措辞自贬,
容易引导老师追问,建议改为"核心功能已完整实现,
个性化推荐等功能列入后续迭代"。
雷点10【元数据泄露】论文doc元数据:作者"实践教学管理
中心卜迟武"、最后修改人"泽鸿 李"、Company"番茄花园"
(番茄花园是知名盗版系统论坛名,说明Word可能是
番茄花园Ghost版Office装的);PPT元数据最后修改人
也是"泽鸿 李"。提交前用"文件-信息-检查文档"清除。
雷点11【摘要与正文模块不一致】中文摘要功能列表是
"用户管理、图书管理、图书借阅、图书归还、图书入库、
信息反馈、系统管理"七模块,正文4.1的模块划分却是
"查询借阅模块/后台模块/管理员模块/注册登录模块"四大
块——两套划分口径并存,答辩讲模块时先声明口径:
"按角色分前台/后台,按功能分七大模块"。
雷点12【测试章节位置错乱】6.5小结段落末尾直接黏着
"结 论"标题("……减少差错。结 论"连排),格式错误;
且第6章标题"6 系统测试"与6.1"软件测试的定义"之间
只讲定义没讲方法论(黑盒/动态测试在小结才出现),
结构建议调整:6.1定义→6.2方法→6.3-6.5用例。
================================================================
【八、知识延展】(资料之外,让自己答得比别人深)
================================================================
1. 图书馆系统行业演进(背景题加分素材):
- 第一代:卡片目录+手工登记(论文背景里的60年代前)
- 第二代:单机C/S管理系统(90年代,MARC机读目录)
- 第三代:B/S WebOPAC在线检索(本系统所处层次)
- 第四代:RFID自助借还+移动图书馆App(参考文献[6]
提到RFID,可延伸:RFID标签替代条码,自助借还机
识读,盘点机器人巡架)
- 第五代:智慧图书馆(大数据选书、AI推荐、座位预约、
信用借阅芝麻分免押金)
2. MARC编目与中图法(专业加分点):
真实图书馆用MARC21/CNMARC机读目录格式编目,分类用
《中国图书馆分类法》(中图法,如TP312=程序语言、
I247.5=当代长篇小说)。本系统的"图书分类"表只有
分类名字符串,可延伸"真实场景应加中图法分类号字段
clfhao,支持分类号排架检索"。
3. 逾期与预约的业务闭环(改进方向标配答案):
- 逾期:Celery定时任务每天扫描yinghairiqi<今天且
未归还的记录→发站内通知/邮件;逾期罚金规则
(元/天)在配置表维护。
- 预约:预约表(id+图书id+用户id+排队序号),书归还
入库后触发通知队首用户,保留N天不借则顺延。
- 续借:借阅记录加续借次数字段,最多续借2次每次
30天,有预约时禁续借。
4. 并发借阅的数据库层方案(Q5的深化):
- 悲观锁:SELECT * FROM book WHERE id=x FOR UPDATE
(Django: Book.objects.select_for_update().get())
- 乐观锁:版本号字段,UPDATE ... WHERE version=n,
影响行数=0则重试
- 原子UPDATE:UPDATE book SET stock=stock-1 WHERE
stock>0,天然防负库存。
5. Django权限体系(Admin后台安全话题):
User模型自带is_staff/is_active/is_superuser三开关;
Group组+Permission权限点(add_book/change_book…);
自定义权限用Meta的permissions。答辩问"管理员权限
怎么控制"时可展开。
6. 借阅数据做推荐(呼应英文摘要残留的"recommendation"):
用户-图书借阅矩阵做ItemCF:同被借的书相似度高;
"借了A的人也借了B";冷启动用图书分类+热度;
(clicknum/thumbsupnum)兜底。这样还能把英文摘要的;
"recommendation system"圆回来。
7. 分页的性能优化(数据量大时):
Paginator深分页LIMIT 100000,6会慢,可改游标分页;
(WHERE id > last_id LIMIT 6)或延迟关联;
更多推荐


所有评论(0)