关键词排名点击/西安seo招聘
@TOC
springboot207基于springboot的实习管理系统
绪论
1.1研究背景与意义
信息化管理模式是将行业中的工作流程由人工服务,逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速,使用起来非常简单容易,用户甚至不用掌握相关的专业知识,根据教程指导即可正常使用相关的系统,因而被越来越多的用户所使用。由于相关行业管理信息化,这就使得管理工作不在受到时间和区域的限制,随时随地即可完成相关的工作任务和结果[1]。就目前而言,管理信息化在现代社会中非常流行,使用比较广泛。早在20世纪70年代末,就出现了早期的电子商务,相关的公司企业使用计算机建立专用的内部网络,通过内部网络完成相应的采购、销售等活动,加快相关的企业之间的交易速度,提高了工作效率[2]。
当下,许多行业采用互联网技术将工作流程信息化、数字化,提高了相关人员的服务质量和效率,节约了相关行业的人力、财力、物力等资源,与此同时,人们获取外界的相关信息主要依赖于主流的信息化技术和工具。人们对生活的需求也在不断的发生着变化,为了应对用户的多样化需求,许多相关的第三产业应运而生,管理信息化也逐渐的流行起来,比如电子商务行业。本人通过查询大量学习资料,了解基本的开发系统的基本背景和关键任务,学习与掌握Java语言、web技术、AJAX技术、HTML语言等开发技术,设计系统功能模块,以及MySQL数据库的相关语法和工具,创建和存储数据表格,反映和关联表格之间相互存在的关系,由此对实习管理系统进行研发和实现。
1.2国内外研究现状
大概在20世纪90年代,我国才开始研发实习管理系统,与一些发达国家相比,系统研发起步比较晚。当时的计算机技术刚开始发展起来,国家经济力量比较薄弱,各地区的经济发展水平不平衡,再加上相关的网络应用技术不太先进,我国也使用了一段较长的时间对网络信息化管理进行探索[3]。近些年,因为国家非常重视和支持第三产业的发展,以及人们的日常生活需求越来越离不开信息管理技术的使用,所以我国的信息管理系统行业发展速度非常快,并且相关的体制法规也正在不断地被完善和改进。新时代背景下,根据人们的相关需求,不断地促进着相关产业的产生与发展,一系列电子产品、应用软件、信息管理系统等新时代的产物逐渐出现在人们的视野中,并且在近几年发展迅速,日渐趋于成熟[4]。
与国内相比,国外实习管理系统领域发展较早。国外的计算机技术发展比较成熟,所以系统相关的设计也比较完善。19世纪60年代左右,国外就开始研发实习管理系统,并且不久之后,迅速将其投入市场进行使用。美国、英国等一些发达国家快速发展计算机技术,促进了实习管理系统管理行业信息化建设[5]。而后随着相关的技术不断地发展,覆盖面非常广泛,应用领域比较多,促进着实习管理系统等相关的信息管理系统不断地发展和完善,并且其所设计的系统功能结构也比较合理、全面。相对而言,国外系统的研发在相关领域上还是占据着较大的优势[6]。因此,我们需要吸收国外系统开发领域中的较好的技术精华,发展我国的信息化管理系统,使得其面向大众,能够更好的、更全面的服务于相关的工作人员。
1.3研究内容
现今,互联网在我们的日常生活占据着日益重要的地位,我们也越来越离不开对移动设备、电脑等上网设备的使用。传统的实习管理系统模式主要依靠管理人员纯手工记录的相关信息,比较繁琐,不方便查找,也非常容易出现错误。如今,如果再通过手工记录实习,将大大不利于实习管理系统行业管理相关的实习管理系统信息,严重影响实习管理系统行业的发展。因此,本人结合传统的实习管理系统业务模式和先进的电子信息管理模式,使用Java语言编程设计功能模块,AJAX实现前台和后台之间的交互,MySQL数据库创建和存储数据表格,对实习管理系统进行设计和开发。本系统的设计有利于相关行业实现最大化的资源管理与共享,促进相关行业的信息交流、分工合作,提高相关工作人员的工作效率,最终实现整个实习管理系统行业服务的信息化管理。
1.4论文结构
本文围绕着实习管理系统的整个开发过程,展开了详细的描述和说明,设计和实现本系统的主要工作有:首先分析研究背景、研究状态,其次介绍设计系统时使用到的相关技术,然后通过系统分析确定系统的功能需求,接着通过编码工作详细设计和实现系统,最后再通过系统测试,找出系统存在的问题和解决问题的方法,不断地修改和完善系统。论文内容的组织结构设计如下。
第一章绪论,通过介绍本系统的研究背景、研究现状等内容,帮助用户了解和认识本系统的发展过程。
第二章相关技术介绍,主要介绍了Java语言、B/S模式、MySQL数据库等相关的开发技术,为后期系统的功能实现提供技术上的支持。
第三章系统分析,分析用户的使用需求,以及系统实现的可行性,最后通过用例建模分析与系统相关的参与者及其用例之间的关系。
第四章系统设计,主要根据系统总体功能设计,确定将要设计的系统功能模块,设计相关的数据表格。
第五章系统实现,通过相关的功能模块运行图,展现出系统的主要功能模块操作流程。
第六章系统测试,主要使用功能测试的方式,测试系统的相关功能运行和使用的具体情况。
第七章总结与展望,通过本文的各章节描述总结得出,基本上完成了系统的设计,展望未来将学习和使用更加先进的技术,提高系统的实用性,使得系统更好的服务于使用人员。
1.5本章小结
本章主要介绍了课题的研究背景与意义,研究现状,研究内容等内容,最后介绍了本论文的组织结构设计。信息化管理模式顺应了信息化时代的变化,本人以现在主流的管理模式为前提,根据使用者的相关需求,设计出一款符合大众需求的实习管理系统。
2理论基础
2.1 B/S模式
B/S模式(Browser/Server)是一种比较常用的网络结构模式[7]。B/S模式是由模型、视图、控制器(Model-View-Controller,MVC)结构组成[8]。模型主要是指业务模型,视图主要是指用户界面,控制器主要是控制保证视图和模型的同步执行。B/S模式的三层结构是相互独立的,换句话说,当某一个模块发生修改和更新,其不会对其他模块产生影响。根据B/S的这一特点,可以将对业务逻辑的处理以及约束条件集中到中间层中,便于前端增加对模型和方法的调用和复用。并且可以直接通过中间层对数据库进行相关的操作处理,大大减少了数据库的连接数,节省了计算机的对相关的资源配置空间。
使用B/S模式可以节省系统资源配置,提高研发工作效率,减少开发时间,因而大大提高了我们开发软件的可能性。B/S模式有针对性的改变了传统的客户端/服务器模式(Client/Server,C/S模式),也可以说这是对C/S模式进行了扩展。在这种结构模式中,用户不用再向使用C/S模式一样,下载客户端,其可以直接通过使用浏览器的方式,打开网站地址,即可访问和使用相关的系统功能服务。
2.2 IDEA开发环境
软件开发使用的编程语言有许多种,而每种编程语言需要通过与其相对应的开发平台进行编译和运行。IDEA平台都是目前比较常用的开发环境。IDEA平台是开源的,具有功能强大、可扩展性强等特点,可以应用于C/S模式软件的开发,但是它所占据的内存容量比较大,运行较慢,并且其并未提供Tomcat服务器,运行过程中需要将代码发布到Tomcat服务器中,测试使用的时间较长,故而不太适用于B/S模式软件的开发。
IDEA平台是建立在IDEA平台的基础之上,增加了许多的应用插件,比如Tomcat插件、mail组件等。IDEA平台增加了Tomcat插件,代码编写完成或者更新完成时,程序员无需将代码发布到Tomcat服务器中,可以直接通过调试实现程序的运行。IDEA平台增加了Mail组件,该组件可以为本程序提供标准的邮件方法,便于开发人员完成与邮件功能相关的编译工作。IDEA平台占据的内存空间较小,同时其也具有较高的可扩展性,编程人员可以根据需要添加和使用相关的插件。可以支持主流的开源产品和相关的开发框架,被广泛运用到相关的移动系统、web应用系统等开发中。相比于IDEA平台,本系统比较适合使用IDEA平台进行编程和开发。
2.3 MySQL数据库
MySQL是一种小型的关系型数据库管理系统,因为其运行速度快,占用内存空间小,并且源代码也是开源的,运行和维护成本低,系统性能稳定,受到了许多开发人员的喜爱[9]。考虑到MySQL数据库开发成本低,功能齐全等因素,大多中小型网站选择使用MySQL数据库管理数据信息。
SQL Server也是近几年使用较多的关系型数据库,其与MySQL数据库存在的不同之处主要有,在环境方面,SQL Server数据库比较适合于.NET环境,而MySQL数据库适用于几乎所有的语言;在成本方面,SQL Server数据库是商业化的,其运行多个数据库可许证,虽然有一个免费版,但是只能让你对关系型数据库管理系统有一定的认识与了解,熟悉相关的使用流程。如果要想使用SQL Server数据库的话,就需要支付相关费用,而MySQL数据库是开源的,其对于用户来说,使用是完全免费;在实际应用方面,SQL Server数据库和MySQL数据库均支持Java语言、PHP语言、C++语言等多种编程语言,但是MySQL数据库除了支持上述SQL Server数据库能支持的编程语言外,还支持Scheme、Eiffel等其他编程语言,故而MySQL数据库受欢迎程度比SQL Server数据库更高。
2.4 Java语言
Java语言是一种面向对象的编程语言,其主要具有继承、封装、多态等特征,从而提高编程工作效率,实现软件的设计和开发[10]。继承机制可以继承相关的类和方法,新的类可以在继承已经定义的类的相关特性基础上,扩展自己新的数据和功能,进而提高自身的能力。封装机制可以提高程序的安全性,其隐藏对象的相关属性和行为,对外只提供一个接口,用户直接通过访问相应的接口来实现自己需要的功能操作。多态机制可以描述对象的多样性,简单的来说就是引用相同的对象做不同的事务。Java语言具有安全高效的优点,并且其通过依靠Java虚拟机,可以实现跨平台操作[11]。Java语言比较容易学习和掌握,就目前软件开发所使用的开发类语言而言,Java语言比较受程序员喜爱,应用比较广泛。
2.5本章小结
本章主要介绍了实现实习管理系统的相关理论基础以及开发工具。本系统采用B/S模式,使用Java语言、AJAX技术、MySQL数据库等工具,设计系统功能、页面布局、后台数据等。开发本系统所使用的相关技术操作简单、容易掌握,Java语言具有跨平台性,可以支持在不同的浏览器使用本系统,MySQL数据库是开源的,减少了本系统的开发成本。
3需求分析
3.1功能需求分析
需求分析过程是系统能否成功投入市场,也能否被用户所接受和使用的非常关键的一个步骤。功能需求分析是通过设计系统功能来实现相关的业务事项,详细分析用户的实际需要,确定需要设计的相关业务事项,其是系统实现的关键,本系统存在的主要功能需求包括用户注册管理、用户信息管理、客房信息管理等。
3.2技术需求分析
本系统需要使用Java语言编码设计相关的功能模块,MySQL数据库创建和存储数据表格,AJAX实现前台和后台之间的交互,并且需要在IDEA开发环境中,编写相关的Java代码等系统程序文件,使用MySQL数据库存储数据信息,然后通过使用连接代码完成与MySQL数据库的搭建工作,再通过使用开发环境中的Tomcat插件,完成与Tomcat服务器的发布工作,最后通过与Tomcat服务器的交互行为可以实现代码调试工作。满足以上相关的技术需求,本系统才可以在浏览器上进行访问和使用。
3.3数据需求分析
在设计系统功能模块时,需要收集与系统有关的数据信息,并且对采集的数据信息进行组织和存储,分析系统功能设计,筛选有价值的数据,而后形成数据字典。其中,从庞大的数据信息中筛选出有价值的数据是比较耗时,也是非常重要的一步,主要依据信息的来源、信息的有效性、信息的扩充性、信息的真实性等内容筛选数据。数据需求分析阶段,为系统的开发工作做好进一步准备,便于更好的设计和完成系统。
3.4安全需求分析
安全需求分析是在系统使用过程中对性能的具体要求,对功能需求的一个补充内容,也是对功能需求的一个补充内容,主要包括响应需求、安全性需求、稳定性需求、可扩展性需求等内容。安全需求是在系统功能需求以外的其他必要的需求内容,其不论在系统设计过程,还是在系统投入市场过程,都起到了极其重要的作用。
3.5可行性分析
3.5.1经济可行性
经济可行性是决定是否研发系统的关键性因素。我们主要通过比较实际的收益和成本的方法,来确定一个系统是否具有经济可行性。在使用系统的过程中,当获得的收益大于开发的成本时,说明此系统的研发在经济上是可行的。由于本系统的开发使用的技术基本上是开源的,获得技术上的支持是没有多少问题的,在软件实现方面所花费的成本是很低的,甚至不需要花费成本。研发系统的成本主要是来自调研、硬件和技术人员等方面。如果系统中需要存储的数据量不是很大,仅需要配置一台普通的服务器,即可满足相关需求。如果需要存储的数据量很大,则需要配置一台具有独立功能的服务器,比如管理数据库需要单独的数据库服务器,负责接入网站需要web服务器等等,但是一台服务器的价格是比较贵的。考虑到数据量和成本,我们使用小型集群服务器,这样既可以充分利用相关的资源,又可以让系统正常访问服务器。
3.5.2技术可行性
Java语言具有跨平台性,本系统主要通过Java语言进行编码实现的,所以本系统可以支持在多个操作系统或者多个浏览器上运行和使用[14]。MySQL数据库是可以被免费使用的,并且MySQL数据库的日常运行和维护工作比较简单,这样有利于降低本系统的开发成本[15]。在学校期间,本人已经学习和掌握了Java语言、MySQL数据库、AJAX技术等相关的技术相关知识以及用法,因此在技术可行性方面,本系统是可以实现被设计与实现的。
3.5.3操作可行性
本系统所采用网络结构是B/S模式,对于开发人员来说,可以直接复用相关的代码,或者稍微对原代码进行修改,使得其满足于本系统的相关需求,如此便可大大节约了开发时间,在最优最短的时间内完成对系统的设计。对于用户来说,在传统的模式下,需要下载客户端才可使用系统。现在,在新型的模式下,使用本系统,就不需要下载,直接选择浏览器打开网址,即可访问和使用本系统。并且,用户可以根据自身的工作需要,选择相关的菜单按钮操作本系统。在系统的一些功能模块中,本人还添加了相关的使用提示信息,方便用户更好更快的了解和使用本系统。因此,本系统的设计和实现是具备操作可行性的。
3.6本章小结
需求分析在软件开发周期中是耗时最长的一个环节,系统的整个设计和实现过程主要依赖于需求分析报告。调查收集出不同用户对本系统的相关使用需求,由此设计相关的功能模块,从而期望实现用户满意度较高的实用型系统。本章主要从功能需求、技术需求、数据需求、安全需求、可行性分析等方面,对系统进行需求分析,确保设计出一款实用价值比较高的管理系统。
4系统设计
4.1系统功能设计
本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布新闻等功能,系统总体功能设计图如图4-1所示。
实习管理系统
系统设置管理
公告管理
学生管理
老师管理
实习管理
个人信息设置
密码信息设置管理
实习添加
实习删除
实习修改管理
学生添加
学生删除
老师添加
老师修改
老师删除
公告添加
公告修改
公告删除
图4-1系统总体功能设计图
4.2 数据库设计
开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合,存储在一起的这些数据也是按照一定的组织方式进行的。目前,数据库能够服务于多种应用程序,则是源于它存储方式最佳,具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务,但它与程序之间也可以保持较高的独立性。总而言之,数据库经历了很长一段时间的发展,从最初的不为人知,到现在的人尽皆知,其相关技术也越发成熟,同时也拥有着坚实的理论基础。
4.2.1 数据库概念设计
这部分内容需要借助数据库关系图来完成,也需要使用专门绘制数据库关系图的工具,比如Visio工具就可以设计E-R图(数据库关系图)。设计数据库,也需要按照设计的流程进行,首先还是要根据需求完成实体的确定,分析实体具有的特征,还有对实体间的关联关系进行确定。最后才是使用E-R模型的表示方法,绘制本系统的E-R图。不管是使用亿图软件,还是Visio工具,对于E-R模型的表示符号都一样,通常矩形代表实体,实体间存在的关系用菱形符号表示,实体的属性也就是实体的特征用符号椭圆表示。最后使用直线将矩形,菱形和椭圆等符号连接起来。接下来就开始对本系统的E-R图进行绘制。
(1)下图是实习分享留言实体和其具备的属性。
图4.1 实习分享留言实体属性图
(2)下图是实习成绩实体和其具备的属性。
图4.2 实习成绩实体属性图
(3)下图是老师实体和其具备的属性。
图4.3 老师实体属性图
(4)下图是实习实体和其具备的属性。
图4.4 实习实体属性图
(5)下图是实习周报实体和其具备的属性。
图4.5 实习周报实体属性图
(6)下图是实习分享收藏实体和其具备的属性。
图4.6 实习分享收藏实体属性图
(7)下图是论坛实体和其具备的属性。
图4.7 论坛实体属性图
(8)下图是实习分享实体和其具备的属性。
图4.8 实习分享实体属性图
(9)下图是学生实体和其具备的属性。
图4.9 学生实体属性图
(10)下图是公告实体和其具备的属性。
图4.10 公告实体属性图
4.2.2逻辑设计
本系统使用MySQL数据库管理与系统相关的数据信息。逻辑设计阶段是将上一个阶段中的概念数据模型,转换为方便数据库进行存储的关系模型,即基本表的形式,方便开发人员后期对数据模型进行优化和管理[20]。逻辑设计阶段是整个数据库设计设计的关键,与系统有关的信息将会在这一阶段中被存储在数据库中,当用户使用本系统进行相关的功能操作时,与之有关的数据信息所在的基本表会发生相应的更新变化。数据库的逻辑设计阶段主要任务是将与系统相关的数据信息,设计成为方便数据库存储和管理的基本表格的形式,具体内容如下。
表4.1字典表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | dic_code | String | 字段 | 是 |
3 | dic_name | String | 字段名 | 是 |
4 | code_index | Integer | 编码 | 是 |
5 | index_name | String | 编码名字 | 是 |
6 | super_id | Integer | 父字段id | 是 |
7 | beizhu | String | 备注 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.2论坛表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | forum_name | String | 帖子标题 | 是 |
3 | xuesheng_id | Integer | 学生 | 是 |
4 | laoshi_id | Integer | 老师 | 是 |
5 | users_id | Integer | 管理员 | 是 |
6 | forum_content | String | 发布内容 | 是 |
7 | super_ids | Integer | 父id | 是 |
8 | forum_types | Integer | 帖子类型 | 是 |
9 | forum_state_types | Integer | 帖子状态 | 是 |
10 | insert_time | Date | 发帖时间 | 是 |
11 | update_time | Date | 修改时间 | 是 |
12 | create_time | Date | 创建时间 | 是 |
表4.3公告表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | gonggao_name | String | 公告名称 | 是 |
3 | gonggao_photo | String | 公告图片 | 是 |
4 | gonggao_types | Integer | 公告类型 | 是 |
5 | insert_time | Date | 公告发布时间 | 是 |
6 | gonggao_content | String | 公告详情 | 是 |
7 | create_time | Date | 创建时间 | 是 |
表4.4老师表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | laoshi_name | String | 老师姓名 | 是 |
3 | laoshi_phone | String | 老师手机号 | 是 |
4 | laoshi_id_number | String | 老师身份证号 | 是 |
5 | laoshi_photo | String | 老师头像 | 是 |
6 | laoshi_email | String | 电子邮箱 | 是 |
7 | create_time | Date | 创建时间 | 是 |
表4.5实习表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | xuesheng_id | Integer | 学生 | 是 |
3 | shixi_uuid_number | String | 实习编号 | 是 |
4 | shixi_name | String | 单位名称 | 是 |
5 | shixi_address | String | 单位地址 | 是 |
6 | shixi_types | Integer | 单位性质 | 是 |
7 | shixi_gangwei | String | 实习岗位 | 是 |
8 | kaishi_time | Date | 实习开始时间 | 是 |
9 | jieshu_time | Date | 实习结束时间 | 是 |
10 | shixi_content | String | 实习详情 | 是 |
11 | shixi_yesno_types | Integer | 审核状态 | 是 |
12 | shixi_yesno_text | String | 审核意见 | 是 |
13 | unpdate_time | Date | 审核时间 | 是 |
14 | insert_time | Date | 录入时间 | 是 |
15 | create_time | Date | 创建时间 | 是 |
表4.6实习成绩表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | shixi_id | Integer | 实习 | 是 |
3 | xuesheng_id | Integer | 学生 | 是 |
4 | shixi_chengji_uuid_number | String | 成绩编号 | 是 |
5 | shixi_chengji_types | Integer | 成绩结果 | 是 |
6 | fenshu | BigDecimal | 成绩分数 | 是 |
7 | shixi_chengji_yesno_text | String | 实习评语 | 是 |
8 | insert_time | Date | 录入时间 | 是 |
9 | create_time | Date | 创建时间 | 是 |
表4.7实习分享表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | xuesheng_id | Integer | 学生 | 是 |
3 | shixi_fenxiang_name | String | 分享标题 | 是 |
4 | shixi_fenxiang_photo | String | 分享照片 | 是 |
5 | shixi_fenxiang_types | Integer | 分享类型 | 是 |
6 | shixi_fenxiang_clicknum | Integer | 热度 | 是 |
7 | shixi_fenxiang_content | String | 分享内容 | 是 |
8 | shixi_fenxiang_delete | Integer | 逻辑删除 | 是 |
9 | create_time | Date | 创建时间 | 是 |
表4.8实习分享收藏表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | shixi_fenxiang_id | Integer | 实习分享 | 是 |
3 | xuesheng_id | Integer | 学生 | 是 |
4 | shixi_fenxiang_collection_types | Integer | 类型 | 是 |
5 | insert_time | Date | 收藏时间 | 是 |
6 | create_time | Date | 创建时间 | 是 |
表4.9实习分享留言表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | shixi_fenxiang_id | Integer | 实习分享 | 是 |
3 | xuesheng_id | Integer | 学生 | 是 |
4 | shixi_fenxiang_liuyan_text | String | 留言内容 | 是 |
5 | insert_time | Date | 留言时间 | 是 |
6 | reply_text | String | 回复内容 | 是 |
7 | update_time | Date | 回复时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.10实习周报表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | xuesheng_id | Integer | 学生 | 是 |
3 | shixi_id | Integer | 实习 | 是 |
4 | shixi_zhoubao_uuid_number | String | 实习周报编号 | 是 |
5 | shixi_zhoubao_name | String | 周报标题 | 是 |
6 | shixi_zhoubao_types | Integer | 第几周 | 是 |
7 | shixi_zhoubao_content | String | 实习周报详情 | 是 |
8 | insert_time | Date | 录入时间 | 是 |
9 | create_time | Date | 创建时间 | 是 |
表4.11学生表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | xuesheng_uuid_number | String | 学号 | 是 |
3 | xuesheng_name | String | 学生姓名 | 是 |
4 | xuesheng_phone | String | 学生手机号 | 是 |
5 | xuesheng_id_number | String | 学生身份证号 | 是 |
6 | xuesheng_photo | String | 学生头像 | 是 |
7 | yuanxi_types | Integer | 院系 | 是 |
8 | banji_types | Integer | 班级 | 是 |
9 | xuesheng_email | String | 电子邮箱 | 是 |
10 | create_time | Date | 创建时间 | 是 |
表4.12管理员表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | username | String | 用户名 | 是 |
3 | password | String | 密码 | 是 |
4 | role | String | 角色 | 是 |
5 | addtime | Date | 新增时间 | 是 |
4.3本章小结
本章主要介绍了系统功能设计、数据库设计等内容。通过设计系统的总体功能框架,确定系统的功能设计主要包括实习等模块。数据库设计主要分为概念设计阶段和逻辑设计阶段,其中,概念设计是将现实世界中的数据转变为信息世界中的概念模型,逻辑设计是将概念设计中的概念模型转变成可以被数据库存储的数据表格。系统功能设计好坏是系统得以被编码实现的重要依据。数据库设计是否符合规范,是系统能够成功运行的基本保障,也是用户和系统实现交互处理的重要前提。
5系统实现
5.1管理员功能模块实现
5.1.1管理员登录
管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限,管理员登录界面设计如图5-1所示。
图5-1管理员登录界面
5.1.2实习管理
管理员可以通过选择实习管理,管理相关的实习信息记录,比如进行查看实习信息标题,修改实习信息来源等操作,实习管理界面设计如图5-2所示。
图5-2实习管理界面
5.1.3公告管理
管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作,公告管理界面如图5-3所示。
图5-3 公告管理界面
5.1.4公告类型管理
管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作,公告类型管理界面设计如图5-4所示。
图5-4会员管理界面
系
TokenServiceImpl.java
package com.service.impl;import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;import org.springframework.stereotype.Service;import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.TokenDao;
import com.entity.TokenEntity;
import com.entity.TokenEntity;
import com.service.TokenService;
import com.utils.CommonUtil;
import com.utils.PageUtils;
import com.utils.Query;/*** token* @author*/
@Service("tokenService")
public class TokenServiceImpl extends ServiceImpl<TokenDao, TokenEntity> implements TokenService {@Overridepublic PageUtils queryPage(Map<String, Object> params) {Page<TokenEntity> page = this.selectPage(new Query<TokenEntity>(params).getPage(),new EntityWrapper<TokenEntity>());return new PageUtils(page);}@Overridepublic List<TokenEntity> selectListView(Wrapper<TokenEntity> wrapper) {return baseMapper.selectListView(wrapper);}@Overridepublic PageUtils queryPage(Map<String, Object> params,Wrapper<TokenEntity> wrapper) {Page<TokenEntity> page =new Query<TokenEntity>(params).getPage();page.setRecords(baseMapper.selectListView(page,wrapper));PageUtils pageUtil = new PageUtils(page);return pageUtil;}@Overridepublic String generateToken(Integer userid,String username, String tableName, String role) {TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));String token = CommonUtil.getRandomString(32);Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.HOUR_OF_DAY, 1);if(tokenEntity!=null) {tokenEntity.setToken(token);tokenEntity.setExpiratedtime(cal.getTime());this.updateById(tokenEntity);} else {this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));}return token;}@Overridepublic TokenEntity getTokenEntity(String token) {TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("token", token));if(tokenEntity == null || tokenEntity.getExpiratedtime().getTime()<new Date().getTime()) {return null;}return tokenEntity;}
}
ShixiController.java
package com.controller;import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;/*** 实习* 后端接口* @author* @email
*/
@RestController
@Controller
@RequestMapping("/shixi")
public class ShixiController {private static final Logger logger = LoggerFactory.getLogger(ShixiController.class);@Autowiredprivate ShixiService shixiService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//级联表service@Autowiredprivate XueshengService xueshengService;@Autowiredprivate LaoshiService laoshiService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("学生".equals(role))params.put("xueshengId",request.getSession().getAttribute("userId"));else if("老师".equals(role))params.put("laoshiId",request.getSession().getAttribute("userId"));if(params.get("orderBy")==null || params.get("orderBy")==""){params.put("orderBy","id");}PageUtils page = shixiService.queryPage(params);//字典表数据转换List<ShixiView> list =(List<ShixiView>)page.getList();for(ShixiView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put("data", page);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);ShixiEntity shixi = shixiService.selectById(id);if(shixi !=null){//entity转viewShixiView view = new ShixiView();BeanUtils.copyProperties( shixi , view );//把实体数据重构到view中//级联表XueshengEntity xuesheng = xueshengService.selectById(shixi.getXueshengId());if(xuesheng != null){BeanUtils.copyProperties( xuesheng , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段view.setXueshengId(xuesheng.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody ShixiEntity shixi, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,shixi:{}",this.getClass().getName(),shixi.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");else if("学生".equals(role))shixi.setXueshengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));Wrapper<ShixiEntity> queryWrapper = new EntityWrapper<ShixiEntity>().eq("xuesheng_id", shixi.getXueshengId());logger.info("sql语句:"+queryWrapper.getSqlSegment());ShixiEntity shixiEntity = shixiService.selectOne(queryWrapper);if(shixiEntity==null){shixi.setShixiYesnoTypes(1);shixi.setInsertTime(new Date());shixi.setCreateTime(new Date());shixiService.insert(shixi);return R.ok();}else {return R.error(511,"该学生已有实习申请记录");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody ShixiEntity shixi, HttpServletRequest request){logger.debug("update方法:,,Controller:{},,shixi:{}",this.getClass().getName(),shixi.toString());String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("学生".equals(role))
// shixi.setXueshengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));//根据字段查询是否有相同数据Wrapper<ShixiEntity> queryWrapper = new EntityWrapper<ShixiEntity>().notIn("id",shixi.getId()).andNew().eq("xuesheng_id", shixi.getXueshengId());logger.info("sql语句:"+queryWrapper.getSqlSegment());ShixiEntity shixiEntity = shixiService.selectOne(queryWrapper);if(shixiEntity==null){shixi.setUnpdateTime(new Date());shixiService.updateById(shixi);//根据id更新return R.ok();}else {return R.error(511,"该学生已有实习申请记录");}}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());shixiService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName, HttpServletRequest request){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {List<ShixiEntity> shixiList = new ArrayList<>();//上传的东西Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段Date date = new Date();int lastIndexOf = fileName.lastIndexOf(".");if(lastIndexOf == -1){return R.error(511,"该文件没有后缀");}else{String suffix = fileName.substring(lastIndexOf);if(!".xls".equals(suffix)){return R.error(511,"只支持后缀为xls的excel文件");}else{URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径File file = new File(resource.getFile());if(!file.exists()){return R.error(511,"找不到上传文件,请联系管理员");}else{List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for(List<String> data:dataList){//循环ShixiEntity shixiEntity = new ShixiEntity();
// shixiEntity.setXueshengId(Integer.valueOf(data.get(0))); //学生 要改的
// shixiEntity.setShixiUuidNumber(data.get(0)); //实习编号 要改的
// shixiEntity.setShixiName(data.get(0)); //单位名称 要改的
// shixiEntity.setShixiAddress(data.get(0)); //单位地址 要改的
// shixiEntity.setShixiTypes(Integer.valueOf(data.get(0))); //单位性质 要改的
// shixiEntity.setShixiGangwei(data.get(0)); //实习岗位 要改的
// shixiEntity.setKaishiTime(sdf.parse(data.get(0))); //实习开始时间 要改的
// shixiEntity.setJieshuTime(sdf.parse(data.get(0))); //实习结束时间 要改的
// shixiEntity.setShixiContent("");//详情和图片
// shixiEntity.setShixiYesnoTypes(Integer.valueOf(data.get(0))); //审核状态 要改的
// shixiEntity.setShixiYesnoText(data.get(0)); //审核意见 要改的
// shixiEntity.setUnpdateTime(sdf.parse(data.get(0))); //审核时间 要改的
// shixiEntity.setInsertTime(date);//时间
// shixiEntity.setCreateTime(date);//时间shixiList.add(shixiEntity);//把要查询是否重复的字段放入map中//实习编号if(seachFields.containsKey("shixiUuidNumber")){List<String> shixiUuidNumber = seachFields.get("shixiUuidNumber");shixiUuidNumber.add(data.get(0));//要改的}else{List<String> shixiUuidNumber = new ArrayList<>();shixiUuidNumber.add(data.get(0));//要改的seachFields.put("shixiUuidNumber",shixiUuidNumber);}}//查询是否重复//实习编号List<ShixiEntity> shixiEntities_shixiUuidNumber = shixiService.selectList(new EntityWrapper<ShixiEntity>().in("shixi_uuid_number", seachFields.get("shixiUuidNumber")));if(shixiEntities_shixiUuidNumber.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(ShixiEntity s:shixiEntities_shixiUuidNumber){repeatFields.add(s.getShixiUuidNumber());}return R.error(511,"数据库的该表中的 [实习编号] 字段已经存在 存在数据为:"+repeatFields.toString());}shixiService.insertBatch(shixiList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));// 没有指定排序字段就默认id倒序if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){params.put("orderBy","id");}PageUtils page = shixiService.queryPage(params);//字典表数据转换List<ShixiView> list =(List<ShixiView>)page.getList();for(ShixiView c:list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put("data", page);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);ShixiEntity shixi = shixiService.selectById(id);if(shixi !=null){//entity转viewShixiView view = new ShixiView();BeanUtils.copyProperties( shixi , view );//把实体数据重构到view中//级联表XueshengEntity xuesheng = xueshengService.selectById(shixi.getXueshengId());if(xuesheng != null){BeanUtils.copyProperties( xuesheng , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段view.setXueshengId(xuesheng.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody ShixiEntity shixi, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,shixi:{}",this.getClass().getName(),shixi.toString());Wrapper<ShixiEntity> queryWrapper = new EntityWrapper<ShixiEntity>().eq("xuesheng_id", shixi.getXueshengId()).eq("shixi_uuid_number", shixi.getShixiUuidNumber()).eq("shixi_name", shixi.getShixiName()).eq("shixi_address", shixi.getShixiAddress()).eq("shixi_types", shixi.getShixiTypes()).eq("shixi_gangwei", shixi.getShixiGangwei()).eq("shixi_yesno_types", shixi.getShixiYesnoTypes()).eq("shixi_yesno_text", shixi.getShixiYesnoText());logger.info("sql语句:"+queryWrapper.getSqlSegment());ShixiEntity shixiEntity = shixiService.selectOne(queryWrapper);if(shixiEntity==null){shixi.setShixiYesnoTypes(1);shixi.setInsertTime(new Date());shixi.setCreateTime(new Date());shixiService.insert(shixi);return R.ok();}else {return R.error(511,"表中有相同数据");}}}
CommonServiceImpl.java
package com.service.impl;import java.util.List;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.dao.CommonDao;
import com.service.CommonService;/*** 系统用户* @author* @date*/
@Service("commonService")
public class CommonServiceImpl implements CommonService {@Autowiredprivate CommonDao commonDao;@Overridepublic List<String> getOption(Map<String, Object> params) {return commonDao.getOption(params);}@Overridepublic Map<String, Object> getFollowByOption(Map<String, Object> params) {return commonDao.getFollowByOption(params);}/**tableName 查询表condition1 条件1condition1Value 条件1值average 计算平均评分* */public Map<String, Object> queryScore(Map<String, Object> params){return commonDao.queryScore(params);}@Overridepublic void sh(Map<String, Object> params) {commonDao.sh(params); }@Overridepublic int remindCount(Map<String, Object> params) {return commonDao.remindCount(params);}@Overridepublic Map<String, Object> selectCal(Map<String, Object> params) {return commonDao.selectCal(params);}@Overridepublic List<Map<String, Object>> selectGroup(Map<String, Object> params) {return commonDao.selectGroup(params);}@Overridepublic List<Map<String, Object>> selectValue(Map<String, Object> params) {return commonDao.selectValue(params);}@Overridepublic List<Map<String, Object>> chartBoth(Map<String, Object> params) {return commonDao.chartBoth(params);}@Overridepublic List<Map<String, Object>> chartOne(Map<String, Object> params) {return commonDao.chartOne(params);}/*** 新的级联字典表的 分组求和统计* @param params* @return*/@Overridepublic List<Map<String, Object>> newSelectGroupSum(Map<String, Object> params) {return commonDao.newSelectGroupSum(params);}/*** 新的级联字典表的 分组条数统计* @param params* @return*/@Overridepublic List<Map<String, Object>> newSelectGroupCount(Map<String, Object> params) {return commonDao.newSelectGroupCount(params);}/*** 当前表的日期分组求和* @param params* @return*/@Overridepublic List<Map<String, Object>> newSelectDateGroupSum(Map<String, Object> params) {return commonDao.newSelectDateGroupSum(params);}/*** 查询字典表的分组统计总条数* @param params* @return*/@Overridepublic List<Map<String, Object>> newSelectDateGroupCount(Map<String, Object> params) {return commonDao.newSelectDateGroupCount(params);}@Overridepublic int plusCloumNumber(Map<String, Object> params) {return commonDao.plusCloumNumber(params);}@Overridepublic int reduceCloumNumber(Map<String, Object> params) {return commonDao.reduceCloumNumber(params);}@Overridepublic int updateCloumValue(Map<String, Object> params) {return commonDao.updateCloumValue(params);}/*** 饼状图* -- 饼状图 查询当前表-- 查询字典表【月】-- 统计 -- 查询某个月的每个类型的订单销售数量-- 求和 -- 查询某个月的每个类型的订单销售额-- 查询某个字符串【月】-- 统计 -- 查询某个月的每个员工的订单销售数量-- 求和 -- 查询某个月的每个员工的订单销售额-- 查询时间【年】-- 统计 -- 查询每个月的订单销售数量-- 求和 -- 查询每个月的订单销售额-- 饼状图 查询级联表-- 查询字典表-- 统计 -- 查询某个月的每个类型的订单销售数量-- 求和 -- 查询某个月的每个类型的订单销售额-- 查询某个字符串-- 统计 -- 查询某个月的每个员工的订单销售数量-- 求和 -- 查询某个月的每个员工的订单销售额-- 查询时间-- 统计 -- 统计每个月的订单销售数量-- 求和 -- 查询每个月的订单销售额*//*** 柱状图-- 柱状图 查询当前表-- 某个【年,月】-- 当前表 2 级联表 1-- 统计-- 【日期,字符串,下拉框】-- 求和-- 【日期,字符串,下拉框】-- 柱状图 查询级联表-- 某个【年,月】-- 统计-- 【日期,字符串,下拉框】-- 求和-- 【日期,字符串,下拉框】*//*** 柱状图求和* @param params* @return*/public List<Map<String, Object>> barSum(Map<String, Object> params){return commonDao.barSum(params);}/*** 柱状图统计* @param params* @return*/public List<Map<String, Object>> barCount(Map<String, Object> params){return commonDao.barCount(params);}}
api.js
const api = {// 积分订单orderpage: 'orders/page',orderdelete: 'orders/delete',orderinfo: 'orders/info/',ordersave: 'orders/save',orderupdate: 'orders/update',// 配置configpage: 'config/page',configdelete: 'config/delete',configinfo: 'config/info/',configsave: 'config/save',configupdate: 'config/update'}export default api
相关文章:

基于springboot的实习管理系统
TOC springboot207基于springboot的实习管理系统 绪论 1.1研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务,逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速,使用起来非常简单容易,用户甚至不用掌握相关的…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测
土地利用/土地覆盖数据是生态、环境和气象等领域众多模型的重要输入参数之一。基于遥感影像解译,可获取历史或当前任何一个区域的土地利用/土地覆盖数据,用于评估区域的生态环境变化、评价重大生态工程建设成效等。借助CLUE模型,实现对未来土…...

Rust 之环境搭建
前言 Rust 是一种现代的系统级编程语言,以其内存安全性、高性能和简洁的语法而著称。本文将介绍如何在不同操作系统上搭建 Rust 开发环境,并配置好基础工具,使您能够快速开始 Rust 编程。 1. 安装 Rust Rust 官方推荐使用 rustup 工具来管…...

基于微信小程序地图实现点位标注、覆盖物、地图聊天
目录 小程序部分map标签的使用获取用户经纬度并转换地址地图点击事件覆盖物标注点击并实现弹窗交互数据库及接口部分数据库表结构设计API搭建小程序接口使用注意事项wx.getLocation深入控制地图小程序部分 map标签的使用 创建小程序的步骤这里不再重复赘述,在wxml页面中放一个…...

xxl-job的分片广播+单播
1 介绍一下xxl-job XXL-JOB 是一个分布式任务调度平台,旨在为分布式应用系统提供开箱即用的调度解决方案。它非常易于使用,并具有很高的可扩展性。以下是 XXL-JOB 的详细介绍,包括其核心功能、架构设计、主要组件及其应用场景。 核心功能 简…...

情感分类代码
在进行自然语言处理中的情感分类时,通常需要准备以下几方面的内容: 1. **数据集**:高质量的标注数据集是关键,包括正面、负面和中性情感标记的文本。 2. **情感词典**:可用的情感词典,如SentiWordNet&…...

WPF—常用控件、属性、事件、详细介绍
WPF—常用控件、属性、事件、详细介绍 WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人…...

Oracle遭遇bug导致共享内存无法分配报ORA-04031错误
1.故障描述 在7月17日上午11时左右,收到告警短信,提示集群节点2宕机,当即登陆该节点进行查看,发现数据库状态正常。但日志里出现大量的ORA-04031报错,提示无法分配shared_pool,当时手动执行shared pool刷新…...

SAP BRIM用于应收账款AR收入中台
SAP BRIM(Billing and Revenue Innovation Management)是SAP提供的一个综合性解决方案,旨在帮助企业高效管理计费和收入流程。它与SAP ERP系统集成,提供端到端的功能,简化计费流程,自动化收入确认ÿ…...

LVS原理简介
LVS是Linux virtual server的缩写,为linux虚拟服务器,是一个虚拟的服务器集群系统。LVS简单工作原理为用户请求LVS VIP,LVS根据转发方式和算法,将请求转发给后端服务器,后端服务器接收到请求,返回给用户。对…...

Qt五大核心特性之元对象系统
前言 Qt 的元对象系统(Meta-Object System)是 Qt 框架的核心之一,提供了一些 C 原生不具备的功能(因为在C它们是静态的),如反射、信号槽机制、属性系统等。通过这个系统,Qt 实现了许多强大的功能,这使得它…...

开放式耳机伤耳朵吗?开放式耳机在一定程度上保护我们的耳朵
开放式耳机通常被认为对耳朵的伤害较小,因为它们不需要插入耳道,从而减少了耳道内的压力和潜在的感染风险。与传统入耳式耳机相比,开放式耳机允许耳朵自然通风,减少耳道内的湿气和热量积聚,这有助于保持耳朵的健康。 然…...

JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车系统源码
🚗💨打车、顺风车、滴滴车&跑腿系统,一键解决出行生活难题! 一、出行新选择,打车从此不再难 忙碌的生活节奏,让我们常常需要快速、便捷的出行方式。打车、顺风车、滴滴车系统,正是为了满足…...

批量智慧:揭秘机器学习中的批量大小
标题:批量智慧:揭秘机器学习中的批量大小 机器学习是人工智能的一个分支,它使得计算机能够从数据中学习并做出决策或预测。在机器学习的过程中,批量大小(Batch Size)是一个至关重要的超参数,它…...

苹果Vision Pro生态发展:现状、挑战与未来展望
苹果公司以其创新技术和强大的生态系统闻名于世。在最近的财报会议上,CEO蒂姆库克分享了Vision Pro平台的最新进展,引发了业界的广泛关注。本文将深入探讨Vision Pro生态的现状、面临的挑战以及与其他XR平台的对比分析。 一、Vision Pro生态现状 据库克介绍,Vision Pro平台…...

湖南第一师范学院来访炼石,推动密码与数据安全合作
2024年8月11日,为进一步加强交流与合作,深入探讨校企产学研合作,湖南第一师范学院计算机学院院长杨恒伏一行莅临炼石调研指导。湖南第一师范学院计算机学院院长杨恒伏、网络空间安全系主任周聪等专家领导出席。炼石网络创始人兼CEO白小勇对湖…...

全面解析ETL:数据仓库架构中的关键处理过程
目录 一、数据仓库架构中的ETL 二、数据抽取 (1)逻辑抽取 (2)物理抽取 (3)变化数据捕获 三、数据转换 四、数据装载 (1)提高装载效率 (2)处理装载失败 五、ET…...

keepalived的介绍与配置
Keepalived是一个轻量级别的高可用解决方案,同时也是一个免费开源的、用C编写的类似于layer3, 4 & 7(也有说法认为是layer3, 4 & 5)交换机制的软件,主要提供负载均衡和高可用服务。它自动完成检测服务器的状态、故障隔离和…...

二叉树概念与使用
文章目录 一、作用二、二叉树概念特征2.1二叉树概念补充2.1.1度2.1.2深度2.1.3若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h-1个结点 三、使用2.1二叉树存储,检索,插入项目 四、 二叉树检索的时间复杂度1. 普通二叉树2. 二叉搜…...

MongoDB 在 Java 中的使用教程
目录 MongoDB 简介环境准备使用 Java 连接 MongoDB基本 CRUD 操作复杂查询操作索引和性能优化事务管理总结 1. MongoDB 简介 MongoDB 是一个基于分布式文件存储的 NoSQL 数据库系统。它以文档(JSON 形式)存储数据,具有高扩展性和灵活的数据…...

微前端架构下的配置管理:策略、实现与最佳实践
微前端架构通过将一个大型前端应用拆分为多个小型、自治的子应用,提升了开发效率和应用的可维护性。然而,随着应用规模的扩大和子应用数量的增加,配置管理变得日益复杂。本文将详细介绍在微前端架构下实现应用配置管理的策略、实现方法和最佳…...

React Native中好用的UI组件库
文章目录 前言1.React Native ElementsStar数超24K地址 2.React Native UI KittenStar数超20K地址 3.NativeBaseStar数超20K地址 前言 下面是React Native中一些常用的UI库 1.React Native Elements Star数超24K 官方介绍 React Native Elements 的目标是提供一套用于在 Rea…...

WebSocket 快速入门
WebSocket是什么 WebSocket 是基于 TCP 的一种新的应用层网络协议。它实现了浏览器与服务器全双工通信,即允许服务器主动发送信息给客户端。因此,在 WebSocket 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性…...

MySQL中的存储文件和IO机制详细解析
MySQL中的存储文件和IO机制详细解析 一、引言 MySQL作为广泛使用的关系型数据库管理系统,凭借其高性能和稳定性在各大应用中扮演了关键角色。在实际应用中,数据库需要对大量数据进行存储、检索、更新等操作。这些操作离不开底层的文件存储系统…...

复习之 java 锁
裁员在家,没有面试机会,整理整理面试知识点吧! 不得不知道的java 锁 Java 中,提供了两种方式来实现同步互斥访问(也就是锁):synchronized 和 Lock 多线程编程中,有可能会出现多个线…...

数据结构与算法 - 图
一、概念 图是有顶点(vertex)和边(edge)组成的数据结构,例如 该图有4个顶点:A、B、C、D以及四条有向边,有向图中,边是单向的。 1. 有向图 VS 无向图 如果是无向图,那么…...

白骑士的HTML教学基础篇 1.1 HTML简介
在现代互联网的世界里,HTML(HyperText Markup Language)是所有网页的基础语言。无论是简约的个人博客还是复杂的商业网站,HTML都扮演着不可或缺的角色。掌握HTML是学习前端开发的第一步,这不仅能够帮助你构建静态网页&…...

c语言基础知识学习
1. C 语言简介 定义:C 语言是一种过程式编程语言,设计用于系统编程和应用程序开发。特点:高效、灵活、接近硬件,支持指针和内存操作。 1. 基本语法 程序结构: C 语言程序由函数组成,main 函数是程序的入口…...

Qt/QML学习-Dial
QML学习 Dial例程视频讲解代码 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")Dial {anchors.fill: parentid: dial// 设置旋钮的范围from: 0to: …...

达梦数据库系列—48.DMHS实现Mysql到DM8的同步
目录 DMHS实现Mysql到DM8的同步 1、准备介质 2、安装 3、准备源端Mysql和目标端DM8 软件安装 数据库创建 打开归档 开启附加日志 创建辅助表 Mysql客户端驱动 Mysql端安装ODBC 检查依赖包 创建连接用户 创建测试表 4、同步配置 修改服务配置 Mysql到Dm单向同步…...