【《基于Springboot的招聘信息管理平台设计》19000字】_第1页
【《基于Springboot的招聘信息管理平台设计》19000字】_第2页
【《基于Springboot的招聘信息管理平台设计》19000字】_第3页
【《基于Springboot的招聘信息管理平台设计》19000字】_第4页
【《基于Springboot的招聘信息管理平台设计》19000字】_第5页
已阅读5页,还剩43页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

基于Springboot的招聘信息管理平台设计目录TOC\o"1-2"\h\z\u摘要 摘要随着网络时代的到来,信息技术飞速发展,衣食住行已离不开网络,尤其是当今的年轻人,如大学生,网络渗透到了大学生活的各个方面,需求是在迫切需要一个大地方但又需要网络信息的帮助的情况下,网络招聘也应运而生,这使历史悠久的时刻令众多应聘者看到了一线希望。对于即将毕业或已经毕业的大学生,互联网上杂乱无章的招聘信息不仅可以保证质量,而且还担心信息的真实性和准确性。许多大学生由于虚假的招聘信息,错误地陷入了金字塔式销售和其他“招聘缺陷”。基于上述市场需求,设计并开发了招聘平台KJOB,以整合高质量的企业招聘信息,减少求职者的搜索和筛选工作,并扩大企业招聘信息的覆盖面,以吸引更多的高素质人才。招聘信息管理平台是在找工作应对形势发展的参考,主要为用户提供了更好的工作和简历匹配平台。平台基于B/S(浏览器/服务器和浏览器/服务器)架构,前端使用Layui框架,用户界面使用HTML网页和Thymeleaf模板引擎,后端系统底层架构使用SpringBoot框架,MVC设计模式,以及JUnit单元测试,并且数据库使用MYSQL。招聘系统分为针对求职者的求职模块,针对人力资源的企业招聘模块和针对管理员的后台管理模块。并实现了模块的大部分功能。关键词:招聘系统;UML建模;Java;LayUI;MySql;SpringBoot第1章前言1.1项目的背景和意义在现代的企业发展中,人力是一种具有无限潜力的资本,对人才的竞争越来越激烈。人力是一种能为企业带来巨大利益的资本。企业需要依靠人力资源进行创新和变革。通过对人力资源这一丰富资源的充分开发和利用,最终实现科技和经济的腾飞。因此,越来越多的企业开始在人力资源领域投入巨资寻找人才,以便找到与企业相匹配的人才。互联网的出现降低了人才与公司匹配的成本。求职网站的受欢迎程度为招聘研究提供了一个数据库。在当今的大数据环境中,对于新的手动推荐器系统的个性化和精确推荐服务的需求持续增长。将大量求职数据与招聘数据进行匹配的研究面临着新的机遇和挑战。猎头产业在国内起步较晚,随着市场需求和中国企业发展战略的扩大,追求着更好的团队和技术水准,根据企业的发展状况和竞争情况,在猎头产业中也有点燃了发展势头,但猎头行业一片混乱。在过去的二十年中,猎头行业在中国的发展中,是因为国内企业和公司没有充分认识这个行业,通常使用传统的招聘信息来满足企业对人才的需求,而高端人才通常是企业的老员工,并且这个旧观念取代了各行各业的主要关键,根据目前国内大多数情况,有一定规模的企业集中在北部向上广域,并为这些地区的猎头企业提供服务,面对巨大的市场,猎头行业已经出现了发展的机会。但是与欧美相比,差距仍然很大,主要问题是中国口碑巨大,企业组织结构规模存在一定差距,而且问题的概念也需要逐步改善,非常重要的原因来自内部的猎头。在培养顾问的同时,猎头公司还将把重要的客户信息委托给个人。这种业务无法避免人力资源的损失。猎头公司中有相当一部分是从最初的公司和人员变动中分离出来的。这种发展模式也是行业的唯一途径。在差异化公司达到一定规模之后,主键趋于饱和,而大型公司控制着大部分资源,并且面临着服务理念,声誉和其他公司的变化。淘汰最终将使一部分大型优质服务猎头公司幸存下来。因此,在这种多变的生产环境中,可以通过软件技术手段为猎头业的发展打下基础,或者根据国情提出管理建议。这个概念可以指导行业的整体发展,并最好形成良好的趋势。如今,互联网的使用已经非常多样化,通过互联网的便利,各行各业都实现了加速发展。因此,猎头业与互联网的结合是必然趋势。但是,目前很少有猎头公司可以将Internet结合起来以进行广泛的服务,因此此步骤需要不断的探索和长期经验的积累。该系统主要针对猎头行业中的各种业务。设计和实现了重要的链接,以促进许多业务信息的管理,还包括人力资源的储备。,以及主营业务的运营过程管理,主要包括人力资源信息管理,客户公司信息管理,人才招聘项目管理,相关业务的OA功能等,主要集中在系统上完善各项业务,实现猎头通过建立基础数据,企业管理信息系统将能够在未来开发更多基于平台的系统,并掌握猎头行业的发展趋势。1.2研究现状招聘行业的发展起源于欧美国家,起源于第二次世界大战后的美国。当时,部分国家为了解决人才短缺的问题,从而来促进相关企业的发展。因此,欧美国家的猎头公司与大型跨国公司有着密切的关系。猎头公司在国际上拥有庞大的关系网络,例如KornFerryInternational,SpencerYat等。在美国拥有高技术水平的公司并不一定会发展壮大。最重要的是管理人员的能力。例如,IBM曾经在发展中遇到问题。在业务不景气的情况下,在一家猎头公司的帮助下,聘用了新总裁的IBM取得了长足的进步。同一家惠普公司也遇到了类似的问题,并且也利用了这一点。通过猎头公司的人才,已经脱胎换骨,外国猎头公司有严格的规定,通过市场效应,所有公司也都默认违约,例如,在开发人才招聘项目时,他们需要预先支付定金。“不强调诚信,不尊重人才。对于具有强大开发能力的公司,猎头公司不接受业务要求,但需要对人才进行某些调查。有不良记录的人不猎杀,有涉及国家的虚假记录的人安全和保密业务不被追捕,等等,严格的法规和系统是当今世界上的人才中介公司。达到数百亿美元,而美国的KornFerry已达到20亿美元,而且这一份额在不同的市场前景下也发生了变化。可以想象,管理人才和猎头业务需要投入力量。在中国,传统的信息门户可以细分为综合门户和专业门户。传统的信息门户网站主要侧重于显示和公开静态信息。它的代表是智联招聘和58同城。前者侧重于整个行业和整个国家。后者寻找工作是一个综合的分类信息网站,侧重于兼职和短期工作。由于缺乏个性化服务,传统的信息门户招聘网站面临着技术改造的挑战。垂直网站仅专注于特定行业,并且具有很高的专业水平。代表是拉古。这仅适用于互联网行业中的采用。凭借高度的专业精神,您可以实现更准确的匹配。LinkedIn是专业社交招聘网站的典型代表。它的功能之一是专门为每个用户建立专业联系,并使用这些联系来联系潜在的工作和求职者。到目前为止,招聘人员推荐系统在招聘领域具有更好的解决方案,但有很多限制。为了在求职者和工作之间取得良好的匹配,您需要同时考虑招聘人员​​的偏好和候选人的偏好。这也是招聘系统和其他推荐系统之间的差异。1.3研究内容及预期目标本课题主要研究猎头行业涉及到的多种业务,基于主要流程实现基本功能,并针对招聘的行业特色,和发展现状问题实现对功能的整理,在根据使用的反馈和行业发展中的问题,进一步创新增加导向和具有管理手段的功能,从而提高企业的竞争力。本系统主要内容基于招聘行业的基本业务,针对人才方面的管理,企业客户等信息的管理,以及开发项目的过程跟踪功能,以及辅助作用的各项功能进行设计实现,主要包括以下几点:确定招聘系统的需求、系统架构的设计与实现、招聘系统的推荐方案的设计与实现、招聘系统功能的设计与实现和系统测试。本文的研究目标是设计一个能够保障求职者信息价值并能进行个性化推荐的招聘系统。

招聘系统分为面向求职者的求职模块、面向

HR

和公司的企业招聘模块以及面向管理员的后台管理模块。在实现各个模块基础功能的前提下,该系统设计了对求职者信息价值保障的策略,并通过基于用户行为时间因子的内容推荐算法对职位进行推荐。

同时通过对网站架构的研究,设计适合本系统的架构,

保证系统后台的可用性、伸缩性、拓展性、安全性。1.4论文组织结构第一章:前言。介绍了本次系统主要的研究内容,研究目标,研究意义等。 第二章:技术与原理。介绍了本系统研发所使用的技术框架和开发工具等内容。 第三章:系统需求分析。分析了系统的总体功能需求和非功能需求。 第四章:系统总体设计。设计了本次系统的整体架构,设计了每个模块的具体功能类和方法,设计了每个模块的数据库表结构。 第五章:系统详细设计与实现。分析了实现系统功能所用的技术,并对不同模块进行详细分析。 第六章:系统测试与部署。介绍了系统的测试环境,测试方案,测试用例以及测试结构等信息。 第七章:结论。总结了本次论文的研究结构以及对未来的展望和感想。

第2章技术与原理2.1SpringBoot框架该系统使用Springboot微服务框架来开发平台,并使用面向服务的组件开发模型来执行复杂的业务功能。微服务在开发中的应用越来越广泛。开发人员致力于构建更大,更复杂的web应用程序,并且可以最好地将这些web应用程序作为微服务的组合进行开发、扩展和管理。这些小型服务可以一起工作以实现更大和更广泛使用的功能。SpringBoot继承了原始的Spring框架(一个全新的微服务系统基础结构)的强大基因。该框架使用特定的配置方法,不需要定义模板配置,集成了Tomcat应用程序服务,简化了Maven配置,提供了可以简化程序包管理的启动POM,并可以快速启动Web容器。集成的servlet容器减少了对环境的需求。您可以使用命令直接运行项目,并且可以使用jar包来运行应用程序:javajar,开发分布式程序,支持热部署以及促进部署和维护。SpringBoot旨在允许Spring应用程序并最小化配置文件,并且默认情况下配置了许多框架。在开发完整的微服务时,您会遇到所有麻烦的事情。在企业级基础架构领域,微服务是一种越来越流行的应用程序架构,因为它们允许快速开发,较小的代码库,企业级集成和模块化部署。Boot简化了Spring应用程序的开发,提供了以模块化方式导入依赖项的能力,强调了开发RESTfulWeb服务的功能,并提供了生成可执行JAR文件的能力。StarterFramework是用于开发可部署微服务的强大的框架工具。使用SpringBoot,您可以简单,快速,轻松地创建项目。传统开发框架的无配置集成极大地提高了开发和部署效率。SpringBoot的最主要的是约定大于配置。大多数SpringBoot应用程序可能只需要很少的Spring配置。采用SpringBoot可以大大简化开发模型。开发人员要集成的通用框架具有相应的组件支持。具有以下特点:(1)使用Spring项目引导页面可以在几秒构建一个项目,为基于Spring的开发提供更快的入门体验,提供了一种快速使用Spring的方式。(2)开箱即用,没有代码生成,也无需XML配置,同时也可以修改默认值来芮足特定的需求。(3)为了更方便对外输出不同形式的服务,如RESTAPI、WebSocket.Web、Streaming、Tasks。(4)非常简洁的安全策略集成。(5)支持关系数据库和非关系数据库。(6)提供了大型项目中一些常见的非功能性的特性,如嵌入式服务器、安全指标、健康检测和外部配置等,支持运行期间内嵌容器,如Tomcat、Jetty。(7)自动管理依赖,自带应用监控,支持各种IDE,如IntelliJDEA、NetBeans。(8)强大的开发包,支持热启动。SpringBoot这些特性给研发带来非常大的优势,让开发、测试、配置、部署、监控所有环节变得简单,让Spring更易用更有生命力,很大程度上提高了开发效率。2.2Ajax技术AJAX的全名是“AsynchronousJavaScriptandXML”,即异步JavaScript和XML。它是一种Web开发技术,可用于创建交互式,交互式和动态网站。如果仅需要更新网站页面上的部分内容,则应使用传统的更新方法来重新加载网页上的所有内容,并且由于AJAX技术,如果不加载所有页面内容,则无法仅更新部分网页。内容。网页,可以加快Web应用程序的运行速度。响应用户操作。AJAX使用JavaScript处理服务器从而对客户端的请求响应。客户端必须允许JavaScript在浏览器中运行,但是不需要浏览器插件。AJAX通过实现异步更新使Web应用程序具有更高的响应速度。谷歌也逐渐让AJAX受到其GoogleSuggest的欢迎。GoogleSuggest使用AJAX技术使它创建的网络界面非常动态。当用户使用Google搜索引擎并在搜索框中输入他们要搜索的关键字时,JavaScript将从客户端输入的信息发送到服务器,然后服务器返回链接到列表信息的搜索建议。AJAX基于JavaScript,HTML,CSS和XML的现有的Internet标准,并结合使用了XMLHtpRequest作为主要对象。XMLHttpRequest是一种支持异步请求的技术,并且是AJAX的主要机制。它允许JavaScript与服务器进行通信而无需重新加载Web页面,这意味着它不需要刷新整个页面就可以刷新部分页面。简而言之,javascript可以按时向服务器发送请求,并按时处理服务器响应。由于与服务器进行了异步数据交换,因此无需更新。因此,可以使用AJAX技术创建Web应用程序:更快,更用户友好。HTML是Web编程的基础,CSS用于定义页面数据的显示样式,XML被用作数据转换格式。图2-1AJAX引擎的工作原理2.3Layui框架LayUI是一个开源的WebUI框架解决方案,使用经典模块化规范并遵循本机HTML、CSS、JS的开发方法。它非常易于使用并且可以立即使用。它的风格简洁轻巧,其组件优雅而丰富。从源代码到具体使用方法的每个细节都经过精心的设计,十分适合Web界面的快速开发。LayUI和基于底层MVVM等的那些前端框架有所不同,但是它并不不是对立的框架,相信会回归基础。确切地说,对于后端开发人员而言,它更有意义,您无需参与前端工具,只需面对浏览器本身,让所需的所有元素和交互都在您的指尖。目前,除了Layui之外,前端UI框架也很常用,例如Bootstrap和Easyui。这三个也是常用的UI框架,但是在应用程序和适用性方面仍然存在差异。与Easyui相比,Easyui出现得更早并且功能更强大,但是界面的美感还不够简单和粗糙。Layui诞生于2016年,Layui的界面十分简洁和美观,且易于使用,在Layui的社区中可以轻松找到很多组件。与Bootstrap相比,Bootstrap已经是一个更成熟的框架,现在已经更新为4.x版本,但是由于Bootstrap已经开发了很长时间,因此在使用过程中有点多余。尽管Layui的开发尚晚,但该版本当前仅更新为2.x。与Bootstrap相比,Layui新颖,轻巧,简单,漂亮。而且Layui在服务器端页面上具有很好的效果。2.4MVC模式简介MVC设计模式(主要由模型,视图和控制器组成)作为Sun的JavaEE平台的设计模式。模型是指数据的实体,视图是用户的界面,控制器是控制业务逻辑的部分。举一个简单的例子,我们在MFC中更加熟悉的文档视图结构可以理解为MVC的结构,其中文档是Model,用于存储实际数据,视图是View,用于显示内容。以其自己的方式处理数据,并且该消息可以视为“控件”。通过MVC设计模式将它们分开,从而提高代码的灵活性和可重用性。图2-2为MVC模式图。图2-2MVC模式(1)M-Model模型负责业务逻辑。DAO和Service等都属于模型层。(2)V-View视图负责显示界面和用户交互。属于视图的类是JSP。JSP为专业人员和非专业人员开发高级Web站点提供了优质的工具。(3)C-Controller控制器控制器是用来对用户的输入进行响应的,将模型和视图联系到一起,复制将数据写到模型中并调用视图。2.5B/S模式B/S(Browser/Server)结构,即浏览器/服务器结构,是在C/S(Client/Service,客户机/服务器)模式的基础上发展起来的一种体系结构,在开发Web应用时有明显的技术优势。因为在C/S模式下,用户使用应用时需要下载并安装客户端程序,其中同时包含了业务逻辑的实现和界面显示,由服务器端提供对数据访问的处理功能。而在B/S模式下,应用程序的业务逻辑实现和数据处理全部由服务器端提供,用户只需依靠浏览器作为界面显示便可使用,非常轻量快捷。2.6JSP技术JSP(JavaServerPages)是一种动态网页技术标准,JSP技术的目的是让设计基于Web的应用程序更加容易和快捷,它将网页逻辑和网页设计与显示分离,并支持可重用组件的设计。它的最大特点是将生成的内容与显示分离。当向访问JSP网页的请求发送到Web的服务器时,先执行当中的部分程序片段,再把HTML格式执行结果返回给客户界面。这些程序操作都是在服务器端执行的,对客户浏览器的要求非常低,因为客户端得到的只是结果,可实现无Plug-in,无ActiveX无JavaApplet,甚至无Frame。JSP技术可以利用它的工具和技巧,很容易地敷合到多种应用体系结构中的,甚至可以扩展支持企业级分布式应用。JSP具有简单易用和安全性的提点,JavaServlet是JSP的技术基础,且具有Java编程语言“一次编写,各处运行”的特点,能完全的面向对象且主要运用于互联网。图2-3展示了JSP的运行原理。图2-3JSP运行原理2.7Servlet技术当实现一个通用的服务时,您可以使用或扩展由JavaServletAPI提供的GenericServlet类。HttpServlet类提供了部分方法,诸如doGet和doPost等,用来处理特定于HTTP的服务。当最初使用Web交付服务时,服务提供商已经意识到了对动态内容的需求。小程序是实现此目标的首批尝试之一。它主要侧重于使用客户平台来提供动态的用户体验。同时,开发人员也在研究如何使用服务器平台实现此目标。最初,通用网关接口(CGI)脚本是生成动态内容的主要技术。尽管CGI脚本技术得到了广泛的应用,但它具有许多缺点,包括平台的相关性和缺乏可伸缩性。为了避免这些限制,JavaServlet技术应运而生,它可以以可移植的方式交付动态和面向用户的内容。Servlet是一种Java编程语言。用于增强服务器性能。服务器驻留在可通过“请求/响应”编程模型访问的应用程序中。Servlet可以响应任何类型的请求,但通常仅用于扩展Web服务器应用程序。JavaServlet技术为这些应用程序定义了特定的HTTPServlet类。javax.servlet和javax.servlet.http包提供用于创建Servlet的接口和类。所有Servlet必须实现定义生命周期方法的Servlet接口。在实施常规服务时,可以使用或扩展JavaServletAPI提供的GenericServlet类。HttpServlet类提供诸如doGet和doPost之类的方法来处理特定于HTTP的服务。2.8MySQL数据库MySQL是一个关系数据库管理系统。MySQL数据库的第一个版本于1998年1月发布。MySQL是开源的,当不需要事务处理时,MySQL是管理内容的理想选择。它提供了一个面向Java编程语言的编程接口,支持多种字段类型,并提供了一个完整的运算符来支持查询中的SELECT和WHERE操作。MySQL数据库使用结构化查询语言(SQL)进行数据库管理。它具有速度快,可靠性高和适应性强的优点,并在各种数据库中引起了广泛的关注。如今,许多大型网站也使用MySQL数据库。图2-4JDBC连接数据库原理系统使用MySQL数据库作为系统开发的后端数据库。作为关系数据库,MySQL可以为系统的开发提供强大的支持。MySQL不会将所有数据放在一个大仓库中,而是将数据关联到不同的表中,这可以增加数据的灵活性。要使用MySQL数据库,首先您必须连接到数据库。使用Java语言进行程序开发需要通过JDBC技术连接到数据库。JDBC技术是一种用于操作数据库的技术,并广泛用于Java语言中。图2-4表明了JDBC与java应用程序和数据库之间的联系。2.9web技术AngularJS是一个js前端框架。该系统中应用程序的核心内容是MVC和双向绑定。它主要实现服务器和接口的语义标签,通过注入实现数据显示,并弥补了HTML静态页面的不足。Bootstrap是当前的主流前端框架,基于HTML5和ess3样式文件的编译,它更简洁地显示了本机交互式页面效果,并且它完美支持各种浏览器,并与JQuery插件结合使用,完全符合到JQuery操作模式。JQuery是用于javascript的一个轻量级封装框架。通过封装各种DOM操作功能,页面的操作变得简单,简化了Javascrip中复杂功能的操作,并使js代码更加清晰,这主要体现在浏览器兼容性上。由于维护公司的工作环境和配置问题,该系统考虑了兼容性方面,并且页面使用基于JQuery的技术,因此在不同的浏览器中效果没有太大的区别。Layer是基于Jquery的数据列表显示插件。通过封装的数据列表功能,可以与后台交互查询的数据可以通过配置文件直接显示在列表中,提供分页和快速检索功能。该系统使用此功能插件来显示数据列表。2.10本章小结本章详细介绍了项目中使用的核心技术和开发环境,并进一步阐述了相关原理。首先介绍了Web项目的一般模式-MVC设计模式,然后介绍了系统架构和开发环境。对于大多数小型网站系统来说,选择基于springboot框架进行开发是最佳选择。它具有很高的开发效率,并且易于维护和修改。另外,使用MySQL数据库还因为其独自的优势。

第3章系统需求分析3.1可行性分析可行性分析是从不同的角度,对可能影响系统的各方面因素进行分析,确认系统在实际生活上是可行的。本系统只是单纯的从经济、法律、技术、操作可行性四个方面来分析说明。3.1.1技术可行性招聘系统的数据管理是基于MySQL数据库,系统的设计与实现使用流行的Java/J2EE的SpringBoot框架。通过上一章的讨论可知,MySQL数据库可以很好的满足数据管理的基本要求,特别是最新版本的MySQL8可以为系统的数据管理提供更高的效率、和诸如云存储等全新功能支持,为系统未来的扩展提供广泛的前景。而SpringBoot框架是一个被广泛应用的网络架构,具有丰富的参考资料和成熟的社区支持。同时,它也是一个轻量级的架构,能够为系统开发提供便利。分析表明,该架构可以充分满足本系统在功能、性能和安全性等方面的设计需求。3.1.2经济可行性在讨论经济可行性时,一个常用的方法是成本/效益分析。其中成本包括系统一次性启动成本和系统后期运营成本。本系统的数据运行在MySQL数据库上,作为商业数据库,在投入使用时需要购买,但同样可以获得厂商对数据库的维护支持。而SpringBoot框架作为一个开源框架则是完全免费的。对于系统运行的需要的服务器和服务器操作系统并没有明确的要求,用户可以根据自身情况选择商用或开源版本,或是使用企业原有的设备。此外,需要注意的是,系统访问人员的数目与系统建设所需要的软硬件支持间成正比关系。3.1.3操作可行性操作可行性主要指系统运行之后,需要用户配合进行的人工操作是否能够顺利进行。招聘系统的设计基于B/S结构,界面设计力求简洁友好,符合一般大众使用浏览器对网站的访问的习惯。用户使用时只需要根据界面的提示或简单阅读系统说明,不需要进行专门的培训,因此该系统具有良好的操作可行性。3.2业务需求分析图3-1简历职位匹配流程3.3功能需求分析3.3.1功能概述本节主要对招聘系统需要实现的主要功能进行简单的说明。1.登录注册:用户登录需要验证码验证,如果没有账号可以注册新的账号。并验证身份,不同身份进入不同界面。2.控制中心:显示用户数据、简历数据、公司数据,并将数据可视化。另外管理员端还有留言的显示。3.个人信息修改:可以对登录用户自身的基本信息的修改和密码的修改。用户的基本信息发生改变,可以及时更新。4.用户管理:用户主要包括三种用户,招聘者、求职者和管理员,管理员可以对用户进行增删改查和基本的处理。5.求职信息管理:针对求职用户,可以编辑自己的简历,包括个人基本信息,求职经历,在校经历等。6.公司信息管理:招聘用户可以注册公司和修改公司信息,并申请后台审核。7.招聘信息管理:招聘用户可以发布不同公司的招聘信息,吸引求职用户。8.人选岗推荐:管理员可以通过信息匹配进行初始匹配、完全匹配和自选匹配从而找到适合的岗位。9.岗选人推荐:管理员可以通过信息匹配进行初始匹配、完全匹配和自选匹配从而找到适合的求职信息。10.简历查询:招聘用户可以通过信息匹配进行初始匹配、完全匹配和自选匹配从而找到适合的求职信息。11.发布工作:招聘用户可以发布职位,并对自己发布的工作进行增删改查。同时增加了对工作的冻结和解冻的功能。12.招聘者留言:招聘用户可以通过留言功能反馈个人建议和系统反馈信息。13.职位查询:求职用户可以通过信息匹配进行初始匹配、完全匹配和自选匹配从而找到适合的岗位。14.简历信息:求职用户可以发布自己的一些简历,并对简历进行增删改查和冻结解冻操作。同时增加了对简历的冻结和解冻的功能。15.求职者留言:求职用户可以通过留言功能反馈个人建议和系统反馈信息。3.3.2用例分析根据系统的需求可以得出该系统的主要的参与者有:求职者:指已注册的合法求职用户,可以操作本系统前台求职的所有功能。招聘者:指已注册的合法招聘用户,可以操作本系统前台招聘的所有功能。管理员:指后台系统的管理员。管理员可以对企业信息、用户信息、简历信息和招聘信息等进行管理。求职者用例如图3-2所示。图3-2求职者用例招聘者用例如图3-3所示。图3-3招聘者用例管理员用例如图3-4所示。图3-4管理员用例企业管理用例描述见表3-1。表3-1企业管理用例描述用例编号UC01用例名称企业管理编制人康洪菠编制日期2021年4月7用例描述此用例主要描述管理员对企业的管理。参与者管理员前置条件用户已登录系统后置条件招聘用户新增了企业优先级别中基本事件流1.管理员进入企业管理页面2.管理员查看企业信息3.看企业信息是否完整并进行审核4.审核通过可选事件流4a.企业信息不完整,审核不通过特殊需求无扩展点无3.4对象模型分析类图由模型中的许多描述性元素组成,例如类,包及其关系,以及这些元素与其内容之间的相互关系。类图可以组织一个包,属于一个包并仅显示其中的相关内容。类图是最常见的UML图,显示了静态类,接口,结构以及它们之间的关系。图3-3招聘信息平台对象模型3.5非功能需求分析非功能性需求是对性能,可移植性,可维护性以及基于获得结果的软件测试简便性的要求。它将确定一个软件是否是高质量的软件。该系统的非功能性要求如下:系统响应时间:系统响应时间分为两部分,前端的响应时间和后端的响应时间。前端响应时间主要发生在Javascript脚本的处理中。Javascript脚本主要用于处理来自后端的数据,并在前端显示设计人员想要的效果。后端响应时间是指从http请求发送到后端接口到后端响应该请求的时间。系统应将这两个时间部分减至最少。一般后端接口的响应时间应小于300ms。系统伸缩性:当用户数量增加时,可以通过添加多台服务器来提高整个后端的处理性能。当用户数量少时,服务器数量也可以减少,成本消耗也可以降低。良好的耐用性要求系统以最小的影响完成服务器集群的扩展和缩减。系统扩展性:要求各种业务功能之间的耦合度低,以确保在修改或添加功能时,对其他功能的影响最小化甚至不受影响。系统复用性:避免重复开发具有相同功能的零件,提取每个零件的相同功能,并创建用于二次开发的新接口。系统安全性:在网络接口之间进行调用,使用身份验证来避免恶意网络攻击。用户的密码可以被加密并传输,并且加密的密码被存储在数据库。3.6本章小结本章主要介绍订购系统的需求分析部分和对象建模分析。首先,它介绍了系统的总体要求并扩展了详细讨论。需求分析将性能分析分为功能分析和非功能分析,然后介绍角色模型,分析用户角色和管理员角色的内部实现,并绘制相应的类图。

第4章系统总体设计在上一章中,需求建模部分简要介绍了总体系统需求,系统功能需求和系统非功能需求,并简要描述了系统的三个主要角色(管理员、求职者和招聘者)的功能并绘制了相应的对应的类图。本章将分析系统架构设计和数据库设计,并详细描述每个模块的功能实现顺序和数据操作,以便为在线订购系统功能模块和架构设计提供一个完整而完整的描述。4.1系统架构设计该系统主要基于B/S体系结构,它也是主流的网站开发体系结构之一(B/S系统体系结构图如图4-1所示)。B/S体系结构技术是浏览器-服务器体系结构。该系统部署在网页上,而无需专门安装客户端。通过登录浏览器相应的网站访问系统和操作系统,服务器与系统交互以达到相应的要求。主要业务实现分为三个部分,即视图,控制器和模型。接收和处理用户请求的三个协调功能调用后台数据库模块进行业务处理,并将处理结果返回给用户可见的视图侧。一般来说,B/S体系结构模型大致具有以下两个特征:(1)操作便利随着技术的不断发展,人们的日常需求自然会越来越复杂和先进,这直接导致迫切需要升级使用客户进行相关业务处理的传统方式。在许多情况下,用户不愿意故意完成此事件。下载客户端进行操作。从服务器的角度来看,相关维护人员的巨大工作量也是一个棘手的问题。在客户端的每次更新和升级过程中,不仅需要跟踪服务器的进度以查看其是否正常运行,而且还需要对客户端进行监督。一系列问题,例如更新是否在用户端成功完成。在B/S体系结构模型下,根本不需要考虑这些问题。用户只需要登录浏览器并打开相应的网站即可执行无数的业务处理,从而放弃了之前不断升级并占用内存的客户端。它非常简单,方便,快速且非常稳定。另一方面,除了繁琐的客户端开发和维护之外,服务器还可以将更多精力放在改善服务性能以及如何提供各种新功能上。所有想法和测试仅需添加到特定的浏览器界面。就是这样。因此,B/S体系结构在解放用户并带来无限便利的同时,也解放了开发人员和运营工程师。使用成本低在过去的传统客户端模式下,在为不同的用户提供各种客户端软件的同时,用户自己的操作系统和服务器版本会带来一系列的兼容性问题,并且各种客户端的不同,系统的安全性也值得关注。在B/S体系结构模型下,根本不需要考虑这些问题。用户只需要登录浏览器并打开相应的网站即可处理无数的业务,而无需下载特定的客户端,这自然减少了客户端开发的需求。人力和物力成本,以及测试和维护的时间和精力。同时,在Linux平台下,免费构建服务器,具有很高的安全性和稳定性。另外,Linux系统是开源的,并且许多数据库操作软件是免费的,这将大大降低开发,操作和维护成本。图4-1B/S系统架构图4.2功能模块设计系统的功能主要包括后台和前台,后台主要是管理员的管理模块,包括用户管理、公司管理、个人求职管理、单位招聘管理和推荐介绍管理。前台主要为求职用户和招聘用户包括求职信息的搜索、招聘信息的搜索等功能模块,具体如图4-2所示:图4-2系统功能模块结构图4.2.1后台管理模块1.时序图设计后台管理模块主要是对系统数据的可视化和对用户公司等的管理。查看用户是系统管理员通过登录进入操作页面,对用户类进行访问可对已添加的账号进行权限设置,同时可对系统人员账号进行添加、账号修改、账号删除操作。具体的“查看用户”时序图如图4-3所示。图4-3查看用户时序图修改用户,是管理员在用户管理界面,点击需要修改的用户,并编辑相应的用户信息,返回到后端,后端处理成功后返回修改成功信息。时序图如图4-4所示。图4-4修改用户时序图4.2.2招聘模块1.时序图设计招聘模块主要是针对hr和企业的招聘端。hr提出访问请求进入招聘信息管理界面,查看简历、发布职位等操作,发布职位是hr通过点击添加职位并填写相应信息进行发布,系统返回发布成功的提示消息。具体的“发布职位”时序图如图4-5所示。图4-3发布职位时序图4.2.3求职模块1.时序图设计求职模块主要是针对普通用户的求职端。用户提出访问请求进入求职信息管理界面,查看职位、发布简历等操作,查看职位是用户通过点击主页的查看职位按钮或通过搜索功能,用户可以通过不同条件找到自己心意的职位,用户还可以通过后台返回的职位信息展示详细的职位信息。具体的“查看职位”时序图如图4-6所示。图4-6查看职位时序图4.3数据库设计4.3.1数据库概念设计E-R(Entity-Relationship,实体-关系)图用于反应数据库中实体之间的关系。图4-7是本系统的实体关系图。该图是从系统诸多繁杂的功能中提炼出的最主要的实体和重要的实体关系。系统中主要的实体有求职者、简历、教育经历、工作经历、公司、职位、订阅。图4-7数据库ER图4.3.2数据库主要表设计表4-1公司信息表(tab_company)序号字段名称字段描述字段类型长度允许空缺省值1company_id公司idint202name公司名varchar50√3linkman负责人varchar32√4phone电话varchar32√5email邮箱varchar50√6address地址datetime100√表4-2招聘信息表(tab_job)序号字段名称字段描述字段类型长度允许空缺省值1job_id招聘idint202name公司名varchar32√3register_data注册时间varchar32√4valid_data更新时间varchar32√5linkman负责人varchar32√6phone电话varchar20√7email邮箱varchar32√8address地址varchar100√9age_min年龄最小值int20√10age_max年龄最大值int20√11salary_min工资最小值int20√12Salary_max工资最大值int20√13education学历varchar20√14work_post职位varchar32√15work_industry工作行业varchar32√16work_city工作城市varchar32√17work_details工作细则varchar200√18user_name负责人varchar32√19user_organization部门varchar32√20operation_date操作时间varchar32√21job_str工作详情varchar100√22freeze是否冻结int20√23company_id所属公司idint20√24user_id操作用户idInt20√表4-3用户信息表(tab_user)序号字段名称字段描述字段类型长度允许空缺省值1userid用户idint202username用户名varchar32√3password密码varchar32√4identity身份varchar20√5name姓名varchar32√6gender性别varchar5√7email邮箱varchar50√8idcard身份证varchar20√9organization部门varchar50√表4-1求职信息表(tab_resume)序号字段名称字段描述字段类型长度允许空缺省值1resume_id求职idint202name姓名varchar32√3gender性别varchar5√4idcard身份证varchar32√5phone电话varchar20√6email邮箱varchar32√7birth_date出生日期varchar32√8register_date注册日期varchar32√9valid_date更新日期varchar32√10nation民族varchar20√11education学历varchar20√12political政治面貌varchar32√13address地址varchar100√14work_post职位varchar20√15work_industry行业varchar20√16work_city城市varchar20√17work_year工作年限int20√18salary_min最低工资int20√19salary_max最高工资int20√20remark求职意向varchar100√21work_experience工作经历varchar200√22user_name负责人varchar32√23user_organization部门varchar32√24operation_date操作日期varchar32√25resume_str附件地址varchar32√26freeze冻结int20√27userid所属用户idint20表4-1推荐信息表(tab_recommend)序号字段名称字段描述字段类型长度允许空缺省值1recommend_id推荐idint202resume_id求职idint203job_id招聘idint204state提交状态varchar204.4本章小结本章在前几章的项目背景和需求建模的基础上,详细分析了系统的总体轮廓设计,以便于在下一部分中进行详细的系统设计。首先,详细描述整个系统架构,并绘制系统架构图。其次,描述所涉及的主要实体的动作顺序以及以下所涉及的动作,并绘制每个动作的顺序图。最后一部分是数据库设计部分。它主要包括数据库的逻辑结构设计和物理结构设计。实体属性图用于进一步描述每个实体的关系模式,并绘制ER图。

第5章系统详细设计与实现上一部分完成了系统技术和原理分析,系统需求分析以及系统的总体设计。下一步是系统的详细设计。本章主要详细分析和描述系统的每个核心功能模块,分析所使用的技术原理和代码,并显示相应的前端页面。5.1实现系统功能所采用技术本系统实现了注册、登录、用户管理、公司管理、求职信息管理、招聘信息管理等个11个模块,各模块功能实现所采用技术见表5-1所示。表5-1系统功能及所采用技术一览表序号功能点通用技术专用技术1注册1.Layui前端框架技术2.springboot框架技术3.Ajax技术4.jsp技术5.servlet技术js表单验证技术,layer弹窗技术2登录验证码登录3验证码4消息反馈5控制中心6用户管理7个人求职登记8求职信息管理Excel报表生成9单位招聘登记10招聘信息管理11人选岗推荐12岗选人推荐13退出登录5.2登录注册模块5.2.1界面设计与实现登录和注册模块,作为一般网站系统的必需品,应位于系统入口处,也就是说,进入系统后,将跳至登录和注册页面,并提示用户进行登录。登录或注册后再进入系统。在登录过程中,用户需要填写用户名、密码和验证码,然后判断角色是管理员还是求职用户和招聘用户。最后,单击登录按钮进入系统。登录功能还有验证码验证功能具体的实现界面如图5-1、图5-2所示。图5-1用户登录界面图5-1用户注册界面5.2.2核心代码展示/**登录的核心代码*/@WebServlet("/loginServlet")

publicclassLoginServletextendsHttpServlet{

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

//1.设置编码

request.setCharacterEncoding("utf-8");

//2.获取数据

//2.1获取用户填写的验证码

Stringverifycode=request.getParameter("verifycode");

Map<String,String[]>map=request.getParameterMap();

Useruser=newUser();

//3.对验证码校验

HttpSessionsession=request.getSession();

Stringcheckcode_server=(String)session.getAttribute("CHECKCODE_SERVER");

session.removeAttribute("CHECKCODE_SERVER");//验证码的一次性

if(!checkcode_server.equalsIgnoreCase(verifycode)){//忽略大小写比较

//验证码不正确

//提示信息

request.setAttribute("login_msg","验证码错误!");

//跳转登录页面

request.getRequestDispatcher("/login.jsp").forward(request,response);

return;

}

//4.封装user对象

try{

//apach的包

BeanUtils.populate(user,map);

}catch(IllegalAccessExceptione){

e.printStackTrace();

}catch(InvocationTargetExceptione){

e.printStackTrace();

}

//5.调用Service查询

UserServiceservice=newUserServiceImpl();

UserloginUser=service.login(user);

intuserNum=service.allUserNum();

ResumeServiceservice1=newResumeServiceImpl();

intresumeNum=service1.allResumeNum();

JobServiceservice2=newJobServiceImpl();

intjobNum=service2.allJobNum();

//6.判断是否登录成功

if(loginUser!=null){

System.out.println("==="+loginUser);

//登录成功

//将用户存入session

session.setAttribute("user",loginUser);

session.setAttribute("userNum",userNum);

session.setAttribute("resumeNum",resumeNum);

session.setAttribute("jobNum",jobNum);

//跳转页面

if("管理员".equals(loginUser.getIdentity())||"操作员".equals(loginUser.getIdentity())){

response.sendRedirect(request.getContextPath()+"/index.jsp");

}elseif("求职用户".equals(loginUser.getIdentity())){

response.sendRedirect(request.getContextPath()+"/index1.jsp");

}elseif("招聘用户".equals(loginUser.getIdentity())){

response.sendRedirect(request.getContextPath()+"/index2.jsp");

}

}else{

//登录失败

//提示信息

request.setAttribute("login_msg","用户名或密码错误!");

//跳转登录页面

request.getRequestDispatcher("/login.jsp").forward(request,response);

}

}

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

this.doPost(request,response);

}

}/*验证码功能的实现*/

@Controller

@WebServlet("/checkCodeServlet")

publicclassCheckCodeServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

//服务器通知浏览器不要缓存

response.setHeader("pragma","no-cache");

response.setHeader("cache-control","no-cache");

response.setHeader("expires","0");

//在内存中创建一个长80,宽30的图片,默认黑色背景

//参数一:长

//参数二:宽

//参数三:颜色

intwidth=90;

intheight=35;

BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

//获取画笔

Graphicsg=image.getGraphics();

//设置画笔颜色为灰色

g.setColor(Color.GRAY);

//填充图片

g.fillRect(0,0,width,height);

//产生4个随机验证码,12Ey

StringcheckCode=getCheckCode();

//将验证码放入HttpSession中

request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);

//设置画笔颜色为黄色

g.setColor(Color.YELLOW);

//设置字体的小大

g.setFont(newFont("黑体",Font.BOLD,24));

//向图片上写入验证码

g.drawString(checkCode,15,25);

//将内存中的图片输出到浏览器

//参数一:图片对象

//参数二:图片的格式,如PNG,JPG,GIF

//参数三:图片输出到哪里去

ImageIO.write(image,"PNG",response.getOutputStream());

}

/**

*产生4位随机字符串

*/

privateStringgetCheckCode(){

Stringbase="0123456789ABCDEFGabcdefg";

intsize=base.length();

Randomr=newRandom();

StringBuffersb=newStringBuffer();

for(inti=1;i<=4;i++){

//产生0到size-1的随机值

intindex=r.nextInt(size);

//在base字符串中获取下标为index的字符

charc=base.charAt(index);

//将c放入到StringBuffer中去

sb.append(c);

}

returnsb.toString();

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

this.doGet(request,response);

}

}5.3控制中心模块5.3.1界面设计与实现控制中心页面主要是显示系统的总体信息。上方是用户数据、简历数据、公司数据的直观显示,再将数据可视化,形象展示了数据的变化趋势。另外管理员端还有留言的显示,实时反馈用户的建议和需求。下方显示了系统的版本信息和联系方式,对系统做了简单的介绍。控制中心具体的实现界面如图5-3所示。图5-3控制中心界面5.4用户管理模块5.4.1界面设计与实现用户管理页面主要是对用户的基本信息的管理页面。管理员可以通过信息查询,查询到相应的用户,并可以对选中的用户进行删除、预览、修改等操作。如果需要添加用户,只需填写简单的用户信息,后台返回添加结果实现添加。用户的展示是分页展示,前端向后台提供页数和一页展现的数量返回到后端。用户管理具体的实现界面如图5-4所示。图5-4用户管理界面5.4.2核心代码展示/*用户分页展示的核心代码*/

@Controller

@WebServlet("/findUserByPageServlet")

publicclassFindUserByPageServletextendsHttpServlet{

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

request.setCharacterEncoding("utf-8");

//1.获取参数

StringcurrentPage=request.getParameter("currentPage");//当前页码

Stringrows=request.getParameter("rows");//每页显示的条数

if(currentPage==null||"".equals(currentPage)){

currentPage="1";

}

if(rows==null||"".equals(rows)){

rows="10";

}

//获取条件查询参数

Map<String,String[]>condition=request.getParameterMap();

//2.调用service查询

UserServiceservice=newUserServiceImpl();

PageBean<User>pb=service.findUserByPage(currentPage,rows,condition);

//3.将pageBean存入request

request.setAttribute("pb",pb);

request.setAttribute("condition",condition);

//4.转发到userTab.jsp

request.getRequestDispatcher("/userTab.jsp").forward(request,response);

}

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

this.doPost(request,response);

}

}/*添加用户核心代码*/@Controller@WebServlet("/addUserServlet")publicclassAddUserServletextendsHttpServlet{protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//1.设置编码request.setCharacterEncoding("utf-8");//2.设置参数Map<String,String[]>map=request.getParameterMap();//3.封装对象Useruser=newUser();try{BeanUtils.populate(user,map);}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}//4.调用Service保存UserServiceservice=newUserServiceImpl();booleanflag=service.addUser(user);//5.判断是否添加if(flag){//添加成功//提示信息request.setAttribute("addUser_msg","添加成功!");//跳转登录页面request.getRequestDispatcher("/addUser.jsp").forward(request,response);}else{//登录失败//提示信息request.setAttribute("addUser_msg","有相同用户名添加失败!");//跳转添加页面request.getRequestDispatcher("/addUser.jsp").forward(request,response);}/*//5.跳转到userListServletresponse.sendRedirect(request.getContextPath()+"/userListServlet");*/}protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doPost(request,response);}}5.5公司管理模块5.5.1界面设计与实现公司管理页面主要是对公司的基本信息的管理页面。管理员可以通过信息查询,查询到相应的公司,并可以对选中的公司进行删除、预览、修改等操作。如果需要添加公司,只需填写简单的公司信息,后台返回添加结果实现添加。公司的展示是分页展示,前端向后台提供页数和一页展现的数量返回到后端。公司管理具体的实现界面如图5-5所示。图5-5公司管理界面5.6职位查询模块5.6.1界面设计与实现职位查询功能主要是求职用户查找自己心意的工作界面。用户可以通过初试匹配、完全匹配、自选匹配三种匹配方式搜索自己心意的工作,求职用户可以对喜欢的工作进行详细信息的查看,并可以提交相应的简历。提交简历页面可以选择自己已经添加的简历进行选择并提交。职位查询和提交简历具体的实现界面如图5-6和图5-7所示。图5-6职位查询界面图5-7简历提交界面5.6.2核心代码展示/*简历分页展示的核心代码*/

@Controller

@WebServlet("/findJobByPageServlet")

publicclassFindJobByPageServletextendsHttpServlet{

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

request.setCharacterEncoding("utf-8");

StringcurrentPage=request.getParameter("currentPage");//当前页码

Stringrows=request.getParameter("rows");//每页显示条数

Stringflag=request.getParameter("flag");//标记是哪一个html页面,0为岗位查找,1为人选岗

Stringresume_id=request.getParameter("resume_id");//resume_id当前的简历id

if(currentPage==null||"".equals(currentPage)){

currentPage="1";

}

if(rows==null||"".equals(rows)){

rows="10";

}

if(flag==null||"".equals(flag)){

flag="0";

}

//获取条件查询参数

Map<String,String[]>condition=request.getParameterMap();

//2.调用service查询

JobServiceservice=newJobServiceImpl();

PageBean<Job>pb=service.findJobByPage(currentPage,rows,condition);

//3.将pageBean存入request

request.setAttribute("pb",pb);

request.setAttribute("condition",condition);//查询的条件再返回回去

//4.转发到userTab.jsp

if("1".equals(flag)){

request.getRequestDispatcher("/findJob.jsp").forward(request,response);

}else{

request.getRequestDispatcher("/jobTab.jsp").forward(request,response);

}

}

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

this.doPost(request,response);

}

}5.7简历管理模块5.7.1界面设计与实现简历信息管理页面主要是对求职用户的简历管理页面。求职用户可以对选中的简历进行删除、预览、修改等操作。另外还添加了冻结和解冻简历的功能,冻结的简历就不能对其修改。如果需要添加简历,只需填写简单的简历信息,后台返回添加结果实现添加。简历的展示是分页展示,前端向后台提供页数和一页展现的数量返回到后端。简历信息管理具体的实现界面如图5-8所示。图5-8简历信息管理界面5.7.2核心代码展示/*冻结简历的核心代码*/

@Controller

@WebServlet("/freezeResumeServlet")

publicclassFreezeResumeServletextendsHttpServlet{

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

//1.获取id

Stringresume_id=request.getParameter("resume_id");

intfreeze=Integer.parseInt(request.getParameter("freeze"));

//2.调用service删除

ResumeServiceservice=newResumeServiceImpl();

service.freezeResume(resume_id,freeze);

//3.跳转到查询所有Servlet

response.sendRedirect(request.getContextPath()+"/findResumeB

温馨提示

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

评论

0/150

提交评论