人类现已迈入二十一世纪,科学技术日新月异,经济、资讯等各方面都有了非常大的进步,尤其是资讯与网络技术的飞速发展,对政治、经济、军事、文化等各方面都有了极大的影响。
利用电脑网络的这些便利,发展一套工资管理系统,将会给员工及企业带来更大的效益,而在工资管理效能上,也必然会有很大的方便!这样可以节省大量的人力、时间和金钱。该系统主要包括员工、部门、考勤信息、员工工资、留言等。方便了管理员随时随地,只要电脑联网,就能对所有信息等进行管理。同时,方便员工查询考勤信息、员工工资等。
本篇论文对工资管理系统的需求分析、功能设计、系统设计进行了较为详尽的阐述,并对系统的整体设计进行了阐述,并对各功能的实现和主要功能进行了说明,并附上了相应的操作界面图。
关键词:工资管理系统;
Abstract
Humanity has entered the 21st century, with rapid changes in science and technology, and great progress has been made in various fields such as economy and information. In particular, the rapid development of information and network technology has had a great impact on politics, economy, military, culture, and other aspects.
Using these advantages of the computer network to develop a salary management system will bring greater benefits to employees and enterprises, and in terms of salary management efficiency, there will inevitably be great convenience! This can save a lot of manpower, time, and money. The system mainly includes employee, department, attendance information, employee salary, message, etc. It is convenient for administrators to manage all information anytime and anywhere as long as the computer is connected to the network. At the same time, it is convenient for employees to query attendance information, employee salaries, etc.
This paper describes the requirements analysis, functional design, and system design of the salary management system in more detail, and describes the overall design of the system. It also describes the implementation and main functions of each function, and attaches the corresponding operating interface diagram.
Key words: salary management system;
目 录
摘 要
Abstract
1 绪 论
1.1研究背景
1.2研究目的及意义
1.3研究方法
2 开发平台及技术简介
2.1 Spring boot框架
2.2 Java语言介绍
2.3 MySQL数据库
2.4 Eclipse 编辑器
2.5 Vue简介
3 系统分析 5
3.1可行性分析 5
3.1.1技术可行性 6
3.1.2经济可行性
3.1.3操作可行性 8
3.2需求分析 9
4 系统设计
4.1功能模块设计
4.2 E-R图设计
4.3数据库的表的设计与开发
5系统运行
5.1管理员功能模块
5.2 员工功能模块
6系统测试
6.1 系统测试运行环境
6.2 系统测试
6.3 测试运行记录
6.4系统运行与维护
结 论
参考文献
致 谢
1 绪 论
随着社会和经济的快速发展,信息技术已经迈入了新一代人工智能时代,人类的生活水平也随之水涨船高。随着计算机和互联网的广泛应用,人类对于使用智能技术进行社交活动的能力也越来越强。目前各大行业逐步引入了计算机技术[1]。传统的工资管理工作种类繁多,工作繁杂,要确保工资管理能顺利、有条不紊地进行,必须要建立一个电子化的工资管理系统。为了使这一问题得到更好的解决,一个功能强大、使用方便、操作简便、人性化的工资管理系统应运而生。随着网络的快速普及,使得工资管理系统可以被全面、广泛的运用。它使得传统的管理系统向电子化、智能化、综合化方向发展,实现集中管理、分散操作、共享信息[2]。
随着信息化的不断发展,科技的进步也越来越大。软件编程是一个不断发展的行业,每个行业都必须进行适合自身特点的系统开发,才能在企业中生存和发展。当前,随着网络的快速普及与不断扩大,员工量不断增多,企业在管理和维护工资管理上都遇到了巨大的困难。因此,员工在网站上查看考勤信息、员工工资、留言这是一个重要内容。同时,管理员对信息进行有效地管理和维护,还可以降低企业的工作负担、节约时间等。
在我国,随着各行业的发展,各个地区的行业都在积极探索与实践,并取得了一定的成效。当前,部分企业在借鉴国外先进的信息管理方式后,根据自己的实际情况,进行了一系列的现代化管理[3]。
从我国现阶段的信息化建设来看,当前的信息保存和更新仍有很多问题。由于计算机网络形态多样,分布不均,容易受到病毒、黑客等攻击。所以,加强对工资管理系统体系的维护是非常必要的。
springboot vue工资管理系统源码和答辩PPT论文905
演示视频:
springboot vue工资管理系统【源码 答辩PPT 论文 答疑 讲解视频】
package com.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
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.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
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.YuangongEntity;
import com.entity.view.YuangongView;
import com.service.YuangongService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
/**
* 员工
* 后端接口
* @author
* @email
* @date 2023-03-17 15:49:43
*/
@RestController
@RequestMapping("/yuangong")
public class YuangongController {
@Autowired
private YuangongService yuangongService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
YuangongEntity u = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", username));
if(u==null || !u.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(u.getId(), username,"yuangong", "员工" );
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody YuangongEntity yuangong){
//ValidatorUtils.validateEntity(yuangong);
YuangongEntity u = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", yuangong.getGonghao()));
if(u!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
yuangong.setId(uId);
yuangongService.insert(yuangong);
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");
YuangongEntity u = yuangongService.selectById(id);
return R.ok().put("data", u);
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
YuangongEntity u = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", username));
if(u==null) {
return R.error("账号不存在");
}
u.setMima("123456");
yuangongService.updateById(u);
return R.ok("密码已重置为:123456");
}
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,YuangongEntity yuangong,
HttpServletRequest request){
EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();
PageUtils page = yuangongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuangong), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,YuangongEntity yuangong,
HttpServletRequest request){
EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();
PageUtils page = yuangongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuangong), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( YuangongEntity yuangong){
EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();
ew.allEq(MPUtil.allEQMapPre( yuangong, "yuangong"));
return R.ok().put("data", yuangongService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(YuangongEntity yuangong){
EntityWrapper< YuangongEntity> ew = new EntityWrapper< YuangongEntity>();
ew.allEq(MPUtil.allEQMapPre( yuangong, "yuangong"));
YuangongView yuangongView = yuangongService.selectView(ew);
return R.ok("查询员工成功").put("data", yuangongView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
YuangongEntity yuangong = yuangongService.selectById(id);
return R.ok().put("data", yuangong);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
YuangongEntity yuangong = yuangongService.selectById(id);
return R.ok().put("data", yuangong);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody YuangongEntity yuangong, HttpServletRequest request){
yuangong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yuangong);
YuangongEntity u = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", yuangong.getGonghao()));
if(u!=null) {
return R.error("用户已存在");
}
yuangong.setId(new Date().getTime());
yuangongService.insert(yuangong);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody YuangongEntity yuangong, HttpServletRequest request){
yuangong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yuangong);
YuangongEntity u = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", yuangong.getGonghao()));
if(u!=null) {
return R.error("用户已存在");
}
yuangong.setId(new Date().getTime());
yuangongService.insert(yuangong);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody YuangongEntity yuangong, HttpServletRequest request){
//ValidatorUtils.validateEntity(yuangong);
yuangongService.updateById(yuangong);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
yuangongService.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<YuangongEntity> wrapper = new EntityWrapper<YuangongEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = yuangongService.selectCount(wrapper);
return R.ok().put("count", count);
}
}