个人淘宝客网站备案,营销型网站建设实战感想,怎么制作钓鱼网站,个人网站建什么类型的博主介绍#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 获取论文及源代码请加w908925859 注每个学校每个老师对论文的格式要求不一样故本论文只供参考本论文页数达到60页以上字数在10000及以上。
下面为一个论文1W字以上的论文模板修改内容就可以变成自己的基本论文技术势力可以查看petsqi.cn该平台两个网站一个app
基于JavaSpringMvcVue技术的在线学习交流平台设计与实现 第一章 绪论
1.1 研究背景 在线学习平台为广大学习者提供了便捷、灵活的学习方式涵盖了从基础教育到高等教育的各个阶段以及职业技能、兴趣爱好等多个领域。 随着信息技术与互联网的快速发展人们对教育方式和学习方式的需求不断提升越来越多的人倾向于利用碎片时间进行在线学习。 据数据显示在线教育用户规模持续增长。例如有数据显示2018年在线教育用户已达到1.07亿人占互联网用户总量的34.9%而到了更近的时期用户规模更是达到了数亿人。 除了传统的学术课程外职业培训、兴趣爱好等领域的课程需求也在不断增加为在线教育平台提供了广阔的发展空间。 自2010年以来中国政府多次出台相关政策支持在线教育的发展。例如《国家中长期教育改革和发展规划纲要(2010-2020年)》中明确提出要加强教育信息化建设推动信息技术与教育教学的深度融合。如教育部等五部门联合下发的《构建利用信息化手段扩大优质教育资源覆盖面有效机制的实施方案》以及《关于促进在线教育健康发展的指导意见》等文件均对在线教育的发展提出了明确要求和支持措施。这些政策的实施有效推动了在线教育平台的建设和发展。
1.2 研究现状
一、市场需求与用户规模 1、用户规模持续增长近年来随着互联网技术的普及和在线教育市场的快速发展在线学习交流平台的用户规模持续增长。大量用户选择在线学习作为获取知识、提升技能的主要途径。 2、学习需求多样化用户的学习需求不再局限于传统的学术课程而是涵盖了职业培训、兴趣爱好、语言学习等多个领域。这种多样化的学习需求促使在线学习交流平台不断丰富课程资源提供更加个性化的学习服务。
二、挑战与机遇并存 1、技术安全与隐私保护在线交流平台面临着技术安全和隐私保护的挑战。平台需要采取有效的技术手段和措施来保障用户数据的安全和隐私防止信息泄露和滥用。
2、内容监管与合规性随着法律法规的不断完善在线交流平台需要加强对用户发布内容的监管和审核确保平台内容的合法性和合规性。同时平台还需要积极响应政府部门的监管要求履行社会责任。
3、发展机遇广阔尽管面临诸多挑战但在线交流平台仍然具有广阔的发展机遇。随着5G、物联网等新技术的普及和应用在线交流平台将迎来更多的创新和发展机会。同时随着全球化和数字化的加速推进在线交流平台将成为连接不同国家和地区、促进文化交流和经济合作的重要桥梁。
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评论审核管理模块对评论进行手动或自动过滤审核功能。当设置为自动审核时平台对敏感词进行做加*处理。
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浏览器进行访问和操作。系统包括前台和后台两个主要部分
1、交流网站为大家提供用户学习、交流界面实现文章搜索、查看、评论交流、点赞、打赏等功能。
2、后台为管理员提供管理界面实现用户管理、文章管理、评论管理、数据统计等功能。。
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.1.1用户登录注册模块
用户填写登录信息进行登录 5.1. 用户中心 5.2后台管理 第六章 部分代码实现
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 部分数据库代码 第七章 系统测试 一个系统设计好后就会进入测试阶段测试的目标是检验设计好的网站是否可以正常无误的运行尽可能的发现网站的问题已使后期网站投入使用后网站尽少出错。
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老师的悉心指导和热情帮助下完成的。无论在理论上还是在实践中老师都给予我很大的帮助每当遇到困难时老师总是耐心的给我讲解老师认真负责的工作态度让我敬佩。值此论文完成之际特别向指导老师表示衷心的感谢和崇高的敬意谢谢他细心而又耐心地辅导使得我得以顺利的完成毕业设计开发工作同时也要感谢其他帮助过我的老师和同学他们在我完成设计过程中给予我很大的帮助在此一并表示感谢。
在论文编写过程中虽然反复推敲核证但由于本人水平有限加上时间紧促本文一定有不少缺点和不足恳请各位老师给予帮助和指正。
------------------------------------------------------------------ 附一、论文参考 附二、其他案例 附三、源码获取
大家点赞、收藏、关注、评论啦 、查看获取联系方式 打卡 文章 更新 308/ 365天 精彩专栏推荐订阅在下方专栏
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》