springboot智慧图书馆系统
摘 要
大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在图书馆管理的要求下,开发一款整体式结构的智慧图书馆系统,将复杂的系统进行拆分,能够实现对需求的变化快速响应、系统稳定性的保障,能保证平台可持续、规模化发展的要求。
本文课题研究的“图书馆书籍管理”系统,网站的主要功能模块包括图图书信息管理、借阅申请管理、借阅确认管理、逾期通知管理、归还信息管理、资源管理、交流管理、系统用户管理等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用Springboot框架、JSP技术、Java语言进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对智慧图书馆系统的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本的介绍,最后来实现智慧图书馆系统和部署运行使用它。
关键词:智慧图书馆系统;整体式结构;Springboot;Mysql数据库
Springboot Smart Library System
Abstract
In the era of big data, data is growing explosively. In order to meet the trend of the information age and the requirements of information security, using the Internet to serve other industries and promote production has become an unstoppable trend. Under the requirements of library management, develop a holistic smart library system that breaks down complex systems, enabling rapid response to changes in demand, ensuring system stability, and meeting the requirements of sustainable and large-scale development of the platform.
The "Library Book Management" system studied in this article includes the main functional modules of the website, including image book information management, borrowing application management, borrowing confirmation management, overdue notice management, return information management, resource management, communication management, system user management, etc. The software development and hardware installation are carried out using an object-oriented development model, which can well meet the actual needs of use, We have improved the corresponding software installation and program coding work, using MySQL as the main storage unit for backend data, and using the Springboot framework, JSP technology, and Java language for business system coding and development, achieving all the functions of this system. This report first analyzes the background, role, and significance of the research, laying the foundation for the rationality of the research work. Analyze the various requirements and technical issues of the smart library system, prove the necessity and technical feasibility of the system, and then provide a basic introduction to the technical software and design ideas required for designing the system. Finally, achieve the operation and use of the smart library system and departments.
Keywords: Smart library system; Integrated structure; Springboot; MySQL database
目 录
智慧图书馆系统是对传统图书馆管理模式的一种改进,它可以充分利用网络的特性,随时随地的对图书进行管理,不受时空的局限,很大程度地简化了智慧图书馆系统的过程,减轻了管理员工作,为借阅者提供便捷的途径,提高了图书的利用率。本系统的优势主要体现在如下几个方面:
(1)管理员通过数据库管理和维护系统可以对借阅者和图书进行管理和维护。管理员可以对后台数据中的信息进行删除、修改、更新等基本操作以管理和维护借阅者信息。
(2)用户可以通过图书作者、图书名称、类别、出版社、图书编号进行查询,以便用户对图书信息的快速检索。
(3)图书的添加,新书的出版可以及时的输入数据库以待取用,已经报废的旧书及时的删除或禁用。
(4)借阅者可以在线随时查询图书信息,借阅图书,等待图书管理者审核通过。
(5)图书管理者可以对读者的借阅信息进行图书归还和审核的操作。
国内研究动态
我国图书管理技术起步于上世纪80年代初期,当时利用磁带开展联机检索服务,20世纪90年代以后,随着我国信息网络建设的快速发展,计算机网络也日渐成熟,各类专业广域网纷纷建成并投入使用。南京汇文、北邮MELINETS等国内较有影响的几个大型自动化系统就是当时研发并投入运营的。进入新世纪,国内众多研究者对图书管理系统功能、结构、发展趋势等进行了研发和开发。
国外研究动态
国外早在上个世纪初就对图书信息的管理进行大量的研究,受当时条件和技术的制约,主要是采用条目是管理方式。上世纪550年代美国海军首先进行了单元词匹配检索的研究。1958年,卢恩开创自动分类、自动标引、信息检索等图书信息管理理念。1964年,卢恩研发了第一代图书管理系统,大幅提高了图书信息管理的效率与准确性,避免了因人工输入带来的误差。20世纪70年代,以编目系统为基础的第二代图书借阅管理系统出现。90年代中后期,随着互联网技术的成熟和Windows界面的广泛应用,国外自动化图书管理系统研究蓬勃发展。到20世纪90年代末,随着知识经济时代的到来,个人电脑迅速普及,数据库技术、客户/服务器技术的不断升级,第三代图书管理系统应运而生,使得全部信息数据在操作系统下实现操控处理。进入21世纪,图书管理系统理论和计算机技术的成功结合,信息化技术在管理方面大显身手,模块化、可视化、信息化等技术的一体化技术实现成为可能并广泛应用,各种图书管理系统模块大量的开发应用。专业化的图书管理系统已经普及到各个方面。
根据市场调研得到的信息数据,结合国内外前沿研究,利用相关系统开发和设计方法,最终设计出智慧图书馆系统。
本文共有七章,如下所示。
第一章概述了智慧图书馆系统的研究目的和意义;精炼地总结了国内外研究状态和未来的研究趋势,最后给出了论文的组成结构。
第二章简要概述了本文所用的开发技术和工具。
第三章简要对系统各业务流程进行需求分析、可行性分析。
第四章对智慧图书馆系统进行设计。
第五章对智慧图书馆系统进行实现,并贴出相关页面截图,语言描述出具体功能实现的操作方法。
第六章对智慧图书馆系统采用测试用例的方式来对一些主要功能模块测试,最后得出测试结果。
第七章总结全文并对未来的研究做出展望。
人可以掌握多门外语,而一个计算机科学家精通的大多是编程语言,它不是人类的自然语言,比如C语言、Java、Perl等等。由于不同的公司开发出的“中间件”不够规范,所以Sun公司推出J2EE,用这个标准来解决弊病。它提供了良好的机制,让每个层次允许与之相对的服务器、组件运行,使得系统的搭建稳定可用、开发高效、维护方便。
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
科技的进步,给日常带来许多便利:教室的投影器用到了虚拟成像技术,数码相机用到了光电检测技术,比如超市货物进出库的记录需要一个信息仓库。这个信息仓库就是数据库,而这次的智慧图书馆系统也需要这项技术的支持。
用MySQL这个软件,是因为它能接受多个使用者访问,而且里面存在Archive等。它会先把数据进行分类,然后分别保存在表里,这样的特别操作就会提高数据管理系统自身的速度,让数据库能被灵活运用。MySQL的代码是公开的,而且允许别人二次编译升级。这个特点能够降低使用者的成本,再搭配合适的软件后形成一个良好的网站系统。虽然它有缺点,但是综合各方面来说,它是使用者的主流运用的对象。
B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题。
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。
Eclipse是由Genuitec公司开发的,一款功能非常强大的JavaEE的集成开发环境,其中包括有:完备的编码、调试、测试和发布功能,完整支持JSP、Spring、CSS、JavaScript、SpringMVC、HTML、JSF、Mybatis、SQL等技术。在体系结构上,Eclipse的特征可以被分为7类:JavaEE模型;Web开发工具、EJB开发工具、JavaEE项目部署服务、应用程序服务器的而连接器、数据库服务、Eclipse整合帮助。
对于以上每一种功能的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。Eclipse在结构上的这种模块化,可以让它在不影响其他模块的情况下,对其中任意的一个模块进行单独的扩展和升级。强大的Eclipse应用开发平台也不仅仅只是Eclipse的插件而已,同时更是一款功能强大的,用于JavaEE的集成开发环境。
本次设计基于B/S 模式下,运用Java技术采用的是MySQL数据库和Myeclipse实现,总体的可行性共分为以下三个方面。
所谓的技术可行性就是在限定时间,前期拟定的功能能否被满足。在开发设计上是否会遇上解决不了的问题。做完的项目能否被很好地应用,如果存在缺点在后期的维护上是否存在很大的难度。在对这个系统评估后,认定已存在的技术能达成目标。用Java技术来实现动态的页面,嵌入低依赖性的设计模式,灵活的数据库,配合稳定的服务器,整个系统的运行效率大大提升。由此可见,在技术层面达成目标不是非非之想。
在项目上使用的工具大部分都是是当下流行开源免费的,所以在开发前期,开发时用于项目的经费将会大大降低,不会让开发该软件在项目启动期受到经费的影响,所以经济上还是可行的。尽量用最少的花费去满足用户的需求。省下经费用于人工费,以及设备费用。将在无纸化,高效率的道路上越走越远。
本系统实现功能的操作很简单,普通电脑的常见配置就可以运行本软件,并且只要粗通电脑使用的基本常识就可以流畅的使用本软件。电脑具备连接互联网的能力,并且可以正常访问系统,并不需要操作者有什么高超的能力,只需了解业务流程,并且按照专业知识进行正确操作即可,所以智慧图书馆系统具备操作可行性。
根据用户对系统的需求,要求系统简单操作,能够准确,完整的对信息进行管理。智慧图书馆系统在对需求做解析后,整个系统主要分为三个部分:管理员、图书管理者和普通用户,每个模块下的分支功能不一样。对功能做出如下说明:
管理员模块:后台首页、轮播图、系统公告管理、资源管理(新闻列表、新闻分类)、交流管理(留言板、留言分类)、系统用户管理(管理员、图书管理者、普通用户)、模块管理(图书类型、图书信息、借阅申请、借阅确认、逾期通知、归还信息)。
图书管理者:后台首页、模块管理(图书信息、借阅申请、借阅确认、逾期通知、归还信息)
用户模块:首页、留言板、系统公告、新闻资讯、图书信息、我的账户、我的收藏、个人中心等。
系统用例图如下所示。
![](https://i-blog.csdnimg.cn/direct/5b8840e269704a6e8c46577df91e5e30.png)
图3-1管理员用例图
![](https://i-blog.csdnimg.cn/direct/af0777d99eca4ad7b77eb340fd31b1d8.png)
图3-2图书管理者用例图
![](https://i-blog.csdnimg.cn/direct/6872767a30ec4157866741a6512d0c19.png)
图3-3普通用户用例图
根据用例图,对一些重要的用例进行描述。
注册用例描述如下表所示。
表3-1 注册用例描述
用例名称 | 注册 |
参与者 | 用户 |
描述 | 用户填写相关信息完成注册成为系统的用户 |
前置条件 | 无 |
后置条件 | 用户填写相关信息并用户账号可用 |
事件流 |
|
补充说明 |
|
登录用例描述如下表所示。
表3-1 登录用例描述
用例名称 | 登录 |
参与者 | 用户 |
描述 | 用户填写用户名和密码登录系统 |
前置条件 | 用户已注册 |
后置条件 | 用户名和密码正确 |
事件流 | (1)用户在登录页面输入用户名和密码 (2)系统检测用户输入的用户名和密码 (3)显示登录成功并返回主页面 |
补充说明 | (a)系统检查除密码不正确,返回登录页面 |
个人信息管理用例描述如下表所示。
表3-1 个人信息管理用例描述
用例名称 | 管理个人信息 |
参与者 | 用户 |
描述 | 用户查看、修改个人信息 |
前置条件 | 用户已登录 |
后置条件 | 无 |
事件流 | (1)用户查看个人信息 (2)用户修改个人信息 |
补充说明 | (a)用户可修改密码 (b)用户可修改联系方式 |
借阅申请用例描述如下表所示。
表3-1 借阅申请用例描述
用例名称 | 借阅申请 |
参与者 | 用户 |
描述 | 用户执行图书借阅申请操作 |
前置条件 | 用户已登录 |
后置条件 | 该图书存在,并且能被借阅 |
事件流 | (1)在图书页点击要借阅的图书 (2)填写图书借阅数据 |
补充说明 | (a)图书借阅表单数据不能为空 |
图书归还用例描述如下表所示。
表3-1 图书归还用例描述
用例名称 | 图书归还 |
参与者 | 用户 |
描述 | 用户执行图书归还操作 |
前置条件 | 用户已登录 |
后置条件 | 该图书存在,并且能被归还 |
事件流 | (1)在图书页点击要归还的图书 (2)填写图书归还数据 |
补充说明 | (a)图书归还表单数据不能为空 |
图书用例描述如下表所示。
表3-1 图书用例描述
用例名称 | 智慧图书馆系统 |
参与者 | 图书管理者 |
描述 | 图书管理者提供新增、修改、删除、查阅等功能 |
前置条件 |
|
后置条件 | 无 |
事件流 | (1)图书管理者查看修改图书 (2)图书管理者添加图书 (3)图书管理者删除图书 |
补充说明 | (a)新添加的图书不符合要求时会添加失败 (b)修改的图书不符合要求时会修改失败 |
智慧图书馆系统的业务流程如下图所示。
![](https://i-blog.csdnimg.cn/direct/f4887567b668494e94eb3de491f3a824.png)
图3-3 系统业务流程图
管理员拥有最高权限,在对各项信息进行增加、删除、修改后会更新后台数据库的内容,用户在登录进行浏览图书资讯、系统公告、留言板、新闻资讯、我的收藏、我的账户、图书信息查询、图书借阅,归还操作等指令动作同样会更新后台数据。
与强调控制逻辑的程序流程图不同,它更关心的是整个系统中数据的具体流动以及数据的加工处理的整个客观过程,是对数据规格的说明。也正因如此,系统数据流图作为系统结构化分析方法中极为重要的一种描述工具备受青睐。
智慧图书馆系统的顶层数据流如下图所示。
![](https://i-blog.csdnimg.cn/direct/d4153ba617de417390e9b5c345627fe8.png)
图3-4系统顶层数据流程图
系统顶层数据流:外部实体为用户,第一个流程为登录验证,用户信息表返回密码验证,是否正确,正确则登录系统,错误则反馈信息,登录系统后,根据不同用户的功能选择,来读写数据库。
系统底层数据流如下图所示。
![](https://i-blog.csdnimg.cn/direct/83baaf5b2dd840f694c7a85734b73e4d.png)
系统底层数据流:外部实体为管理员和普通用户,数据流分别有管理员和普通用户流向系统数据流程,数据表提供数据支持,来完成逻辑操作。
目前B/S体系的系统主要的数据访问方式是:通过浏览器页面用户可以进入系统,系统可以自动对用户向服务器发送的请求进行处理,处理请求是在系统后台中进行的,用户在浏览器页面上进行相应操作,就能够看到服务端传递的处理结果。智慧图书馆系统主要分为视图-模型-控制三层架构设计。在视图层中,主要是操作在服务器端向客户端反馈并显示的数据,在模型层中,主要处理相关的业务逻辑、数据整合等,最后的控制层它介于视图和模型之间,主要是调整两层之间的关系,最终落实数据的传递。
系统架构图如下图所示。
![](https://i-blog.csdnimg.cn/direct/d462bf92127d4ab38a680279817e5e0c.png)
图4-1系统架构图
进入系统后首先要进行登录,验证你的身份,赋予你不同的权限。当你成功登录后,页面会有多个板块,分别是系统用户管理、用户注册管理、智慧图书馆系统、借阅管理、还书管理、系统管理。里面界面简单易懂,根据标示可以直接进行方便快捷的操作。
系统功能结构图如下所示。
![](https://i-blog.csdnimg.cn/direct/583740099714416ca891fc5b8cf1ccd9.png)
图4-2系统功能结构图
管理员账户的基本信息管理。主要提供管理员账户的基本信息录入、删除、维护和查询等功能。
管理员模块功能如下。
个人信息:修改个人信息,修改密码。
系统用户管理:管理所有注册用户信息和图书管理者信息资料,可以删除添加修改等功能。
系统公告管理:管理轮廓图,网站公告内容等。
资源管理:管理员发布图书资讯内容,资讯分类等。
交流管理:管理员对用户的留言信息进行审核回复。
管理者模块功能如下。
个人信息:修改个人信息,修改密码。
图书信息管理:可以新增,删除,查询图书信息,包括图书编号,名称,类别,封面,库存,作者等信息。
图书借阅管理:查看和查询所有的借阅信息。
逾期通知管理:对用户图书借阅到期未归还时进行发送逾期通知。
图书归还管理:查看和查询图书归还信息,提交审核状态。
用户模块功能如下。
系统公告:浏览网站公告信息。
留言板:可以编辑留言内容进行提交。
新闻资讯:浏览关于图书资讯文章,可以点赞收藏评论。
我的账户:修改个人信息,修改密码。
我的收藏:查看收藏文章内容。
图书信息:可以关键字搜索图书名称,类别等,图书页面可以点击点赞收藏和借阅等功能。
图书借阅:填写借阅信息,查看借阅信息。
借阅归还:查看图书归还信息,审核状态。
一个好的系统它的后台数据库一定要考虑的全面,这和我们建造房子一个概念,房子不是随心所欲建起来的,一切都是在合理设计的基础是实现的,地基打牢固了房子才能建的更高。数据库如果设计的很合理,而且每个方面都能考虑到了那么这个系统才能不会出现大的问题。
本系统在数据库中存放了多张表,分别是用户表、图书表、借阅表、归还表。
系统的主要实体间关系E-R图如下图所示。
![](https://i-blog.csdnimg.cn/direct/ad6a23189c564ec796b2df28b67935b0.png)
图4-3系统E-R图
此环节把概念转变成数据。由于整个数据库所处理的信息过多,就只展示几个表。
表access_token (登陆访问时长)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 用户编号: |
表article (文章:用于内容管理系统的文章)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 文章描述 |
表article_type (文章分类)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
表auth (用户权限管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
表book_information (图书信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_information_id | int | 10 | 0 | N | Y | 图书信息ID | |
2 | book_number | varchar | 64 | 0 | N | N | 图书编号 | |
3 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
4 | cover | varchar | 255 | 0 | Y | N | 封面 | |
5 | book_type | varchar | 64 | 0 | Y | N | 图书类型 | |
6 | author | varchar | 64 | 0 | Y | N | 作者 | |
7 | press | varchar | 64 | 0 | Y | N | 出版社 | |
8 | number_of_books | int | 10 | 0 | Y | N | 0 | 图书数量 |
9 | controller | int | 10 | 0 | Y | N | 0 | 管理者 |
10 | book_introduction | longtext | 2147483647 | 0 | Y | N | 图书简介 | |
11 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
12 | recommend | 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 | 更新时间 |
表book_type (图书类型)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | book_type_id | int | 10 | 0 | N | Y | 图书类型ID | |
2 | book_type | varchar | 64 | 0 | Y | N | 图书类型 | |
3 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
4 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表borrowing_application (借阅申请)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | borrowing_application_id | int | 10 | 0 | N | Y | 借阅申请ID | |
2 | borrowing_number | varchar | 64 | 0 | Y | N | 借阅编号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | cover | varchar | 255 | 0 | Y | N | 封面 | |
6 | book_type | varchar | 64 | 0 | Y | N | 图书类型 | |
7 | author | varchar | 64 | 0 | Y | N | 作者 | |
8 | press | varchar | 64 | 0 | Y | N | 出版社 | |
9 | controller | int | 10 | 0 | Y | N | 0 | 管理者 |
10 | borrowing_date | date | 10 | 0 | Y | N | 借阅日期 | |
11 | ordinary_users | int | 10 | 0 | Y | N | 0 | 普通用户 |
12 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
13 | borrowing_days | int | 10 | 0 | Y | N | 0 | 借阅天数 |
14 | borrowed_quantity | int | 10 | 0 | Y | N | 0 | 借阅数量 |
15 | borrowing_notes | text | 65535 | 0 | Y | N | 借阅备注 | |
16 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
17 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
18 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
19 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表borrowing_confirmation (借阅确认)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | borrowing_confirmation_id | int | 10 | 0 | N | Y | 借阅确认ID | |
2 | borrowing_number | varchar | 64 | 0 | N | N | 借阅编号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | cover | varchar | 255 | 0 | Y | N | 封面 | |
6 | book_type | varchar | 64 | 0 | Y | N | 图书类型 | |
7 | author | varchar | 64 | 0 | Y | N | 作者 | |
8 | press | varchar | 64 | 0 | Y | N | 出版社 | |
9 | controller | int | 10 | 0 | Y | N | 0 | 管理者 |
10 | borrowing_date | date | 10 | 0 | Y | N | 借阅日期 | |
11 | ordinary_users | int | 10 | 0 | Y | N | 0 | 普通用户 |
12 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
13 | borrowing_days | int | 10 | 0 | Y | N | 0 | 借阅天数 |
14 | borrowed_quantity | int | 10 | 0 | Y | N | 0 | 借阅数量 |
15 | borrowing_notes | text | 65535 | 0 | Y | N | 借阅备注 | |
16 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
17 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
18 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表collect (收藏)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
表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: |
表forum (论坛)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | forum_id | mediumint | 8 | 0 | N | Y | 论坛id | |
2 | display | smallint | 5 | 0 | N | N | 100 | 排序 |
3 | user_id | mediumint | 8 | 0 | N | N | 0 | 用户ID |
4 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
5 | praise_len | int | 10 | 0 | Y | N | 0 | 点赞数 |
6 | hits | int | 10 | 0 | N | N | 0 | 访问数 |
7 | title | varchar | 125 | 0 | N | N | 标题 | |
8 | keywords | varchar | 125 | 0 | Y | N | 关键词 | |
9 | description | varchar | 255 | 0 | Y | N | 描述 | |
10 | url | varchar | 255 | 0 | Y | N | 来源地址 | |
11 | tag | varchar | 255 | 0 | Y | N | 标签 | |
12 | img | text | 65535 | 0 | Y | N | 封面图 | |
13 | content | longtext | 2147483647 | 0 | Y | N | 正文 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
16 | avatar | varchar | 255 | 0 | Y | N | 发帖人头像: | |
17 | type | varchar | 64 | 0 | N | N | 0 | 论坛分类:[0,1000]用来搜索指定类型的论坛帖 |
表hits (用户点击)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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: |
表late_notice (逾期通知)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | late_notice_id | int | 10 | 0 | N | Y | 逾期通知ID | |
2 | borrowing_number | varchar | 64 | 0 | N | N | 借阅编号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | cover | varchar | 255 | 0 | Y | N | 封面 | |
6 | book_type | varchar | 64 | 0 | Y | N | 图书类型 | |
7 | author | varchar | 64 | 0 | Y | N | 作者 | |
8 | press | varchar | 64 | 0 | Y | N | 出版社 | |
9 | controller | int | 10 | 0 | Y | N | 0 | 管理者 |
10 | borrowing_date | date | 10 | 0 | Y | N | 借阅日期 | |
11 | ordinary_users | int | 10 | 0 | Y | N | 0 | 普通用户 |
12 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
13 | borrowing_days | int | 10 | 0 | Y | N | 0 | 借阅天数 |
14 | borrowed_quantity | int | 10 | 0 | Y | N | 0 | 借阅数量 |
15 | notification_content | text | 65535 | 0 | Y | N | 通知内容 | |
16 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
17 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
18 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
19 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表library_manager (图书管理者)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | library_manager_id | int | 10 | 0 | N | Y | 图书管理者ID | |
2 | management_no | varchar | 64 | 0 | Y | N | 管理编号 | |
3 | manager_name | varchar | 64 | 0 | Y | N | 管理者姓名 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
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 | 更新时间 |
表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 | 更新时间: |
表ordinary_users (普通用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | ordinary_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 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
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 | 更新时间 |
表praise (点赞)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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已取消 |
表return_information (归还信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | return_information_id | int | 10 | 0 | N | Y | 归还信息ID | |
2 | borrowing_number | varchar | 64 | 0 | N | N | 借阅编号 | |
3 | book_number | varchar | 64 | 0 | Y | N | 图书编号 | |
4 | book_name | varchar | 64 | 0 | Y | N | 图书名称 | |
5 | cover | varchar | 255 | 0 | Y | N | 封面 | |
6 | book_type | varchar | 64 | 0 | Y | N | 图书类型 | |
7 | author | varchar | 64 | 0 | Y | N | 作者 | |
8 | press | varchar | 64 | 0 | Y | N | 出版社 | |
9 | controller | int | 10 | 0 | Y | N | 0 | 管理者 |
10 | borrowing_date | date | 10 | 0 | Y | N | 借阅日期 | |
11 | ordinary_users | int | 10 | 0 | Y | N | 0 | 普通用户 |
12 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
13 | borrowing_days | int | 10 | 0 | Y | N | 0 | 借阅天数 |
14 | borrowed_quantity | int | 10 | 0 | Y | N | 0 | 借阅数量 |
15 | return_date | date | 10 | 0 | Y | N | 归还日期 | |
16 | remarks | varchar | 64 | 0 | Y | N | 备注 | |
17 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
18 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
19 | 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 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
表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 | 更新时间: |
系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。
登录合法性判断过程:用户输入账号和密码后,系统首先确定输入输入数据合法性,然后在login.jsp页面发送登录请求,调用src下的mainctrl类的dopost方法来验证。
用户登录模块的IPO如下所示:
输入:用户名和密码。
处理:
1)检测用户输入的账号、密码是否正确及在数据库已对应存在。
2)从数据库中提取记录,并储存在本地的session中(timeout默认=30min)。
3)根据用户名,将其显示在系统首页上。
输出:是否成功的信息。
登录流程图如下所示。
![](https://i-blog.csdnimg.cn/direct/79db0c7366c14125ae52ab393bd4ae05.png)
图5-1登录流程图
系统登录界面如下所示。
![](https://i-blog.csdnimg.cn/direct/4725fdfef06149f1a0cea4e5d086f21c.png)
图5-2系统登录界面
登录关键代码如下。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
在浏览器的地址栏里输入对应的地址,就可以跳转到智慧图书馆系统的首页,这里也是浏览者访问系统的入口。
首页载入流程:系统先连接数据库,显示界面参数初始化,读取数据库的数据表,显示前端样式,对数据按添加时间排序,按照模板设计位置显示数据,刷新显示界面,断开数据库连接。
首页界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/493c390397f24fae8d1ee071ec3f8983.png)
图5-3首页界面
系统的用户通过自行注册生成,在系统首页点击用户注册菜单,系统跳转到对应的注册页面。点击重置按钮,清空所填数据,点击注册按钮完成注册。
用户注册流程图如下所示。
![](https://i-blog.csdnimg.cn/direct/c125b1c4a783467fa5f246e710637242.png)
图5-4用户注册流程
注册个人信息实现流程为:填写个人信息,系统使用JQuery选择器获取在网页中输入的注册信息,再对联系方式、登录密码等信息进行验证,验证通过后用Ajax异步请求方式向服务器发送请求并把数据传送到后台,然后验证用户名是否已存在,如果已存在则注册失败提示“用户名已存在”;如果用户表中没有该用户名则把用户信息加入数据库,把操作状态以json字符串方式返回到前台。Ajax请求成功接收到返回的数据时会触发成功回调函数,然后解析返回的json字符串,系统根据返回信息弹出提示框,注册成功后返回登录页。
用户注册界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/ff661acb1e7e4b46a848c0c5aee1efe6.png)
图5-5用户注册界面
用户注册的关键代码如下。
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
图书管理者发布图书后,图书在系统前台显示,用户浏览图书信息,包括图书编号、图书名称、图书类型、作者、出版社、图书数量、管理者、图书封面等信息,选择相应的图书借阅,通过id传参,找到该图书,在图书借阅添加页提交借阅表单,生成借阅记录。
图书借阅流程如下图所示。
![](https://i-blog.csdnimg.cn/direct/bbd0205830a24bca87819ccec46668dc.png)
图5-6图书借阅流程
图书借阅界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/010a282bc14f458b94ea1cf469ae057a.png)
图5-7图书借阅界面
图书借阅关键代码如下。
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
-
-
- 借阅归还模块
-
用户登录系统点击借阅归还栏目,选择相应的图书归还,通过id传参,找到该图书,在图书归还添加页提交归还表单,生成归还记录。
借阅归还流程如下图所示。
![](https://i-blog.csdnimg.cn/direct/06f8a3bfba714953bd30a6c3b896de53.png)
图5-8借阅归还流程
借阅归还界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/e42551ee73f149f6aa0d62de488064cb.png)
图5-9借阅归还界面
管理员对系统用户的管理,在列表实现管理员用户的管理,包括录入、删除、修改。用户管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/19e7fb0d4133450aa4d418d1c01d46fd.png)
图5-10用户管理界面
用户管理关键代码如下所示。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
普通用户在系统前台后,数据库的借阅记录表生成借阅记录信息,图书管理者在借阅申请列表审核用户的借阅信息,审核通过,用户借阅成功,否则借阅失败。
同意借阅如下图所示。
![](https://i-blog.csdnimg.cn/direct/395488c7c9264e45b6068bfc6dbf83c2.png)
图5-11同意借阅界面
同意借阅关键代码如下。
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
-
-
- 图书信息管理模块
-
管理者在图书信息列表发布图书,跳转至图书新增表单,提交图书信息,包括图书编号、图书名称、图书类型、作者、出版社、数量、图片简介,新增时间,更新时间、图书封面等,图书提交后,数据库的图书信息表刷新数据,系统将图书信息展示出来。
智慧图书馆系统的流程如所示。
![](https://i-blog.csdnimg.cn/direct/309324ca64e4490b9a3903ad9610eaa3.png)
图5-12智慧图书馆系统流程
图书信息添加的界面如所示。
![](https://i-blog.csdnimg.cn/direct/fac8ac07785f448baab0c885b5e94b89.png)
图5-13图书信息添加界面
图书信息管理的界面如所示。
![](https://i-blog.csdnimg.cn/direct/1d00d1678dad4d5284fd1e37f80d43ac.png)
图5-14图书信息管理界面
图书信息关键代码如下所示。
public String encryption(String plainText) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return re_md5;
在这个产品被投入使用前,首先需要进行试用,这是重要的环节。考虑到某个部分的开发没有缺陷情况下,把各种模块拼接,也有一定概率就存在矛盾。这就好比每个人都很独特,但聚在一起就显得杂乱无章,需要保证有默契的配合。对于测试,要看它的各项内容是否契合的原则。若与最初定下的标准有一定程度上的出入,那么就需要做出一些调整,让最终的大方向朝着目标前进。
登录测试用例如下表所示。
表6-1登录测试用例
输入 | 输出 | |
用户名 | 密码 | |
空 | 空 | 用户名和密码不能为空 |
Kkk | aaa | 用户名长度不允许,请重新输入! |
2109402315 | 123456 | 用户名出错,请重新输入! |
sssss | 123456 | 用户名出错,请重新输入! |
注册测试用例如下表所示。
表6-2注册测试用例
输入 | 输出 | |||
用户名 | 密码 | 确认密码 | 邮箱 | |
空 | 空 | 空 | 空 | 用户名和密码不能为空 |
Kkk | aaa | aaa | 23@qq.com | 注册成功 |
210 | aaa | abc | 23@qq.com | 注册失败,两次密码不一致 |
-
-
- 图书信息管理测试
-
图书测试用例如下表所示。
表6-4添加图书测试用例
输入 | 输出 | |||
名称 | 类别 | 作者 | 备注 | |
空 | 空 | 空 | 空 | 添加失败 |
图书1 | A | 罗贯中 | 你好 | 添加成功 |
空 | A | 罗贯中 | 你好 | 添加失败,名称不能为空 |
图书2 | 空 | 罗贯中 | 你好 | 添加失败,请选择类别 |
-
-
- 图书借阅测试
-
图书借阅测试用例如下表所示。
表6-5图书借阅测试用例
输入 | 输出 | |||
名称 | 类别 | 借阅人 | 备注 | |
空 | 空 | 空 | 空 | 添加失败 |
图书1 | A | 111 | 你好 | 添加成功 |
空 | A | 111 | 你好 | 添加失败,名称不能为空 |
图书2 | 空 | 111 | 你好 | 添加失败,请选择类别 |
经过测试,得到测试结果如下表所示。
表6-6测试结果
序号 | 测试项目 | 内容和目的 | 测试结果 |
| 用户登录 | 输入正确用户名与密码 | 可以登录 |
输入错误用户名与密码 | 提示错误的信息 | ||
| 图书信息管理 (添加,修改,删除) | 输入正确信息 | 成功完成 |
输入错误信息 | 操作失败 | ||
| 修改登录密码 | 修改新的密码 | 成功完成 |
| 借阅管理 (添加,修改,删除) | 输入正确信息 | 成功完成 |
输入错误信息 | 操作失败 | ||
| 归还管理 (添加,修改,删除) | 输入正确信息 | 成功完成 |
输入错误信息 | 操作失败 | ||
| 系统管理 (添加,修改,删除) | 输入正确信息 | 成功完成 |
输入错误信息 | 操作失败 |
通过智慧图书馆系统的开发,本人巩固了之前学过的知识,如今将平时所学到的知识融合在设计中,在设计过程中,做了很多的准备,首先,在数据库系统的设计过程中,尤其是在数据库的工作原理、工作特点,对其深刻的讨论,与此同时,对于小型站点来说,最好服务器的选择,其次,利用所学的知识点分析所做的系统,并在此基础上设计。
目前本系统已经上线,正在试运行阶段,用户反馈良好,基本完成用户所需,试运行过程中没有出现阻断性问题,有一些不足和小问题也及时予以修正,系统上线后,为了保证数据的安全性,对系统进行了备份操作,系统备份是每两个月备份一次,数据库备份为每周备份一次,系统部署在租赁的云平台服务器中。
本次系统上线成功后,得到了用户的高度认可,但是在功能上和性能上还需做进一步的研究处理,使其有更高的性能和更好的用户体验。
系统在以后的升级过程中,需要解决一系列用户所提出的问题,例如打印过程中如何避免浏览器的兼容性问题,大量用户访问时,如何保持较高的响应速度,在系统今后的升级过程中将着重解决这些安全性问题。
参考文献
[1]文佩丹,杨新涯,尹伟宏.智慧图书馆零数据分析系统的设计与构建[J].图书馆学研究,2022(11):39-46.DOI:10.15941/j.cnki.issn1001-0424.2022.11.003.
[2]李乐.Java语言应用研究[J].智慧中国,2022(09):80-81.
[3]郑戟明,董云朝,柳青.MySQL数据库数据导入导出方法的探讨[J].电脑知识与技术,2022,18(22):24-25.DOI:10.14004/j.cnki.ckt.2022.1517.
[4]贺斌.计算机软件开发中JAVA语言的应用研究[J].中国设备工程,2022(11):247-249.
[5]田文武.基于大数据技术的智慧图书馆系统设计[J].呼伦贝尔学院学报,2022,30(01):103-107.
[6]窦淑庆.物联时代智慧图书馆优化系统建设[J].信息技术与信息化,2021(12):82-84.
[7]翁晓晖.基于物联网的智慧图书馆系统的设计与实现[J].电脑知识与技术,2021,17(34):75-78.DOI:10.14004/j.cnki.ckt.2021.3678.
[8]张得森,蔡玉清,崔霞.基于物联网技术的智慧图书馆系统设计[J].电子测试,2021(15):91-92+25.DOI:10.16520/j.cnki.1000-8519.2021.15.031.
[9]Witsarut Sriratana,Vittaya Khagwian,Sutham Satthamsakul. Analysis of Electric Current by Using MySQL Database on Web Server for Machine Performance Evaluation: A Case Study of Air Conditioning System[J]. 제어로봇시스템학회 국제학술대회 논문집,2020.
[10]田杰,周军兰.智慧图书馆模型与系统体系构建探析[J].文献与数据学报,2020,2(02):40-48.
[11]徐蕾,孔伟.基于大数据的智慧图书馆系统框架与实现[J].实验技术与管理,2020,37(03):71-75.DOI:10.16791/j.cnki.sjg.2020.03.016.
[12]唐晓琴. 智慧图书馆的建设及其对技术和馆员的要求[C]//中国环球文化出版社,华教创新(北京)文化传媒有限公司.2019年南国博览学术研讨会论文集(五).2019年南国博览学术研讨会论文集(五),2019:161-163.DOI:10.26914/c.cnkihy.2019.063272.
[13]齐晓丹.智慧图书馆信息系统模型的构建[J].信息系统工程,2018(11):131-132.
[14]杜亮,刘涛.智慧图书馆系统架构设计与应用系统建设研究[J].兰台世界,2018(11):136-139.DOI:10.16565/j.cnki.1006-7744.2018.11.33.
[15]Monica Laxman Uttarwar,Arun kumar,Peter H. J. Chong. BeaLib: A Beacon Enabled Smart Library System[J]. Wireless Sensor Network,2017,9(8).
[16]张洁,袁辉.智慧图书馆系统支撑下的学科服务实践[J].图书馆论坛,2017,37(07):27-32.
[17]Min Byung won. Design and Implementation of Smart Library System for Multi-tenant Environment Using Software on-demand[J]. Convergence Society for SMB,2016,6(4).
[18]黄凯悦. 我国智慧图书馆的构建研究[D].华中师范大学,2015.
[19]赵文彬.智慧图书馆管理系统的应用探究[J].电子测试,2015(03):98-100.DOI:10.16520/j.cnki.1000-8519.2015.03.038.
[20]Mei Zhang. Study on Intelligent Library System Based on FRID Technology[J]. International Journal of Digital Content Technology and its Applications,2013,7(5).
致谢
经过几个月时间的努力终于完成了这篇文章,在文章的写作与研究的过程中遇到了很多困难,都在同学和老师的帮助下解决了。尤其非常感谢我最敬爱的老师,他对我进行了无私的指导和帮助,不厌其烦的帮助进行文章的修改。老师严谨的治学态度、渊博的学术知识、诲人不倦的敬业精神以及宽容的待人风范使我获益颇丰。此外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。在此,向帮助和指导过我的老师表示最衷心的感谢!感谢这篇文章所涉及到的各位学者。本文引用了数位学者的文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇文章的写作。感谢我的同学、朋友以及所在单位的同事,在我写文章的过程中给与了我很多素材和帮助,还在文章的撰写和排版过程中提供热情的帮助。同时,感谢我的室友对我的热心指导和帮助,经常有不懂之处都是大家在帮助我,才使得我比较顺利的完成了这篇文章。由于我水平有限,所写文章难免有不足之处,恳请各位老师和学友批评和指正!
免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-