项目介绍
随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,蜗牛兼职网当然也不能排除在外。蜗牛兼职网是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot框架构建的一个管理系统。整个开发过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计等;详细设计主要包括系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对系统进行功能测试,并对测试结果进行分析总结,得出系统中存在的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为今后开发类似系统提供了借鉴和帮助。这种个性化的网上蜗牛兼职网特别注重交互协调与管理的相互配合,激发了管理人员的创造性与主动性,对蜗牛兼职网而言非常有利。
本蜗牛兼职网采用的数据库是Mysql,使用springboot框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。
开发环境
编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SpringBoot
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net
系统实现
5.1管理员功能模块
管理员登录,通过填写输入用户名、密码、角色进行登录,如图5-1所示。
图5-1管理员登录界面图
管理员登录进入蜗牛兼职网可以查看首页、个人中心、用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理等信息。
用户管理,在用户管理页面中可以通过填写用户名、密码、用户姓名、头像、性别、手机号码、邮箱等信息进行详情、修改、删除等操作,如图5-2所示。还可以根据需要对企业管理进行详情、修改或删除等详细操作,如图5-3所示。
图5-2用户管理界面图
图5-3企业管理界面图
兼职信息管理,在兼职信息管理页面中可以查看职位名称、图片、招聘人数、薪资待遇、职位简介、工作内容、发布日期、企业号、企业名称、联系人、联系方式等信息,并可根据需要对兼职信息管理进行详情、修改或删除等操作,如图5-4所示。
图5-4兼职信息管理界面图
职位申请管理,在职位申请管理页面中可以查看职位名称、招聘人数、薪资待遇、职位简介、工作内容、企业号、企业名称、申请日期、简历、用户名、用户姓名、手机号码、审核回复、审核状态等信息,并可根据需要对职位申请管理进行详情、修改或删除等详细操作,如图5-5所示。
图5-5职位申请管理界面图
留言板管理,在留言板管理页面中可以查看用户名、留言内容、回复内容等内容,并且根据需要对留言板管理进行详情、回复、修改或删除等详细操作,如图5-6所示。
图5-6留言板管理界面图
轮播图;该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作,如图5-7所示。
图5-7轮播图管理界面图
5.2用户功能模块
用户登录,通过填写用户名、密码、角色进行登录,如图5-8所示。
用户登录进入蜗牛兼职网可以查看首页、个人中心、职位申请管理等功能。如图5-9所示
图5-8用户登录界面图
图5-9用户功能界面图
职位申请管理,在职位申请管理页面中可以查看职位名称、招聘人数、薪资待遇、职位简介、工作内容、企业号、企业名称、申请日期、简历、用户名、用户姓名、手机号码、审核回复、审核状态等信息内容,并且根据需要对职位申请管理进行详情、修改或删除等其他详细操作,如图5-10所示。
图5-10职位申请管理界面图
5.3前台首页功能模块
蜗牛兼职网,在蜗牛兼职网可以查看首页、兼职信息、留言反馈、个人中心、后台管理等内容,如图5-11所示。
图5-11前台首页界面图
用户登录,通过填写用户名、密码进行登录,如图5-12所示。
图5-12用户登录界面图
兼职信息,在兼职信息页面可以填写职位名称、图片、招聘人数、薪资待遇、职位简介、工作内容、发布日期、企业号、企业名称、联系人、联系方式等信息进行点击下载,如图5-13所示。
图5-13兼职信息界面图
留言反馈,在留言反馈页面可以填写留言内容等进行立即提交或重置等操作,如图5-14所示。
图5-14留言反馈界面图
5.4企业功能模块
企业登录进入蜗牛兼职网可以查看首页、个人中心、兼职信息管理、职位申请管理等内容。企业登录,通过填写用户名、密码、角色进行登录,如图5-15所示。
图5-15企业登录界面图
个人信息,在个人信息页面中通过填写企业号、企业名称、图片、联系人、联系方式、邮箱、地址等信息还可以根据需要对个人信息进行修改,如图5-16所示。
图5-16个人信息界面图
兼职信息管理,在兼职信息管理页面中通过填写职位名称、图片、招聘人数、薪资待遇、职位简介、工作内容、发布日期、企业号、企业名称、联系人、联系方式等内容进行详情、修改、删除等操作,如图5-17所示。
图5-17兼职信息管理界面图
职位申请管理,在职位申请管理页面中通过填写职位名称、招聘人数、薪资待遇、职位简介、工作内容、企业号、企业名称、申请日期、简历、用户名、用户姓名、手机号码、审核回复、审核状态等内容进行详情、修改等操作,如图5-18所示。
图5-18职位申请管理界面图
核心代码
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.QiyeEntity;
import com.entity.view.QiyeView;
import com.service.QiyeService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 企业
* 后端接口
* @author
* @email
* @date
*/
@RestController
@RequestMapping("/qiye")
public class QiyeController {
@Autowired
private QiyeService qiyeService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
QiyeEntity user = qiyeService.selectOne(new EntityWrapper<QiyeEntity>().eq("qiyehao", username));
if(user==null || !user.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(), username,"qiye", "企业" );
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody QiyeEntity qiye){
//ValidatorUtils.validateEntity(qiye);
QiyeEntity user = qiyeService.selectOne(new EntityWrapper<QiyeEntity>().eq("qiyehao", qiye.getQiyehao()));
if(user!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
qiye.setId(uId);
qiyeService.insert(qiye);
return R.ok();
}
/**
* 退出
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
QiyeEntity user = qiyeService.selectById(id);
return R.ok().put("data", user);
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
QiyeEntity user = qiyeService.selectOne(new EntityWrapper<QiyeEntity>().eq("qiyehao", username));
if(user==null) {
return R.error("账号不存在");
}
user.setMima("123456");
qiyeService.updateById(user);
return R.ok("密码已重置为:123456");
}
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,QiyeEntity qiye, HttpServletRequest request){
EntityWrapper<QiyeEntity> ew = new EntityWrapper<QiyeEntity>();
PageUtils page = qiyeService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, qiye), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,QiyeEntity qiye, HttpServletRequest request){
EntityWrapper<QiyeEntity> ew = new EntityWrapper<QiyeEntity>();
PageUtils page = qiyeService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, qiye), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( QiyeEntity qiye){
EntityWrapper<QiyeEntity> ew = new EntityWrapper<QiyeEntity>();
ew.allEq(MPUtil.allEQMapPre( qiye, "qiye"));
return R.ok().put("data", qiyeService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(QiyeEntity qiye){
EntityWrapper< QiyeEntity> ew = new EntityWrapper< QiyeEntity>();
ew.allEq(MPUtil.allEQMapPre( qiye, "qiye"));
QiyeView qiyeView = qiyeService.selectView(ew);
return R.ok("查询企业成功").put("data", qiyeView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
QiyeEntity qiye = qiyeService.selectById(id);
return R.ok().put("data", qiye);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
QiyeEntity qiye = qiyeService.selectById(id);
return R.ok().put("data", qiye);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody QiyeEntity qiye, HttpServletRequest request){
qiye.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(qiye);
QiyeEntity user = qiyeService.selectOne(new EntityWrapper<QiyeEntity>().eq("qiyehao", qiye.getQiyehao()));
if(user!=null) {
return R.error("用户已存在");
}
qiye.setId(new Date().getTime());
qiyeService.insert(qiye);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody QiyeEntity qiye, HttpServletRequest request){
qiye.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(qiye);
QiyeEntity user = qiyeService.selectOne(new EntityWrapper<QiyeEntity>().eq("qiyehao", qiye.getQiyehao()));
if(user!=null) {
return R.error("用户已存在");
}
qiye.setId(new Date().getTime());
qiyeService.insert(qiye);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody QiyeEntity qiye, HttpServletRequest request){
//ValidatorUtils.validateEntity(qiye);
qiyeService.updateById(qiye);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
qiyeService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<QiyeEntity> wrapper = new EntityWrapper<QiyeEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = qiyeService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
论文参考
目 录
摘 要 I
ABSTRACT II
目 录 II
第1章 绪论 1
1.1背景及意义 1
1.2 国内外研究概况 1
1.3 研究的内容 1
第2章 相关技术 2
2.1 B/S架构 2
2.2 Java技术介绍 3
2.3 mysql数据库介绍 3
2.4 springboot框架 4
第3章 系统分析 5
3.1 需求分析 5
3.2 系统可行性分析 5
3.2.1技术可行性:技术背景 5
3.2.2经济可行性 6
3.2.3操作可行性: 6
3.3 项目设计目标与原则 6
3.4系统流程分析 7
3.4.1操作流程 7
3.4.2添加信息流程 8
3.4.3删除信息流程 9
第4章 系统设计 11
4.1 系统体系结构 11
4.2开发流程设计系统 12
4.3 数据库设计原则 13
4.4 数据表 15
第5章 系统详细设计 19
5.1管理员功能模块 20
5.2用户功能模块 23
5.3前台首页功能模块 23
5.4企业功能模块 23
第6章 系统测试 25
6.1系统测试的目的 25
6.2系统测试方法 25
6.3功能测试 26
结 论 28
致 谢 29
参考文献 30