/Library-System

基于django的图书管理系统 A library system developed by django.

Primary LanguageHTML

Library System

图书管理系统,联合开发项目,数据库(2)大作业设计,Python Django + MySQL + Bootstrap

正在积极开发中....

TODO

  • 后端基本做完了
  • 前端基本做完了
  • 更详细的功能文档已添加完成
  • 急需测试
    • 测试预约过期功能(预约10天后未成功借书的预约将邮件通知并删除预约)
    • 测试借书到期功能(借书60天后未还将邮件通知借书即将逾期)
    • 测试多管理员入库出库、多用户预约借书还书同类本书的情况
  • 邮箱功能已经上线
  • 另请查看上手文档getting started.md

用户注册界面

功能:对没有账户的用户提供注册新账户服务

  • 管理员不开放注册
  • 用户注册需要填写完整的姓名电话邮箱密码,不得留空
  • 密码需要输入两遍,并进行一致性确认
  • 对邮箱和电话进行必要格式检查
    • 邮箱包含@
    • 电话由11位数字组成
  • 密码长度至少六位
  • 邮箱不得已被注册,已注册将提示跳转登录
  • 注册成功后邮件告知读者ID
  • 数据库安全性:密码只存SHA256密文,避免脱库造成用户账号信息泄露

登录界面

功能:用户、图书管理员登录系统

  • 自动登录账户类型管理
    • 用户可以使用邮箱读者ID进行登录
    • 管理员可以通过工号进行登录
  • 提示账号或密码未输入
  • 提示账号或密码输入错误
  • 对登录成功的账号进行对应的主页自动跳转
  • 当账户不活跃时,登录状态额外保持30分钟
登录后的session:
request.session['login_type']: 读者'dz'  管理员'gly'
request.session['id']: 读者id  管理员工号 
request.session['xm']: 读者姓名 管理员姓名

读者首页界面

功能:读者首页,欢迎界面

  • 显示读者姓名信息
  • 提供书目状态查询、预约登记、个人状态查询功能的链接跳转
  • 提供退出登录选项
  • 对未登录或登录权限错误的用户重定向至登录界面
  • 后续所有读者页面都提供以上功能

读者书目状态查询界面

功能:读者线上查询图书馆各类书籍的库藏状况

  • 读者可以通过以下条件筛选书籍
    • 书名:书名包含关键字
    • 作者:作者包含关键字
    • ISBN:ISBN号以输入作为开头
    • 出版社:出版社包含关键字
  • 筛选选项可以留空,留空将不进行筛选
  • 筛选选项不能全为空
  • 查询结果包括:
    • ISBN:完整的ISBN号
    • 书名:完整的书名
    • 作者:完整的作者清单
    • 出版社:完整的出版社名称
    • 出版年月:出版年月信息
    • 库藏册数:图书馆中库藏有多少本
    • 不外借册数:图书馆阅览室中藏书数
    • 未借出册数:图书馆中位于浏览室且未被预约的图书数
    • 已借出册数:已被读者借走的图书数
    • 已预约册数:图书馆中位于浏览室且已被读者预约的图书数
  • 对于每一种符合上述筛选条件的书,给出上述查询信息

读者预约登记界面

功能:对于未借阅册数为0的图书,允许读者自行预约登记,提供预约记录查询

  • 预约有两种状态:预约成功**(尚未预约到)、预约成功(已预约到)**
  • 读者查看自己已经完成的预约登记
  • 读者通过输入正确的ISBN号进行登记
    • 拦截ISBN号未输入或不正确的预约登记
    • 拒绝登记仍有馆藏(未借阅)的图书
    • 拒绝登记重复预约(同读者同ISBN多次登记)的图书
  • 完成预约后,自动更新预约表,邮件发送预约成功通知函
  • 预约登记功能与其他功能的交互
    • 当有新书进入浏览室或有读者还书后,对预约登记更新图书id
    • 预约到图书后,邮件发送预约借书通知函,通知读者可以前来借书
    • 预约到图书并被成功借走后,删除对应预约信息
    • 预约到期未借书预约失败,邮件发送预约到期通知函
    • 当图书管理员出库被预约的图书时,邮件发送预约失效通知函

读者个人状态查询界面

功能:读者查询个人的借书状态

  • 查询结果包括:
    • 图书id:图书内部id号
    • 书名:图书名
    • 借阅时间:借阅的时间
    • 应还时间:最晚归还时间(借阅时间后60天)
    • 归还时间:尚未归还则显示“尚未归还”

管理员首页界面

功能:图书管理员首页,欢迎界面

  • 显示管理员姓名信息
  • 提供书目状态查询、借书、还书、入库、出库功能的链接跳转
  • 提供退出登录选项
  • 对未登录或登录权限错误的用户重定向至登录界面
  • 后续所有读者页面都提供以上功能
  • 额外提供图书馆状态刷新按钮
    • 清理过期的预约信息并邮件预约过期通知函
    • 提醒即将借书逾期的用户并邮件借书逾期通知函
    • 该功能每日执行一次即可
    • 该功能若上线,将被定时任务代替执行

管理员书目状态查询界面

功能:图书管理员查询图书馆各类书籍的库藏状况

(基本内容和逻辑与读者书目状态查询界面相似)

管理员借书界面

功能:图书管理员帮助读者完成借书行为

  • 录入正确的读者id和ISBN号进行借书(应由刷卡机导入数据)
    • 拦截读者id或ISBN号缺失
    • 拦截错误的读者id或ISBN号
  • 检查读者借阅书籍数是否达到上限(10本)
  • 检查该书是否被该读者成功预约到
    • 对于成功预约到图书的情况,将对应图书id的图书借阅给读者
      • 此后删除对应预约登记记录
    • 对于未预约未预约到的情况,检查是否有未借出的图书
      • 若不存在未借出图书,不允许借阅已预约的图书
      • 若存在未借出图书,则挑选一本借阅给读者
  • 对于成功借出的情况,通过邮件发送借书凭证,告知借阅的图书id

为什么使用ISBN号而非图书id进行借书行为?

我们认为:

读者借书可能不在意自己借到的是具体哪一本图书。如果使用图书id进行借书,可能会发生存在未借出图书但读者却不幸拿了已预约图书而被拒绝借书的情况。

当图书馆对已预约图书有良好的管理(即图书被预约则立即放入已预约区域中而不图书馆内读者取阅,从而杜绝上述情况发生),那么使用图书id进行借书或许是更佳的一种选择。

管理员还书界面

功能:图书管理员帮助读者完成还书行为

  • 录入正确的读者id和图书id进行还书(应由刷卡机导入数据)
    • 拦截读者id或图书id缺失
    • 拦截错误的读者id或图书id
    • 拦截读者未借阅该本图书的情况
  • 检查图书的应还时间:
    • 对于期限内归还的图书,无需缴纳费用
    • 对于逾期未还的图书,计算缴纳费用:超期天数*0.1元
  • 检查该类图书是否存在预约但未预约到的记录:
    • 若存在未预约到记录,将图书按时间顺序分配给其中第一条记录
      • 更新预约表
      • 更新书目状态为已预约
      • 发送预约借书通知函
    • 若不存在未预约到记录,更新书目状态为未借出
  • 若还书成功,邮件发送图书归还通知函

管理员入库界面

功能:图书管理员将新的图书入库

  • 一次入库必须登记ISBN号、入库数量和入库后状态(流通室或阅览室)
    • 拦截ISBN号、入库数量和入库后状态缺失
    • 拦截错误的入库数量(非正、非整数)
  • 检查图书ISBN号是否已经录入:
    • 若为旧书录入,选填书名等信息,若填写则检查信息是否正确
    • 若为新书录入,必填书名、作者、出版社和出版年月
  • 系统自动为图书分配图书id,更新各表
  • 对于分配到浏览室的每本图书,检查该类图书是否存在预约但未预约到的记录:
    • 若存在未预约到记录,将图书按时间顺序分配,更新各表,发送预约借书通知函
    • 若不存在未预约到记录,更新书目状态为未借出

管理员出库界面

功能:图书管理员将书从馆内出库

  • 一次出库必须登记ISBN号、出库数量和优先从何处出库(流通室或阅览室)
    • 拦截ISBN号、出库数量和优先从何处出库的缺失
    • 拦截错误的ISBN号(ISBN号不存在)
    • 拦截错误的出库数量
      • 非正、非整数
      • 超过馆藏总数
      • 超过馆藏总数 - 已借出图书数
  • 根据优先从何处出库选择出库策略
    • 优先从流通室出库:未借出 > 已预约 > 不外借
    • 优先从阅览室出库:不外借 > 未借出 > 已预约
  • 对于被出库的已预约图书,邮件发送预约失效通知函