哪有免费做网站,太仓网站建设公司,网加商学院网站怎么做,东莞网站优化效果如何博主介绍#xff1a;硕士研究生#xff0c;专注于信息化技术领域开发与管理#xff0c;会使用java、标准c/c等开发语言#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年#xff0c;拥有近12年的管理工作经验#xff0c;拥有较丰富的技术架… 博主介绍硕士研究生专注于信息化技术领域开发与管理会使用java、标准c/c等开发语言以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年拥有近12年的管理工作经验拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经验。 先后担任过技术总监、部门经理、项目经理、开发组长、java高级工程师及c工程师等职位在工业互联网、国家标识解析体系、物联网、分布式集群架构、大数据通道处理、接口开发、远程教育、办公OA、财务软件工资、记账、决策、分析、报表统计等方面、企业内部管理软件(ERP、CRM等)、arggis地图等信息化建设领域有较丰富的实战工作经验拥有BS分布式架构集群、数据库负载集群架构、大数据存储集群架构以及高并发分布式集群架构的设计、开发和部署实战经验拥有大并发访问、大数据存储、即时消息等瓶颈解决方案和实战经验。 拥有产品研发和发明专利申请相关工作经验完成发明专利构思、设计、编写、申请等工作并获得发明专利1枚。 ----------------------------------------------------------------------------------- 大家在毕设选题、项目升级、论文写作就业毕业等相关问题都可以给我留言咨询非常乐意帮助更多的人或加w 908925859。 相关博客地址 csdn专业技术博客https://blog.csdn.net/mr_lili_1986?typeblog Iteye博客: https://www.iteye.com/blog/user/mr-lili-1986-163-com 获取论文及源代码请加微908925859 注每个学校每个老师对论文的格式要求不一样故本论文只供参考本论文页数达到60页以上字数在6000及以上。 基于JavaSpringMvcVue技术的实验室管理系统设计与实现 目 录 第一章 绪论
1.1 研究背景
1.2 研究现状
1.3 研究内容
第二章 相关技术介绍
2.1 Java语言
2.2 HTML网页技术
2.3 MySQL数据库
2.4 Springboot 框架介绍
2.5 VueJS介绍
2.6 ElementUI介绍
第三章 系统分析
3.1 可行性分析
3.2 系统性能分析
3.3 系统功能分析
3.4 系统流程分析
第四章 系统设计
4.1 系统概要设计
4.2 系统结构设计
4.3 系统顺序图设计
4.4 系统关系图设计
4.5 数据库设计
第五章 系统详细设计 5.1 系统登录
5.2 首页
5.3 报验管理
5.4 检验任务分配
5.5 结果登记管理
5.6 样品管理
5.7 检测方法管理
5.8 检测标准管理
5.9 设备管理
5.10 耗材管理
5.11 实验室管理
5.12 大屏
第六章 部分代码实现
6.1 Spring boot 配置代码
6.2 用户管理及登录登出代码
6.3 Md5 加密算法代码
6.4 部分数据库代码
第七章 系统测试
7.1 测试定义
7.2 测试目的
7.3 测试方案
7.4 测试结论
第八章 结 论
致谢
附一、论文参考
附二、其他案例 第一章 绪论
1.1 研究背景 随着科技的快速发展特别是计算机技术和信息技术的普及各行各业都在加速信息化建设实验室管理也不例外。实验室是学校、科研机构及企业中不可或缺的组成部分其管理水平直接影响实验教学的质量和科研成果的产出。因此利用现代信息技术手段建设实验室管理系统实现实验室管理的信息化、自动化和智能化成为提升实验室管理水平的重要途径。 传统的实验室管理方式往往存在管理效率低下、信息共享不畅、资源利用不合理等问题。例如实验室设备的管理可能面临设备信息更新不及时、设备借用归还不规范、设备损坏维修困难等挑战实验室人员管理也可能存在信息录入繁琐、查询不便等问题。这些问题不仅影响了实验室工作的正常开展还导致了资源的浪费和效率的降低。因此建设实验室管理系统通过系统化的管理手段解决这些问题成为提升实验室管理水平的迫切需求。 随着实验室在高校、科研机构及企业中的地位日益重要对实验室管理水平的要求也越来越高。建设实验室管理系统可以实现对实验室人员、设备、试剂、耗材等资源的全面管理提高管理效率优化资源配置降低运行成本。同时通过系统化管理还可以提高实验室数据的安全性和可靠性确保实验结果的准确性和可追溯性。。
1.2 研究现状 一、市场需求与增长
1. 市场规模与增长 随着科研投入的持续增加和企业对研发创新的重视实验室管理系统LIMS的市场需求不断增长。特别是在生物医药、环境监测、食品安全等领域LIMS已成为实验室不可或缺的一部分。 根据相关报告全球LIMS市场规模正在持续扩大并预期在未来几年内保持稳定增长。中国市场作为全球最大的实验室市场之一对LIMS系统的需求也日益旺盛成为推动全球LIMS行业增长的重要动力。
2. 行业应用 LIMS系统广泛应用于各类实验室包括科研实验室、检测实验室、医药研发实验室、环境监测实验室等。不同领域的实验室对LIMS系统有着各自特定的需求但总体上都是为了提升实验室的管理效率、保障实验数据的质量和安全性。
二、技术发展与功能拓展
1. 技术创新 随着云计算、物联网、大数据等技术的不断发展LIMS系统正逐步实现自动化、智能化转变。这些先进技术为LIMS系统提供了更强大的数据处理能力和更灵活的系统架构使得系统能够更好地满足复杂多变的实验室管理需求。
2. 功能拓展 现代LIMS系统不仅具备基本的样品管理、设备管理、人员管理等功能还集成了实验数据管理、实验计划安排、设备维护保养等多个功能模块。这些功能模块相互关联、协同工作共同提升实验室的整体管理水平。 此外一些先进的LIMS系统还具备智能化分析、预警和预测等功能能够自动对实验数据进行深度挖掘和分析为实验室管理提供有力支持。
三、市场竞争与格局
1. 市场竞争激烈 随着市场需求的不断增长和技术的不断进步LIMS系统市场竞争日益激烈。国内外众多企业纷纷涉足该领域通过技术创新、产品升级和市场营销等手段不断提升自身竞争力。
2. 竞争格局 在市场竞争中一些具备技术实力和市场影响力的企业逐渐脱颖而出成为行业领军企业。这些企业不仅拥有先进的LIMS产品和技术解决方案还积累了丰富的行业经验和客户资源在市场中占据重要地位。
四、挑战与机遇
1. 挑战 数据安全和隐私保护是LIMS系统面临的重要挑战之一。随着数据量的不断增加和数据类型的多样化如何确保实验数据的安全性和隐私性成为系统开发者和使用者共同关心的问题。 此外不同实验室的业务需求差异较大导致系统的通用性和定制化之间存在一定的矛盾。如何在满足用户个性化需求的同时保持系统的通用性和可扩展性也是LIMS系统需要解决的问题之一。
2. 机遇 随着实验室数字化转型的加速和数据管理需求的增加LIMS系统的市场规模正稳步增长。这为LIMS系统的发展提供了广阔的市场空间和发展机遇。 同时随着云计算、物联网等技术的发展和应用LIMS系统的部署和运维也将更加灵活和高效。这将进一步推动LIMS系统的发展和普及。 1.3 研究内容 本系统的开发和设计施根据用户的实际情况出发对系统的需求进行了详细的分析然后进行系统的整体设计最后通过测试使得系统设计的更加完整可以实现系统中所有的功能在开始编写论文之前每天到图书馆借阅相关书籍 包括java入门到精通、javaee编程、mysql数据库书籍等编程书籍然后针对开发管理系统去网上查找了其他别人做好的类似系统参照他们的设计结果来对自己的系统进行更加详细的系统的设计将系统中所有的功能结果一一列举出来然后进行需求分析最后对所有的功能模块进行编码最后完成系统的整体测试实现系统的正常运行。
这次编写的论文包含了8个部分的内容具体内容如下
第一部分 绪论文章主要从课题背景以及研究现状综合阐述了开发此系统的必要性。
第二部分 相关技术介绍系统开发用到的各种技术都大致做出了简介。
第三部分 系统分析对系统的可行性分析以及对所有功能需求进行分析来查看该系统是否具有开发的可能。
第四部分 系统设计对系统的架构、结构、功能、模板、模板关系、数据库进行设计。
第五部分 系统详细设计与实现对系统的功能模块设计和数据库设计进行详细设计并设计出系统界面图形展示描述本系统功能。
第六部分 部分系统代码实现对系统核心代码进行简要描述。
第七部分 系统测试测试系统的每一个功能是否能够正常运行是否可以满足人们的需求。
第八部分 结论对本论文系统设计与实现进行总结。 本项目开发设计主要基于java语言springboot后端框架vueJS前端框架技术以及mysql数据库进行设计来开发出一款方便实用、易维护的前后端分享的实验室管理系统并且设计的程序具有界面整洁、功能强大等特性从全局来说在线学习交流平台的设计解决了信息零散、信息不通、学习交流等问题该系统的实现可以投入到真实环境中这样不仅能解决以上提及的问题让信息管理更准则。
第二章 相关技术介绍 2.1 Java语言 Java是一种面向对象的编程语言目前由美国Oracle公司开发。自1995年上线以来已经广泛应用于Web开发、桌面应用开发等多个领域。Java语言的特点包括
1、面向对象Java提供了类、接口和继承等面向对象的特性支持单继承和多接口继承以及动态绑定。
2、分布式Java支持Internet应用的开发提供了网络应用编程接口(java.net)支持RMI(远程方法激活)机制适合开发分布式应用。
3、健壮性Java的强类型机制、异常处理、垃圾自动收集等特性保证了程序的健壮性。Java的安全检查机制也增强了其健壮性。
4、安全性Java提供了安全机制以防恶意代码的攻击包括类加载器的安全防范机制和安全管理机制。
5、体系结构中立Java程序编译为体系结构中立的字节码格式可以在任何实现Java平台的系统中运行适合异构网络环境和软件分发。
6、可移植性Java的体系结构中立性和严格规定的基本数据类型长度保证了其可移植性。Java编译器和运行环境也是用Java实现的进一步增强了其可移植性。
7、解释型Java代码首先被编译为字节码然后由Java虚拟机(JVM)解释执行。JVM适用于大多数软件和硬件平台实现了Java代码的高可移植性。
Java的发展历程中它最初是为了解决硬件领域的单片式计算机系统的智能化问题而开发的。随着技术的发展Java已经成为了全球最大的开发者专业社群之一广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网等多个领域。
2.2 HTML网页技术 HTML的全称超文本标记语言于1990年创立的一种标记语言。它包括一系列标签通过这些标签可以将网络上的文档格式统一使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本自1990年以来HTML就一直被用作万维网的信息表示语言使用HTML描述的文件需要通过web浏览器显示出效果。HTML是一种建立网页文件的语言通过标记式的指令(Tag)将文字图形、动画、声音、表格、链接、影像等内容显示出来。。
2.3 MySQL数据库 Mysql 经过多次的更新功能层面已经非常的丰富和完善了从Mysql4版本到5版本进行了比较大的更新在商业的实际使用中取得了很好的实际应用效果。最新版本的Mysql支持对信息的压缩同时还能进行加密能更好的满足对信息安全性的需求。同时经过系统的多次更新数据库自身的镜像功能也得到了很大的增强运行的流畅度和易用性方面有了不小的进步驱动的使用和创建也更加的高效快捷。最大的变动还是进行了空间信息的显示优化能更加方便的在应用地图上进行坐标的标注和运算。强大的备份功能也保证了用户使用的过程会更加安心同时支持的Office特性还支持用户的自行安装和使用。在信息的显示形式上也进行了不小的更新增加了两个非常使用的显示区一个是信息区对表格和文字进行了分类处理界面的显示更加清爽和具体。第二是仪表的信息控件能在仪表信息区进行信息的显示同时还能进行多个信息的比对为用户的实际使用带来了很大的便捷。
2.4 Springboot 框架介绍 Spring Boot是由Pivotal团队2013年开发提供的全新框架其设计目的是用来简化新Spring应用的初始搭建以及开发过程。Spring框架是Java平台上的一种开源应用框架提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制但其在Java应用中的频繁使用让它备受青睐以至于后来让它作为EJBEnterpriseJavaBeans模型的补充甚至是替补。Spring框架为开发提供了一系列的解决方案比如利用控制反转的核心特性并通过依赖注入实现控制反转来实现管理对象生命周期容器化利用面向切面编程进行声明式的事务管理整合多种持久化技术管理数据访问提供大量优秀的Web框架方便开发等。
SpringBoot基于Spring4.0设计不仅继承了Spring框架原有的优秀特性而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突以及引用的不稳定性等问题得到了很好的解决。 [1]
SpringBoot所具备的特征有
1可以创建独立的Spring应用程序并且基于其Maven或Gradle插件可以创建可执行的JARs和WARs
2内嵌Tomcat或Jetty等Servlet容器
3提供自动配置的“starter”项目对象模型POMS以简化Maven配置
4尽可能自动配置Spring容器
5提供准备好的特性如指标、健康检查和外部化配置
6绝对没有代码生成不需要XML配置。
2.5 VueJS介绍 Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建并提供了一套声明式的、组件化的编程模型可以高效地开发用户界面。Vue.js是一套构建用户界面的渐进式框架采用自底向上增量开发的设计核心库只关注视图层。另一方面Vue完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的主要特点
1、响应式数据绑定系统。这意味着当应用程序中的数据发生变化时页面上相关的部分会自动更新。这种机制使得开发者可以轻松地管理和维护复杂的应用程序状态。
2、组件化开发。Vue.js 允许开发者将页面拆分为独立的组件每个组件具有自己的数据和逻辑。这种模块化的开发方式使得代码复用和维护更加容易并且能够提高开发效率。
3、Vue.js 也提供了一套强大的指令系统用于处理 DOM 操作和页面交互。通过使用这些指令开发者可以轻松地实现诸如条件渲染、循环渲染、事件处理等功能。
4、丰富的插件生态系统。开发者可以使用各种插件来扩展 Vue.js 的功能例如路由、状态管理、表单验证等。这使得开发者可以根据自己的需求选择合适的插件从而更好地满足项目的要求。
2.6 ElementUI介绍 Element-UI 是由饿了么前端团队推出的一款基于 Vue.js 2.0 的桌面端 UI 组件库。它为开发者提供了一套完整、易用、美观的组件解决方案极大地提升了前端开发的效率和质量。本文将详细介绍 Element-UI 的特点、安装使用、核心组件及其应用场景。
一、Element-UI的特点
1. 完整性
Element-UI 提供了从基础控件到复杂组件的一整套 UI 解决方案包括表单、表格、对话框、消息提示等。这些组件覆盖了常见的 UI 场景开发者可以直接使用减少了重复造轮子的工作。
2. 易用性
Element-UI 的 API 设计简单直观文档详细丰富开发者可以很快上手。它与 Vue.js 无缝结合利用 Vue 的特性如数据绑定、组件化使开发更加便捷。
3. 美观性
Element-UI 的设计风格简洁优雅符合现代 UI 设计趋势。它提供了多种主题配置开发者可以根据项目需求进行定制。
4. 可扩展性
Element-UI 提供了丰富的钩子函数和事件可以方便地进行二次开发和扩展。开发者可以基于 Element-UI 的组件进行自定义开发满足特定业务需求。
针对本文中设计的在线求职招聘系统在实际的实现过程中最终选择Mysql数据库的主要原因在于在企业的应用系统应用及开发的过程中会存在大量的数据库比较频繁的操作而且数据的安全性要求也是非常的高最重要的是Mysql5.8为开源免费的数据库在行业中应用比较广泛。综合这些因素最终选择安全性系数比较高的Mysql来对个人博客管理系统后台数据进行存储操作[。
第三章 系统分析 3.1 可行性分析 在系统开发之初要进行系统可行分析这样做的目的就是使用最小成本解决最大问题一旦程序开发满足用户需要带来的好处也是很多的。下面我们将从技术上、操作上、经济上等方面来考虑这个系统到底值不值得开发。
3.1.1 技术可行性 本系统基于JAVA编程语言采用springboot后端框架、vueJS前端框架技术以及对mysql数据库进行开发设计作为计算机专业学生在学校期间就接触到许多关于编程方面的知识当然也包括各种编程软件对他们的了解度也比较系统所以技术开发上面还是有一定熟悉和把握。
3.1.2 经济可行性 我在设计该系统的时候主要是从节约成本出发然后进行具体的系统的设计在系统的设计过程中由于采用的所有工具以及技术支持全部都是免费的因此不需要有任何的成本就可以进行该系统的设计。所用到的所有资源都是免费的只要有网络就可以进行下载使用不需要支付相应的费用因此该项目在经济方面是完全可以实行的。
3.1.3 操作可行性 本人自己就是学生程序开发经验不足在界面设计上面不会设计太复杂要讲究简单好看操作上要方便不能让用户觉得不流畅。用户一旦进入操作界面界面上就会有相应提示跟着操作提示就可以找到对应的功能操作模块对于用户来说免培训就能使用。
从上面几个部分的可行性分析得出这次开发的在线学习交流平台在开发上面没有什么大问题值得开发。
3.2 系统性能分析 1系统响应效率页面响应时问应该在3秒以内最长不能超过4秒并支持至少10000人同时在线所有系统。
2界面简洁清晰系统界面要求简单明了容易操作符合用户操作习惯。
3储存性高因为本系统中有很多的信息需要存储因此对于系统的存储量有很大的要求需要有一个强大的数据库的支持才能确保所有的信息都能安全稳定的进行存储。
4易学性该系统在操作上必须简单好上手没有很多复杂的操作只需要简单的进行学习就能操作该系统。
5稳定性需求开发的实验室管理系统要求运行稳定运行过程中无界面不清楚、字体模糊、不能正常操作等现象。
3.3 系统功能分析 实验室管理系统主要包括以下几大功能模块即用户管理、菜单管理、权限管理、首页、 报验管理、检验任务分配、 结果登记管理、样品管理、 检测方法管理、检测标准管理、设备管理、耗材管理、实验室管理、个人中心、后台管理等功能模板。
其中
1用户管理模块包括系统管理员和一般用户。系统中的核心用户是系统管理员管理员登录后通过管理员菜单来管理系统。其中系统管理员可以对本系统所有功能进行动态管理。一般用户登录后可以对个人信息进行修改管理自己的招聘信息、应聘信息、留言等。
2菜单管理对本系统的所有菜单进行动态管理实现系统的低偶合设计。
3权限管理通过角色管理、角色权限动态分配等操作实现本系统用户的权限动态控制实现不同用户、不同角色、不同权限。同时个人只能管理自己的相应信息。从而保障本系统的安全、本系统的用户数据安全提供系统健壮性。
4报验管理模块对报验信息进行管理。
5检验任务分配对检验任务分配进行分配管理。
6结果登记管理对结果进行登记和管理。
7样品管理对样品进行管理。
8检测方法管理对检测方法进行统一管理。
9检测标准管理对检测标准进行统一管理。
...............等。
3.4 系统流程分析
3.4.1 登录流程
登录模块主要满足管理员以及用户的权限登录用户登录流程图如图3-5所示。
图3-5 登录流程图
3.4.2 注册流程 未有账号的用户可进入注册界面进行注册操作用户注册流程图如图3-6所示。
图3-6 注册流程图
3.4.3 添加信息流程 用户在添加信息时信息编号自动生成系统会对添加的信息进行验证验证通过则添加至数据库添加信息成功反之添加失败。添加信息流程如图3-7所示。
图3-7 添加信息流程图
3.4.4 删除信息流程 用户可选择要删除的信息进行信息删除操作在删除信息时系统提示是否确定删除信息是则删除信息成功系统数据库将信息进行删除。删除信息流程图如图3-8所示。
图3-8删除信息流程图
第四章 系统设计 4.1 系统概要设计 系统采用B/S架构通过Web浏览器进行访问和操作。系统包括后台管理
报验管理、检验任务分配、结果登记管理、样品管理、检测方法管理、检测标准管理、设备管理、耗材管理、实验室管理
等功能。。
4.2 系统结构设计 整个系统是由多个功能模块组合而成的要将所有的功能模块都一一列举出来然后进行逐个的功能设计使得每一个模块都有相对应的功能设计然后进行系统整体的设计。
本系统结构图如图4-2所示。 4.3 系统顺序图设计
4.3.1 登录模块顺序图 登录模块主要满足了管理员以及用户的权限登录登录模块顺序图如图4-3所示。 4.3.2 添加信息模块顺序图 管理员以及用户登录后均可进行添加信息操作添加信息模块顺序图如图4-4所示。 4.4 系统关系图设计
本系统各类之间关系图如图4-2所示。 4.5 数据库设计 一个好的数据库可以关系到程序开发的优劣数据库设计离不开表结构的设计还有表与表之间的联系以及系统开发需要设计的数据表内容等信息。在进行数据库设计期间要结合实际情况来对数据库进行针对性的开发设计[12]。
4.4.1 数据库E-R图设计 本系统采用的是mysql数据库数据存储快因为个人博客管理系统主要的就是对信息的管理信息内容比较多这就需要好好的设计一个好的数据库分类要清楚不能添加信息的时候造成信息太过混乱设计好的数据库首先就需要先把各个实体之间的关系表达明确系统的E-R图如下图所示 4.4.2 逻辑结构设计 逻辑结构设计是把概念结构设计阶段画好的数据库ER图转换为关系模型。该系统的关系模型的逻辑结构是由主要一下关系模式组成具体的关系模式如下
1用户信息主键id、用户id、用户姓名、表名、角色id、角色名、密码、新增时间、过期时间
2角色信息主键id、角色名称、角色描述、新增时间、过期时间
3角色权限信息主键id、角色id、角色名称、关联的菜单id、关联的菜单名、新增时间、过期时间
4菜单信息主键id、菜单名称、菜单访问路径、菜单描述、上级菜单id、新增时间、过期时间
5文章信息主键id、创建日期、文章名称、文章内容描述、文章类型、文章标签、文章点赞数、文章访问数、父节点id、上传用户id、上传用户姓名、状态、文章审核状态、审核人id、审核人
6评论信息主键id、创建日期、文章id、文章名、评论人id、评论人姓名、评论内容、是否审核、评论时间等 第五章 系统详细设计 5.1 系统登录 5.2 首页 5.3 报验管理 5.4 检验任务分配 5.5 结果登记管理 5.6 样品管理 5.7 检测方法管理 5.8 检测标准管理 5.9 设备管理 5.10 耗材管理 5.11 实验室管理 5.12 大屏 第六章 部分代码实现
6.1 Spring boot 配置代码
# Tomcat
server:tomcat:uri-encoding: UTF-8port: 8080servlet:context-path: /springboot0t8qlspring:datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/springboot0t8ql?useUnicodetruecharacterEncodingutf-8useJDBCCompliantTimezoneShifttrueuseLegacyDatetimeCodefalseserverTimezoneGMT%2B8username: rootpassword: 123456# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseNamespringboot0t8ql
# username: sa
# password: 123456servlet:multipart:max-file-size: 10MBmax-request-size: 10MBresources:static-locations: classpath:/testStatic/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/#mybatis
mybatis-plus:mapper-locations: classpath*:mapper/*.xml#实体扫描多个package用逗号或者分号分隔typeAliasesPackage: com.entityglobal-config:#主键类型 0:数据库ID自增, 1:用户输入ID,2:全局唯一ID (数字类型唯一ID), 3:全局唯一ID UUID;id-type: 1#字段策略 0:忽略判断,1:非 NULL 判断),2:非空判断field-strategy: 2#驼峰下划线转换db-column-underline: true#刷新mapper 调试神器refresh-mapper: true#逻辑删除配置logic-delete-value: -1logic-not-delete-value: 0#自定义SQL注入器sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjectorconfiguration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: true#springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
jdbc-type-for-null: null
6.2 用户管理及登录登出代码
/*** 用户账户用于保存用户登录信息(User)表控制层*/
Slf4j
RestController
RequestMapping(user)
public class UserController extends BaseControllerUser, UserService {/*** 服务对象*/Autowiredpublic UserController(UserService service) {setService(service);}/*** Token服务*/Autowiredprivate AccessTokenService tokenService;Autowiredprivate UserGroupService userGroupService;/*** 注册* param user* return*/PostMapping(register)public MapString, Object signUp(RequestBody User user) {// 查询用户MapString, 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);}/*** 找回密码* param form* return*/PostMapping(forget_password)public MapString, Object forgetPassword(RequestBody User form,HttpServletRequest request) {JSONObject ret new JSONObject();String username form.getUsername();String code form.getCode();String password form.getPassword();// 判断条件if(code null || code.length() 0){return error(30000, 验证码不能为空);}if(username null || username.length() 0){return error(30000, 用户名不能为空);}if(password null || password.length() 0){return error(30000, 密码不能为空);}// 查询用户MapString, String query new HashMap();query.put(username,username);Query select service.select(query, service.readConfig(request));List list select.getResultList();if (list.size() 0) {User o (User) list.get(0);JSONObject query2 new JSONObject();JSONObject form2 new JSONObject();// 修改用户密码query2.put(user_id,o.getUserId());form2.put(password,service.encryption(password));service.update(query, service.readConfig(request), form2);return success(1);}return error(70000,用户不存在);}/*** 登录* param data* param httpServletRequest* return*/PostMapping(login)public MapString, Object login(RequestBody MapString, 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;MapString, 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);MapString, 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 (resnull){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, 账号或密码不正确);}}/*** 修改密码* param data* param request* return*/PostMapping(change_password)public MapString, Object change_password(RequestBody MapString, String data, HttpServletRequest request){// 根据Token获取UserIdString token request.getHeader(x-auth-token);Integer userId tokenGetUserId(token);// 根据UserId和旧密码获取用户MapString, String query new HashMap();String o_password data.get(o_password);query.put(user_id ,String.valueOf(userId));query.put(password ,service.encryption(o_password));Query ret service.count(query, service.readConfig(request));List list ret.getResultList();Object s list.get(0);int count Integer.parseInt(list.get(0).toString());if(count 0){// 修改密码MapString,Object form new HashMap();form.put(password,service.encryption(data.get(password)));service.update(query,service.readConfig(request),form);return success(1);}return error(10000,密码修改失败);}/*** 登录态* param request* return*/GetMapping(state)public MapString, Object state(HttpServletRequest request) {JSONObject ret new JSONObject();// 获取状态String token request.getHeader(x-auth-token);// 根据登录态获取用户IDInteger userId tokenGetUserId(token);log.info([返回userId] {},userId);if(userId null || userId 0){return error(10000,用户未登录!);}// 根据用户ID获取用户MapString,String query new HashMap();query.put(user_id ,String.valueOf(userId));// 根据用户ID获取Query select service.select(query,service.readConfig(request));List resultList select.getResultList();if (resultList.size() 0) {JSONObject user JSONObject.parseObject(JSONObject.toJSONString(resultList.get(0)));user.put(token,token);ret.put(obj,user);return success(ret);} else {return error(10000,用户未登录!);}}/*** 登录态* param request* return*/GetMapping(quit)public MapString, Object quit(HttpServletRequest request) {String token request.getHeader(x-auth-token);JSONObject ret new JSONObject();MapString, String query new HashMap(16);query.put(token, token);try{tokenService.delete(query,service.readConfig(request));}catch (Exception e){e.printStackTrace();}return success(退出登录成功);}/*** 获取登录用户ID* param token* return*/public Integer tokenGetUserId(String token) {log.info([获取的token] {},token);// 根据登录态获取用户IDif(token null || .equals(token)){return 0;}MapString, String query new HashMap(16);query.put(token, token);AccessToken byToken tokenService.findOne(query);if(byToken null){return 0;}return byToken.getUser_id();}/*** 重写add* return*/PostMapping(/add)Transactionalpublic MapString, Object add(HttpServletRequest request) throws IOException {MapString,Object map service.readBody(request.getReader());map.put(password,service.encryption(String.valueOf(map.get(password))));service.insert(map);return success(1);}}
6.3 Md5 加密算法代码
public class MD5Utils {private static final Logger logger LoggerFactory.getLogger(MD5Utils.class);// 全局数组private final static String[] strDigits {0, 1, 2, 3, 4, 5,6, 7, 8, 9, a, b, c, d, e, f};/*** 16进制字符*/private final static char hexdigits[] {0, 1, 2, 3, 4, 5, 6, 7, 8,9, a, b, c, d, e, f};/*** 对文件全文生成MD5摘要** param file 要加密的文件* return MD5摘要码*/public static String getMD5ForFile(String filePath) {FileInputStream fis null;MessageDigest md null;try {md MessageDigest.getInstance(MD5);File file new File(filePath);if (!file.exists()) {return ;}fis new FileInputStream(file);byte[] buffer new byte[4096];int length -1;while ((length fis.read(buffer)) ! -1) {md.update(buffer, 0, length);}byte[] b md.digest();return byteToHexString(b);} catch (Exception ex) {logger.error(获取MD5信息发生异常 ex.toString());return null;} finally {try {if (null ! fis) {fis.close();}} catch (IOException e) {logger.error(获取MD5信息发生异常 e.toString());}}}/*** 把byte[]数组转换成十六进制字符串表示形式** param tmp 要转换的byte[]* return 十六进制字符串表示形式*/private static String byteToHexString(byte[] tmp) {String s;char str[] new char[16 * 2];int k 0;for (int i 0; i 16; i) {byte byte0 tmp[i];str[k] hexdigits[byte0 4 0xf];str[k] hexdigits[byte0 0xf];}s new String(str);return s;}// 返回形式为数字跟字符串private static String byteToArrayString(byte bByte) {int iRet bByte;// System.out.println(iRetiRet);if (iRet 0) {iRet 256;}int iD1 iRet / 16;int iD2 iRet % 16;return strDigits[iD1] strDigits[iD2];}// 返回形式只为数字private static String byteToNum(byte bByte) {int iRet bByte;System.out.println(iRet1 iRet);if (iRet 0) {iRet 256;}return String.valueOf(iRet);}// 转换字节数组为16进制字串private static String byteToString(byte[] bByte) {StringBuffer sBuffer new StringBuffer();for (int i 0; i bByte.length; i) {sBuffer.append(byteToArrayString(bByte[i]));}return sBuffer.toString();}public static String GetMD5Code(String strObj) {if (StringUtils.isEmpty(strObj)) {return ;}String resultString null;try {resultString new String(strObj);MessageDigest md MessageDigest.getInstance(MD5);// md.digest() 该函数返回值为存放哈希值结果的byte数组resultString byteToString(md.digest(strObj.getBytes()));} catch (NoSuchAlgorithmException ex) {ex.printStackTrace();}return resultString;}}
6.4 部分数据库代码
-- ----------------------------
-- 5、菜单权限表
-- ----------------------------
drop table if exists sys_menu;
create table sys_menu (menu_id bigint(20) not null auto_increment comment 菜单ID,menu_name varchar(50) not null comment 菜单名称,parent_id bigint(20) default 0 comment 父菜单ID,order_num int(4) default 0 comment 显示顺序,url varchar(200) default # comment 请求地址,target varchar(20) default comment 打开方式menuItem页签 menuBlank新窗口,menu_type char(1) default comment 菜单类型M目录 C菜单 F按钮,visible char(1) default 0 comment 菜单状态0显示 1隐藏,is_refresh char(1) default 1 comment 是否刷新0刷新 1不刷新,perms varchar(100) default null comment 权限标识,icon varchar(100) default # comment 菜单图标,create_by varchar(64) default comment 创建者,create_time datetime comment 创建时间,update_by varchar(64) default comment 更新者,update_time datetime comment 更新时间,remark varchar(500) default comment 备注,primary key (menu_id)
) engineinnodb auto_increment2000 comment 菜单权限表;-- ----------------------------
-- 初始化-菜单信息表数据
-- ----------------------------
-- 一级菜单
insert into sys_menu values(1, 系统管理, 0, 1, #, , M, 0, 1, , fa fa-gear, admin, sysdate(), , null, 系统管理目录);
insert into sys_menu values(2, 系统监控, 0, 2, #, , M, 0, 1, , fa fa-video-camera, admin, sysdate(), , null, 系统监控目录);
insert into sys_menu values(3, 系统工具, 0, 3, #, , M, 0, 1, , fa fa-bars, admin, sysdate(), , null, 系统工具目录);
insert into sys_menu values(4, MCS官网, 0, 4, http://ruoyi.vip, menuBlank, C, 0, 1, , fa fa-location-arrow, admin, sysdate(), , null, MCS官网地址);
-- 二级菜单
insert into sys_menu values(100, 用户管理, 1, 1, /system/user, , C, 0, 1, system:user:view, fa fa-user-o, admin, sysdate(), , null, 用户管理菜单);
insert into sys_menu values(101, 角色管理, 1, 2, /system/role, , C, 0, 1, system:role:view, fa fa-user-secret, admin, sysdate(), , null, 角色管理菜单);
insert into sys_menu values(102, 菜单管理, 1, 3, /system/menu, , C, 0, 1, system:menu:view, fa fa-th-list, admin, sysdate(), , null, 菜单管理菜单);
insert into sys_menu values(103, 部门管理, 1, 4, /system/dept, , C, 0, 1, system:dept:view, fa fa-outdent, admin, sysdate(), , null, 部门管理菜单);
insert into sys_menu values(104, 岗位管理, 1, 5, /system/post, , C, 0, 1, system:post:view, fa fa-address-card-o, admin, sysdate(), , null, 岗位管理菜单);
insert into sys_menu values(105, 字典管理, 1, 6, /system/dict, , C, 0, 1, system:dict:view, fa fa-bookmark-o, admin, sysdate(), , null, 字典管理菜单);
insert into sys_menu values(106, 参数设置, 1, 7, /system/config, , C, 0, 1, system:config:view, fa fa-sun-o, admin, sysdate(), , null, 参数设置菜单);
insert into sys_menu values(107, 通知公告, 1, 8, /system/notice, , C, 0, 1, system:notice:view, fa fa-bullhorn, admin, sysdate(), , null, 通知公告菜单);
insert into sys_menu values(108, 日志管理, 1, 9, #, , M, 0, 1, , fa fa-pencil-square-o, admin, sysdate(), , null, 日志管理菜单);
insert into sys_menu values(109, 在线用户, 2, 1, /monitor/online, , C, 0, 1, monitor:online:view, fa fa-user-circle, admin, sysdate(), , null, 在线用户菜单);
insert into sys_menu values(110, 定时任务, 2, 2, /monitor/job, , C, 0, 1, monitor:job:view, fa fa-tasks, admin, sysdate(), , null, 定时任务菜单);
insert into sys_menu values(111, 数据监控, 2, 3, /monitor/data, , C, 0, 1, monitor:data:view, fa fa-bug, admin, sysdate(), , null, 数据监控菜单);
insert into sys_menu values(112, 服务监控, 2, 4, /monitor/server, , C, 0, 1, monitor:server:view, fa fa-server, admin, sysdate(), , null, 服务监控菜单);
insert into sys_menu values(113, 缓存监控, 2, 5, /monitor/cache, , C, 0, 1, monitor:cache:view, fa fa-cube, admin, sysdate(), , null, 缓存监控菜单);
insert into sys_menu values(114, 表单构建, 3, 1, /tool/build, , C, 0, 1, tool:build:view, fa fa-wpforms, admin, sysdate(), , null, 表单构建菜单);
insert into sys_menu values(115, 代码生成, 3, 2, /tool/gen, , C, 0, 1, tool:gen:view, fa fa-code, admin, sysdate(), , null, 代码生成菜单);
insert into sys_menu values(116, 系统接口, 3, 3, /tool/swagger, , C, 0, 1, tool:swagger:view, fa fa-gg, admin, sysdate(), , null, 系统接口菜单);
-- 三级菜单
insert into sys_menu values(500, 操作日志, 108, 1, /monitor/operlog, , C, 0, 1, monitor:operlog:view, fa fa-address-book, admin, sysdate(), , null, 操作日志菜单);
insert into sys_menu values(501, 登录日志, 108, 2, /monitor/logininfor, , C, 0, 1, monitor:logininfor:view, fa fa-file-image-o, admin, sysdate(), , null, 登录日志菜单);
-- 用户管理按钮
insert into sys_menu values(1000, 用户查询, 100, 1, #, , F, 0, 1, system:user:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1001, 用户新增, 100, 2, #, , F, 0, 1, system:user:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1002, 用户修改, 100, 3, #, , F, 0, 1, system:user:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1003, 用户删除, 100, 4, #, , F, 0, 1, system:user:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1004, 用户导出, 100, 5, #, , F, 0, 1, system:user:export, #, admin, sysdate(), , null, );
insert into sys_menu values(1005, 用户导入, 100, 6, #, , F, 0, 1, system:user:import, #, admin, sysdate(), , null, );
insert into sys_menu values(1006, 重置密码, 100, 7, #, , F, 0, 1, system:user:resetPwd, #, admin, sysdate(), , null, );
-- 角色管理按钮
insert into sys_menu values(1007, 角色查询, 101, 1, #, , F, 0, 1, system:role:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1008, 角色新增, 101, 2, #, , F, 0, 1, system:role:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1009, 角色修改, 101, 3, #, , F, 0, 1, system:role:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1010, 角色删除, 101, 4, #, , F, 0, 1, system:role:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1011, 角色导出, 101, 5, #, , F, 0, 1, system:role:export, #, admin, sysdate(), , null, );
-- 菜单管理按钮
insert into sys_menu values(1012, 菜单查询, 102, 1, #, , F, 0, 1, system:menu:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1013, 菜单新增, 102, 2, #, , F, 0, 1, system:menu:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1014, 菜单修改, 102, 3, #, , F, 0, 1, system:menu:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1015, 菜单删除, 102, 4, #, , F, 0, 1, system:menu:remove, #, admin, sysdate(), , null, );
-- 部门管理按钮
insert into sys_menu values(1016, 部门查询, 103, 1, #, , F, 0, 1, system:dept:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1017, 部门新增, 103, 2, #, , F, 0, 1, system:dept:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1018, 部门修改, 103, 3, #, , F, 0, 1, system:dept:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1019, 部门删除, 103, 4, #, , F, 0, 1, system:dept:remove, #, admin, sysdate(), , null, );
-- 岗位管理按钮
insert into sys_menu values(1020, 岗位查询, 104, 1, #, , F, 0, 1, system:post:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1021, 岗位新增, 104, 2, #, , F, 0, 1, system:post:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1022, 岗位修改, 104, 3, #, , F, 0, 1, system:post:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1023, 岗位删除, 104, 4, #, , F, 0, 1, system:post:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1024, 岗位导出, 104, 5, #, , F, 0, 1, system:post:export, #, admin, sysdate(), , null, );
-- 字典管理按钮
insert into sys_menu values(1025, 字典查询, 105, 1, #, , F, 0, 1, system:dict:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1026, 字典新增, 105, 2, #, , F, 0, 1, system:dict:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1027, 字典修改, 105, 3, #, , F, 0, 1, system:dict:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1028, 字典删除, 105, 4, #, , F, 0, 1, system:dict:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1029, 字典导出, 105, 5, #, , F, 0, 1, system:dict:export, #, admin, sysdate(), , null, );
-- 参数设置按钮
insert into sys_menu values(1030, 参数查询, 106, 1, #, , F, 0, 1, system:config:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1031, 参数新增, 106, 2, #, , F, 0, 1, system:config:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1032, 参数修改, 106, 3, #, , F, 0, 1, system:config:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1033, 参数删除, 106, 4, #, , F, 0, 1, system:config:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1034, 参数导出, 106, 5, #, , F, 0, 1, system:config:export, #, admin, sysdate(), , null, );
-- 通知公告按钮
insert into sys_menu values(1035, 公告查询, 107, 1, #, , F, 0, 1, system:notice:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1036, 公告新增, 107, 2, #, , F, 0, 1, system:notice:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1037, 公告修改, 107, 3, #, , F, 0, 1, system:notice:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1038, 公告删除, 107, 4, #, , F, 0, 1, system:notice:remove, #, admin, sysdate(), , null, );
-- 操作日志按钮
insert into sys_menu values(1039, 操作查询, 500, 1, #, , F, 0, 1, monitor:operlog:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1040, 操作删除, 500, 2, #, , F, 0, 1, monitor:operlog:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1041, 详细信息, 500, 3, #, , F, 0, 1, monitor:operlog:detail, #, admin, sysdate(), , null, );
insert into sys_menu values(1042, 日志导出, 500, 4, #, , F, 0, 1, monitor:operlog:export, #, admin, sysdate(), , null, );
-- 登录日志按钮
insert into sys_menu values(1043, 登录查询, 501, 1, #, , F, 0, 1, monitor:logininfor:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1044, 登录删除, 501, 2, #, , F, 0, 1, monitor:logininfor:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1045, 日志导出, 501, 3, #, , F, 0, 1, monitor:logininfor:export, #, admin, sysdate(), , null, );
insert into sys_menu values(1046, 账户解锁, 501, 4, #, , F, 0, 1, monitor:logininfor:unlock, #, admin, sysdate(), , null, );
-- 在线用户按钮
insert into sys_menu values(1047, 在线查询, 109, 1, #, , F, 0, 1, monitor:online:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1048, 批量强退, 109, 2, #, , F, 0, 1, monitor:online:batchForceLogout, #, admin, sysdate(), , null, );
insert into sys_menu values(1049, 单条强退, 109, 3, #, , F, 0, 1, monitor:online:forceLogout, #, admin, sysdate(), , null, );
-- 定时任务按钮
insert into sys_menu values(1050, 任务查询, 110, 1, #, , F, 0, 1, monitor:job:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1051, 任务新增, 110, 2, #, , F, 0, 1, monitor:job:add, #, admin, sysdate(), , null, );
insert into sys_menu values(1052, 任务修改, 110, 3, #, , F, 0, 1, monitor:job:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1053, 任务删除, 110, 4, #, , F, 0, 1, monitor:job:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1054, 状态修改, 110, 5, #, , F, 0, 1, monitor:job:changeStatus, #, admin, sysdate(), , null, );
insert into sys_menu values(1055, 任务详细, 110, 6, #, , F, 0, 1, monitor:job:detail, #, admin, sysdate(), , null, );
insert into sys_menu values(1056, 任务导出, 110, 7, #, , F, 0, 1, monitor:job:export, #, admin, sysdate(), , null, );
-- 代码生成按钮
insert into sys_menu values(1057, 生成查询, 115, 1, #, , F, 0, 1, tool:gen:list, #, admin, sysdate(), , null, );
insert into sys_menu values(1058, 生成修改, 115, 2, #, , F, 0, 1, tool:gen:edit, #, admin, sysdate(), , null, );
insert into sys_menu values(1059, 生成删除, 115, 3, #, , F, 0, 1, tool:gen:remove, #, admin, sysdate(), , null, );
insert into sys_menu values(1060, 预览代码, 115, 4, #, , F, 0, 1, tool:gen:preview, #, admin, sysdate(), , null, );
insert into sys_menu values(1061, 生成代码, 115, 5, #, , F, 0, 1, tool:gen:code, #, admin, sysdate(), , null, );-- ----------------------------
-- 6、用户和角色关联表 用户N-1角色
-- ----------------------------
drop table if exists sys_user_role;
create table sys_user_role (user_id bigint(20) not null comment 用户ID,role_id bigint(20) not null comment 角色ID,primary key(user_id, role_id)
) engineinnodb comment 用户和角色关联表;-- ----------------------------
-- 初始化-用户和角色关联表数据
-- ----------------------------
insert into sys_user_role values (1, 1);
insert into sys_user_role values (2, 2);-- ----------------------------
-- 7、角色和菜单关联表 角色1-N菜单
-- ----------------------------
drop table if exists sys_role_menu;
create table sys_role_menu (role_id bigint(20) not null comment 角色ID,menu_id bigint(20) not null comment 菜单ID,primary key(role_id, menu_id)
) engineinnodb comment 角色和菜单关联表;-- ----------------------------
-- 初始化-角色和菜单关联表数据
-- ----------------------------
insert into sys_role_menu values (2, 1);
insert into sys_role_menu values (2, 2);
insert into sys_role_menu values (2, 3);
insert into sys_role_menu values (2, 4);
insert into sys_role_menu values (2, 100);
insert into sys_role_menu values (2, 101);
insert into sys_role_menu values (2, 102);
insert into sys_role_menu values (2, 103);
insert into sys_role_menu values (2, 104);
insert into sys_role_menu values (2, 105);
insert into sys_role_menu values (2, 106);
insert into sys_role_menu values (2, 107);
insert into sys_role_menu values (2, 108);
insert into sys_role_menu values (2, 109);
insert into sys_role_menu values (2, 110);
insert into sys_role_menu values (2, 111);
insert into sys_role_menu values (2, 112);
insert into sys_role_menu values (2, 113);
insert into sys_role_menu values (2, 114);
insert into sys_role_menu values (2, 115);
insert into sys_role_menu values (2, 116);
insert into sys_role_menu values (2, 500);
insert into sys_role_menu values (2, 501);
insert into sys_role_menu values (2, 1000);
insert into sys_role_menu values (2, 1001);
insert into sys_role_menu values (2, 1002);
insert into sys_role_menu values (2, 1003);
insert into sys_role_menu values (2, 1004);
insert into sys_role_menu values (2, 1005);
insert into sys_role_menu values (2, 1006);
insert into sys_role_menu values (2, 1007);
insert into sys_role_menu values (2, 1008);
insert into sys_role_menu values (2, 1009);
insert into sys_role_menu values (2, 1010);
insert into sys_role_menu values (2, 1011);
insert into sys_role_menu values (2, 1012);
insert into sys_role_menu values (2, 1013);
insert into sys_role_menu values (2, 1014);
insert into sys_role_menu values (2, 1015);
insert into sys_role_menu values (2, 1016);
insert into sys_role_menu values (2, 1017);
insert into sys_role_menu values (2, 1018);
insert into sys_role_menu values (2, 1019);
insert into sys_role_menu values (2, 1020);
insert into sys_role_menu values (2, 1021);
insert into sys_role_menu values (2, 1022);
insert into sys_role_menu values (2, 1023);
insert into sys_role_menu values (2, 1024);
insert into sys_role_menu values (2, 1025);
insert into sys_role_menu values (2, 1026);
insert into sys_role_menu values (2, 1027);
insert into sys_role_menu values (2, 1028);
insert into sys_role_menu values (2, 1029);
insert into sys_role_menu values (2, 1030);
insert into sys_role_menu values (2, 1031);
insert into sys_role_menu values (2, 1032);
insert into sys_role_menu values (2, 1033);
insert into sys_role_menu values (2, 1034);
insert into sys_role_menu values (2, 1035);
insert into sys_role_menu values (2, 1036);
insert into sys_role_menu values (2, 1037);
insert into sys_role_menu values (2, 1038);
insert into sys_role_menu values (2, 1039);
insert into sys_role_menu values (2, 1040);
insert into sys_role_menu values (2, 1041);
insert into sys_role_menu values (2, 1042);
insert into sys_role_menu values (2, 1043);
insert into sys_role_menu values (2, 1044);
insert into sys_role_menu values (2, 1045);
insert into sys_role_menu values (2, 1046);
insert into sys_role_menu values (2, 1047);
insert into sys_role_menu values (2, 1048);
insert into sys_role_menu values (2, 1049);
insert into sys_role_menu values (2, 1050);
insert into sys_role_menu values (2, 1051);
insert into sys_role_menu values (2, 1052);
insert into sys_role_menu values (2, 1053);
insert into sys_role_menu values (2, 1054);
insert into sys_role_menu values (2, 1055);
insert into sys_role_menu values (2, 1056);
insert into sys_role_menu values (2, 1057);
insert into sys_role_menu values (2, 1058);
insert into sys_role_menu values (2, 1059);
insert into sys_role_menu values (2, 1060);
insert into sys_role_menu values (2, 1061);-- ----------------------------
-- 8、角色和部门关联表 角色1-N部门
-- ----------------------------
drop table if exists sys_role_dept;
create table sys_role_dept (role_id bigint(20) not null comment 角色ID,dept_id bigint(20) not null comment 部门ID,primary key(role_id, dept_id)
) engineinnodb comment 角色和部门关联表;-- ----------------------------
-- 初始化-角色和部门关联表数据
-- ----------------------------
insert into sys_role_dept values (2, 100);
insert into sys_role_dept values (2, 101);
insert into sys_role_dept values (2, 105);-- ----------------------------
-- 9、用户与岗位关联表 用户1-N岗位
-- ----------------------------
drop table if exists sys_user_post;
create table sys_user_post
(user_id bigint(20) not null comment 用户ID,post_id bigint(20) not null comment 岗位ID,primary key (user_id, post_id)
) engineinnodb comment 用户与岗位关联表;-- ----------------------------
-- 初始化-用户与岗位关联表数据
-- ----------------------------
insert into sys_user_post values (1, 1);
insert into sys_user_post values (2, 2);-- ----------------------------
-- 10、操作日志记录
-- ----------------------------
drop table if exists sys_oper_log;
create table sys_oper_log (oper_id bigint(20) not null auto_increment comment 日志主键,title varchar(50) default comment 模块标题,business_type int(2) default 0 comment 业务类型0其它 1新增 2修改 3删除,method varchar(200) default comment 方法名称,request_method varchar(10) default comment 请求方式,operator_type int(1) default 0 comment 操作类别0其它 1后台用户 2手机端用户,oper_name varchar(50) default comment 操作人员,dept_name varchar(50) default comment 部门名称,oper_url varchar(255) default comment 请求URL,oper_ip varchar(128) default comment 主机地址,oper_location varchar(255) default comment 操作地点,oper_param varchar(2000) default comment 请求参数,json_result varchar(2000) default comment 返回参数,status int(1) default 0 comment 操作状态0正常 1异常,error_msg varchar(2000) default comment 错误消息,oper_time datetime comment 操作时间,cost_time bigint(20) default 0 comment 消耗时间,primary key (oper_id),key idx_sys_oper_log_bt (business_type),key idx_sys_oper_log_s (status),key idx_sys_oper_log_ot (oper_time)
) engineinnodb auto_increment100 comment 操作日志记录;-- ----------------------------
-- 11、字典类型表
-- ----------------------------
drop table if exists sys_dict_type;
create table sys_dict_type
(dict_id bigint(20) not null auto_increment comment 字典主键,dict_name varchar(100) default comment 字典名称,dict_type varchar(100) default comment 字典类型,status char(1) default 0 comment 状态0正常 1停用,create_by varchar(64) default comment 创建者,create_time datetime comment 创建时间,update_by varchar(64) default comment 更新者,update_time datetime comment 更新时间,remark varchar(500) default null comment 备注,primary key (dict_id),unique (dict_type)
) engineinnodb auto_increment100 comment 字典类型表;insert into sys_dict_type values(1, 用户性别, sys_user_sex, 0, admin, sysdate(), , null, 用户性别列表);
insert into sys_dict_type values(2, 菜单状态, sys_show_hide, 0, admin, sysdate(), , null, 菜单状态列表);
insert into sys_dict_type values(3, 系统开关, sys_normal_disable, 0, admin, sysdate(), , null, 系统开关列表);
insert into sys_dict_type values(4, 任务状态, sys_job_status, 0, admin, sysdate(), , null, 任务状态列表);
insert into sys_dict_type values(5, 任务分组, sys_job_group, 0, admin, sysdate(), , null, 任务分组列表);
insert into sys_dict_type values(6, 系统是否, sys_yes_no, 0, admin, sysdate(), , null, 系统是否列表);
insert into sys_dict_type values(7, 通知类型, sys_notice_type, 0, admin, sysdate(), , null, 通知类型列表);
insert into sys_dict_type values(8, 通知状态, sys_notice_status, 0, admin, sysdate(), , null, 通知状态列表);
insert into sys_dict_type values(9, 操作类型, sys_oper_type, 0, admin, sysdate(), , null, 操作类型列表);
insert into sys_dict_type values(10, 系统状态, sys_common_status, 0, admin, sysdate(), , null, 登录状态列表);-- ----------------------------
-- 12、字典数据表
-- ----------------------------
drop table if exists sys_dict_data;
create table sys_dict_data
(dict_code bigint(20) not null auto_increment comment 字典编码,dict_sort int(4) default 0 comment 字典排序,dict_label varchar(100) default comment 字典标签,dict_value varchar(100) default comment 字典键值,dict_type varchar(100) default comment 字典类型,css_class varchar(100) default null comment 样式属性其他样式扩展,list_class varchar(100) default null comment 表格回显样式,is_default char(1) default N comment 是否默认Y是 N否,status char(1) default 0 comment 状态0正常 1停用,create_by varchar(64) default comment 创建者,create_time datetime comment 创建时间,update_by varchar(64) default comment 更新者,update_time datetime comment 更新时间,remark varchar(500) default null comment 备注,primary key (dict_code)
) engineinnodb auto_increment100 comment 字典数据表;insert into sys_dict_data values(1, 1, 男, 0, sys_user_sex, , , Y, 0, admin, sysdate(), , null, 性别男);
insert into sys_dict_data values(2, 2, 女, 1, sys_user_sex, , , N, 0, admin, sysdate(), , null, 性别女);
insert into sys_dict_data values(3, 3, 未知, 2, sys_user_sex, , , N, 0, admin, sysdate(), , null, 性别未知);
insert into sys_dict_data values(4, 1, 显示, 0, sys_show_hide, , primary, Y, 0, admin, sysdate(), , null, 显示菜单);
insert into sys_dict_data values(5, 2, 隐藏, 1, sys_show_hide, , danger, N, 0, admin, sysdate(), , null, 隐藏菜单);
insert into sys_dict_data values(6, 1, 正常, 0, sys_normal_disable, , primary, Y, 0, admin, sysdate(), , null, 正常状态);
insert into sys_dict_data values(7, 2, 停用, 1, sys_normal_disable, , danger, N, 0, admin, sysdate(), , null, 停用状态);
insert into sys_dict_data values(8, 1, 正常, 0, sys_job_status, , primary, Y, 0, admin, sysdate(), , null, 正常状态);
insert into sys_dict_data values(9, 2, 暂停, 1, sys_job_status, , danger, N, 0, admin, sysdate(), , null, 停用状态);
insert into sys_dict_data values(10, 1, 默认, DEFAULT, sys_job_group, , , Y, 0, admin, sysdate(), , null, 默认分组);
insert into sys_dict_data values(11, 2, 系统, SYSTEM, sys_job_group, , , N, 0, admin, sysdate(), , null, 系统分组);
insert into sys_dict_data values(12, 1, 是, Y, sys_yes_no, , primary, Y, 0, admin, sysdate(), , null, 系统默认是);
insert into sys_dict_data values(13, 2, 否, N, sys_yes_no, , danger, N, 0, admin, sysdate(), , null, 系统默认否);
insert into sys_dict_data values(14, 1, 通知, 1, sys_notice_type, , warning, Y, 0, admin, sysdate(), , null, 通知);
insert into sys_dict_data values(15, 2, 公告, 2, sys_notice_type, , success, N, 0, admin, sysdate(), , null, 公告);
insert into sys_dict_data values(16, 1, 正常, 0, sys_notice_status, , primary, Y, 0, admin, sysdate(), , null, 正常状态);
insert into sys_dict_data values(17, 2, 关闭, 1, sys_notice_status, , danger, N, 0, admin, sysdate(), , null, 关闭状态);
insert into sys_dict_data values(18, 99, 其他, 0, sys_oper_type, , info, N, 0, admin, sysdate(), , null, 其他操作);
insert into sys_dict_data values(19, 1, 新增, 1, sys_oper_type, , info, N, 0, admin, sysdate(), , null, 新增操作);
insert into sys_dict_data values(20, 2, 修改, 2, sys_oper_type, , info, N, 0, admin, sysdate(), , null, 修改操作);
insert into sys_dict_data values(21, 3, 删除, 3, sys_oper_type, , danger, N, 0, admin, sysdate(), , null, 删除操作);
insert into sys_dict_data values(22, 4, 授权, 4, sys_oper_type, , primary, N, 0, admin, sysdate(), , null, 授权操作);
insert into sys_dict_data values(23, 5, 导出, 5, sys_oper_type, , warning, N, 0, admin, sysdate(), , null, 导出操作);
insert into sys_dict_data values(24, 6, 导入, 6, sys_oper_type, , warning, N, 0, admin, sysdate(), , null, 导入操作);
insert into sys_dict_data values(25, 7, 强退, 7, sys_oper_type, , danger, N, 0, admin, sysdate(), , null, 强退操作);
insert into sys_dict_data values(26, 8, 生成代码, 8, sys_oper_type, , warning, N, 0, admin, sysdate(), , null, 生成操作);
insert into sys_dict_data values(27, 9, 清空数据, 9, sys_oper_type, , danger, N, 0, admin, sysdate(), , null, 清空操作);
insert into sys_dict_data values(28, 1, 成功, 0, sys_common_status, , primary, N, 0, admin, sysdate(), , null, 正常状态);
insert into sys_dict_data values(29, 2, 失败, 1, sys_common_status, , danger, N, 0, admin, sysdate(), , null, 停用状态);-- ----------------------------
-- 13、参数配置表
-- ----------------------------
drop table if exists sys_config;
create table sys_config (config_id int(5) not null auto_increment comment 参数主键,config_name varchar(100) default comment 参数名称,config_key varchar(100) default comment 参数键名,config_value varchar(500) default comment 参数键值,config_type char(1) default N comment 系统内置Y是 N否,create_by varchar(64) default comment 创建者,create_time datetime comment 创建时间,update_by varchar(64) default comment 更新者,update_time datetime comment 更新时间,remark varchar(500) default null comment 备注,primary key (config_id)
) engineinnodb auto_increment100 comment 参数配置表;insert into sys_config values(1, 主框架页-默认皮肤样式名称, sys.index.skinName, skin-blue, Y, admin, sysdate(), , null, 蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow);
insert into sys_config values(2, 用户管理-账号初始密码, sys.user.initPassword, 123456, Y, admin, sysdate(), , null, 初始化密码 123456);
insert into sys_config values(3, 主框架页-侧边栏主题, sys.index.sideTheme, theme-dark, Y, admin, sysdate(), , null, 深黑主题theme-dark浅色主题theme-light深蓝主题theme-blue);
insert into sys_config values(4, 账号自助-是否开启用户注册功能, sys.account.registerUser, false, Y, admin, sysdate(), , null, 是否开启注册用户功能true开启false关闭);
insert into sys_config values(5, 用户管理-密码字符范围, sys.account.chrtype, 0, Y, admin, sysdate(), , null, 默认任意字符范围0任意密码可以输入任意字符1数字密码只能为0-9数字2英文字母密码只能为a-z和A-Z字母3字母和数字密码必须包含字母数字,4字母数字和特殊字符目前支持的特殊字符包括~!#$%^*()-_);
insert into sys_config values(6, 用户管理-初始密码修改策略, sys.account.initPasswordModify, 1, Y, admin, sysdate(), , null, 0初始密码修改策略关闭没有任何提示1提醒用户如果未修改初始密码则在登录时就会提醒修改密码对话框);
insert into sys_config values(7, 用户管理-账号密码更新周期, sys.account.passwordValidateDays, 0, Y, admin, sysdate(), , null, 密码更新周期填写数字数据初始化值为0不限制若修改必须为大于0小于365的正整数如果超过这个周期登录系统时则在登录时就会提醒修改密码对话框);
insert into sys_config values(8, 主框架页-菜单导航显示风格, sys.index.menuStyle, default, Y, admin, sysdate(), , null, 菜单导航显示风格default为左侧导航菜单topnav为顶部导航菜单);
insert into sys_config values(9, 主框架页-是否开启页脚, sys.index.footer, true, Y, admin, sysdate(), , null, 是否开启底部页脚显示true显示false隐藏);
insert into sys_config values(10, 主框架页-是否开启页签, sys.index.tagsView, true, Y, admin, sysdate(), , null, 是否开启菜单多页签显示true显示false隐藏);
insert into sys_config values(11, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, sysdate(), , null, 设置登录IP黑名单限制多个匹配项以;分隔支持匹配*通配、网段);-- ----------------------------
-- 14、系统访问记录
-- ----------------------------
drop table if exists sys_logininfor;
create table sys_logininfor (info_id bigint(20) not null auto_increment comment 访问ID,login_name varchar(50) default comment 登录账号,ipaddr varchar(128) default comment 登录IP地址,login_location varchar(255) default comment 登录地点,browser varchar(50) default comment 浏览器类型,os varchar(50) default comment 操作系统,status char(1) default 0 comment 登录状态0成功 1失败,msg varchar(255) default comment 提示消息,login_time datetime comment 访问时间,primary key (info_id),key idx_sys_logininfor_s (status),key idx_sys_logininfor_lt (login_time)
) engineinnodb auto_increment100 comment 系统访问记录;-- ----------------------------
-- 15、在线用户记录
-- ----------------------------
drop table if exists sys_user_online;
create table sys_user_online (sessionId varchar(50) default comment 用户会话id,login_name varchar(50) default comment 登录账号,dept_name varchar(50) default comment 部门名称,ipaddr varchar(128) default comment 登录IP地址,login_location varchar(255) default comment 登录地点,browser varchar(50) default comment 浏览器类型,os varchar(50) default comment 操作系统,status varchar(10) default comment 在线状态on_line在线off_line离线,start_timestamp datetime comment session创建时间,last_access_time datetime comment session最后访问时间,expire_time int(5) default 0 comment 超时时间单位为分钟,primary key (sessionId)
) engineinnodb comment 在线用户记录;
第七章 系统测试 一个系统设计好后就会进入测试阶段测试的目标是检验设计好的网站是否可以正常无误的运行尽可能的发现网站的问题已使后期网站投入使用后网站尽少出错。
7.1 测试定义 系统测试主要是判断系统是否可以正常运行功能模块是否可以实现操作。程序代码中是否有错误出现。测试程序是开发过程中的一个主要问题。就算系统完成的再好再进行程序测试时也会也会发现一个重来没有被发现的错误信息。
测试不仅是系统开发的开始而且应该贯穿整个系统的整个生命周期。评估系统质量的方法不局限于系统编码和过程应该与软件设计工作和历史需求分析密切相关。系统错误不一定是代码错误可能是阶段的设计摘要和设计细节存在问题问题也可能出现在需求分析阶段[13]。从实际情况来看最初的问题很可能是一个小错误根据按钮的原理按钮后的按钮位错将是所有位错。该系统的原因也同样适用随着后续的开发工作误差将越来越严重。因此就应该对系统进行测试在一开始就发现系统中存在的问题就能保证以后系统能够正常稳定的运行。在测试系统中开发人员应该站在用户的角度来处理测试工作而现在主要的测试方法是黑盒测试。测试的目的可以概括为以下几点:首先用户界面和用户需求是一致的设置界面和设计风格统一;第二创新设计接口规范设计标准具有独特的审美特征;最后人类传统的接口以满足审美需求不能盲目地追求一种独特的合理的规划布局符合审美标准。
7.2 测试目的 测试的目的在于要对系统的稳定和可操作性能进行对照检查。对于软件的开发利用最终的目的在最后的测试和试用这是一个不可缺少的重要环节。对于软件开发者而言在对每一个单独的功能进行编排时候都要有单独的测试并通过测试阶段才可以研发多个功能性软件这样既缩短了研发时间也可以在的单个的早期测试中发现问题以免融合后的软件在查找问题时就很难快速解决或者急速定位问题。
本系统开发设计完成后需要对其进行系统测试测试的主要目的就是发现并找出系统中存在的问题并及时的进行解决确保系统可以正常稳定的运行下去在进行系统测试的时候在一定要非常的认真、仔细切记不能粗心不能放过一个漏洞测试时候一定不要着急要按照之前指定好的测试步骤一步一步进行并且将测试的结果进行详细的记录我们在进行测试的时候做好选择自动化的测试这样既可以节省时间而且也能确保测试的准确性如果采用人工测试的方法就不会这么的方便由于人工测试有很多不确定的因素在测试过程中很可能会出现一些问题用机器测试就不会出现任何的问题而且机器不会疲惫会一直二等工作下去。在测试的时候一定要非常专注时刻关注着测试的结果一但发现异常及时进行修改最后测试完之后的文档应该保存下来方便以后测试时用到。系统测试的方法有很多对于本个人博客管理系统的测试我们使用了测试用得最多的黑盒测试方法来对该系统进行测试。
7.3 测试方案 对测试计划的把握是测试方案的重中之重。所有的技术难点应该都被包含在这个测试计划之中。而且我们要保证能与目标形成一致性以至于能够测试出一些主要存在的错误和一些错误的漏洞。可以完美解决这些问题就只有白盒测试或者黑盒测试[14]。
构造测试是白盒测试的另一个名字了解与分析程序的结构以及性能功用的从而我们可以得到最终想要的结果并且观察出是不是每一条程序都能得到。
性能测试是黑盒测试别称程序本身的运作通过程序的进程来观察主要是看一下程序是不是能够像我们预期的目标那样发展看一看我们的程序最终能不能完整的得到我们最后想要的功能和储存想得到的数据到最后看一下我们的这个程序完整性能不能达到要求。
1模块测试
单元测试就是模块测试顾名思义就是测试每个模块所承担的功能是否能够实现这个测试就是为了找出代码在实际的设计运转中某一些小的程序所出现的偏差很好地改正这些错误就说明我们模块测试进行很成功过。
2集成测试
集成测试就是对系统的测试以及对他子系统的一些性能测试他检查的事系统的包装程序信息。找出其中的问题。他的优势主要有以下这几点
软件耗费较少。
可以提前发现端口的错误。
更好的地位系统中错误的位置。
从底部往上面进行的方案针对于偏下层的结构而中间的结构就采用折中的方法。
3验收测试
终于到了结尾性的工作了。就是为了给用户看一下我们的系统功能是否达到了预期的效果。我采用了性能测试也就是黑盒测试对系统进行测试。
其结果是分别是
有一定的差异在用户的需求。
再者就是结果与之差不了多少。
到了最后了我们发现的问题都是与用户的需求存在一定的关联。
1、登录测试
测试点登录
测试的目标输入账号密码以及验证码后系统会自动进行验证是否正确。
所用的环境Windows10和IE浏览器。
输入信息用户名、密码。
步骤
1首先我们打来浏览器进入该系统的登录界面。
2在进入页面登录部分以后可以进行对用户名、密码进行测试具体测试输入情况如下表6.1所示。
表6.1 登录测试
序号用户名输入密码输入期望结果1155462192251244566提示“用户名或者密码错误或账号未经审核”2aaaaa123456提示“用户名或密码错误或者账号未经审核”315546219225hangguowei登陆成功
7.4 测试结论 实验室管理系统按设计要求基本都可以达到此系统具有完整的软件功能良好的用户界面能够正确的处理错误信息而且能够准确的提出错误的种类。但是系统测试时也出现了一些系统的不足和缺陷所以在今后的日子里我会对其视觉上的不足作出修改其次系统的代码和数据库出现了非常多的冗余现象都是因为对编程技术的应用不够熟练在日后我会加强自己的自身学习和能力减少这样的冗余现象。
经过对上述的测试结果分析本系统无论是在技术方面还是操作方面还是经济方面都是完全可以实行的并且经过测试该系统操作简单所有的功能都可以实现因此该系统可以满足人们的使用需求值得被推广。
总体说来软件通过测试。
第八章 结 论
本文研究了实验室管理系统的设计与实现在文章开端首先对个研究背景、研究现状和研究内容作了简单的介绍然后通过系统分析引申出本系统研究的主要内容。
通过对java语言、springboot框架和mysql数据库的简介系统的说明了在线学习交流平台的设计与实现的可行性本文结论及研究成果如下实现了java与mysql相结合构建的在线学习交流平台通过本次对实验室管理系统的设计与实现的研究与实现我感触到学习一门新技术最重要的是实践只有多动手才能尽快掌握它一个系统的开发经验是最重要的经验不足就难免会有许多考虑不周之处。要想吸引更多的用户系统的界面必须要美观、有特色、友好功能要健全。
由于在此之前对于java知识并不了解所以从一开始就碰到许多困难例如一开始的页面显示不规范、数据库连接有问题已经无法实现参数的传递等等不过通过我不断的查阅相关的资料以及向老师同学请教最后出现的所有的问题都得到了解决通过这次的系统开发我学到了很多的知识也明白了自己在哪些方面有不足的地方尤其是学会如何从大量的信息中筛选出所需有用的信息同时我更加深刻的体会到了虽然书本上的大部分知识都是有价值正确的但实际上每个人编程的思路和对数据处理的方法、思想都是不同的这就要求我们一定要通过实践才能找到解决问题的方案。在此次毕业设计活动中我不断的提高了自己也得到了宝贵的经验我相信这些对我以后的发展都会有很大帮助。
通过这次对实验室管理系统的开发让我学到了更多的知识同时通过这次系统的设计也让我明白了自己在哪方面有不足以后加以学习争取可以开发住更多有用的适用的系统软件本次系统的设计提高了我的编程水平为了我今后系统的开发打下了结实的基础。
参考文献 [1] 高永强.基于深度学习的个性化推荐研究[J].工业控制计算机,2021,34(10):90-92. [2] 张安淇,李元旭.互联网知识共享平台信息过载效应与弱化机制——基于知乎的案例研究[J]. 情报科学,2020,38(01):24-2941.DOI:10.13833/j.issn.1007-7634.2020.01.004. [3] Xiaoqin Shelley Zhang,Xiaojie Zhang,Pavan Kaparthi. Combat Information Overload Problem in Social Networks With Intelligent Information-Sharing and Response Mechanisms[J]. IEEE Transactions on Computational Social Systems,2020. [4] 刘馨蔚.“它经济”升温 宠物吸金强劲[J].中国对外贸易,2021(04):54-55. [5] 狗民网.2020 年中国宠物行业白皮书. [6] Lou Feng,Ning Xin. E-Commerce Recommendation Technology Based on Collaborative Filtering Algorithm and Mobile Cloud Computing[J]. Wireless Communications and Mobile Computing,2022,2022. [7] Goldberg D, Nichols D.A, Oki B.M, et al. Using collaborative filtering to weave an information tapestry[J]. Communications of The ACM, 1992, 35(12): 61-70. [8] Konstan J.A, Miller B.N, Maltz D.A, et al. GroupLens: Applying collaborative filtering to Usenet news[J]. Communications of The ACM, 1997, 40(3): 77-87. [9] Venture Beat [EB/OB]. htp:/venturebeat.comn/ [2009-04]. [10] He X, Deng K, Wang X, et al. LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation[C]. In ACM 2020. [11] Wang Hulong,Shen Zesheng,Jiang Shuzhen,Sun Guang,Zhang Ren Jie. User-based Collaborative Filtering Algorithm Design and Implementation[J]. Journal of Physics: Conference Series,2021,1757(1).0 [12] 邓园园吴美香,潘家辉.基于物品的改进协同过滤算法及应用[].计算机系统应用 2019,28(01):184-189. [13] Jena, Kalyan Kumar,Bhoi, Sourav Kumar,Mallick, Chittaranjan,Jena, Soumya Ranjan,Kumar, Raghvendra,Long, Hoang Viet,Son, Nguyen Thi Kim. Neural model based collaborative filtering for movie recommendation system[J]. International Journal of Information Technology,2022(prepublish). [14] Zhang Kaihan,Wang Zhiqiang,Liang Jiye,Zhao Xingwang. A Bayesian matrix factorization model for dynamic user embedding in recommender system[J]. Frontiers of Computer Science,2022,16(5). [15] 吴青洋,程旭,邓程鹏,丁浩轩,张宏,林胜海.基于聚类和奖惩用户模型的协同过滤算法[J].计 算机系统应用,2020,29(08):135-143.DOI:10.15888/j.cnki.csa.007491. [16] 陆文超,崔海朋.一种基于融合自编码与神经网络的协同过滤算法[J].中国水运(下半 月),2022,22(03):18-20. [17] 王宁,沈正一,崔德龙,刘晴瑞.结合协同过滤与隐语义模型的视频推荐策略[J].湖南工程学院 学报(自然科学版),2021,31(04):40-43.DOI:10.15987/j.cnki.hgbjbz.2021.04.007. [18] Thomas N. Kipf and Max Welling. Semi-Supervised Classification with Graph Convolutional Networks. In ICLR.2017 [19] 张术梅.MVC架构下网站的设计与实现思考[J].信息记录材 料,2022,23(01):92-94.DOI:10.16009/j.cnki.cn13-1295/tq.2022.01.036. [20] R.Karthik,T.S.Sridhar,R.Sriram. Digital Food ordering system based on Spring Framework[J]. International Journal of Recent Technology and Engineering (IJRTE),2020,8(6). [21] 曹华山.SSM 框架在 Web 应用开发中的设计与实现[J].无线互联科技,2021,18(11):108-109. [22] 胡世洋,赖森林.浅论SSM框架在构建“微农”信息服务中的应用[J].电脑知识与技 术,2021,17(34):4-6.DOI:10.14004/j.cnki.ckt.2021.3589. [23] Di Lu,Yuping Qiu,Chun Qian,Xi Wang,Wei Tan. Design of Campus Resource Sharing Platform based on SSM Framework[J]. IOP Conference Series: Materials Science and Engineering,2019,490(6). [24] Xiaojie Guo,Tingmei Wang*. Design and Implementation of Graduate Information Management System Based on SSM Framework[J]. Journal of Simulation,2020,8(2). [25] Feng Leijie,Mu Zehui. Research on Mobile Point Exchange System Based on Collaborative Filtering Recommendation Algorithm[J]. International Journal of Advanced Network, Monitoring and Controls,2021,6(2). [26] 赖佳星.基于Bootstrap和JavaScript技术设计与实现简易Web计算器[J].科技资 讯,2022,20(01):13-16.DOI:10.16661/j.cnki.1672-3791.2110-5042-2874. [27] Haokun Qi, Qingyang Feng , Junyan Zhang. Technology and analysis of JSP-based merchandising system[J]. Scientific Journal of Intelligent Systems Research,2022,4(2). [28] 周公平.基于jQuery框架的Web前端开发设计方法研究[J].信息与电脑(理论 版),2022,34(05):128-130. [29] Liu Hongqing,Liu Yan. Research on Personalized Blog Customization System Based on AJAX[C]//.Proceedings of 2018 5th International Conference on Electrical Electronics Engineering and Computer Science(ICEEECS 2018).,2018:136-139. [30] 朱克武.Ajax技术在就业网站用户信息管理中的应用[J].电脑知识与技 术,2021,17(33):9-11.DOI:10.14004/j.cnki.ckt.2021.3303.
致谢 在毕业设计的过程中通过对在线学习交流平台的设计我受益匪浅。在这段时间里大学四年所学的知识得到了综合的运用掌握了软件开发的基本方法了解了当今软件开发的一些新技术。
本设计是在A老师的悉心指导和热情帮助下完成的。无论在理论上还是在实践中老师都给予我很大的帮助每当遇到困难时老师总是耐心的给我讲解老师认真负责的工作态度让我敬佩。值此论文完成之际特别向指导老师表示衷心的感谢和崇高的敬意谢谢他细心而又耐心地辅导使得我得以顺利的完成毕业设计开发工作同时也要感谢其他帮助过我的老师和同学他们在我完成设计过程中给予我很大的帮助在此一并表示感谢。
在论文编写过程中虽然反复推敲核证但由于本人水平有限加上时间紧促本文一定有不少缺点和不足恳请各位老师给予帮助和指正。
------------------------------------------------------------------ 附一、论文参考 附二、其他案例