基于Python Web框架和MySQL的图书借阅系统

4

主题

7

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2022-11-30 17:12:52 | 显示全部楼层
1.需求分析

1.1 系统目标

利用Python web框架和MySQL开发一个仿真模拟的图书借阅系统。分为管理员和读者两个方面的功能实现。
1.1.1 管理员方面


  • 增、删、改、挂失图书信息和读者信息
  • 查看用户信息和图书信息
  • 登录管理员界面
  • 为读者办理借书还书
1.1.2 读者方面


  • 登录读者界面
  • 查询借书记录和个人信息
1.2 数据流图

1.2.1 读者注册





1.2.2 图书上架





1.2.3 图书搜索





1.2.4 图书借阅





1.2.5 借书记录搜索





1.2.6 登陆





1.2.7 图书、读者证挂失





1.2.8 图书、读者删除





1.3 数据字典

1.3.1 数据项

数据项名别名数据类型说明
读者编号reader_idvarchar(5) PK读者证的编号按顺序系统分配
姓名reader_namevarchar(20)读者姓名
性别sexchar(2)读者性别
出生日期birthdaydate读者出生日期
电话phonevarchar(20)读者电话
手机mobilevarchar(20)读者手机
证件名称card_namevarchar(8)读者的证件可以是身份证学生证等
证件编号card_idvarchar(18)读者的证件号
会员级别levelvarchar(6)有三个级别,普通银卡金卡
办证日期daydate即注册日期
读者登录密码Password(Readers表)varchar(45)读者登录系统中时使用的密码
图书编号book_idvarchar(5)图书的编号系统分配
书名book_namevarchar(50)书的名字
作者authorvarchar(20)书的作者
出版社publishingvarchar(20)书的出版社
类别编号category_idvarchar(5)书的类别编号
单价pricedouble书的价格
入库日期date_indatetime入库的时间即图书上架时间
库存数量quantity_inint上架的书的数量
借出数量quantity_outint书借出去的数量
遗失数量quantity_lossint书的丢失的数量
出借日期date_borrowdate书借出去的日期在借阅中生成
应还日期date_returndate根据会员的级别确定的日期
遗失losschar(2)有“否”“是”区分书是否丢失了
类别名称categoryvarchar(20)类别的名字如“计算机”
最长出借天数dayssmallint根据会员级别相应天数
最多借书册书numberssmallint根据会员级别能借最多的书
会费feesmallint会员级别所要的费用(单位:元)
管理员IDUser_IDVarchar(20)管理员登录用ID
管理员密码Password(admin表)Varchar(20)管理员登录用密码
1.3.2 数据结构


  • 数据结构名:读者证
  • 说明:定义了读者的信息
  • 组成

    • reader_id,
    • reader_name,
    • sex,
    • birthday,
    • phone,
    • mobile,
    • card_name,
    • card_id,
    • level,
    • day



  • 数据结构名:图书信息
  • 说明:定义了一本书的信息
  • 组成:

    • book_id,
    • book_name,
    • author,
    • publishing,
    • category_id,
    • price,
    • date_in,
    • quantity_in,
    • quantity_out



  • 数据结构名:借阅信息
  • 说明:用户借阅书的信息
  • 组成:

    • reader_id,
    • book_id,
    • date_borrow,
    • date_return,
    • loss



  • 数据结构名:会员等级
  • 说明:定义了会员的等级
  • 组成:

    • level,
    • days,
    • numbers,
    • fee


2.概念设计

2.1 系统ER图





3.详细设计

3.1关系模型


  • 会员级别:{会员级别,最长出借天数,最多借书书册,会费}
  • 读者:{读者编号,姓名,电话,手机,性别,办证日期,出生日期,证件名称,证件编号,会员级别,密码}
  • 借阅:{图书编号读者编号,借阅日期,归还日期}
  • 图书:{图书编号,书名,作者,出版社,类别编号,单价,入库日期,库存数量,出借数量,遗失数量}
  • 读者管理:{管理员编号读者编号,遗失日期}
  • 类别:{类别编号,类别名称}
  • 管理员:{管理员编号,密码}
3.2 物理结构设计

3.2.1 Readers表





3.2.2 Books表





3.2.3 Borrow表





3.2.4 Member_level表





3.2.5 Lost_card表





3.2.6 Admin表





4.系统实现

4.1 程序框图

4.1.1 总框图





4.1.2 登录操作框图





4.1.3 管理员操作框图









4.1.4 读者操作框图





4.2 运行界面

4.2.1 登陆界面

登录界面可以输入用户名和密码登录,两种不同用户组的登陆界面可以通过menu上的标签切换,在程序里是直接读取两个html文件(根目录下的member.html 和 administer.html)然后通过浏览器提出get请求完成操作。登录是提交get请求,登录信息在超链接里,后端分析登录信息做出判断。登录成功后会跳转相关界面,然后在根目录下产生一个user.txt,里面记录了登录用户的用户组和用户名,如a:root就代表管理员“root”、m:r001就代表读者“r001”。
会员登录界面



管理员登陆界面



4.2.2 管理员

所有操作都是通过get请求将信息返回给后端程序的。所有管理员的操作都要通过判断根目录下的登录信息文件user.txt里面的首字母来判断当前操作的用户是否拥有权限。
图书信息表展示界面(外观模版为admin/adminBook.html)



添加书籍界面(外观模版为admin/adminBookNew.html)



修改书籍界面(外观模版为admin/adminBookEdit.html)



读者信息表显示界面(外观模版为admin/adminReader.html)





注册新读者界面(外观模版为admin/adminReaderNew.html)



修改读者信息界面(外观模版为admin/adminReaderEdit.html)



借书记录管理界面(外观模版为admin/adminRecord.html)



4.2.3读者

个人资料界面(外观模版为member/memberInfo.html)



借书纪录界面(外观模版为member/memberHistory.html)



搜索图书界面(外观模版为member/memberBorrow.html)



4.2.4控制台

开始界面



Get请求path详情



出错信息



操作



输出信息打印



5.用户使用说明

5.1 编程语言


  • 服务器: Python 2.7
  • 前端: HTML + JavaScript + CSS
5.2 依赖库


  • 服务器库:BaseHTTPServer
  • 连接MySQL库:MySQLdb
  • 控制台设置库:Sys
  • URL解析库:Urllib
  • 时间库:Time
  • 时间库:Datetime
  • 操作系统库:os
5.3 编码方式


  • 前端网页:GBK
  • 服务器端:GBK
  • 数据库:UTF-8
5.4 运行环境


  • 服务器:Windows7 SP1旗舰版 + Python2.7
  • 前端:Opera浏览器 34.0(Chrome内核)
  • 数据库:MySQL Server 5.5(默认端口3306)
6.实验总结问题与解决

6.1 实验总结

在这个大作业实验中,我学会了很多东西,不仅更了解了数据库连接的方式和数据库的操作,还学会了使用Python搭建一个服务器和javascript语言。我也通过这次实验,深刻的考虑到了用户体验的需求,我们开发软件不仅要注重程序的完整性,更要关注界面以及操作对于用户的体验。一个好的程序必须是良好的用户体验加上完整的系统,缺一不可。我也通过这次实验了解到了web开发中前端和后端是如何交互的,比如说get请求的处理、post请求的处理,还有表单的递交、url的解析、编码的统一等等。我还学会了使用触发器来控制数据库的操作,以防非法操作,这比在程序中来判断更具有完整性,因为在程序中很有可能没有想到,而建立了触发器就可以在数据库端就把非法信息隔绝。
6.2 遇到的问题与解决

6.2.1 服务器、前端、url、数据库的编码不统一怎么办?

服务器使用的是Python 2.7,这个版本的Python使用的是全局Unicode编码,前端网页使用的是GB2312的中文编码,url使用的是UTF-8编码,数据库使用的是UTF-8编码。
解决方法
服务器在通过转换设置为全局GBK编码,因为GBK编码包括了GB2312编码的部分,然后对于所有接收到的信息都解码然后转换为GBK编码,在服务器端统一编码。
6.2.2 自动分配ID的机制如何实现?

我们在读者和图书的添加操作的时候,如果需要用户输入编号就不太人性化,但是自动生成有可能会在删除书籍的时候重复。
解决方法
计算最大的编号,在最大的编号加一即可。
6.2.3 读者证挂失怎么实现?

图书证挂失的过程中,因为设计的时候没有在readers表添加挂失标记,所以挂失操作的时候不能标记为挂失,也不能直接删除这条纪录。
解决方法
新建一张挂失表lost_card表,凡是挂失图书证的读者就将信息复制到这个表,然后删除readers表中的相关记录,在解除挂失的时候只要反过程操作即可实现。
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 立即注册
快速回复 返回顶部 返回列表