项目编号:BS-PT-037
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:SSM+JSP
二,项目简介
本课题主要介绍人才招聘网站设计以及功能构建的实现。首先详细地叙述了人才招聘网站产生和发展的背景及意义,其次描述人才招聘网站的功能需求,整体系统结构的设计、数据库表的设计,最后完成人才招聘网站功能的实现。优点:网站整体风格简约大方,页面布局合理、网站操作方便,解决传统招聘本身地理位置限制问题、信息传递不便问题,为求职者和企业双方构建相互交流的网络平台。
本课题主要以SSM框架做为开发技术,同时采用MySQL作为后台数据库来实现人才招聘网站。其主要的功能是:普通用户投递职位信息和收藏职位信息;企业用户发布职位和查看投递者信息;管理员对普通用户和企业用户进行管理与维护。
本网站的主要目的就是让人才招聘网络化,使人才招聘变得更加容易,从而提高招聘人才的效率,降低招聘人才的成本。
人才招聘网站的建立主要分为以下四种角色分布,每种角色用户所具备的职责各自不同。
第一种:如图2-1所示,未注册的普通游客功能展示。
本网站的主要目的就是让人才招聘网络化,使人才招聘变得更加容易,从而提高招聘人才的效率,降低招聘人才的成本。
人才招聘网站的建立主要分为以下四种角色分布,每种角色用户所具备的职责各自不同。
第一种:如图2-1所示,未注册的普通游客功能展示。
图2-1 游客功能展示
未登录状态下的游客,如图2-1所示。通过访问本网站主页,可以查看职位列表,获取企业发布的职位信息。通过点击“查看企业详情”链接更进一步获取企业详情信息。游客用户在搜索职位信息同时还可以查看网站提供的新闻资讯。游客用户可以注册成为本网站会员,享有更多的功能体验。
第二种:如图2-2所示,已登录的求职者功能展示。
图2-2 求职者功能展示
已经登录状态下的求职者用户,如图2-2所示。求职者拥有更多的功能体验,除了游客用户所具备的功能之外,还有额外的功能体验,如职位收藏夹、职位投递、查看个人职位投递记录、个人简历预览以及修改。总的来说,已登录的求职者功能更多,用户体验效果更好。
第三种:如图2-3所示,企业用户。
图2-3 企业用户功能展示
企业用户是人才招聘网站职位发布一方,是求职招聘环节较为重要的组成部分。如图2-3所示,注册,完善企业信息之后企业游客用户就可以登录企业后台管理系统。企业后台管理系统为企业用户提供了企业信箱和添加职位信息两大较为重要的功能。
企业信箱是方便企业用户一方查看是哪位用户投递了什么样的职位,同时也方便查看求职者个人详细信息。
职位添加是企业用户最基本的功能之一,使用该功能可以快速创建职位信息,职位信息会及时地在网站主页面显示,求职者可以查看该职位信息,可以进行职位投递。
第四种:如图2-4所示,系统管理员。
图2-4 管理员用户功能展示
系统管理员用户是网站后台的管理者,如图2-4所示,其主要职能是针对企业用户和求职者用户,进行用户信息修改以及删除功能。
三,系统展示
搜索模块,是人才招聘网站设计展示、吸引顾客的最关键所在[7]。如图4-5所示,搜索界面集中展示了一些企业在本网站上发布的各式各样的职位信息,具体包括:职位的名称、工作地点、发布企业名称、职位薪资、发布时间。在职位列表上方提供了三个文本搜索输入框,用户在对应位置输入比如“文员”字样,再点击搜索按钮时,网站可以根据用户输入字段进行模糊查询,并且将查询出来的结果显示在职位列表页面上,具体效果如图所示。
人才招聘网站最为核心的功能便是职位投递功能,如图4-11所示,在已登录状态下,真实名称为“花满楼”的用户申请了一家企业发布的职位,系统弹出了“投递成功”的提示信息。
图4-11 第一次职位投递
实现的具体逻辑:
在如4-5所示的搜索页面上点击“查看企业详情”时,系统将职位名称、地址、工资等用户所需的数据封装起来,传递到SpringMVC相对应的Controller控制层接收具体参数,通过Model封装起来,传递到企业详情页面。在用户点击“申请职位”按钮时,首先取得所有封装的参数,再通过ajax技术传递到服务端负责处理投递职位的控制层,控制层接收到所有参数之后根据用户的真实姓名、所申请的职位名称以及职位地址三个条件进行判断,只要三个参数有一个不相同,说明该职位是第一次被投递,将数据插入数据库申请职位表中,系统向客户端返回“投递成功!”,如果三个参数全部相同,系统向用户返回“请不要重复投递!”,效果如图4-12所示。
图4-12 职位重复投递
人才招聘网站另一个较为核心的功能便是收藏功能,如图4-13所示,已登录的用户成功收藏了一家企业的职位信息。
图4-13 职位收藏
具体实现逻辑与职位投递思路大体相同,就是在如图4-5所示前台界面上收集所需的数据,传递到图4-10企业详情界面。用户在点击收藏按钮时,通过ajax技术将收集到的参数传递到服务端用于处理收藏功能的Controller控制层,系统接收前台界面传递的四个参数,向数据库中进行查询。企业名称、真实姓名、职位名称以及职位地址四个字段只要有一个不一致,说明是第一次收藏,四个字段全部相同表明不是第一次收藏,系统弹出“请不要重复收藏!”,效果如图4-14所示。
图4-14 职位重复收藏
图4-24 网站后台管理主页
如图4-25所示,为系统后台企业管理界面,当登录状态下的管理员点击左侧“查询所有企业”菜单链接之后,系统查询数据库企业信息表,将结果集合返回到中部区域页面,以列表形式回显。额外还提供了两个操作,修改和删除操作。
图 4-25 系统后台企业管理
如图4-26所示,为修改企业信息页面,后台系统管理员有权限修改企业用户信息情况,当登录状态下的管理员点击“修改”链接时,会跳转到“修改企业信息”页面,“修改企业信息”页面回显了企业相关信息,方便管理员查看。管理员在有需要的情况下,修改部分信息,点击底端保存按钮后,修改的内容会被存入数据库,并且返回查询所有企业页面,展示修改后的企业信息,与数据库保持同步。
图4-26 修改企业信息
如图4-27所示,为修改个人信息界面。系统后台提供对普通用户个人信息修改功能,具体实现原理与修改企业一致,就是将修改后的数据重新封装成对象,在管理员点击保存按钮之后插入数据库,然后返回到查询所有用户界面,再次从数据库中查出所有用户,与数据库保持同步。
图4-27 修改个人信息
四,核心代码展示
package com.song.work.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.song.work.model.Message; import com.song.work.model.User; import com.song.work.service.IUserService; import com.song.work.util.EncodingTool; @Controller @RequestMapping("/user") public class UserController { @Autowired public IUserService userService; // 查询所有用户 @RequestMapping("findAllUser") public String findAllUser(Model model) { List<User> userList = userService.findAll(); model.addAttribute("userList", userList); return "/user/listUser"; } /** * 查看个人简历 * @param model * @return */ @RequestMapping("showResume") public String showResume(Model model,HttpServletRequest request) { //获得session中存的当前对象 User currUser = (User) request.getSession().getAttribute("currUser"); String realname=currUser.getRealname(); //根据真实姓名查询用户 User user = userService.findUserByRealname(realname); model.addAttribute("user", user); return "/user/showUserResume"; } /** * 修改简历 * */ @RequestMapping("editResume") public String editResume(Model model,Integer uid) { User user = userService.findById(uid); if(user!=null){ model.addAttribute("user", user); } return "/user/editResume"; } /** * 保存简历 * */ @RequestMapping("saveResume") public String saveResume(Model model,User user) { userService.saveResume(user); model.addAttribute("user", user); return "forward:showResume";//转发到预览简历 } // 跳转到修改页面 @RequestMapping("editUser") public String editUser(Integer uid, Model model) { // 根据id查询 User user = userService.findById(uid); // 页面回显 model.addAttribute("user", user); return "/user/editUser"; } // 根据ID进行删除 @RequestMapping("deleteById") public String deleteById(Integer uid) { userService.deleteById(uid); // 重定向到用户列表界面 return "redirect:findAllUser"; } /** * 修改提交功能 * @author slj * @param uid 用户id * @param user 用户对象 * @return */ @RequestMapping("editUserSubmit") public String editUserSubmit(Integer uid, User user) { userService.updateUser(uid, user); return "redirect:findAllUser"; } /** * 用户注册 * @author slj * @return */ @RequestMapping("registUser") @ResponseBody public Message registUser(User user) { Message msg=new Message(); //根据登录名来判断 int result = userService.findByUserLoginName(user.getLoginName()); if(result==1){//登录名已经有了 msg.setStr("用户登录名已经存在"); return msg; }else{ userService.save(user);//插入具体数据 msg.setStr("success"); return msg; } } /** * 企业根据用户真实名字查询其详细 * @author slj */ @RequestMapping("findUserByRealname") public String findUserByRealname(String realname,Model model) { User user = userService.findUserByRealname(EncodingTool.encodeStr(realname)); if(user!=null){ model.addAttribute("user", user); return "/company/listUser"; }else{ throw new RuntimeException("对不起,没有该用户的具体信息"); } } /** * 用户登录 * @author slj * @return */ @RequestMapping("login") public String login(Model model) { return "/login/login"; } /** * 跳转到注册页面 * @author slj */ @RequestMapping("regist") public String toRegist(Model model) { return "/regist/registUser"; } /** * 退出登录 * @author slj * @param request * @return * @throws Exception */ @RequestMapping(value = "/exit") public String exit(HttpServletRequest request) throws Exception { //退出时清空session //request.getSession().invalidate(); request.getSession().removeAttribute("currUser"); return "/login/login"; } }
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统