摘 要
在当前的市场环境中。随着社会的进步和技术的发展,人才的重要性越来越突出,市场的竞争在很大程度上体现在人才的竞争上。因此。找到合适的人才,成为企业提高竞争力的一项关键所在。但是企业要在众多人群中找到合适自己需求的人才是一件相当困难和耗费成本的事情。并非没有人才,而是人才找不到企业而企业也找不到人才。因此如何快速的定位人才或企业成为了求职招聘需要考虑的重要因素。
本课题研究的求职招聘系统主要采取Mysql作为后台数据的主要存储单元,运用软件工程原理和开发方法,采用Java的Springboot框架构建完成。完成系统的主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、岗位查看、招聘公司、人才查询和应聘中心等功能的实现过程。
关键词:求职招聘; Springboot;人才查询
Development of springboot job recruitment system
Abstract
In the current market environment. With the progress of society and the development of technology, the importance of talents is becoming more and more prominent. The market competition is reflected in the competition of talents to a great extent. Therefore. Finding suitable talents has become a key for enterprises to improve their competitiveness. However, it is very difficult and costly for enterprises to find talents suitable for their needs among a large number of people. It's not that there are no talents, but that talents can't find enterprises, and enterprises can't find talents. Therefore, how to quickly locate talents or enterprises has become an important factor to be considered in job recruitment.
The job search and recruitment system studied in this subject mainly adopts MySQL as the main storage unit of background data, uses the principles and development methods of software engineering, and adopts the springboot framework of Java. Complete the page design and function realization of the main modules of the system. This paper shows the implementation effect of the home page, and introduces the implementation process of user registration function, post view, recruitment company, talent query and application center through code and page.
Key words: Job recruitment; Springboot;Talent query
目 录
第1章 绪论
1.1研究背景与意义
随着经济的发展,城市化步伐的加快,求职者队伍不断壮大。传统的人才招聘,对求职者来说,费时费力;对招聘企业来说,举办招聘会需要花费大量经费。所以在当今互联网已经成为人们生活一部分的社会里,越来越多的个人选择通过网络轻点鼠标寻求工作,越来越多的企业也开始选择网络进行招聘。
求职招聘系统满足了求职者和招聘企业双向的要求,求职招聘系统收集大量招聘企业的招聘信息,它使网上招聘从盲目的网络职位搜索到有序大量的职位投递,从混乱变为规范,而且成功率较高。
1.2开发现状
利用国际互联网开发和建立网上人力资源市场,在发达国家已经是司空见惯的事情,也是企业寻找人才的重要途径。网络招聘以其低成本、见效快、无地域限制的特点正在吸引着大批中高级人才和企业。据统计,2002年全球范围己有600万条就业信息在网上公布。用人企业也开始把眼界拓宽,美国《财富》杂志“世界500强招聘趋势”报告显示,到2002年,世界500强企业中,多达91%的企业实行了网上招聘系统。在我国,网络招聘也正在悄然兴起。根据2000年7月CNNIC发布的中国互联网络发展状况统计报告显示,在中国1690万网民中,有26.11%上网的主要目的是获得求职招聘信息,而又有19.62%认为求职招聘信息还不能满足自己的需求。半年后的2001年1月,再次调查结果显示,在中国的2250万网民中,有29.12%在网络上浏览的目的是获得职业信息,又有25.41%的网民认为网络求职招聘信息不能满足需求。通过对比可知,中国网民对网络求职随着认同度增加需求也增加了,另一个方面是随着需求的增加对人才网站的服务要求也提高了。这意味着中国人才网站发展的空间很大,而面临的用户也越来越成熟,这对那些小规模、不专业、服务跟不上的人才网站将是一个巨大的挑战。
1.3论文组成结构
根据市场调研得到的信息数据,结合国内外前沿研究,利用相关系统开发和设计方法,最终设计出求职招聘系统。
本文共有七章,如下所示。
第一章概述了求职招聘系统的研究目的和意义;精炼地总结了国内外在内的领域研究情况和未来的研究趋势,最后给出了论文的组成结构。
第二章简要概述了本文所用的开发技术和工具。
第三章简要对系统各业务流程进行需求分析、可行性分析。
第四章对求职招聘系统进行设计。
第五章对求职招聘系统进行实现,并贴出相关页面截图,语言描述出具体功能实现的操作方法。
第六章对求职招聘系统采用测试用例的方式来对一些主要功能模块测试,最后得出测试结果。
第七章总结全文并对未来的研究做出展望。
第2章 相关技术介绍
2.1 Vue.js 介绍:
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用(SPA)提供驱动。
2.2 Vue.js 主要功能:
Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能驱动复杂的单页应用。
2.3 spring boot框架介绍:
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。
2.4 spring boot框架特点:
SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
SpringBoot所具备的特征有:
可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
内嵌Tomcat或Jetty等Servlet容器;
提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
尽可能自动配置Spring容器;
提供准备好的特性,如指标、健康检查和外部化配置;
绝对没有代码生成,不需要XML配置。
2.5 Mysql数据库
Mysql 经过多次的更新,功能层面已经非常的丰富和完善了,从Mysql4版本到5版本进行了比较大的更新,在商业的实际使用中取得了很好的实际应用效果。最新版本的Mysql支持对信息的压缩,同时还能进行加密能更好的满足对信息安全性的需求。同时经过系统的多次更新,数据库自身的镜像功能也得到了很大的增强,运行的流畅度和易用性方面有了不小的进步,驱动的使用和创建也更加的高效快捷。最大的变动还是进行了空间信息的显示优化,能更加方便的在应用地图上进行坐标的标注和运算。强大的备份功能也保证了用户使用的过程会更加安心,同时支持的Office特性还支持用户的自行安装和使用。在信息的显示形式上也进行了不小的更新,增加了两个非常使用的显示区,一个是信息区,对表格和文字进行了分类处理,界面的显示更加清爽和具体。第二是仪表的信息控件,能在仪表信息区进行信息的显示,同时还能进行多个信息的比对,为用户的实际使用带来了很大的便捷
针对本文中设计的清远旅游推荐网站在实际的实现过程中,最终选择Mysql数据库的主要原因在于在企业的应用系统应用及开发的过程中会存在大量的数据库比较频繁的操作,而且数据的安全性要求也是非常的高。综合这些因素,最终选择安全性系数比较高的Mysql来对清远旅游推荐网站后台数据进行存储操作。
2.6 B/S体系结构:
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server同数据库进行数据交互。
第3章 系统分析
3.1可行性分析
本系统将在经济、技术、操作这三个角度上进行可行性分析。
3.1.1经济可行性
整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。
3.1.2技术可行性
技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于VUE框架,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用Mysql数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。
3.1.3操作可行性
求职招聘系统的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用Springboot框架开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。
3.2功能性需求分析
前台需求:
(1)用户模块:主要包括用户的注册和登陆、用户个人信息管理和用户帐单查询等功能。
(2)岗位查看模块:主要包括岗位介绍、岗位名称、性别要求、学历要求、薪资待遇。用户可以搜索岗位介绍等功能。
(3)招聘职位模块:主要展示企业发布的招聘信息,职位信息,用户可以在系统搜索某个企业招聘职位详情等功能。
(4)应聘中心模块:求职用户可以在线进行岗位应聘。
(5)招聘公司模块:主要用户企业发布招聘公司信息,包括公司名称、公司编号、公司账号、负责人、公司类别、公司地址等。
(6)人才查询模块:企业用户可以进行人才数据库的查询。
后台需求:
(1)用户管理:主要包括用户列表、用户数据管理等功能。
(2)岗位管理:主要包括岗位列表、岗位详情、工作性质、工作城市数据项管理等功能。
(3)应聘中心管理:主要包括求职者个人信息、学历信息、简历信息等数据项管理功能。
(4)招聘公司信息管理:主要对企业发布的招聘公司信息数据项管理功能。
系统用例图如下所示。
图3-1系统用例图
招聘岗位用例描述如下表所示。
表3-1招聘岗位用例描述
用例名称 | 添加新岗位 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行添加新岗位操作 | |
前置条件 | 管理员添加新岗位前必须登录系统 | |
后置条件 | 系统中添加一个新岗位 | |
基本事件流 | 参与者动作 | 系统响应 |
4、管理员填写新岗位信息,点击“添加”按钮。 | 2、系统打开添加新岗位界面。 3、系统检查管理员输入的岗位信息是正确有效的。 5、系统将招聘岗位到数据库中。 6、系统提示“操作成功”。 7、系统跳转到岗位管理界面。 | |
其他事件流 | 1、系统验证管理员输入的岗位名为空,则提示“*请填写岗位名称!”。 2、系统验证管理员输入的价格不是货币格式,则提示“*价格必须是货币格式!” |
岗位删除用例描述如下表所示。
表3-2岗位删除用例描述
用例名称 | 删除岗位 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行删除岗位操作 | |
前置条件 | 管理员删除岗位前必须登录系统 | |
后置条件 | 系统中删除一个岗位 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“岗位管理”。 4、管理员选择一个岗位,点击“删除”按钮。 6、管理员点击“确定”按钮。 | 2、系统从数据库中获取岗位信息列表 3、系统打开岗位列表界面。 5、系统提示“你确定要删除吗?”。 7、系统将岗位从数据库中删除。 8、系统提示“删除成功”。 9、系统跳转到岗位管理界面。 | |
其他事件流 | 无 |
岗位分类用例描述如下表所示。
表3-3岗位分类用例描述
用例名称 | 分类岗位 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行分类岗位操作 | |
前置条件 | 管理员分类岗位前必须登录系统 | |
后置条件 | 系统中分类一个岗位 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“岗位管理”。 4、管理员选择一个岗位,点击“分类”按钮。 6、管理员点击“确定”按钮。 | 2、系统从数据库中获取岗位信息列表 3、系统打开岗位列表界面。 5、系统提示“你确定要分类吗?”。 7、系统将岗位从数据库中分类。 8、系统提示“分类成功”。 9、系统跳转到岗位管理界面。 | |
其他事件流 | 无 |
用户编辑用例描述如下表所示。
表3-4用户编辑用例描述
用例名称 | 修改用户 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行修改用户信息操作 | |
前置条件 | 管理员已经登录系统 | |
后置条件 | 系统中更新一条用户记录 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“用户管理”。 4、管理员在用户列表中选择一个用户,点击“编辑”按钮。 6、管理员填写用户信息,点击“保存修改”按钮。 | 2、系统从数据库中获取用户信息。 3、系统打开用户列表界面。 5、系统打开修改用户信息界面。 7、系统将更改后的添加到数据库中。 8、系统提示“操作成功”。 9、系统跳转到用户管理界面。 | |
其他事件流 | 无 |
应聘中心用例描述如下表所示。
表3-5应聘中心用例描述
用例名称 | 应聘中心 | |
参与者 | 用户 | |
用例概述 | 本用例用于用户进行对应聘中心操作 | |
前置条件 | 用户已经登录系统 | |
后置条件 | 系统中增加一条用户投递记录 | |
基本事件流 | 参与者动作 | 系统响应 |
1、用户在前台首页选择任意一个岗位分类。 4、管理员在用户列表中选择一个岗位。 7、用户填写影评信息,点击提交按钮。 | 2、系统从数据库中获取岗位列表信息。 3、系统打开岗位列表界面。 5、系统从数据库中获取岗位信息。 6、系统打开岗位信息及投递界面。 8、系统检查用户输入的信息是正确有效的。 9、系统将应聘记录添加到数据库中。 | |
其他事件流 | 1、系统验证用户输入的字段为空,则提示“*应聘信息不能为空!”。 |
3.3非功能性需求分析
随着用户量的增加,系统可能会需要同时服务上千、上万个页面,服务器需要同时响应大量用户的操作,这就要求系统需要有良好的可扩展性,否则系统会出现延迟,卡顿甚至服务器崩溃的问题。高扩展性可以使软件保持旺盛的生命力,同时也能够使系统更好的适应用户增加、提高性能需求、增加应用功能等改变。
系统中保存了大量用户和管理员的个人信息,因此,保证系统服务器和数据安全是在开发过程中需要考虑的重要问题。安全性包括服务器安全、操作系统安全、数据库安全、程序代码安全以及用户个人信息和支付安全等,系统可以通过采用防火墙技术、加密技术、认证技术等来增强其安全性,只有一个健壮安全的系统才能具有长久的生命力。
第4章 系统设计
4.1功能模块设计
通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。
图4-1系统功能结构图
注册/登录
游客(未进行注册或登陆的用户)可以浏览、搜索招聘资讯,用户注册首先需要进行表单验证,来验证用户名和手机号码是否合法,然后验证用户名和手机号是否已经存在,验证通过即可注册。
注册成功后,用户可以通过输入用户名来登录系统,输入密码后进行验证。登录成功后,用户可以使用公司信息浏览、岗位搜索、应聘中心、留言中心等功能。
个人信息管理
用户登录系统后,在账户设置中,可以修改昵称、头像、手机号、登陆密码、收货地址等个人基本信息。
岗位搜索
系统首页展示了岗位搜索输入框,用户在输入框内输入与岗位名称相关的关键字,系统通过模糊查询搜索到用户需要的岗位并展示。
招聘岗位信息展示
用户在浏览招聘岗位时,点击某一个招聘岗位,跳转到该招聘岗位的信息展示页。在招聘岗位信息页面展示了招聘岗位的详情信息,比如招聘岗位介绍,招聘岗位详情,招聘岗位状态和收藏等,用户通过浏览信息了解招聘岗位的主要内容,最终决定是否投递简历进行岗位申请。
岗位列表
管理员可以在“岗位列表”中展示商城中需要销售的岗位,包含岗位名称,岗位属性以及类目等岗位信息。管理员可以对岗位进行搜索,按分类查询岗位。
岗位添加
添加岗位首先需要输入岗位基本信息,如岗位名称、岗位性质、岗位分类等;然后需要编辑岗位信息详情,如公司介绍,岗位描述,岗位性质等。管理员也可以删除已添加的岗位。
岗位分类管理
管理员根据岗位分类编号、岗位详情、岗位性质等基本岗位分类信息进行分类管理。
公司资讯管理
系统首页可以放置公司资讯。管理员可以添加、修改公司资讯的信息,如公司资讯名称,公司资讯图片,公司资讯链接地址等信息。
4.2数据库设计
4.2.1概念模型设计
概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 ID 标识、用户名、密码、电话、地址等属性。联系是指实体之间有意义的关联,包括一对一、一对多、多对多三种类型。
系统E-R图如下所示。
图4-2系统E-R图
在图中,用户应聘,关系为1:N,管理员管理应聘中心的关系为1:N。
4.2.2数据库逻辑设计
针对系统的实体和属性,结合数据设计思想,对系统的逻辑设计的内容进行如下描述。
招聘岗位(招聘岗位编号、公司名称、岗位类别、公司规模、城市、工作要求)。
应聘中心(应聘中心编号、岗位名称、公司账户、工作性质、学生账号、个人简历)。
人才查询(人才查询编号、学生账号、出生年月、最高学历、工作性质)。
招聘公司(招聘公司编号、公司名称、招聘内容、公司介绍)。
4.2.3数据库表设计
数据库表是设计和实现系统的一个重要基础。以下列出了求职招聘系统几个重要的数据库表。
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
student_registration_id | int | 11 | 是 | 是 | 学生注册ID |
student_account | varchar | 64 | 是 | 否 | 学生账号 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
date_of_birth | varchar | 64 | 否 | 否 | 出生年月 |
highest_education | varchar | 64 | 否 | 否 | 最高学历 |
nature_of_work | varchar | 64 | 否 | 否 | 工作性质 |
| varchar | 64 | 否 | 否 | |
address | varchar | 64 | 否 | 否 | 地址 |
remarks | text | 0 | 否 | 否 | 备注 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
recruitment_company_id | int | 11 | 是 | 是 | 招聘公司ID |
company_number | varchar | 64 | 否 | 否 | 公司编号 |
corporate_name | varchar | 64 | 否 | 否 | 公司名称 |
company_account_number | int | 11 | 否 | 否 | 公司账号 |
person_in_charge | varchar | 64 | 否 | 否 | 负责人 |
telephone | varchar | 16 | 否 | 否 | 电话 |
address | varchar | 64 | 否 | 否 | 地址 |
company_category | varchar | 64 | 否 | 否 | 公司类别 |
company_cover | varchar | 255 | 否 | 否 | 公司封面 |
company_profile | text | 0 | 否 | 否 | 公司简介 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
talent_query_id | int | 11 | 是 | 是 | 人才查询ID |
student_account | int | 11 | 否 | 否 | 学生账号 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
date_of_birth | varchar | 64 | 否 | 否 | 出生年月 |
highest_education | varchar | 64 | 否 | 否 | 最高学历 |
nature_of_work | varchar | 64 | 否 | 否 | 工作性质 |
| varchar | 64 | 否 | 否 | |
address | varchar | 64 | 否 | 否 | 地址 |
telephone | varchar | 16 | 否 | 否 | 电话 |
id | varchar | 255 | 否 | 否 | 身份证 |
student_avatar | varchar | 255 | 否 | 否 | 学生头像 |
curriculum_vitae | varchar | 255 | 否 | 否 | 个人简历 |
hits | int | 11 | 是 | 否 | 点击数 |
praise_len | int | 11 | 是 | 否 | 点赞数 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
position_view_id | int | 11 | 是 | 是 | 岗位查看ID |
corporate_name | varchar | 64 | 否 | 否 | 公司名称 |
company_account_number | int | 11 | 否 | 否 | 公司账号 |
post_name | varchar | 64 | 否 | 否 | 岗位名称 |
number_of_recruits | varchar | 64 | 否 | 否 | 招聘人数 |
gender_requirements | varchar | 64 | 否 | 否 | 性别要求 |
educational_requirements | varchar | 64 | 否 | 否 | 学历要求 |
salary | varchar | 64 | 否 | 否 | 薪资待遇 |
nature_of_work | varchar | 64 | 否 | 否 | 工作性质 |
job_details_ | varchar | 64 | 否 | 否 | 工作详情 |
company_cover | varchar | 255 | 否 | 否 | 公司封面 |
hits | int | 11 | 是 | 否 | 点击数 |
praise_len | int | 11 | 是 | 否 | 点赞数 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
application_center_id | int | 11 | 是 | 是 | 应聘中心ID |
corporate_name | varchar | 64 | 否 | 否 | 公司名称 |
company_account_number | int | 11 | 否 | 否 | 公司账号 |
post_name | varchar | 64 | 否 | 否 | 岗位名称 |
nature_of_work | varchar | 64 | 否 | 否 | 工作性质 |
student_account | int | 11 | 否 | 否 | 学生账号 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
telephone | varchar | 16 | 否 | 否 | 电话 |
curriculum_vitae | varchar | 255 | 否 | 否 | 个人简历 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
message_center_id | int | 11 | 是 | 是 | 留言中心ID |
message_date | date | 0 | 否 | 否 | 留言日期 |
nickname | varchar | 64 | 否 | 否 | 昵称 |
| varchar | 64 | 否 | 否 | |
telephone | varchar | 16 | 否 | 否 | 电话 |
student_account | int | 11 | 否 | 否 | 学生账号 |
message_content | text | 0 | 否 | 否 | 留言内容 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
company_registration_id | int | 11 | 是 | 是 | 公司注册ID |
company_number | varchar | 64 | 否 | 否 | 公司编号 |
company_account_number | varchar | 64 | 否 | 否 | 公司账号 |
corporate_name | varchar | 64 | 否 | 否 | 公司名称 |
person_in_charge | varchar | 64 | 否 | 否 | 负责人 |
address | varchar | 64 | 否 | 否 | 地址 |
company_category | varchar | 64 | 否 | 否 | 公司类别 |
registered_capital | varchar | 64 | 否 | 否 | 注册资金 |
company_profile | text | 0 | 否 | 否 | 公司简介 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
company_classification_id | int | 11 | 是 | 是 | 公司分类ID |
company_category | varchar | 64 | 否 | 否 | 公司类别 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
第5章 系统实现
5.1用户登录的实现
用户注册完成后,点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。
登录界面如下图所示。
图5-1登录界面
用户登录的逻辑代码如下所示。
/**
* 登录
* @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, "账号或密码不正确");
}
}
5.2系统前台主要功能实现
5.2.1首页的实现
用户界面要尽量简洁大方,使用户能够方便找到需要的功能入口,浏览、购买商品,且要易于修改和维护,同时还要保证用户合法和系统安全。
首页界面如下图所示。
图5-2首页界面
5.2.2用户注册的实现
用户进入系统首页后,点击“注册”链接进入到注册页面,按照页面提示输入用户名、密码和手机号,页面进行表单验证,验证输入的用户名和手机号是否合法,表单验证通过后,点击“立即注册”按钮,利用 Ajax 技术,对用户名和手机号实现页面无刷新验证,检测数据库中是否已经存在该用户名或手机号,若数据库中不存在,则注册成功,注册成功后,自动跳转到登录页面。
用户注册界面如下所示。
图5-3用户注册界面
用户注册关键代码如下所示。
* 注册
* @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);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
5.2.3招聘公司的实现
招聘公司页是展示系统招聘公司列表的页面,通过sql语句:"select shangpinxinximingcheng,id,tupian,jiage,addtime from shangpinxinxi order by addtime desc",将所有是招聘公司按编号降序排列。
招聘公司列表页面,如下图所示。
图5-4招聘公司列表页面
5.2.4招聘岗位列表的实现
系统首页提供了搜索招聘岗位的输入框,用户在输入框内输入想要查找招聘岗位的关键字,点击搜索按钮,系统将用户输入的关键字传递到后台。首先创建一个实体类 PageBean,该实体类的属性包括页码 pageCode、每页记录数 pageSize、总记录数 totalRecord 和一个 List 集合 beanList,利用输入的关键字对数据库进行模糊查询,将得到的结果存入 PageBean 中,返回PageBean 跳转到 goodList.php 页面,在 goodList.php 页面,使用循环将搜索到的结果分页展示。
岗位查看界面如下图所示。
图5-5岗位查看界面
5.3系统后台主要功能实现
5.3.1用户管理的实现
管理员对系统用户的管理,在yhzhgl.php实现管理员用户的管理,包括录入、删除、修改,修改密码通过SESSION获取用户名,然后输入新密码,提交到mod.php中,使用sql命令更新密码。
5.3.2招聘公司管理的实现
管理员可以获取系统中所有招聘公司的列表并对其进行编辑。管理员在添加招聘公司时,需要输入招聘公司基本信息,如名称、公司类别、负责人、成立时间、公司性质等,还需要输入招聘公司详情描述,包括对招聘公司功能的描述以及展示图片等。添加招聘公司完成,数据库招聘公司表添加一条信息。管理员可以搜索招聘公司,同时可以对已经添加的招聘公司进行编辑。
招聘公司管理界面如下图所示。
图5-6招聘公司管理界面
招聘公司管理关键代码如下所示。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
5.3.3应聘中心管理的实现
管理员在后台管理界面点击到所有应聘中心界面dingdan_list.php,向控制层dingdanAction发送请求,搜索当前所有应聘中心信息,dingdanAction向应聘中心数据访问层调用搜索全部应聘中心的请求,向数据库的应聘中心搜索当前所有应聘中心并将应聘中心信息以对象的形式层层返回到dingdan_list.php界面,显示出当前所有应聘中心信息。同时可以删除过期应聘中心,确认已有应聘中心,进行发布。
应聘中心管理界面如下图所示。
图5-7应聘中心管理界面
应聘中心管理关键代码如下所示。
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.3.4人才查询管理的实现
管理员在后台管理界面点击到所有人才查询界面dingdan_list.php,向控制层dingdanAction发送请求,搜索当前所有人才查询信息,dingdanAction向人才查询数据访问层调用搜索全部人才查询的请求,向数据库的人才查询搜索当前所有人才查询并将人才查询信息以对象的形式层层返回到dingdan_list.php界面,显示出当前所有人才查询信息,包括,学生账号、最高学历、工作性质等。
人才查询管理界面如下图所示。
图5-8人才查询管理界面
人才查询管理关键代码如下所示。
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
5.3.5留言中心管理的实现
管理员可以获取系统中所有留言中心的列表并对其进行管理。用户在添加留言中心时,需要输入留言中心的留言信息,添加留言中心完成。管理员对留言中心数据项进行管理。
留言中心管理界面如下图所示。
图5-9留言中心管理界面
第6章 系统测试
6.1系统可靠性测试
以进入系统首页的访问速度为例展示系统的性能测试;系统的主要用户群体是购物理念较为先进的消费者,系统要在3秒钟内响应;需要完成页面的首页轮播图片、岗位列表、应聘中心以及各功能模块入口等元素的显示。
6.2系统功能性测试
功能性测试是指执行指定的工作流程,通过对一个系统的所有特性和功能都进行测试确保符合需求和规范。
系统功能性测试表如下表所示。
表6-1系统功能性测试表
编号 | 测试功能 | 测试内容 | 测试结果 |
1 | 用户登录 | 1.验证用户名与密码的正确性。 2.验证密码是否可见。 | 通过 |
2 | 首页展示 | 1.首页数据是否成功加载。 2.验证搜索功能的准确性。 3.验证是否可以异步加载。 4.验证导航栏按钮。 | 通过 |
3 | 个人信息修改 | 1.验证登录名是否可以正常更改。 2.验证联系方式是否可以更改。 3.验证收货地址可以正常修改。 4.验证密码是否可以修改。 | 通过 |
7 | 岗位类目管理 | 1.验证类目新增是否可以成功。 2.验证类目删除是否可以成功。 | 通过 |
8 | 招聘公司管理 | 1.公司信息是否与上传一致。 2.是否能完成信息修改。 3.验证招聘公司发布信息修改。 | 通过 |
9 | 应聘中心 | 1.能否正常进行应聘中心管理。 2.验证数据准确性。 | 通过 |
10 | 人才查询 | 1.人才信息是否添加验证。 2.信息是否上传。 3.验证表单是否提交成功。 | 通过 |
11 | 用户管理 | 1.验证用户录入功能。 2.验证用户违规清理功能。 | 通过 |
6.3系统合格性测试
集成测试后,所有的模块已经全部连接完毕,形成了一个完整的系统。合格性测试是在集成测试完毕后,进一步对系统进行综合性的检测。经过合格性测试,可以检查出系统是否符合系统的设计,能够完成需求的所有功能。本系统经过最后的测试,所有模块功能都能按预定要求工作。
6.4测试结果
在实际测试中,经过一系列系统性的测试,使我们能够及时发现一些系统在设计中出现的疏忽和漏洞。经过严密的测试,不仅发现了模块内部的错误,也查找到模块连接后产生的错误。经过测试,对系统产生错误的地方进行优化、修改和完善,使得系统能够实现最初设计的基本功能。
第7章 总结与展望
此时项目已经完成,即使实施的时间不是很长,但是这个过程中需要准备很长的一段时间去对系统设计开发所实际到的技术进行学习。在学习的过程中,我逐渐认识得到了我自身存在的一些不足。对于一些控制是必要的应用技能,能够理解,整个过程中仅仅是一个掌握了常用的性能和控制方法,我觉得挺容易的。从该系统中,系统的分析和设计的调查数据,并且已经经历了几个月,并努力几个月,该系统已经完成。很显然,该系统仍有很多不成熟,在系统设计过程中有许多技术缺陷存在。在设计的过程中也涉及到了很多自己无法解决的问题,主要通过找专业的网站和论坛来解决这些问题,对于圆满完成我的毕业设计,他们也贡献了很大一部分力量。系统的开发环境和配置都是可以自行安装的,系统使用Java开发语言,使用比较成熟的Mysql数据库进行对系统前台及后台的数据交互,根据技术语言对数据库,结合需求进行修改维护,可以使得系统运行更具有稳定性和安全性,从而完成实现系统的开发。
系统投入运行时,各功能均运行正常。系统的每个界面的操作符合常规逻辑,对使用者来说操作简单,界面友好。整个系统的各个功能设计合理,体现了人性化。
求职招聘系统的主要特点有:
(1)简单大方,易于操作的 Web 页面;
(2)利用 Ajax 技术使页面进行无刷新更新;
(3)根据用户的浏览和搜索记录,用户可以浏览公司发布的岗位列表信息;
(4)应聘中心功能可以帮助用户进行岗位应聘;
(5)有良好的安全性和可扩展性,增强了系统的可靠性,使系统保持持久的生命力。
由于时间限制和本人能力条件有限,该系统还存在一些不足,今后也会出现许多新的开发技术,未来还可以对系统做出如下改进:
(1)优化系统页面,使页面更加美观且方便操作;
(2)优化职位搜索功能,提供多条件选择查询搜索;
(3)优化推荐功能,提高推荐的精准度;
(5)进一步提高系统的安全性,使系统更加健壮;
(6)优化数据和代码,提升软件效率,方便系统维护和扩展。
参考文献
[1]扶明亮,李刚.基于招聘网站大数据分析的求职者需求与企业需求匹配研究[J].统计与管理,2021
[2]唐韵清,王一诺,马瑞,徐婧.基于Web的网上求职招聘网站网络安全技术与应用,2021
[3]Claire Zulkey. The Virtual Job Hunt American Libraries,2021,
[4]李永钊,何菊香. Impacts of the COVID-19 Epidemic on Job Hunting—An Empirical Analysis Based on Provincial Panel Data现代管理,2021
[5]陆唯. 基于Kano模型的求职者需求分析和校招网站改版设计研究浙江理工大学,2020
[6]关鑫洁,黄思奇,位磊.基于Python的求职信息采集分析系统设计与实现计算机时代,2020
[7]王吉.基于SQL Server的求职创业补贴系统数据库设计数字技术与应用,2019
[8]黄中毓. 招聘系统的设计与实现西南交通大学,2019
[9]谢熙. 基于Andorid平台的“求职通”系统设计与实现电子科技大学,2019.
[10]荣先钊,林宇驰,李淼琛,李成伟,刘红美.基于JAVA的求职就业系统的设计与开发中外企业家,2018
[11]郝凯. 基于简历数据的职位推荐系统的设计与实现东南大学,2018.
[12]程敏. 基于web信息的个性化职位推荐系统的算法设计与实现西南石油大学,2018.
[13]于小平. 大学生求职(实习)招聘网站满意度调查与统计分析辽宁大学,2018.
[14]尹鑫. 基于Mahout框架的个性化职位推荐系统天津理工大学,2018.
[15]李闪闪. 社交网络招聘有效性影响因素研究南京林业大学,2017.
[16]吴文静. 留学生就业求职网站的设计研究华中师范大学,2017.
[17]王辉,彭倩.基于求职者视角的招聘网站使用意向影响因素分析重庆科技学院学报(社会科学版),2018
[18]苏畅. 在线就业招聘系统的设计与实现大连理工大学,2018
[19]谢梦蝶. 企业网站招聘网页设计对求职者求职意向的影响:用户感知的中介效应华东理工大学,2017
[20]车晨. 应届毕业生求职信息搜寻行为研究—意义建构理论的视角南京大学,2017.
致谢
时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。首先感谢我的导师,不仅在学习研究方面加以指导,也在生活和为人处世上给予帮助。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。