# 一、项目需求分析
## 1.1 项目介绍
### 项目背景
图书馆管理系统是一些单位不可缺少的部分,书籍是人类不可缺少的精神食粮,尤其对于学校来说,尤其重要。所以图书馆管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理图书、期刊、试卷合订本等,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对图书资源信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书馆管理的效率,也是学校的科学化、正规化管理的必经之路。
### 项目简介
本项目是图书管理信息系统,使得学院的图书信息管理工作能够系统化,规范化,自动化,从而达到提高学院图书管理效率的目的。我们的系统主要是有学生和管理员进行使用,二人登录系统的角色不同,因而部分功能也不一样。我们的前台部分主要是使用pyqt5来进行设计和布局,使用pycharm中的Qt Designer进行绘制,然后使用pyqt5和qss文件来编写窗口的样式;我们的后台逻辑和数据的处理是使用python结合mysql数据库以及线程的使用来进行处理,最后得到我们的NCU图书管理系统的1.0版本。
## 1.2 功能需求
我们对图书管理系统进行分析,我们认为我们需要给用户进行书籍推荐和系统公告的展示,同时需要维护借阅信息和图书信息,同时应该提供给用户和管理员之间的交流,便于系统的升级和维护。然而本系统对于管理员和普通用户的使用,功能应该是不同的,于是我们对于不同角色的功能需求分析如下:
普通用户:
- 注册、登录系统
- 查看系统推荐书籍、查看系统公告
- 借书、还书、续借、查找书籍
- 发送消息给管理员
- 系统帮助与关于
管理员:
- 注册、登录系统
- 设置系统推荐书目、发布公告
- 添加书籍、编辑已有书籍、删除书籍、查找书籍、催用户还书
- 筛选未回复消息、回复普通用户的消息、删除消息
- 系统帮助与关于
# 二、项目分析与设计
## 2.1 本项目需解决的关键技术问题
1. Qt Designer的使用
2. Qt 绘制的窗口的美化,即qss文件的编写使得页面美观
3. 使用爬虫爬取豆瓣图书时爬虫与反爬虫之间的斗争
4. 交互时信号与槽的连接
5. 交互时,mysql数据库的操作
6. 线程的使用,使得当小窗口对数据库操作之后,主线程能够监听到这种变化,及时更新界面的信息
7. 程序健壮性的体现,使用正则表达式对一些输入进行限制,以及一些常见的提示信息
## 2.2 项目流程

## 2.3 功能模块
本项目主要分为注册登录、主页、借阅信息、图书管理、反馈交流、关于等模块。

# 三、项目设计与实现
## 3.1 项目设计
### 登录页面:
设计意图和主要功能是验证登录者身份,运用了md5加密、数据库查询。
数据库查询(可以看到将密码加密后与数据库中对比):

页面展示:

### 注册页面:
设计意图:便于用户注册账号与返回登录,同时输入密码后要再确认一遍密码。
主要功能:注册账号,也是通过数据库连接实现。
页面展示:

### 借阅信息:
设计意图:最上面是登录用户及角色、登出按钮,接着是搜索框可供管理员搜索筛选数据,下面则是数据表,数据表中右键点击会显示菜单(管理员有“催还”、“删除”;用户有“续借”、“还书”),同时状态有“已还”、“未还”、“逾期”3种,分别呈现不同的颜色。
主要功能:显示借阅信息、管理员催还、用户续借与还书等。
关键知识点:信号与槽、线程、数据库查询、正则表达式匹配等。
页面展示:

点击“删除”:
出现提示框,提示用户是否进行删除操作。

用户视角下:
点击“续借”:
可以延长应还日期。

点击“还书”:
跳出提示框,提示用户是否继续。

### 反馈交流:
设计意图:具备搜索框搜索某用户发出的消息,还可直接点击“筛选未回复”按钮筛选出未回复的消息,下方是数据表,管理员可以删除、回复;用户只能看见自己的消息,可以删除。
关键知识点:信号与槽、线程、数据库查询、正则表达式匹配等
主要功能:用户与管理员之间的消息交互、消息展示查询等

点击“回复”:
出现回复窗口,可在此编辑信息:

用户视角可以直接发送消息给管理员:

## 3.2 项目实现
本项目从文件结构上划分为如下模块:

Ui中是使用Qt Designer设计的页面,使用插件转化为python代码,util中是一些工具类如数据库连接帮助类、爬虫、通用工具类等。
而view中则是连接视图与数据的中间层,不仅可以根据数据设置视图的页面显示,同时又通过视图来与用户进行交互,得到反馈去通过数据库帮助类操作数据库。
1.整体使用信号与槽的机制,启动程序后,进入事件处理的主循环,每个页面的组件通过信号控制执行某些操作。如下:

当信号发出时,将执行对应的函数。
2.对于众多数据库的表来说,几乎每个表都需要一个不重复的主键,因此使用主机ID、序列号、和当前时间来生成UUID、可保证其唯一性。

3.使用正则表达式匹配器绑定到控件上,这样可以在用户输入阶段进行限制,而不必在输入后再对文本进行判断再执行别的操作。下面是封装的控件匹配器:

这是使用:












收起资源包目录





































































































共 110 条
- 1
- 2
资源评论

- m0_664346342022-12-29支持这个资源,内容详细,主要是能解决当下的问题,感谢大佬分享~
- qq_466818812022-12-09感谢大佬,让我及时解决了当下的问题,解燃眉之急,必须支持!
- m0_671692372022-08-11怎么能有这么好的资源!只能用感激涕零来形容TAT...
biyezuopin
- 粉丝: 3911
- 资源: 911

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
