【《一个基于springboot2.0框架的图书管理系统(BMS)设计》9000字(论文)】_第1页
【《一个基于springboot2.0框架的图书管理系统(BMS)设计》9000字(论文)】_第2页
【《一个基于springboot2.0框架的图书管理系统(BMS)设计》9000字(论文)】_第3页
【《一个基于springboot2.0框架的图书管理系统(BMS)设计》9000字(论文)】_第4页
【《一个基于springboot2.0框架的图书管理系统(BMS)设计》9000字(论文)】_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

页第1章绪论1.1课题的研究背景伴随着电子技术和计算机技术的飞速进步,几乎绝大部分行业都与之产生了不同程度的融合。利用计算机技术尤其是计算机网络技术服务于我们的生产生活成为更加便捷的重要方式。而书籍是记录人类历史和生活的主要方式,是人类学习文化和习读历史的重要途径,随着通过网络娱乐和学习的人们的数量正在不断增加,像图书馆和实体书店等一系列信息资源的充足,包涵了巨大的信息数据资源的场所,人工管理的优势越来越不明显,利用网络技术来管理这些复杂的书籍信息数据,正在取代传统的记录方式和学习途径。网络和实体相结合,相辅相成,相互促进,简化管理,节约成本,能独特的、全面的凸显其优越性,也使web技术的应用管理繁琐事务成为一种新的可能。现有的图书管理系统使用的技术多种多样,达到的效果也各有异同,而本系统是一个基于编程语言java中相对流行的集成开发框架,前后端不分离的网站系统,分模块、分层次进行代码的编写,更有利于进行维护工作。经过对软件需求的分析,将传统的管理规范抽象到系统开发中,并加以完善。所以本系统应该能够为用户提供一个不易丢失数据存储仓库,取代传统的借阅和管理方式,代替管理平日里最基本的工作,节约人力、无力、财力。相比较而言图书管理系统拥有效率高、不容易疏漏、利于查找、更新、维护等特点,对于学生和图书馆工作人员有很大的帮助。1.2课题的研究意义在经过一系列调查和研究发现,现阶段校内外的图书管理、借阅的方式仍然利用管理人员或者一些可以进行自助登记的机器集中进行,虽然已存在一些图书管理系统,但是由于其使用的开发技术和设计模式使其操作复杂、软件维护存在一定的困难,在图书的管理规模日渐庞大,导致职员的负担加重,物力的耗费、经济的浪费时,如若开发一种通过网页进行图书的系列操作,使用当前企业开发常用的集成框架开发系统,模块化程度更好,层次分明,使其在替代老旧的工作方式或者作为辅助系统发挥作用时,能够更加在低成本的情况下,更容易的进行维护。以便提供更有秩序、稳定、实时的服务,实现工作和日常使用的分散处理,一定程度上简化了步骤、提高了效率。 第2章可行性研究与需求分析2.1可行性分析2.1.1技术可行性分析本系统的性质为前后端不分离通过web网页访问的图书管理系统,结合现存类似的管理系统所应用的技术与当前所使用的计算机硬件配置,通过对现有技术的学习和总结。故,结合多种框架开发出一个功能相对完善的图书管理系统在技术上是可行的。2.1.2经济可行性分析首先,数据库和用户在数量上规模较小,开发本系统使用的资源,人力、设备、财力等劳动、物质资源需求不多,个人通过一定的时间完全可以完成,而且基本上不需要耗费人力物力,显然在经济上完全可行。2.1.3操作可行性分析本系统的操作方式,如果是仅仅面向学生和老师,完全是便捷可行的,如果是其他人员,必要情况下,提供一定的使用说明,大多数情况下,系统本身面对的使用者所在的组织机构和网络环境对系统的适应程度,在社会当前阶段已经足够的普及和流行,系统性能、系统设计的所有操作完全是可行的。2.2需求分析2.2.1功能需求经过实际考察和分析,图书管理系统应该概括为两个方面,相应需要能实现以下主要功能:用户方面:●登录功能:通过提交到后台的表单实现用户的登录验证。●注册功能:后端代码对数据加工然后向数据库提交保存用户信息,注册成功后可以实现登录。●查询:可以查询书籍信息和个人信息。●借阅:能够借阅书籍。●归还:可以归还书籍。●个人信息维护:可以维护个人信息。●检索:通过书名和书的编号检索指定的书籍记录。管理员方面:●登录功能:通过提交到后台的表单实现管理员的登录验证。●注册功能:此功能应该通过初始管理员控制基本用户权限调整完成●查询:可以查询用户、个人、书籍的相关信息。●上架:能够添加书籍。●下架:能够删除书籍和其相关。●增加:能够添加某个用户。●修改:可以修改某个用户信息。●删除:可以删除某个用户信息。●检索:通过学号或者姓名检索出指定的学生记录、通过书名和书的编号检索指定的书籍记录。2.2.2其他需求性能需求:系统本身开发和运行所需的响应时间、信息传输速率、安全性等方面现有条件完全可以满足。2.3确立生命周期模型根据需求分析的结果,系统规模不大,故计划使用快速原型模型去规划系统的开发周期,迅速搭建环境,构建可以运行的基本系统,完成最终系统的一个子系统,通过一边编写一边调试的形式,能够在短时间内拿到大量反馈,并通过使用者与系统交互的反馈做到线性开发,过程中增加用户的参与程度,逐步提高用户体验,这样可以减少在开发过程中出现后续阶段需要改写前面阶段所犯错误,导致开发方向偏离需求主干的可能性,开发者可以了解到系统应该做什么,不应该做什么,在设计和开发阶段发生错误的可能性被大大降低,减少发生环节退回修改的可能。通过与用户交互原型系统已经得到验证,据此产生的评价信息,能够很好补充需求分析,系统开发进度得到加快。2.4概念模型(E-R图)由用户的功能需求,确定概念模型,用于描述与用户相关的数据,以实体-联系图的形式表现出来。事实上,凭借人的思维简单的判断就能够使实体和它的属性在现实世界中得以划分开来。例如:一棵树的属性有:种类、年限、地域分布等等;种类在数据字典中,数据的结构、数据的序列和数据的存储都是一些属性字段有意义的集合,划分在这里就已经被体现出来。但是定义E-R图不仅仅需要简单的划分,调整也十分有必要。为了简化E-R图的处置,保持属性或者字段的函数依赖和使其具有无损连接性。调整一般遵循:1)客观现实世界事物主体如果可以被抽象为属性的话,一般不作为实体对待。2)一个属性,不能拥有任何属性字段,即属性作为一项数据独立存在依附于它的实体,且是不可再划分的。属性不能同除了属性依附的实体之外具有联系。所以,图书管理系统应当涉及二个实体。用户:(记录编码,用户名,真实姓名,性别,密码,学生学号,专业班级,角色权限)书籍:(记录编码,书籍名称,作者,书籍编号,数量)实体之间的联系为:●一个学生可以借阅多本书籍。●一种书籍最少有1本以上可以被多个学生反复借阅、归还,若用户为管理员,则可以管理图书的入库(上架)、出库(下架)、控制数量等操作。用户与书籍之间具有多对多的联系。为了规范化数据,避免插入异和删除异常的出现,将范式的级别适当的降低,以保证用户访问时的稳定和操作的正确性,将其中大部分数据冗余性问题和插入、删除异常问题交于编码阶段的业务逻辑开发时处理。根据用户的观点做概念模型的抽象,并对数据进行信息建模,作为数据库表逻辑结构的初态。

第3章总体设计3.1开发环境和开发技术本系统是基于web技术网页系统,主要通过网页访问页面,由用户或者管理员进行服务器的交互。图书管理系统采用企业开发中常用的设计模式,相对主流的java集成框架和UI框架,力求实现简约的访问界面,利于维护的代码结构和模块层级,相对严格的权限管理。3.1.1环境集成环境开发工具(系统运行环境):Windows10+IDEA+JDK+maven版本:-IDEA2019.3、JDK1.8、maven3.3.9技术组合:后端:SpringBoot+SpringMVC+Mybatis+shiro版本:SpringBoot2.4.5(集成SpringMVC)、Mybatis2.1.4、shiro1.4.1数据库:MySQL版本:8.0.23前端UI:SemanticUI框架+Thymeleaf模板引擎版本:SemanticUI2.4、Thymeleaf3.0.11插件:Lombok+DevTools版本Lombok1.18.20、DevTools2.4.53.1.2开发技术说明1)MVC模型采用MVC模型分层、分模块化编写代码以提高系统的模块化程度,降低维护的难度和耦合度,提高代码复用的程度和优化整体架构。经典MVC模型中Model是指业务模型代表业务逻辑规则。业务逻辑规则是在不同种类的系统中各不相同,是由开发者或者开团队现实在开发中确定,在维护和测试过程中还会对有问题的部分模块做出修改。在该模型无论何种类型的参数的传递都可以封装成Key-Value键-值对形式(即便是同一参数类型形成的列表)的集合,在web页面系统开发中执行请求的处理与接口的封装等事务。View是指用户所能看到的各种视图,主要是将数据显示到用户所能看到的页面,在它应该在地方的显示,而MVC模型能够为管理系统处理不同视图,视图单单作为一个显示的工具,既不会对数据进行封装、加工,也不会对其进行保存和储留。controller控制器通常起到一个链接的作用,不会对数据做任何操作,只负责拿到请求并选择那个模型、模块或者方法去处理请求,把用户的请求转成针对Model的操作,操作完成后转到对应视图中去显示。如果一个系统架构是基于MVC模型构建的,具有良好的项目架构设计,是大多数Web应用的理想选择。2)Mybatis与Druid数据库连接池MyBatis框架用于持久层的处理,作为一个轻量级的框架,它几乎避免了JDBC全部的配置和代码以及结果集的获取。而且只要简单的XML文件或java注解来映射和配置对数据库的CRUD等操作的原生信息,java实体类映射到数据中的一条或多条表项。这样一来后端开发时可以将SQL语句集中写在XML配置文件中,同时配备了一种语法可以根据不同的条件生成不同的SQL语句。即动态SQL,所谓的动态SQL,本质还是SQL语句,只是在SQL层面,去执行一个逻辑代码。如果使用连接池,数据库的链接、分工、管理和释放包括事务管理等等全部交由连接池处理,它会在系统运行期间提供给一个数据库连接对象,而且这个对象可以重复使用。并且它可以通过配置控制数据库连接的时长。在系统开始运行时,数据库会有一个连接作为一个对象被以缓存的形式置于内存之中,若有需要查询SQL等请求访问数据库时,数据库的相关操作已被托管,转成调用连接池中已经创建的等待使用的对象。3)shiro权限框架ApacheShiro是一个Java安全框架,用于执行登录判断、角色授权、请求拦截、缓存、Web集成和会话管理等。Shiro框架有三个核心组件Subject(主题),SecurityManager(安全管理器)和Realms(真实用户)。subject组件:它的作用在于拿到当前用户对象,这个对象是可以与Shiro交互的任何东西。 SecurityManager组件:SecurityManager作为shiro安全框架的核心组件,它的功能是管理Subject,还有所有与shiro的交互都有它负责。 Realm组件:这个组件负责给Shiro框架提供相关的安全数据(例如:角色,权限等)。Shiro框架除了上面三个核心组件之外,它还包括:authorizer组件:它的本质上是对访问请求的控制——控制某个系统中的用户可以访问的内容(资源、网页等)。authenticator组件:此组件用于验证用户。这个验证过程的一般是熟悉的“用户/密码”组合。当大多数用户在登录时,Shiro通常会使用自身配置的令牌去支持它。当令牌被拿出来验证时,用户提供的密码如果与存储在系统中的密码相匹配,则这个用户会被认为已经完成登录认证。sessionmanager组件:在安全框架领域,Shiro框架提供给想做会话应用程序的开发人员统一的会话API,会话API可以选择在任何层调用,而不仅仅是servlet或ejbmec。cachemanager组件:提供缓存支持。3.2系统流程设计给出用户从登陆到注销整个系统的执行的流程,以及其中每个分支或者说每个页面做何处理会产生什么结果。图书管理系统的程序流程图如下:3.3数据库设计与实现根据需求分析阶段概念模型中所描述的实体、对应的属性、实体之间的联系,抽象为逻辑模型并且使用结构化查询语言SQL在Mysql数据库中实现:1)新建连接2)新建数据库名:labtest3)新建查询,编写结构查询语言,生成用户表、书籍表、借阅表:用户表:CREATETABLE`test_student`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`username`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNOTNULL,`stuname`varchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,`sex`int(11)DEFAULTNULLCOMMENT'性别1男2女3未知',`password`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,`stuid`int(11)DEFAULTNULL,`classes`varchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMENT'班级',`role`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE,KEY`id`(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=37DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ciROW_FORMAT=DYNAMIC;书籍表:CREATETABLE`test_book`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`name`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,`auth`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,`book_id`int(11)NOTNULL,`count`int(11)DEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=43DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ciROW_FORMAT=DYNAMIC;借阅表:CREATETABLE`test_brrow`(`book_id`bigint(20)DEFAULTNULL,`stu_id`bigint(20)DEFAULTNULL,`borrow_date`datetimeDEFAULTNULL,KEY`boid_sid`(`stu_id`)USINGBTREE,KEY`boid_bid`(`book_id`)USINGBTREE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ciROW_FORMAT=DYNAMIC;3.4创建项目、搭建环境3.4.1环境与配置通过IDEA开发工具创建一个SpringInitializr(项目初始化向导),选择JAVA软件开发工具包JDK版本,选择MAVEN项目,自定义包路径名com.xjz和项目名mytest,选择web应用场景的stater;创建完成后,配置maven仓库,导入网页的静态资源。在application.yml加入数据库连接池的相关配置(数据库连接源的配置),pom文件中导入DevTools、lombok插件依赖。application.yml所有配置如下:spring:datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/labtest?serverTimezone=GMT&characterEncoding=utf-8username:rootpassword:981122type:com.alibaba.druid.pool.DruidDataSource#自定义数据源#SpringBoot属性值绑定#druid数据源专有配置initialSize:5minIdle:5maxActive:20maxWait:60000timeBetweenEvictionRunsMillis:60000minEvictableIdleTimeMillis:300000validationQuery:SELECT1FROMDUALtestWhileIdle:truetestOnBorrow:falsetestOnReturn:falsepoolPreparedStatements:true #配置filters和日志记录等filters:stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize:20useGlobalDataSourceStat:trueconnectionProperties:druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500#关闭模板引擎缓存thymeleaf:cache:falseserver:port:8080#mybatisconfigmybatis:mapper-locations:classpath:mapper/*.xmltype-aliases-package:com.xjz.pojoconfiguration:map-underscore-to-camel-case:true3.4.2生成架构根据MVC架构在com.xjz包下创建config、controller、dao、pojo、service子包,以便于分层、分模块处理。每个子包的功能为:config:使用shiro安全框架和原生Spring拦截器配置角色权限管理、拦截页面和放行资源。它的作用在于,在不设置游客登录的情况下,如若在不登录的状态下进入首页或者其他页面,与数据库的操作是矛盾的。另外,放行必要的js、css、html等静态资源也是必要的。controller:整个业务逻辑模块的流程交由Controller层来控制,但其中的众多控制器只负责拿到视图层的请求,接收相应的数据,并对数据做一定的封装。pojo:pojo实际上是java的实体类,一个实体类的某个变量(属性)与数据库表中的属性字段(数据项)相对应,作用是负责暂时存储持久层中得到数据记录或者将封装进实体类数据信息传进持久层。dao:Dao层作为持久层的管理者,它处理的应该是java对象与数据库表的关系相互转换的工作,然后模块调用Dao提供的接口时可以不用关心此接口的具体实现类是哪个类,直接实现相关数据业务的处理即可。例如:Mybatis框架,在项目就充当着DAO的作用。而Mybatis框架提供mapper文件和接口之间的映射能力,Sql语句或者动态SQL语句直接写在XML文件中,实现了代码与Sql分离,降低耦合度。Service:Service层以同样的方式设计接口,对参数进行一定的封装然后调用Dao层;然后将调用到层的结果返回Controller层。项目结构图如下:3.4.2生成实体类编写属性变量与前端的请求变量和数据库表字段属性相对应的实体类并且使用lombok插件提供的注解@Data、@AllArgsConstructor、@NoArgsConstructor自动生成get、set、ToString方法、无参构造函数和有参构造函数:SearchBooks.java:用于接收和返回前端所需要检索的book的ID或者名称关键字SearchStudent.java:用于接收和返回前端所需要检索的学生的ID或者姓名关键字UpdateUser.java:接收前端用户个人信息修改提交的数据,并且在返回时作为一个对象显示Book.java:书籍实体类,对应书籍表的字段Borrow.java:借阅实体类,对应借阅表的字段User.java:学生/用户实体类,对应学生表的字段第4章详细设计与编码实现4.1系统功能模块划分根据需求分析中对各种功能的解读,构建系统功能模块图:个人信息修改子模块:用户和管理员可以查询、修改自己的信息分页、检索(分按ID、关键词)模块、:书籍信息、个人信息应该能通过ID指定查询单个,或者通过模糊查询多个。4.2系统功能模块实现4.2.1登录与注册模块用户或者管理员输入账号密码验证登录,进入主页面并且通过权限控制,显示不同角色应该访问的页面。创建LoginController控制类用于处理登录、注销相关的请求。系统自开始运行,若页面session中没有用户数据输入登录地址首先应该进入的必须是登录页面,其他页面只要有请求全部拦截并转到登录页,所以使用拦截器拦截不该被访问的请求才是首先应该考虑的问题。实现如下接口;添加拦截判断并设置需要拦截和放行的资源和请求,如静态资源和注册页面是应该被放行的页面。调试登录(login)页面: 类似于登录请求的代码逻辑,可以简单的设置注销请求和注册请求,只要有前端页面中的按钮点击之后发送对应的请求就转至或者重定向至对应的页面。 注册和登录按钮点击会发送POST请求,并发送form表单数据到控制器(Controller层)的方法中去做逻辑处理(调用服务层接口登录判断处理)通过异常判断执行对应的方法处理用户登录异常。注册则是将数据存入参数经过逻辑处理封装放入POJO实体类,传入持久化层执行接口绑定映射XML文件中的insert语句,最终注册信息导入数据库,重回的登录页。输入正确的密码登录成功之前会还会交给shiro框架做一个角色认证,只有正确的角色权限才能进入主页,并可以被允许登至与之匹配的页面。4.2.2借书模块用户/学生登录首页成功之后,可单击图书信息按钮发送bookhome请求并进入bookhome界面,控制器接收请求、用户数据和分页参数,在业务逻辑中将参数交给接口,执行会使用select语句查询数据库中的book表,拿到所有图书的参数包括(数量、编号ID、名称等),暂存在实体类中,再通过存入session中,返回至前端页面显示设定好页数的图书列表,选择切换上下页或者检索感兴趣的书籍,也可以单击借阅。如果切换上下页和检索书籍ID和名称信息会调用分页、检索模块,如果是借阅,则控制层接收请求并且拿到列表中对应的书的ID;表查询检索brrow表和通过书籍的ID查询book表,判断这本书是不是没有剩余量和是否同被一个用户重复借阅。如若非以上而者,则借阅成功。修改书籍表这本书的数量;增加一条借阅记录(那个学生ID借阅的那本书ID,借阅日期)。4.2.3还书模块若单击我的借阅按钮可以进到我的借阅页面,对应请求的控制层方法会调用相应的接口查询当前用户的数据库中的借阅信息。点击还书按钮发送请求并发送对应的书籍ID和当前用户信息,删除brrow表中的借阅记录,对应的书籍数量加1,弹出还书成功消息框。4.2.4用户管理模块(新增、删除、编辑子模块)当学生信息按钮被管理员单击发送相应请求之后,会转至进入学生信息先关的页面,控制层方法先取到session数据和页码和分页大小等参数。调用服务层接口查询所有用户信息设置分页大小和页码并封装,返回进前端列表显示出来并可以检索和切换页面。点击表格中任意一条用户的编辑按钮,对应的学生参数被传递进入相应的控制器方法被执行,然后执行服务层接口,dao层接口,将修改的数据写入student表中并返回修改的后得数据。新增和删除除了调用的接口与借书和还书模块中不同之外逻辑基本相同。都是对数据库某个表中一条数据的增加和删除操作。4.2.5分页模块分页模块无论在管理员权限中的学生信息、书籍管理还是在用户权限中的图书信息和借阅信息中都存在重复的调用;它依赖了pagehelper插件,这是一个线程上的处理,在接口实现数据查询的时候自动limit(页码,页面大小);最后分页参数会和查询返回的列表一同封装入PageInfo的时候会自动带上页码、页面的大小、页面总数等。然后存入model准备往前端返回数据,前端只需要在应该显示的地方调用声明并遍历出列表中的数据和分页的相关参数。另外有些方法还并入了模糊查询功能同分页一同调用。个人信息修改模块和图书管理模块,仍然是与之前的请求相同的业务处理逻辑和数据操纵方式。第5章综合调试与维护5.1用户权限初始开发时,登录判断交给了Spring原生过滤器去做,密码则直接在业务逻辑中验证,调试时发现管理员和用户的访问权限没有被分开,两者的页面可以互相访问,为了改正这种错误访问,通过shiro框架中的一些接口和方法拦截请求和封装用户登录时的表单数据。整个权限的处理过程分为三步:首先,定义获取权限信息类,拿到当前登录对象,加载数据库中当前用户的权限。然后,定义权限认证异常类,从参数中拿到用户的登录信息,做用户名和密码认证(交给shiro来实现),连接数据库对比;返回认证信息。最

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论