基于Python+MySQL编写的(WinForm)图书管理系统
一、项目需求分析
1.1 项目介绍
项目背景
图书馆管理系统是一些单位不可缺少的部分,书籍是人类不可缺少的精神食粮,尤其对于学校来说,尤其重要。所以图书馆管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理图书、期刊、试卷合订本等,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对图书资源信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书馆管理的效率,也是学校的科学化、正规化管理的必经之路。
项目简介
本项目是图书管理信息系统,使得学院的图书信息管理工作能够系统化,规范化,自动化,从而达到提高学院图书管理效率的目的。我们的系统主要是有学生和管理员进行使用,二人登录系统的角色不同,因而部分功能也不一样。我们的前台部分主要是使用pyqt5来进行设计和布局,使用pycharm中的Qt Designer进行绘制,然后使用pyqt5和qss文件来编写窗口的样式;我们的后台逻辑和数据的处理是使用python结合mysql数据库以及线程的使用来进行处理,最后得到我们的NCU图书管理系统的1.0版本。
1.2 功能需求
我们对图书管理系统进行分析,我们认为我们需要给用户进行书籍推荐和系统公告的展示,同时需要维护借阅信息和图书信息,同时应该提供给用户和管理员之间的交流,便于系统的升级和维护。然而本系统对于管理员和普通用户的使用,功能应该是不同的,于是我们对于不同角色的功能需求分析如下:
普通用户:
- 注册、登录系统
- 查看系统推荐书籍、查看系统公告
- 借书、还书、续借、查找书籍
- 发送消息给管理员
- 系统帮助与关于
管理员:
- 注册、登录系统
- 设置系统推荐书目、发布公告
- 添加书籍、编辑已有书籍、删除书籍、查找书籍、催用户还书
- 筛选未回复消息、回复普通用户的消息、删除消息
- 系统帮助与关于
二、项目分析与设计
2.1 本项目需解决的关键技术问题
- Qt Designer的使用
- Qt 绘制的窗口的美化,即qss文件的编写使得页面美观
- 使用爬虫爬取豆瓣图书时爬虫与反爬虫之间的斗争
- 交互时信号与槽的连接
- 交互时,mysql数据库的操作
- 线程的使用,使得当小窗口对数据库操作之后,主线程能够监听到这种变化,及时更新界面的信息
- 程序健壮性的体现,使用正则表达式对一些输入进行限制,以及一些常见的提示信息
2.2 项目流程
2.3 功能模块
本项目主要分为注册登录、主页、借阅信息、图书管理、反馈交流、关于等模块。
三、项目设计与实现
3.1 项目设计
登录页面:
设计意图和主要功能是验证登录者身份,运用了md5加密、数据库查询。
数据库查询(可以看到将密码加密后与数据库中对比):
页面展示:
注册页面:
设计意图:便于用户注册账号与返回登录,同时输入密码后要再确认一遍密码。
主要功能:注册账号,也是通过数据库连接实现。
页面展示:
借阅信息:
设计意图:最上面是登录用户及角色、登出按钮,接着是搜索框可供管理员搜索筛选数据,下面则是数据表,数据表中右键点击会显示菜单(管理员有“催还”、“删除”;用户有“续借”、“还书”),同时状态有“已还”、“未还”、“逾期”3种,分别呈现不同的颜色。
主要功能:显示借阅信息、管理员催还、用户续借与还书等。
关键知识点:信号与槽、线程、数据库查询、正则表达式匹配等。
页面展示:
点击“删除”:
出现提示框,提示用户是否进行删除操作。
用户视角下:
点击“续借”:
可以延长应还日期。
点击“还书”:
跳出提示框,提示用户是否继续。
反馈交流:
设计意图:具备搜索框搜索某用户发出的消息,还可直接点击“筛选未回复”按钮筛选出未回复的消息,下方是数据表,管理员可以删除、回复;用户只能看见自己的消息,可以删除。
关键知识点:信号与槽、线程、数据库查询、正则表达式匹配等
主要功能:用户与管理员之间的消息交互、消息展示查询等
点击“回复”:
出现回复窗口,可在此编辑信息:
用户视角可以直接发送消息给管理员:
3.2 项目实现
本项目从文件结构上划分为如下模块:
Ui中是使用Qt Designer设计的页面,使用插件转化为python代码,util中是一些工具类如数据库连接帮助类、爬虫、通用工具类等。
而view中则是连接视图与数据的中间层,不仅可以根据数据设置视图的页面显示,同时又通过视图来与用户进行交互,得到反馈去通过数据库帮助类操作数据库。
1.整体使用信号与槽的机制,启动程序后,进入事件处理的主循环,每个页面的组件通过信号控制执行某些操作。如下:
当信号发出时,将执行对应的函数。
2.对于众多数据库的表来说,几乎每个表都需要一个不重复的主键,因此使用主机ID、序列号、和当前时间来生成UUID、可保证其唯一性。
3.使用正则表达式匹配器绑定到控件上,这样可以在用户输入阶段进行限制,而不必在输入后再对文本进行判断再执行别的操作。下面是封装的控件匹配器:
这是使用:
从功能结构上则划分为借阅信息、反馈交流、登陆注册(我负责的模块)。
在这几个模块中,都伴随着数据库连接,且都是封装在函数中进行,再通过线程执行:
4.数据库操作
新建线程
该函数获取了数据库的数据,再调用别的函数对数据进行处理整合,完成后会发出信号通知主线程,这时会调用函数将其显示在页面上。
5.UI的初始化
对于设计好的UI文件,我们建立同名文件,定义该窗口类,将该UI文件设置为本类的UI,再针对其UI文件内的控件进行初始化、美化、功能实现等。
6.菜单的添加:
在TableWidget中还可以添加右键点击出现的菜单,如下:
当点击了该菜单中的菜单项时,会触发相应的动作,执行对应的操作,一般是数据库操作。如下:
有时候会需要从一个页面跳转到另一个页面,比如从登录跳转到注册或者主页面,可以直接New,当需要在两窗口间传递函数时,通过构造函数的参数传递或者单向传递直接赋值皆可。
如果需要保留原来的窗口,则需要有原来窗口的对象:
由于模块之间结构相似,只在具体的操作行为上有所不同,以上所述已经覆盖主要模块的工作原理和实现代码。
四、个人小结
本次项目小巧精致,简洁方便,是对我学习Python的一次很好的锻炼,一开始看了些目标检测相关的内容,但后来发现仍然无法胜任,因此还是选择了信息管理系统这个选题。但只使用控制台显示过于简陋,因此和队友商量用来PyQt5,正好之前也接触过Qt,稍微复习一下倒是很好上手。
开发中体会到Git版本控制功能的强大与方便,但我在配置两人协作的过程中仍然遇到很多困难,比如我已加入协作者,也配置了SSH Key,但队友却无法直接Push她的代码,这让我只得作罢,投入到代码编写中。
在代码编写中,我与队友经常一起相互交流,这敲定了我们UI文件的布局与数据库表的设计,在分工后各自编写相应的功能。我倒没有遇到过多的困难,可以说近乎一气呵成地写完了,但在后来发现一些小错误,又一一耐心修正。
我想感叹的是,Python确实非常方便,代码量相比其他语言会少许多,而它能做的事也很多,没有给这个图书管理系统加上更多的功能,是一种遗憾。它再进一步优化,可以增加用户之间的交流、管理员对用户账号的操作,用户对所借书籍发表的评论等等,甚至可以加上刷脸登录。总之,它的进步空间还很大,而我们的学习之路也还很长。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/585764.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!