基于Python的图书管理系统
摘 要
本论文主要论述了如何基于Python开发一个图书管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述图书管理系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。
图书管理系统的主要使用者分为管理员和读者用户,实现功能包括管理员:公共管理、用户管理、资讯管理、图书分类、图书信息、图书借阅、图书归还、图书续借等模块,读者用户:首页、网站公告、图书资讯、图书信息、我的账户、个人中心等功能。由于本网站的功能模块设计比较全面,所以使得整个图书信息管理的过程得以实现。
本图书管理系统是以Django这一框架为基础,采用Python的编程语言,使用了MySQL这一数据库进行开发的,可以实现本图书管理的信息化,可以方便管理员进行更加方便快捷的管理。
关键词:图书管理系统;Django框架;MySQL数据库;Python语言
A Book Management System Based on Python
Abstract
This paper mainly discusses how to develop a library management system based on Python. The system will strictly follow the software development process for each stage of work, and the object-oriented programming concept will be used for project development. In the introduction, the author will discuss the current background of the library management system and the purpose of system development. Subsequent chapters will strictly follow the software development process to analyze and design the system at each stage.
The main users of the library management system are divided into administrators and reader users. The implementation functions include administrators: public management, user management, information management, book classification, book information, book borrowing, book return, book renewal, and other modules. Reader users: homepage, website announcement, book information, book information, my account, personal center, and other functions. Due to the comprehensive design of the functional modules on this website, the entire process of book information management can be realized.
This book management system is based on the Django framework, using Python programming language and MySQL database for development. It can achieve the informatization of book management and facilitate administrators to manage more conveniently and quickly.
Keywords: Library management system; Django framework; MySQL database; Python language
目 录
1 绪论
1.1 选题背景与意义
随着数字化时代的到来,图书馆和其他信息机构的图书管理面临了新的挑战和机遇。传统的手工管理方式已经无法满足信息存储、检索和服务的需求,需要通过信息技术手段来提升管理效率和服务质量。图书管理系统作为一种信息技术解决方案,为图书馆等信息机构提供了一种更便捷、高效的图书管理方式。
传统的图书管理依靠人工操作,工作量大、效率低、易出错。而引入图书管理系统后,可以通过自动化的方式完成图书的录入、分类、索引、借阅和归还等各项管理工作,大大提升了工作效率和精度。同时,图书管理系统还可以实现读者的在线查询、预约、续借等功能,提高了读者的服务体验和满意度。
此外,随着图书馆的数字化建设和网络化发展,图书管理系统也能够实现与其他信息系统的集成,为用户提供更加全面和便捷的信息服务。通过统计和分析系统中的数据,图书馆还可以更好地了解用户需求、优化资源配置,提升服务质量。
研究图书管理系统的意义在于提高图书管理的效率和服务质量,促进信息资源共享和利用。图书管理系统可以实现读者的在线查询、预约、续借等功能,为读者提供更加便捷、个性化的服务,提高用户满意度。同时还可以实现信息资源的数字化管理和网络化服务,使得用户可以随时随地获取到所需信息,促进信息资源的共享和利用。通过图书管理系统对数据进行统计和分析,图书馆可以更好地了解用户需求,优化资源配置,提升服务质量,提高管理水平和学术声誉。
1.2国内外研究现状
近年来,随着信息技术的迅猛发展,图书管理系统逐渐成为图书馆管理工作的重要工具。国内外对图书管理系统进行了广泛的研究。
在国内,许多大型图书馆已经建立了自己的图书馆管理系统,并取得了一定的成果。例如,北京图书馆、上海图书馆等都已经建立了高效、智能化的图书管理系统,极大地提高了图书馆的管理效率。此外,一些学校图书馆也开始引进图书管理系统,提供自助借还、图书检索等服务,方便师生使用图书馆资源。
在国外,图书管理系统的研究与发展也十分活跃。美国、英国等发达国家在图书管理系统方面取得了重要的进展。例如,美国的OCLC公司开发了一系列图书管理系统,广泛应用于世界范围的图书馆,使图书馆管理工作更加高效和便捷。
尽管图书管理系统在很大程度上改善了图书馆管理的效率,但是仍然存在一些问题和挑战需要解决。首先,图书管理系统的功能和性能还有待提升。目前的系统虽然能够实现基本的借阅管理、图书检索等功能,但是在用户体验、自动化程度和安全性方面还有一些不足。例如,一些系统在处理大规模数据时可能会出现卡顿和崩溃的情况,用户需要等待较长的时间才能完成操作。其次,图书馆管理系统的数据质量和准确性也需要关注。由于图书馆数据量较大,而且涉及到多个环节和部门,因此数据的准确性和一致性是一个不容忽视的问题。一些图书馆管理系统在数据输入和处理过程中可能存在漏洞,导致数据质量和准确性下降。此外,图书管理系统的更新和维护也是一个挑战。由于技术的不断发展,图书管理系统需要不断升级和更新,以适应新的需求和技术。然而,一些图书馆由于预算和人力的限制,无法及时更新系统或者进行系统维护,导致系统功能的滞后和安全性的下降。
针对以上存在的问题和挑战,本研究旨在通过对图书管理系统的研究,提出一种高效、智能化、安全性较高的图书管理系统解决方案。本研究的主要目标是提高图书馆管理系统的功能和性能,并优化数据质量和准确性。通过引入新的技术和方法,提高系统的自动化程度,减少人工操作,提高用户的使用体验。同时,本研究还将重点关注图书管理系统的更新和维护,提出一种可持续发展的系统管理方案。
1.3论文主要研究方案
(一)拟采用的研究方法:
(1)文献研究法。收集大量有关图书管理系统设计的文献进行研究,提出初步的理论框架。
(2)内容分析法。对所研究的问题进行梳理,分析要研究的内容中存在的欠缺。
(二)准备工作情况及主要措施
(1)查询相关专业文献,分析整理有关内容,了解现有的图书管理系统设计在国内外发展现状。
(2)了解图书管理系统的工作原理。
(3)学习有关图书管理系统的算法,分析这些算法实现的功能以及优缺点,并采用较为合理的分析方法。
1.4论文结构与章节安排
本文共分为六章,章节内容安排如下:
第一章:引言。此章节对所设计和实现的系统的背景和状况以及意义进行详细的论述以及说明,同时进行了论文整体框架的结构的简要介绍。
第二章:系统需求分析。章节所做的主要的工作是对系统进行了技术、经济和操作方面可行性的分析;对系统实行了总体功能的需求、用例分析。
第三章:系统的设计。主要是对系统的功能结构进行设计,并对系统数据库的概念结构以及物理结构的设计进行了分析。
第四章:系统的实现。根据系统功能的划分,分别的对系统所需要实现的前台客户功能和后台管理员功能进行了分析和说明。
第五章:系统测试。主要对系统的部分界面进行测试并对主要功能进行测试
2 图书管理系统系统分析
系统需求分析是系统开发的一个关键环节,它在系统的设计和实现上起到了一个承上启下的位置。系统需求分析是对所需要做的系统进行一个需求的挖掘,如果分析的准确可以精准的解决现实中碰到的问题。如果分析不到位会影响后期系统的实现。一个系统的优秀程度需求分析也是占据了非常大的比例,如果需求分析不到位,后面的系统设计要实现就是一个偏离导航的设计。
2.1 可行性分析
系统可行行分析是对系统对系统可行性进行一个探讨。在探讨系统的可行性上我们主要从技术上的可行性和经济上的可行性以及法律层面的可行性上进行分析,如果三个层面度通过,我们则认为系统是比较可行的。
2.1.1 技术可行性分析
图书管理系统设计与实现是一个基于Web的图书信息浏览和借阅的平台,我们在实现这个系统所采用的技术方案是基于Python语言,Django框架,MySQL数据库,在大学的学习中这两门课程都已经学过,而且自己也用这些技术开发过小的项目,在平时的课程设计以及作业也经常用到Python和MySQL,在技术上实现自己的自主开发是可行的。
2.1.2 经济可行性分析
在开发图书管理系统并不需要投入太多,开发工具、服务器、数据库等,都可以通过网络搜索、下载、安装,只需要一台普通的计算机就可以完成操作,而且在系统功能规划上通过走访调查目前用户对图书管理系统的需求,了解它们对系统具体实现的功能需求,然后进行设计开发,不存在任何开销,因此系统的开发在经济方面是可行的。
2.1.3 操作可行性分析
操作方面主要考虑的是用户在使用以及管理人员在管理的时候,是否简单可行,没有任何计算机基础的用户能否使用,开发的图书管理系统在设计的时候秉承简单易学的理念,在用户进入系统后都会有固定的导航按钮,只要认字就可以操作完成,而且管理员在管理方面也只需简单的增删改查即可完成,因此在操作上也是可行的。
2.2 系统功能分析
2.2.1 功能性分析
图书管理系统我划分为了读者用户管理模块和管理员模块这两大部分。
读者用户管理模块:
(1)用户注册登录:游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现跟系统功能相关的操作,就必须有这个系统的账号,如果没有账号的话,可以注册用户进行相关的操作,同时用户还可以通过“我的”这个按钮对个人信息以及操作的信息进行管控。
(2)查看图书管理系统的首页信息:图书管理系统的首页信息包含了首页、网站公告、图书资讯、图书信息等。
(3)网站公告:当用户点击“网站公告”这一菜单按钮,会显示管理员在后台发布的所有的网站公告,可以查看详情。
(4)图书资讯:用户点击“图书资讯”可以搜索查看资讯信息,并可对资讯信息进行点赞、收藏和发表评论等操作。
(5)图书信息:用户可以查看图书信息,在查询到自己想要了解的图书信息的时候,可以进入查看详细的介绍,包括图书编号、图书名称 、图书类别、作者、出版社、出版日期、库存、图书介绍。点击“借阅”可以进入到借阅信息填写页面,在图书信息详情这个界面,同时支持用户对喜欢的图书信息进行收藏、点赞以及评论的功能。
(6)我的账户:用户点击右上角的“用户名”进入到我的账户便可对自己的昵称、密码和头像进行更改操作。
(7)个人中心:用户点击右上角的“用户名”,然后点击“个人中心”便可对个人首页、图书借阅、图书归还、图书续借和个人收藏信息进行管理。
管理员管理模块:
(1)登录:管理员在后台可以输入用户名+密码进行登录,管理员的用户名和密码是在数据库中直接设定好的。
(2)公共管理:点击“公共管理”这个按钮可以查看到系统中所有的轮播图和网站公告信息,可以查询轮播图和网站公告,也可以添加新的轮播图和网站公告或者删除某一条轮播图和网站公告。
(3)用户管理:在系统用户管理模块中主要分了两部分,分别是管理员和读者用户,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。
(4)资讯管理:管理员在“资讯管理”页面可对图书资讯以及资讯分类进行增删改查等操作。
(5)图书分类:管理员点击“图书分类”可对图书信息的类型进行添加管理,并可进行查询、重置或删除等相应操作。
(6)图书信息:点击“图书信息列表”这个按钮可以查看到系统中所有发布的图书信息,管理员可进行详情、查看或删除等相应操作。也可以对用户提交的评论信息进行管控。
(7)图书借阅:管理员点击“图书借阅”可以对前台用户提交的图书借阅信息进行审核,办理审核单。
(8)图书归还:管理员点击“图书归还”可以对前台用户提交的图书归还信息进行审核,办理审核单。
(9)图书续借:管理员点击“图书续借”可以对前台用户提交的图书续借信息进行审核。
2.2.2 非功能性分析
图书管理系统的非功能性需求,比如图书管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下2-1表格中:
表2-1图书管理系统非功能需求表
安全性 | 主要指图书管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指图书管理系统能够按照用户提交的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响图书管理系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着图书管理系统的页面展示内容进行操作,就可以了。 |
可维护性 | 图书管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.3 系统用例分析
图书管理系统的完整UML用例图分别是图2-1和图2-2。
图2-1就是读者用户角色的用例展示。
图2-1 图书管理系统读者用户角色用例图
图2-2就是管理员角色的用例展示。
图2-2 图书管理系统管理员角色用例图
2.4 系统流程分析
2.4.1 数据流程
开发图书管理系统最主要的一个目的就是实现用户对图书信息的借阅,图2-3就是系统的数据流图。
图2-3图书借阅操作展开图
2.4.2 业务流程
分析完图书管理系统的数据流,那么接下来我们来看系统的业务流程,图2-4就是业务流程图:
2.5本章小结
本章主要通过对图书管理系统的可行性分析、功能需求分析、系统用例分析、系统业务流程分析,确定整个图书管理系统要实现的功能。同时也为图书管理系统的代码实现和测试提供了标准。
3 图书管理系统总体设计
经过上述的需求分析过后,已经明确了图书管理系统的功能需求。针对各个功能需求,制定相应的技术方法与思路进行设计与实现。另外本章将以需求分析为基准,介绍系统中重要的实体类数据,确定各个功能之间的数据表关系,由此来完成数据库表设计。
3.1 系统架构设计
本图书管理系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图3-1图书管理系统架构设计图
表现层(UI):又称UI层,主要完成本图书管理系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本图书管理系统时的舒适度。UI的界面设计也要适应不同版本的图书管理系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成本图书管理系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于本图书管理系统的数据是放在服务端的MySQL数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本图书管理系统的数据存储和管理功能。
3.2 系统时序图设计
3.2.1登录模块顺序图
登录模块主要满足了管理员以及用户的权限登录,登录模块顺序图如图3-2所示。
图3-2登录顺序图
3.2.2添加信息模块顺序图
管理员以及用户登录后均可进行添加信息操作,添加信息模块顺序图如图3-3所示。
图3-3 添加信息顺序图
3.3 系统功能模块设计
3.3.1系统总体设计模块图
图书管理系统根据前面章节的需求分析得出,其总体设计模块图如图3-4所示。
图3-4 图书管理系统功能模块图
3.3.2用户模块设计
本系统的用户包括管理员和用户两种用户模块的功能基本是相同的,用户比管理员多了一个注册功能,所以以用户模块的结构图为例进行分析,用户模块结构图为例进行分析,如下图:
图3-5用户模块结构图
3.3.3 评论管理模块设计
图书管理系统是一个交流性质的公开平台,用户在平台上提交评论,增加用户之间的互动性。但是同时也为了更好的规范评论的内容,给予管理员删除不合适的评论的功能,所以需要专门设计一个评论管理模块,具体的结构图如下:
图3-6评论管理模块结构图
图书管理系统是中需要存储不少图书资讯信息,其模块功能结构,具体的结构图如下:
图3-7图书资讯管理模块结构图
3.3.5图书信息管理模块设计
图书管理系统是中需要存储不少图书信息,其模块功能结构,具体的结构图如下:
图3-8图书信息模块结构图
3.4 数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.4.1 数据库概念结构设计
下面是整个图书管理系统中主要的数据库表总E-R实体关系图。
图3-9 图书管理系统总E-R关系图
3.4.2 数据库逻辑结构设计
通过上一小节中图书管理系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
13 | description | text | 65535 | 0 | Y | N | 文章描述 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_borrowing_id | int | 10 | 0 | N | Y | 图书借阅ID | |
2 | borrowing_form_number | varchar | 64 | 0 | Y | N | 借阅单号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | book_categories | varchar | 64 | 0 | Y | N | 图书类别 | |
6 | author | varchar | 64 | 0 | Y | N | 作者 | |
7 | borrowing_users | int | 10 | 0 | Y | N | 0 | 借阅用户 |
8 | name | varchar | 64 | 0 | Y | N | 姓名 | |
9 | contact_number | varchar | 64 | 0 | Y | N | 联系电话 | |
10 | borrowed_quantity | int | 10 | 0 | Y | N | 0 | 借阅数量 |
11 | borrowing_notes | text | 65535 | 0 | Y | N | 借阅备注 | |
12 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
13 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_classification_id | int | 10 | 0 | N | Y | 图书分类ID | |
2 | book_categories | 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 | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_information_id | int | 10 | 0 | N | Y | 图书信息ID | |
2 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
3 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
4 | book_categories | varchar | 64 | 0 | Y | N | 图书类别 | |
5 | cover | varchar | 255 | 0 | Y | N | 封面 | |
6 | author | varchar | 64 | 0 | Y | N | 作者 | |
7 | press | varchar | 64 | 0 | Y | N | 出版社 | |
8 | publication_date | date | 10 | 0 | Y | N | 出版日期 | |
9 | inventory | int | 10 | 0 | Y | N | 0 | 库存 |
10 | book_introduction | longtext | 2147483647 | 0 | Y | N | 图书介绍 | |
11 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
12 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
13 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
14 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_renewal_id | int | 10 | 0 | N | Y | 图书续借ID | |
2 | borrowing_form_number | varchar | 64 | 0 | Y | N | 借阅单号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | borrowing_users | int | 10 | 0 | Y | N | 0 | 借阅用户 |
6 | borrowed_quantity | varchar | 64 | 0 | Y | N | 借阅数量 | |
7 | renewal_days | int | 10 | 0 | Y | N | 0 | 续借天数 |
8 | renewal_notes | text | 65535 | 0 | Y | N | 续借备注 | |
9 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
10 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_return_id | int | 10 | 0 | N | Y | 图书归还ID | |
2 | borrowing_form_number | varchar | 64 | 0 | N | N | 借阅单号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | author | varchar | 64 | 0 | Y | N | 作者 | |
6 | borrowing_users | int | 10 | 0 | Y | N | 0 | 借阅用户 |
7 | name | varchar | 64 | 0 | Y | N | 姓名 | |
8 | borrowed_quantity | varchar | 64 | 0 | Y | N | 借阅数量 | |
9 | return_remarks | text | 65535 | 0 | Y | N | 归还备注 | |
10 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
6 | title | varchar | 255 | 0 | Y | N | 标题: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | reader_users_id | int | 10 | 0 | N | Y | 读者用户ID | |
2 | name | varchar | 64 | 0 | Y | N | 姓名 | |
3 | gender | varchar | 64 | 0 | Y | N | 性别 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表slides (轮播图)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | content | varchar | 255 | 0 | Y | N | 内容: | |
4 | url | varchar | 255 | 0 | Y | N | 链接: | |
5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表upload (文件上传)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
表user (用户账户:用于保存用户登录信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
表user_group (用户组:用于用户前端身份和鉴权)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
3.5本章小结
整个图书管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 图书管理系统详细设计与实现
图书管理系统的详细设计与实现主要是根据前面的图书管理系统的需求分析和图书管理系统的总体设计来设计页面并实现业务逻辑。主要从图书管理系统界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
当进入图书管理系统的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,其次是网站公告和图书信息推荐。系统主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2 用户注册界面
图书管理系统的游客和读者用户时可以进行注册登录,当用户右上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-2所示。
图4-2注册界面图
注册关键代码如下:
def Register(self, ctx):
print("===================注册=====================")
userService = service_select("user")
body = ctx.body
if "username" not in body and body["username"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名不能为空",
}
}, ensure_ascii=False))
if "user_group" not in body and body["user_group"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户组不能为空",
}
}, ensure_ascii=False))
if "password" not in body and body["password"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "密码不能为空",
}
}, ensure_ascii=False))
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 ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名已存在",
}
}, ensure_ascii=False))
ret = {
"error": {
"code": 70000,
"message": "注册失败",
}
}
bl = userService.Add(post_param)
if bl:
ret = {
"result": {
"bl": True,
"message": "注册成功"
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
4.1.3 用户登录界面
图书管理系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当读者用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到图书管理系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3用户登录界面图
def Login(self, ctx):
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:
timeout = timezone.now()
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
ctx.request.session[token] = obj["user_id"]
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 ctx.response(json.dumps(ret, ensure_ascii=False))
4.1.4网站公告界面
当访客点击图书管理系统中导航栏上的“网站公告”后将会进入到该“网站公告”列表的界面,然后选择想要看的网站公告,点击进入到详细界面,可以对网站公告进行点赞、收藏和评论。网站公告展示界面如下图所示。
图4-4网站公告展示界面图
4.1.5图书资讯界面
用户点击“图书资讯”可以搜索查看资讯信息,并可对资讯信息进行点赞、收藏和发表评论等操作。图书资讯详情界面如下图4-5所示。
图4-5图书资讯界面图
4.1.6 图书信息详情界面
用户可以查看图书信息,在查询到自己想要了解的图书信息的时候,可以进入查看详细的介绍,支持用户对图书信息信息进行借阅、收藏、点赞、评论的功能。图书信息详情界面如下图4-6所示。
图4-6 图书信息详情界面图
查询图书信息代码如下:
def Get_obj(self, ctx):
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
obj = self.service.Get_obj(query, obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
if obj:
self.interact_obj(ctx, obj)
return {"result": {"obj": obj}}
图书借阅界面如下图4-7所示。
图4-7 图书借阅界面图
提交图书借阅信息代码如下:
def Add(self, ctx):
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.1.7个人中心界面
当用户点击“个人中心”可以对个人信息进行修改,也可以对个人首页、图书借阅、图书归还、图书续借和自己收藏的信息进行设置管理。个人中心界面如下图4-8所示。
图4-8个人中心界面图
4.2管理员功能模块
4.2.1公共管理界面
管理人员在“公共管理”这一菜单下是可以对图书管理系统内的轮播图和网站公告进行添加修改的。轮播图管理界面如下图4-9所示。
图4-9轮播图管理界面图
轮播图修改代码如下:
def Set(self, ctx):
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-10所示。
图4-10网站公告管理界面图
4.2.2 用户管理界面
招聘系统中的管理人员是可以对注册的读者用户进行管理的,也可以对管理员进行管控。界面如下图4-11所示。
图4-11用户管理界面图
用户列表管理代码如下:
def Get_list(self, ctx):
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.3资讯管理界面
管理员点击“资讯管理”菜单能够对其下子菜单图书资讯和图书资讯的分类进行增删改查,也可以对资讯的评论进行管控。资讯管理界面如下图4-12所示。
图4-12资讯管理界面图
4.2.4 图书分类界面
管理员点击“图书分类”可以查看到所有的图书分类类型,可以对其进行增删改查操作。图书分类添加界面如下图4-13所示。
图4-13图书分类添加界面图
图书分类添加代码如下:
def Add(self, ctx):
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.5 图书信息界面
管理员点击“图书信息”会显示出所有的图书信息,支持输入图书名称或图书分类对图书信息进行查询,可以添加新的图书信息,也可以对用户提交的评论信息进行管理。图书信息管理界面如下图4-14所示。
图4-14图书信息界面图
4.2.6 图书借阅界面
管理员点击“图书借阅”会显示出所有用户的图书借阅信息,支持对图书借阅信息进行图书归还、图书续借信息设置。图书借阅界面如下图4-15所示。
图4-15图书借阅界面图
修改图书借阅状态代码如下:
def Set(self, ctx):
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}
5 系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、图书信息展示功能测试、图书信息添加、图书信息搜索、密码修改、图书借阅功能测试,如表5-1、5-2、5-3、5-4、5-5、5-6所示:
表5-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
图书信息查看功能测试:
表5-2 图书信息查看功能测试表
用例名称 | 图书信息查看 |
目的 | 测试图书信息查看功能 |
前提 | 用户登录 |
测试流程 | 点击图书信息列表 |
预期结果 | 可以查看到所有图书信息信息 |
实际结果 | 实际结果与预期结果一致 |
管理员添加图书信息界面测试:
表5-3 管理员添加图书信息界面测试表
用例名称 | 添加图书信息测试用例 |
目的 | 测试图书信息添加功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员点击图书信息,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 | 提交以后,页面首页会显示新的图书信息 |
实际结果 | 实际结果与预期结果一致 |
图书信息搜索功能测试:
表5-4图书信息搜索功能测试表
用例名称 | 图书信息搜索测试 |
目的 | 测试图书信息搜索功能 |
前提 | 无 |
测试流程 | 1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 | 页面显示包含有搜索关键字的图书信息 |
实际结果 | 实际结果与预期结果一致 |
密码修改搜索功能测试:
表5-5 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
图书借阅功能测试:
表5-6图书借阅功能测试表
用例名称 | 图书借阅测试用例 |
目的 | 测试用户图书借阅功能 |
前提 | 用户正常登录情况下 |
测试流程 | 1)搜索查看图书信息,点击图书借阅。 2)填写图书借阅信息,点击进行提交。 |
预期结果 | 图书借阅成功 |
实际结果 | 实际结果与预期结果一致 |
5.2 系统测试结果
通过编写图书管理系统的测试用例,已经检测完毕用户登录功能测试、图书信息展示功能测试、图书信息添加、图书信息搜索、密码修改、图书借阅功能测试,通过这6大模块为图书管理系统的后期推广运营提供了强力的技术支撑。
结论
通过基于Python的图书管理系统的开发,本人巩固了之前学过的知识,如今将平时所学到的知识融合在设计中,在设计过程中,做了很多的准备,首先,在数据库系统的设计过程中,尤其是在数据库的工作原理、工作特点,对其深刻的讨论,与此同时,对于小型站点来说,最好服务器的选择,其次,利用所学的知识点分析所做的系统,并在此基础上设计。
目前本系统已经上线,正在试运行阶段,用户反馈良好,基本完成用户所需,试运行过程中没有出现阻断性问题,有一些不足和小问题也及时予以修正,系统上线后,为了保证数据的安全性,对系统进行了备份操作,系统备份是每两个月备份一次,数据库备份为每周备份一次,系统部署在租赁的云平台服务器中。
本次系统上线成功后,得到了用户的高度认可,但是在功能上和性能上还需做进一步的研究处理,使其有更高的性能和更好的用户体验。
系统在以后的升级过程中,需要解决一系列用户所提出的问题,例如打印过程中如何避免浏览器的兼容性问题,大量用户访问时,如何保持较高的响应速度,在系统今后的升级过程中将着重解决这些安全性问题。
参考文献
[1]Weixia W .Optimization of book information search in intelligent library system management based on cellular network[J].Optical and Quantum Electronics,2024,56(3):
[2]Ma L .The construction of fine management system of library library materials under the background of informationization[J].Applied Mathematics and Nonlinear Sciences,2024,9(1):
[3]谢卓琳,李莉,于淼等.智慧感应程序之高校图书馆座位预约管理系统的设计与思考[J].科技与创新,2023,(19):49-51.DOI:10.15913/j.cnki.kjycx.2023.19.015.
[4]赵鹏.基于RFID技术应用的无人图书馆智能管理[J].数字技术与应用,2023,41(08):136-138.DOI:10.19695/j.cnki.cn12-1369.2023.08.44.
[5]曾王平,彭如强.智慧图书馆建设思路研究[J].电子元器件与信息技术,2023,7(08):43-46.DOI:10.19772/j.cnki.2096-4455.2023.8.012.
[6]努尔兰·吐尔达洪,刘岩,鲍慧敏等.基于树莓派的图书馆预约系统[J].电脑编程技巧与维护,2023,(08):54-57.DOI:10.16184/j.cnki.comprg.2023.08.023.
[7]唐世军,缪玉堂.图书馆座位预约系统保障性使用策略[J].内蒙古科技与经济,2023,(15):153-154+160.
[8]王莉萍,戴晓峰.基于大数据的智能图书管理系统的设计与实现[J].信息与电脑(理论版),2023,35(01):162-164.
[9]J. M G ,B. E B ,Guido C , et al.Development of an Innovative Seat Reservation System for University Buildings Based on BIM Technology[J].Buildings,2022,12(11):1786-1786.
[10]刘方方.试谈图书馆自动化管理系统图书典藏和流通切换工作[J].河南图书馆学刊,2022,42(08):115-117.
[11]徐建林.基于JSP的图书馆管理系统的设计与实现[J].长江信息通信,2022,35(08):143-145.
[12]刘铃.图书馆书籍管理系统设计与实现[J].电子制作,2022,30(14):61-63+70.DOI:10.16589/j.cnki.cn11-3571/tn.2022.14.028.
[13]喻莉,唐小红.新时期图书管理信息化建设研究[J].江苏科技信息,2022,39(18):21-23.
[14]黄敏仪.基于云计算的图书馆借阅信息管理系统设计方法初探[J].中国新通信,2021,23(19):58-59.
[15]黄晓晖.关于高等学校图书馆业务管理系统的设计与实现路径分析[J].参花(上),2021,(09):117-118.
[16]李燕.图书管理工作中存在的问题和解决措施[J].办公室业务,2021,(15):161-162.
[17]安文潞.基于Django框架的考古书店官方网站的设计与实现[D].首都经济贸易大学,2021.DOI:10.27338/d.cnki.gsjmu.2021.000601.
[18]胡小春,田婧,陈燕.基于Python的图书馆信息管理系统研发[J].信息技术与信息化,2021,(05):37-40.
[19]吴春梅,蒋林利,余荣川.基于Python和Django框架的二级学院资料室图书管理系统设计与实现[J].无线互联科技,2020,17(16):67-70.
[20]You X .Architecture and Research of Smart Book Management System Based on Artificial Intelligence Technology[J].International Journal of New Developments in Engineering and Society,2020,4(2):
致 谢
到此,整个基于Python的图书管理系统就算完成了,虽然过程十分艰难,但是等到都完成的时候,我感觉无比的自豪,虽然设计的系统还存在许多的纰漏,但是我已经拼劲全力,给自己的大学四年画上了一个圆满的句号。
在这里我首先要感谢的就是大学四年来所有教导我的老师,是他们教会了我许多的专业知识以及做人的道理,从一进校门对对开发系统一窍不通到现在能自主开发一个管理系统,里面包含了前台框架、后台框架、业务流程、数据结构、操作系统等各种知识,只有把他们统一运用好,才能够完成整个系统,这都是老师的功劳;其次我要感谢我的指导老师,在开发这个系统的时候,我遇到了无数的问题,经常通过线上、线下的方式去请教导师,每次去请教导师,他从来没有不耐烦,都是细心的引导,告诉我怎么样实现这个功能,怎么样才能使得系统更加完善,然后通过自己查询相关资料解决问题,提高了自己自主解决问题的能力,授人以鱼不如授人以渔,指导老师的这种工作态度受益终生,我也会向老师不断靠拢,向他学习,在此我只想说一句:“老师,谢谢您,您辛苦了”!最后我还要感谢我的室友、同学,在一起学习这四年,他们不但学习上给了我很多建议,在生活上更加给了我帮助,正是有他们的帮助,我的大学生涯才如此完美。
最后,希望自己在未来的道路上能够越走越远,不辜负在大学的学习以及老师们的细致的教导,追风赶月莫停留,平荒尽处是春山。
免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-