马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
博主介绍:硕士研究生,专注于信息化技术范畴开发与管理,会使用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?type=blog
Iteye博客: https://www.iteye.com/blog/user/mr-lili-1986-163-com
获取论文及源代码:请加w908925859
注:每个学校每个老师对论文的格式要求不一样,故本论文只供参考,本论文页数到达60页以上,字数在6000及以上。
基于SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue技术的在线在线商城系统计划与实现
成熟案例可以参考petsqi.cn网站里的手机APP
第一章 绪论
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应用中的频繁使用让它备受青睐,以至于厥后让它作为EJB(EnterpriseJavaBeans)模子的增补,甚至是替补。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-8
- port: 8080
- servlet:
- context-path: /springboot0t8ql
-
- spring:
- datasource:
- driverClassName: com.mysql.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/springboot0t8ql?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
- username: root
- password: 123456
-
- # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
- # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springboot0t8ql
- # username: sa
- # password: 123456
-
- servlet:
- multipart:
- max-file-size: 10MB
- max-request-size: 10MB
- resources:
- 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.entity
- global-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: -1
- logic-not-delete-value: 0
- #自定义SQL注入器
- sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
- configuration:
- map-underscore-to-camel-case: true
- cache-enabled: false
- call-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 BaseController<User, UserService> {
- /**
- * 服务对象
- */
- @Autowired
- public UserController(UserService service) {
- setService(service);
- }
-
- /**
- * Token服务
- */
- @Autowired
- private AccessTokenService tokenService;
-
- @Autowired
- private UserGroupService userGroupService;
-
- /**
- * 注册
- * @param user
- * @return
- */
- @PostMapping("register")
- public Map<String, Object> signUp(@RequestBody User user) {
- // 查询用户
- Map<String, String> query = new HashMap<>();
- query.put("username",user.getUsername());
- List list = service.select(query, new HashMap<>()).getResultList();
- if (list.size()>0){
- return error(30000, "用户已存在");
- }
- user.setUserId(null);
- user.setPassword(service.encryption(user.getPassword()));
- service.save(user);
- return success(1);
- }
-
- /**
- * 找回密码
- * @param form
- * @return
- */
- @PostMapping("forget_password")
- public Map<String, 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, "密码不能为空");
- }
-
- // 查询用户
- Map<String, 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 Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
- log.info("[执行登录接口]");
-
- String username = data.get("username");
- String email = data.get("email");
- String phone = data.get("phone");
- String password = data.get("password");
-
- List resultList = null;
- Map<String, String> map = new HashMap<>();
- if(username != null && "".equals(username) == false){
- map.put("username", username);
- resultList = service.select(map, new HashMap<>()).getResultList();
- }
- else if(email != null && "".equals(email) == false){
- map.put("email", email);
- resultList = service.select(map, new HashMap<>()).getResultList();
- }
- else if(phone != null && "".equals(phone) == false){
- map.put("phone", phone);
- resultList = service.select(map, new HashMap<>()).getResultList();
- }else{
- return error(30000, "账号或密码不能为空");
- }
- if (resultList == null || password == null) {
- return error(30000, "账号或密码不能为空");
- }
- //判断是否有这个用户
- if (resultList.size()<=0){
- return error(30000,"用户不存在");
- }
-
- User byUsername = (User) resultList.get(0);
-
-
- Map<String, String> groupMap = new HashMap<>();
- groupMap.put("name",byUsername.getUserGroup());
- List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
- if (groupList.size()<1){
- return error(30000,"用户组不存在");
- }
-
- UserGroup userGroup = (UserGroup) groupList.get(0);
-
- //查询用户审核状态
- if (!StringUtils.isEmpty(userGroup.getSourceTable())){
- String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
- String res = String.valueOf(service.runCountSql(sql).getSingleResult());
- if (res==null){
- return error(30000,"用户不存在");
- }
- if (!res.equals("已通过")){
- return error(30000,"该用户审核未通过");
- }
- }
-
- //查询用户状态
- if (byUsername.getState()!=1){
- return error(30000,"用户非可用状态,不能登录");
- }
-
- String md5password = service.encryption(password);
- if (byUsername.getPassword().equals(md5password)) {
- // 存储Token到数据库
- AccessToken accessToken = new AccessToken();
- accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
- accessToken.setUser_id(byUsername.getUserId());
- tokenService.save(accessToken);
-
- // 返回用户信息
- JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
- user.put("token", accessToken.getToken());
- JSONObject ret = new JSONObject();
- ret.put("obj",user);
- return success(ret);
- } else {
- return error(30000, "账号或密码不正确");
- }
- }
-
- /**
- * 修改密码
- * @param data
- * @param request
- * @return
- */
- @PostMapping("change_password")
- public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
- // 根据Token获取UserId
- String token = request.getHeader("x-auth-token");
- Integer userId = tokenGetUserId(token);
- // 根据UserId和旧密码获取用户
- Map<String, 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){
- // 修改密码
- Map<String,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 Map<String, Object> state(HttpServletRequest request) {
- JSONObject ret = new JSONObject();
- // 获取状态
- String token = request.getHeader("x-auth-token");
-
- // 根据登录态获取用户ID
- Integer userId = tokenGetUserId(token);
-
- log.info("[返回userId] {}",userId);
- if(userId == null || userId == 0){
- return error(10000,"用户未登录!");
- }
-
- // 根据用户ID获取用户
- Map<String,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 Map<String, Object> quit(HttpServletRequest request) {
- String token = request.getHeader("x-auth-token");
- JSONObject ret = new JSONObject();
- Map<String, 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);
- // 根据登录态获取用户ID
- if(token == null || "".equals(token)){
- return 0;
- }
- Map<String, 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")
- @Transactional
- public Map<String, Object> add(HttpServletRequest request) throws IOException {
- Map<String,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("iRet="+iRet);
- 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 登录测试
序号 | 用户名输入 | 暗码输入 | 渴望效果 | 1 | 15546219225 | 1244566 | 提示“用户名或者暗码错误,或账号未经考核” | 2 | aaaaa | 123456 | 提示“用户名或暗码错误,或者账号未经考核” | 3 | 15546219225 | hangguowei | 登岸成功 | 7.4 测试结论
在线学习交流平台按计划要求基本都可以到达,此系统具有完整的软件功能,良好的用户界面,能够精确的处理错误信息,而且能够正确的提出错误的种类。但是系统测试时也出现了一些系统的不敷和缺陷,所以在以后的日子里我会对其视觉上的不敷作出修改,其次系统的代码和数据库出现了非常多的冗余征象,都是因为对编程技术的应用不敷熟练,在日后我会加强自己的自身学习和本领,减少这样的冗余征象。
颠末对上述的测试效果分析,本系统无论是在技术方面,还是操作方面,还是经济方面都是完全可以实验的,并且颠末测试,该系统操作简朴,所有的功能都可以实现,因此该系统可以满足人们的使用需求,值得被推广。
总体说来,软件通过测试。
第八章 结 论
本文研究了在线学习交流平台系统的计划与实现,在文章开端首先对个研究配景、研究近况和研究内容作了简朴的介绍,然后通过系统分析,引申出本系统研究的主要内容。
通过对java语言、springboot框架和mysql数据库的简介,系统的说明了在线学习交流平台的计划与实现的可行性,本文结论及研究效果如下:实现了java与mysql相结合构建的在线学习交流平台,通过本次对在线学习交流平台的计划与实现的研究与实现,我感触到学习一门新技术,最重要的是实践,只有多动手才能尽快掌握它,一个系统的开发,经验是最重要的,经验不敷,就不免会有许多考虑不周之处。要想吸引更多的用户,系统的界面必须要美观、有特色、友爱,功能要健全。
由于在此之前对于java知识并不相识,所以从一开始就碰到许多困难,比方一开始的页面体现不规范、数据库连接有问题已经无法实现参数的转达等等,不过通过我不绝的查阅干系的资料,以及向老师同学讨教,末了出现的所有的问题都得到相识决,通过这次的系统开发,我学到了很多的知识,也明白了自己在哪些方面有不敷的地方,尤其是学会如何从大量的信息中筛选出所需有用的信息,同时我更加深刻的体会到了,虽然册本上的大部分知识都是有代价,精确的,但现实上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们肯定要通过实践才能找到解决问题的方案。在此次毕业计划运动中,我不绝的提高了自己,也得到了宝贵的经验,我相信这些对我以后的发展都会有很大资助。
通过这次对在线学习交流平台的开发,让我学到了更多的知识,同时通过这次系统的计划也让我明白了自己在哪方面有不敷,以后加以学习争取可以开发住更多有用的适用的系统软件,本次系统的计划提高了我的编程水平,为了我以后系统的开发打下了坚固的基础。
参考文献
[1] 高永强.基于深度学习的个性化推荐研究[J].工业控制计算机,2021,34(10):90-92.
[2] 张安淇,李元旭.互联网知识共享平台信息过载效应与弱化机制——基于知乎的案例研究[J].
谍报科学,2020,38(01):24-29+41.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老师的悉心指导和热情资助下完成的。无论在理论上还是在实践中,老师都给予我很大的资助,每当碰到困难时,老师总是耐心的给我解说,老师认真负责的工作态度,让我敬佩。值此论文完成之际,特别向指导老师表示衷心的感谢和崇高的敬意,谢谢他仔细而又耐心地辅导,使得我得以顺遂的完成毕业计划开发工作,同时也要感谢其他资助过我的老师和同学,他们在我完成计划过程中给予我很大的资助,在此一并表示感谢。
在论文编写过程中,虽然反复推敲核证,但由于本人水平有限,加上时间紧促,本文肯定有不少缺点和不敷,恳请各位老师给予资助和指正。
------------------------------------------------------------------
附一、论文参考:
附二、其他案例:
附三、源码获取:
各人点赞、收藏、关注、批评啦 、查看 |