在大数据时代,数据呈现出爆发式的增长。为迎合信息化时代发展趋势,满足信息化安全需求,借助互联网为其他产业服务、推动生产已成为不可阻挡之势。根据图书馆管理要求,研制了整体式结构图书管理系统,通过拆分复杂系统,可以达到迅速应对需求变化、保证系统稳定性可以确保平台可持续和规模化的需求。
该系统前端界面主要涉及到Vue、CSS、JavaScript等技术,利用这些技术能够达到前端页面美观、动态效果让其满足大众审美观,后台采用的主要技术包括Python编程语言、Mysql数据库、Python与AJAX异步交互等,基于AJAX异步模式图书管理系统,解决传统管理方式造成人力,物力,时间虚耗,交流深度有限等问题,这样使得沟通的流程更加迅速,准确和方便,也完成了图书管理系统最基本的功能:系统用户管理,图书推荐管理和预约借阅管理等、图书归还管理,意见反馈管理,补偿信息管理和书籍类型管理。
关键词:Python技术;MYSQL;图书管理系统
Abstract
In the era of big data, data is showing explosive growth. In order to meet the development trend of the information age and meet the needs of information security, it has become an irresistible trend to use the Internet to serve other industries and promote production. According to the requirements of library management, a comprehensive structured book management system has been developed. By breaking down complex systems, it can quickly respond to changes in demand, ensure system stability, and ensure platform sustainability and scalability.
The front-end interface of the system mainly involves technologies such as Vue, CSS, JavaScript, etc. These technologies can achieve beautiful and dynamic front-end pages to meet the public's aesthetic standards. The main technologies used in the backend include Python programming language, MySQL database, asynchronous interaction between Python and AJAX, etc. Based on the AJAX asynchronous mode, the book management system solves the problems caused by traditional management methods such as manpower, material resources, time waste, and limited communication depth, This makes the communication process faster, more accurate and convenient, and also completes the most basic functions of the book management system: system user management, book recommendation management and appointment borrowing management, book return management, feedback management, compensation information management, and book type management.
Keywords:Python technology; MYSQL; Library management system
1 绪论
1.1研究背景与意义
随着信息化技术的飞速发展,图书管理系统作为图书馆、学校等机构管理图书资料的重要工具逐渐受到重视。传统的手工管理方式已经无法满足日益增长的图书信息管理需求,因此开发图书管理系统成为当务之急。通过引入现代信息技术,如数据库管理、网络技术和数据分析,可以实现图书借阅、归还、检索等功能的自动化和高效化。图书管理系统的开发可以提升图书馆或机构的管理效率,减少人力成本,提高工作效率。通过系统化管理和智能化服务,用户可以更便捷地查找和借阅所需图书,提升用户体验和满意度。系统化的图书管理可以实现对图书借阅情况、流行趋势等数据的统计和分析,为图书选购和资源优化提供参考依据。图书管理系统的建立有助于图书信息的数字化、网络化,促进图书资源的共享与利用,推动知识传播和学术交流。综上所述,研究和开发图书管理系统对于提升图书管理效率、优化用户体验、推动信息共享等方面具有重要意义,将为图书管理工作带来更多便利与效益。
1.2开发现状
目前,图书管理系统的开发已经日益普及和深入。许多图书馆、学校和机构意识到自动化管理的重要性,纷纷投入开发和应用图书管理系统中。现代的图书管理系统不仅提供基本的预约借阅、归还功能,还包括图书检索、图书推荐等先进功能。
开发者在设计图书管理系统时,注重用户体验、系统稳定性和数据安全性。使用先进的技术如数据库管理系统、Web开发框架(如Django、Spring等)以及数据分析工具,提升系统的效率和功能性。同时,注重系统的易用性和可扩展性,以满足不同用户群体的需求。
随着信息化技术的不断发展,图书管理系统的开发也在不断创新和完善。未来,图书管理系统有望更加智能化、个性化,为用户提供更便捷、高效的图书管理服务。
1.3 Flask框架介绍
Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。
Flask是目前十分流行的web框架,采用Python编程语言来实现相关功能。它被称为微框架(microframework),“微”并不是意味着把整个Web应用放入到一个Python文件,微框架中的“微”是指Flask旨在保持代码简洁且易于扩展,Flask框架的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,程序员可以使用Python语言快速实现一个网站或Web服务。一般情况下,它不会指定数据库和模板引擎等对象,用户可以根据需要自己选择各种数据库。Flask自身不会提供表单验证功能,在项目实施过程中可以自由配置,从而为应用程序开发提供数据库抽象层基础组件,支持进行表单数据合法性验证、文件上传处理、用户身份认证和数据库集成等功能。Flask主要包括Werkzeug和Jinja2两个核心函数库,它们分别负责业务处理和安全方面的功能,这些基础函数为web项目开发过程提供了丰富的基础组件。Werkzeug库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。Jinja2库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。系统运行速度很快,页面加载过程会将源码进行编译形成Python字节码,从而实现模板的高效运行;模板继承机制可以对模板内容进行修改和维护,为不同需求的用户提供相应的模板。目前Python的web框架有很多。除了Flask,还有django、Web2py等等。其中Django是目前Python的框架中使用度最高的。但是Django如同java的EJB(EnterpriseJavaBeansJavaEE服务器端组件模型)多被用于大型网站的开发,但对于大多数的小型网站的开发,使用SSH(Struts+Spring+Hibernat的一个JavaEE集成框架)就可以满足,和其他的轻量级框架相比较,Flask框架有很好的扩展性,这是其他Web框架不可替代的。
1.4Vue.js 主要功能
Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能驱动复杂的单页应用。
2 图书管理系统系统分析
系统分析是开发一个项目的先决条件,通过系统分析可以很好的了解系统的主体用户的基本需求情况,同时这也是项目的开发的原因。进而对系统开发进行可行性分析,通常包括技术可行性、经济可行性等,可行性分析同时也是从项目整体角度进行的分析。然后就是对项目的具体需求进行分析,分析的手段一般都是通过用户的用例图来实现。下面是详细的介绍。
2.1 可行性分析
(1)操作可行性:
此次项目设计参考了几个该模式下网站的开发案例,对他们的操作界面分析,将众多案例结合在一起,突出以人为本简化操作,所以具有基本计算机知识的人都会操作本项目。
因此操作可行性也没有问题。
(2)技术可行性:
技术可行性指的是对于搭建框架的可行性,以及有更优秀的技术出现时系统的技术更新换代的纳新性如何,开发时间成本费用比如何。
现有的Python技术能够迎合所有图书管理系统的搭建。开发这个图书管理系统的时候我采用了Python+MYSQL用以运行整体程序。
综上所述技术可行性也没有问题。
(3)法律可行性:
从开发者角度来看,Python和MYSQL是网上开源且免费的,在知识产权方面不会产生任何法律纠纷。
从用户使用角度来看,只要不再系统上贩卖违禁品,对系统做出条约协议,杜绝非法支付即可。
综上所述法律可行性也没有问题。
2.2.1 数据流程
图书管理系统主要的目的就是实现对图书推荐的预约,图2-1就是系统的数据流图。

图2-1图书推荐预约操作展开图
3.3.2 业务流程
分析完系统的数据流,接下来我们来看系统的业务流程,图2-2就是业务流程图:

图2-2业务流程图
2.3 系统功能分析
按照图书管理系统的角色,我划分为了管理员模块+普通用户模块这两大部分。
普通用户管理模块:
(1)用户注册登录:用户注册为普通用户并登录图书管理系统;用户对个人信息的增删改查,比如个人资料,密码修改。
(2)通知公告:用户进行公告的阅览,查看管理者发布的公告信息。
(3)图书资讯:用户进行资讯的阅览,查看管理者发布的图书资讯信息。
(4)图书推荐:用户进行图书推荐信息的阅览,通过查询图书推荐信息,可对某一个图书推荐信息进行预约+立即阅读+点赞+评论+收藏。
(5)个人中心:在“个人中心”这一菜单下,我们会看到首页、预约借阅、图书归还、意见反馈、赔偿信息、收藏,用户可以对其进行操作。
管理员管理模块:
(1)登录:管理员在后台可以输入用户名+密码进行登录,管理员的用户名和密码是在数据库中直接设定好的。
(2)系统用户:管理员点击“系统用户”这一菜单会显示管理员+普通用户这两个子菜单,管理员可以对这两个角色的信息进行增删改查操作。
(3)图书推荐:管理员点击“图书推荐”菜单可以对图书推荐进行增删改查。
(4)预约借阅:管理员对前台用户提交的预约借阅信息进行管控,点击某一条预约借阅信息可进行详情查阅。
(5)图书归还:管理员点击“图书归还”菜单可以对图书归还进行管控。
(6)意见反馈:管理员点击“意见反馈”菜单可以对意见反馈进行管控。
(7)系统管理:管理员点击“系统管理”菜单可以对首页展示的轮播图进行增删改查。
(8)通知公告:管理员点击“通知公告”菜单可以查看到系统中的所有公告信息,对已经存在的公告,管理员可以修改,也可以添加新的公告或者删除公告。
(9)资源管理:管理员在后台可以对图书管理系统中显示的图书资讯以及资讯分类进行增删改查。
图书管理系统的非功能性需求比如图书管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1图书管理系统非功能需求表
安全性 |
主要指图书管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 |
可靠性是指图书管理系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 |
性能是影响图书管理系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 |
比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 |
用户只要跟着图书管理系统的页面展示内容进行操作,就可以了。 |
可维护性 |
图书管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.4 系统用例分析
通过2.3功能的分析,得出了本图书管理系统的用例图:
普通用户角色用例如图2-3所示。

图2-3 图书管理系统普通用户角色用例图
web后台管理上的管理员是维护整个图书管理系统中所有数据信息的。管理员角色用例如图2-4所示。

本章主要通过对图书管理系统的可行性分析、流程分析、功能需求分析、系统用例分析,确定整个图书管理系统要实现的功能。同时也为图书管理系统的代码实现和测试提供了标准。
3 图书管理系统总体设计
本章主要讨论的内容包括图书管理系统的功能模块设计、数据库系统设计。
3.1 系统架构设计
本图书管理系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。

图3-1图书管理系统系统架构设计图
表现层(UI):又称UI层,主要完成本图书管理系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本图书管理系统时的舒适度。UI的界面设计也要适应不同版本的图书管理系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成本图书管理系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于本图书管理系统的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本图书管理系统的数据存储和管理功能。
3.2 系统功能模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本图书管理系统中的用例。那么接下来就要开始对本图书管理系统的架构、主要功能和数据库开始进行设计。图书管理系统根据前面章节的需求分析得出,其总体设计模块图如图3-2所示。

图3-2 图书管理系统功能模块图
3.2.2用户模块设计
后台管理者能够实现对前台注册的用户增删改查操作,用户模块结构图如下图:

图3-3普通用户结构图
3.2.3 评论管理模块设计
图书管理系统是一个交流性质的公开平台,用户在平台上提交评论,增加用户之间的互动性。但是同时也为了更好的规范评论的内容,给予管理员删除不合适的评论的功能,所以需要专门设计一个评论管理模块,具体的结构图如下:

图3-4评论管理模块结构图
3.2.4图书推荐管理模块设计
图书管理系统是中需要存储不少图书推荐信息,其模块功能结构,具体的结构图如下:

图3-5图书推荐信息模块结构图
3.2.5预约管理模块设计
图书管理系统最重要的一个功能就是预约,其模块功能结构,具体的结构图如下:

图3-6预约模块结构图
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.3.1 数据库概念结构设计
下面是整个图书管理系统中主要的数据库表总E-R实体关系图。

图3-6 图书管理系统总E-R关系图
下面根据图书管理系统的数据库总E-R关系图可以得出图书管理系统需要很多E-R图,在此罗列出来一些主要的数据库E-R模型图。

图3-7普通用户E-R关系图

图3-8 预约借阅E-R关系图

图3-9 图书推荐信息E-R关系图

图3-10 评论E-R关系图
通过上一小节中图书管理系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表appointment_borrowing (预约借阅)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
appointment_borrowing_id |
int |
10 |
0 |
N |
Y |
预约借阅ID |
|
2 |
regular_users |
int |
10 |
0 |
Y |
N |
0 |
普通用户 |
3 |
user_name |
varchar |
64 |
0 |
Y |
N |
用户名称 |
|
4 |
book_name |
varchar |
64 |
0 |
Y |
N |
书籍名称 |
|
5 |
book_types |
varchar |
64 |
0 |
Y |
N |
书籍类型 |
|
6 |
borrowing_days |
int |
10 |
0 |
Y |
N |
0 |
借阅天数 |
7 |
hours_of_loan_service |
date |
10 |
0 |
Y |
N |
借阅时间 |
|
8 |
examine_state |
varchar |
16 |
0 |
N |
N |
未审核 |
审核状态 |
9 |
examine_reply |
varchar |
16 |
0 |
Y |
N |
审核回复 |
|
10 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
11 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表book_recommendations (图书推荐)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
book_recommendations_id |
int |
10 |
0 |
N |
Y |
图书推荐ID |
|
2 |
book_name |
varchar |
64 |
0 |
Y |
N |
书籍名称 |
|
3 |
book_types |
varchar |
64 |
0 |
Y |
N |
书籍类型 |
|
4 |
book_author |
varchar |
64 |
0 |
Y |
N |
书籍作者 |
|
5 |
book_cover |
varchar |
255 |
0 |
Y |
N |
书籍封面 |
|
6 |
book_prices |
int |
10 |
0 |
Y |
N |
0 |
书籍价格 |
7 |
publishing_house_name |
varchar |
64 |
0 |
Y |
N |
出版社名 |
|
8 |
book_rating |
int |
10 |
0 |
Y |
N |
0 |
书籍评分 |
9 |
book_status |
varchar |
64 |
0 |
Y |
N |
书籍状态 |
|
10 |
book_introduction |
text |
65535 |
0 |
Y |
N |
书籍简介 |
|
11 |
borrowing_notice |
text |
65535 |
0 |
Y |
N |
借阅须知 |
|
12 |
hits |
int |
10 |
0 |
N |
N |
0 |
点击数 |
13 |
praise_len |
int |
10 |
0 |
N |
N |
0 |
点赞数 |
14 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
15 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表book_return (图书归还)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
book_return_id |
int |
10 |
0 |
N |
Y |
图书归还ID |
|
2 |
regular_users |
int |
10 |
0 |
Y |
N |
0 |
普通用户 |
3 |
user_name |
varchar |
64 |
0 |
Y |
N |
用户名称 |
|
4 |
book_name |
varchar |
64 |
0 |
Y |
N |
书籍名称 |
|
5 |
book_types |
varchar |
64 |
0 |
Y |
N |
书籍类型 |
|
6 |
return_date |
date |
10 |
0 |
Y |
N |
归还日期 |
|
7 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表book_types (书籍类型)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
book_types_id |
int |
10 |
0 |
N |
Y |
书籍类型ID |
|
2 |
book_types |
varchar |
64 |
0 |
Y |
N |
书籍类型 |
|
3 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
4 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表comment (评论)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
comment_id |
int |
10 |
0 |
N |
Y |
评论ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
评论人ID: |
3 |
reply_to_id |
int |
10 |
0 |
N |
N |
0 |
回复评论ID:空为0 |
4 |
content |
longtext |
2147483647 |
0 |
Y |
N |
内容: |
|
5 |
nickname |
varchar |
255 |
0 |
Y |
N |
昵称: |
|
6 |
avatar |
varchar |
255 |
0 |
Y |
N |
头像地址:[0,255] |
|
7 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间: |
9 |
source_table |
varchar |
255 |
0 |
Y |
N |
来源表: |
|
10 |
source_field |
varchar |
255 |
0 |
Y |
N |
来源字段: |
|
11 |
source_id |
int |
10 |
0 |
N |
N |
0 |
来源ID: |
表compensation_information (赔偿信息)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
compensation_information_id |
int |
10 |
0 |
N |
Y |
赔偿信息ID |
|
2 |
regular_users |
int |
10 |
0 |
Y |
N |
0 |
普通用户 |
3 |
user_name |
varchar |
64 |
0 |
Y |
N |
用户名称 |
|
4 |
book_name |
varchar |
64 |
0 |
Y |
N |
书籍名称 |
|
5 |
compensation_amount |
int |
10 |
0 |
Y |
N |
0 |
赔偿金额 |
6 |
reason_for_compensation |
text |
65535 |
0 |
Y |
N |
赔偿原因 |
|
7 |
pay_state |
varchar |
16 |
0 |
N |
N |
未支付 |
支付状态 |
8 |
pay_type |
varchar |
16 |
0 |
Y |
N |
支付类型: 微信、支付宝、网银 |
|
9 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
10 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表feedback (意见反馈)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
feedback_id |
int |
10 |
0 |
N |
Y |
意见反馈ID |
|
2 |
regular_users |
int |
10 |
0 |
Y |
N |
0 |
普通用户 |
3 |
user_name |
varchar |
64 |
0 |
Y |
N |
用户名称 |
|
4 |
feedback_title |
varchar |
64 |
0 |
Y |
N |
反馈标题 |
|
5 |
feedback_time |
date |
10 |
0 |
Y |
N |
反馈时间 |
|
6 |
feedback_content |
text |
65535 |
0 |
Y |
N |
反馈内容 |
|
7 |
examine_state |
varchar |
16 |
0 |
N |
N |
未审核 |
审核状态 |
8 |
examine_reply |
varchar |
16 |
0 |
Y |
N |
审核回复 |
|
9 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
10 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表notice (公告)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
notice_id |
mediumint |
8 |
0 |
N |
Y |
公告id: |
|
2 |
title |
varchar |
125 |
0 |
N |
N |
标题: |
|
3 |
content |
longtext |
2147483647 |
0 |
Y |
N |
正文: |
|
4 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间: |
表novel_chapters (小说章节)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
novel_chapters_id |
int |
10 |
0 |
N |
Y |
小说章节ID |
|
2 |
chapter_name |
varchar |
64 |
0 |
Y |
N |
章节名称 |
|
3 |
sort |
int |
10 |
0 |
Y |
N |
0 |
排序 |
4 |
chapter_content |
longtext |
2147483647 |
0 |
Y |
N |
章节内容 |
|
5 |
novel_reading_id |
int |
10 |
0 |
Y |
N |
小说id |
|
6 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
7 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表regular_users (普通用户)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
regular_users_id |
int |
10 |
0 |
N |
Y |
普通用户ID |
|
2 |
user_name |
varchar |
64 |
0 |
Y |
N |
用户名称 |
|
3 |
user_gender |
varchar |
64 |
0 |
Y |
N |
用户性别 |
|
4 |
contact_information |
varchar |
64 |
0 |
Y |
N |
联系方式 |
|
5 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通过 |
审核状态 |
6 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用户ID |
7 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
3.4本章小结
整个图书管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 图书管理系统详细设计与实现
图书管理系统的详细设计与实现主要是根据前面的图书管理系统的需求分析和图书管理系统的总体设计来设计页面并实现业务逻辑。主要从图书管理系统界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
当进入图书管理系统的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图4-1所示。

图4-1 前台首页界面图
不是图书管理系统中正式用户的是可以在线进行注册的,如果你没有本图书管理系统的账号的话,添加“注册”,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册展示如下图4-2所示。

图4-2 前台用户注册图
注册关键代码如下所示。
# 用户类
class User(controllerClass):
def __init__(self, config={}):
"""
构造函数
@param {Object} config 配置参数
"""
config_init = {
# 选择的模板那路径模板
"tpl": "./user/",
# 选择的服务
"services": "user",
# 注册API
"get_api": ["state", "quit"],
"post_api": ["login", "register", "change_password", "forget_password"],
# 唯一判断
"unique": ["username"]
}
config_temp = config
config_temp.update(config_init)
super(User, self).__init__(config_temp)
def Register(self, ctx):
"""
注册API
@param {Object} config 配置参数
"""
print("===================注册=====================")
userService = service_select("user")
body = ctx.body
# 判断必须信息
if "username" not in body and body["username"] == '':
return {"error": {
"code": 70000,
"message": "用户名不能为空",
}}
if "user_group" not in body and body["user_group"] == '':
return {
"error": {
"code": 70000,
"message": "用户组不能为空",
}
}
if "password" not in body and body["password"] == '':
return {
"error": {
"code": 70000,
"message": "密码不能为空",
}
}
# 取出表单
post_param = body
post_param['nickname'] = body["nickname"] or ""
post_param['password'] = md5hash(body["password"])
# 校验是否存在用户
obj = userService.Get_obj({"username": post_param['username']}, {"like": False})
if obj:
return {
"error": {
"code": 70000,
"message": "用户名已存在",
}
}
ret = {
"error": {
"code": 70000,
"message": "注册失败",
}
}
# 添加
bl = userService.Add(post_param)
if bl:
ret = {
"result": {
"bl": True,
"message": "注册成功"
}
}
return ret
4.1.3 用户登录界面
图书管理系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到图书管理系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。

图4-3用户登录界面图
所有的用户都可以通过网页进入到图书管理系统中对信息进行查看,但是要实现预约、收藏、评论的话,就不是所有人都能操作的,必须成为图书管理系统的用户,注册登录的流程图如下图4-4所示。

图4-4注册登录流程图
登录代码如下:
"""
登录API
@param {Object} ctx http请求上下文
"""
print("===================登录=====================")
ret = {
"error": {
"code": 70000,
"message": "账户不存在",
}
}
body = ctx.body
# 获取用户
password = md5hash(body["password"]) or ""
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if obj:
# 检查用户所属用户组
user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})
if user_group and user_group['source_table'] != '':
user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']},
{"like": False})
if user_obj['examine_state'] == '未通过':
ret = {
"error": {
"code": 70000,
"message": "账户未通过审核",
}
}
return ret
if user_obj['examine_state'] == '未审核':
ret = {
"error": {
"code": 70000,
"message": "账户未审核",
}
}
return ret
# 校验用户状态
if obj["state"] == 1:
# 校验密码
if obj["password"] == password:
# 生成Token
timeout = datetime.now(tz=timezone.utc)
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
# 存储Token
# session[token] = obj["user_id"]
session.setdefault(token, obj["user_id"])
session.permanent = True
service_select("access_token").Add(
{"token": token, "user_id": obj["user_id"]}
)
# 回传用户
obj["token"] = token
ret = {
"result": {"obj": obj}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "用户账户不可用,请联系管理员",
}
}
return ret
4.1.4图书资讯界面面
用户点击“图书资讯”菜单显示所有的图书资讯信息,可以按照条件进行图书资讯的筛选或者输入关键词进行局部搜索,点击可以进入图书资讯详细展示界面,在此界面用户可以收藏、点赞和评论。图书资讯界面面如下图4-5所示。

图4-5图书资讯界面图
4.1.5图书推荐详情界面
用户可以查看图书推荐,在查询到自己想要了解的图书推荐的时候,可以进入查看详细的介绍,点击“预约”这一按钮以后会跳转到预约信息填写的界面,根据提示填写好预约的信息,点击“提交”以后预约就完成了,在图书信息详情这个界面,同时支持用户对喜欢的图书推荐进行收藏、点赞、评论以及立即阅读的功能,图书详情展示页面如图4-6所示。

图4-6 图书推荐详情界面图
在实现预约操作的时候,没有登录的用户只能进行查看,如果想要实现预约这个操作的话,预约的前提必须是登录后才能进行。详见图4-8所示。

图4-7 预约流程图
4.1.6预约界面
当用户在图书推荐详情界面想要进行预约,点击下方的“预约”按钮,就会跳转到预约信息填写界面,根据界面提示输入预约信息,点击“提交”按钮,预约就完成了,预约展示页面如图4-8所示。

图4-8 预约界面图
4.1.7我的账户界面
当用户点击右上角“我的”这个按钮,会出现子菜单,点击“我的账户”可以对个人的资料、登录系统的密码进行设置管理,我的账户界面如下图4-9所示。

图4-9 我的账户界面图
4.2管理员功能模块
管理员点击“系统用户”这一菜单会显示管理员和普通用户这两个子菜单,管理员可以对这两个角色的信息进行增删改查操作。界面如下图4-10所示。

图4-10系统用户管理界面图
系统用户管理关键代码如下所示。
"""
增
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
body = ctx.body
unique = self.config.get("unique")
obj = None
if unique:
qy = {}
for i in range(len(unique)):
key = unique[i]
qy[key] = body.get(key)
obj = self.service.Get_obj(qy)
if not obj:
# 添加数据前
error = self.Add_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("add_before", ctx, None)
if error["code"]:
return {"error": error}
# 添加数据
result = self.service.Add(body, self.config)
# 添加数据发生错误
if self.service.error:
return {"error": self.service.error}
# 添加数据成功后
res = self.Add_after(ctx, result)
if res:
result = res
res = self.Events("add_after", ctx, result)
if res:
result = res
return {"result": result}
else:
return {"error": {"code": 10000, "message": "已存在"}}
4.2.2图书推荐管理界面
点击“图书推荐”按钮会显示自己添加的图书推荐,如果想要添加新的图书推荐,点击“添加”按钮根据提示输入图书推荐,点击“提交”后在图书推荐界面就可以显示了,如果信息有错可以对图书推荐进行更新维护,也可以直接删除某一图书推荐,还可以管理评论信息以及内容设置。界面如下图4-11所示。

图4-11图书推荐管理界面图
图书推荐管理关键代码如下所示。
def Del(self, ctx):
"""
删
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
if len(ctx.query) == 0:
errorMsg = {"code": 30000, "message": "删除条件不能为空!"}
return errorMsg
result = self.service.Del(ctx.query, self.config)
if self.service.error:
return {"error": self.service.error}
return {"result": result}
4.2.3 图书归还管理界面
管理员点击“图书归还”会显示出所有的图书归还信息,支持通过用户姓名或者书籍名称对图书归还信息进行查询,也可以选择某一条图书归还信息,点击“删除”进行删除,也可以点击后面的“赔偿处罚”按钮对图书归还的赔偿处罚信息进行更新维护,界面如下图4-12所示。

图4-12图书归还管理界面图
图书归还管理关键代码如下:
# 查多条
def Get_list(self, ctx):
"""
查多条
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
if "page" in query:
config_plus["page"] = query.pop("page")
if "size" in query:
config_plus["size"] = query.pop("size")
if "orderby" in query:
config_plus["orderby"] = query.pop("orderby")
if "like" in query:
config_plus["like"] = query.pop("like")
if "groupby" in query:
config_plus["groupby"] = query.pop("groupby")
count = self.service.Count(query)
lst = []
if self.service.error:
return {"error": self.service.error}
elif count:
lst = self.service.Get_list(query,
obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
self.interact_list(ctx, lst)
return {"result": {"list": lst, "count": count}}
4.2.4预约借阅管理界面
管理员点击“预约借阅”会显示出所有的预约借阅信息,支持输入用户名称对预约借阅信息进行查询,可以选择某一条预约借阅信息,点击“删除”进行删除,也可以点击后面的“归还”按钮对预约借阅的归还信息进行更新维护,界面如下图4-13所示。

图4-13预约借阅管理界面图
预约借阅管理关键代码如下:
def Set(self, ctx):
"""
改
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
# 修改数据前
error = self.Set_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("set_before", ctx, None)
if error["code"]:
return {"error": error}
query = ctx.query
if 'page' in query.keys():
del ctx.query['page']
if 'size' in query.keys():
del ctx.query['size']
if 'orderby' in query.keys():
del ctx.query['orderby']
# 修改数据
result = self.service.Set(ctx.query, ctx.body, self.config)
# 修改数据发生错误
if self.service.error:
return {"error": self.service.error}
# 修改数据成功后
res = self.Set_after(ctx, result)
if res:
result = res
res = self.Events("set_after", ctx, result)
if res:
result = res
return {"result": result}
4.2.5 资源管理界面
管理员在后台可以对图书管理系统中显示的图书资讯及其资讯分类信息进行增删改查,界面如下图4-15所示。

图4-15资源管理界面图
5系统测试
系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些bug,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。
5.2 系统测试用例
系统测试包括:用户登录功能测试、图书推荐展示功能测试、图书推荐添加、图书推荐搜索、密码修改功能测试,如表5-1、5-2、5-3、5-4、5-5所示:
表5-1 用户登录功能测试表
用例名称 |
用户登录系统 |
目的 |
测试用户通过正确的用户名和密码可否登录功能 |
前提 |
未登录的情况下 |
测试流程 |
1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 |
用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 |
实际结果与预期结果一致 |
图书推荐查看功能测试:
表5-2 图书推荐查看功能测试表
用例名称 |
图书推荐查看 |
目的 |
测试图书推荐查看功能 |
前提 |
用户登录 |
测试流程 |
点击图书推荐列表 |
预期结果 |
可以查看到所有图书推荐 |
实际结果 |
实际结果与预期结果一致 |
管理员添加图书推荐界面测试:
表5-3 管理员添加图书推荐界面测试表
用例名称 |
图书推荐添加测试用例 |
目的 |
测试图书推荐添加功能 |
前提 |
用户正常登录情况下 |
测试流程 |
1)管理员点击图书推荐管理,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 |
提交以后,页面首页会显示新的图书推荐 |
实际结果 |
实际结果与预期结果一致 |
图书推荐搜索功能测试:
表5-4图书推荐搜索功能测试表
用例名称 |
图书推荐搜索测试 |
目的 |
测试图书推荐搜索功能 |
前提 |
无 |
测试流程 |
1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 |
页面显示包含有搜索关键字的图书推荐 |
实际结果 |
实际结果与预期结果一致 |
密码修改功能测试:
表5-5 密码修改功能测试表
用例名称 |
密码修改测试用例 |
目的 |
测试管理员密码修改功能 |
前提 |
管理员用户正常登录情况下 |
测试流程 |
1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 |
使用新的密码可以登录 |
实际结果 |
实际结果与预期结果一致 |
5.3 系统测试结果
通过编写图书管理系统的测试用例,已经检测完毕用户登录模块、图书推荐查看模块、图书推荐添加模块、图书推荐搜索模块、密码修改功能测试,通过这5大模块为图书管理系统的后期推广运营提供了强力的技术支撑。
至此,图书管理系统已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如Web、Python技术、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
[1]严明,边建军. 动态书目推荐图书管理系统设计与实现 [J]. 福建电脑, 2023, 39 (11): 87-92.
[2]贾海波. 一种基于RFID的图书管理系统[P]. 江苏省: CN116993561A, 2023-11-03.
[3]赵迎霞. 高校图书管理工作实效性提升研究 [J]. 产业与科技论坛, 2023, 22 (19): 285-286.
[4]范路桥,高洁,段班祥. 基于Python+Flask+ECharts的国内热门旅游景点数据可视化系统 [J]. 现代电子技术, 2023, 46 (09): 126-130.
[5]Dong F . Discussion on the Teaching Reform of Python Language Programming Course for Engineering Majors Based on OBE [J]. Journal of Big Data and Computing, 2023, 1 (1):
[6]Ribeiro V S D ,Lopes P L F ,Ângelo M M L , et al. Development of a computational tool in the Python language for the application of the AHP-Gaussian method [J]. Procedia Computer Science, 2023, 221 354-361.
[7]陈嘉发,黄宇靖. Flask框架在数据可视化的应用 [J]. 福建电脑, 2022, 38 (12): 44-48.
[8]来思琪,孔华锋. 基于Flask框架的新闻聚合系统设计与实现 [J]. 电脑编程技巧与维护, 2022, (11): 30-33.
[9]张宁. 基于Flask框架的四六级英语学习系统的设计与实现[D]. 华东师范大学, 2022.
[10]Qilin Y . Real-Time Analysis of Youth Emotion Based on Python Language and Smart Sensor Network [J]. Mobile Information Systems, 2022, 2022
[11]汪家常, “云杰URP”图书馆图书管理系统接口系统V2.0. 安徽省, 安徽亘达信息科技有限公司, 2020-09-25.
[12]王丹. 基于ASP.NET技术的图书管理系统的设计与实现[D]. 吉林大学, 2019.
[13]Smith J . Electronic Library Management System[M]. Tritech Digital Media: 2019-08-29.
[14]王兆媛. 基于Django框架的图书管理系统的设计与实现[D]. 吉林大学, 2019.
[15]郭虹. 中关村图书大厦推家庭图书管理系统[N]. 中国图书商报, 2019-11-09 (002).
[16]胡浩,温海昌, 河南广播电视大学 数字化图书管理系统正式启用, 高培华 主编, 河南教育年鉴, 大象出版社, 2019, 385, 年鉴.
在撰写本论文期间,我受益于许多人的帮助和支持,在此向他们表示衷心的感谢。
首先,我要感谢我的导师,他给予了我宝贵的指导和建议。他的专业知识和丰富经验对我研究的方向起到了重要的推动作用。同时,他还鼓励我不断探索和挑战自己,使我能够克服困难并取得进步。
此外,我还要感谢我的同学和朋友们,他们在我撰写论文的过程中给予了我很多鼓励和帮助。他们与我分享了他们的见解和经验,使我能够从不同的角度思考问题,并改善我的研究方法。
最后,我要感谢我的家人,他们一直以来对我的支持和理解。他们给予我无尽的鼓励和动力,使我能够坚持下去并完成这篇论文。
在此,我要向所有支持和帮助过我的人表示深深的谢意。没有你们的支持,我将无法完成这篇论文。感谢你们的付出和支持!
关注+点赞+收藏+私信博主,免费领取项目源码