基于Java人事管理信息系统设计实现(源码+lw+部署文档+讲解等)

news2024/12/24 9:13:28
博主介绍: ✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌
🍅 文末获取源码联系 🍅
👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》

系统介绍:

现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本人事管理信息系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此人事管理信息系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了员工基础数据的管理,考勤管理,薪资管理,绩效管理,请假管理,任务管理等功能。人事管理信息系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。

在分析并得出使用者对程序的功能要求时,就可以进行程序设计了。如图4.2展示的就是管理员功能结构图,管理员主要负责添加和修改员工信息,添加和修改员工薪资,天界和修改员工绩效和请假和任务等。

图4.2 系统功能结构图

功能截图:

5.1 管理员功能介绍

5.1.1 员工管理

如图5.1显示的就是员工管理页面,此页面提供给管理员的功能有:检查用户信息是否有误,及时更正登记有误的数据。

图5.1 用户管理页面

5.1.2 考勤管理

如图5.2显示的就是考勤管理页面,此页面提供给管理员的功能有:查看考勤记录。

图5.2 考勤管理页面

5.1.3 薪资管理

如图5.3显示的就是薪资管理页面,此页面提供给管理员的功能有:添加员工薪资列表,删除薪资,修改薪资和查看员工薪资。

图5.3 薪资管理页面

5.1.4 请假管理

如图5.4显示的就是请假管理页面,管理员可以对请假信息进行修改,也就是审核,可以对请假信息进行查看和删除。

图5.4 请假管理页面

代码实现:

package com.controller;


import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
/**
 * 任务
 * 后端接口
 * @author
 * @email
 * @date 2021-03-03
*/
@RestController
@Controller
@RequestMapping("/renwu")
public class RenwuController {
    private static final Logger logger = LoggerFactory.getLogger(RenwuController.class);

    @Autowired
    private RenwuService renwuService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private YonghuService yonghuService;


    //级联表service

    //字典表map
    Map<String, Map<Integer, String>> dictionaryMap;

    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
    logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isNotEmpty(role) && "用户".equals(role)){
            params.put("flag",1);
            Integer userId = (Integer) request.getSession().getAttribute("userId");
            YonghuEntity yonghuEntity = yonghuService.selectById(userId);
            params.put("bumenTypes",yonghuEntity.getBumenTypes());
            params.put("zhiweiTypes",yonghuEntity.getZhiweiTypes());

        }
    PageUtils page = renwuService.queryPage(params);

    //字典表数据转换
    List<RenwuView> list =(List<RenwuView>)page.getList();
        ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
        dictionaryMap = (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
        for(RenwuView c:list){
        this.dictionaryConvert(c);
        }
        return R.ok().put("data", page);
    }
    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        RenwuEntity renwu = renwuService.selectById(id);
        if(renwu !=null){
            //entity转view
            RenwuView view = new RenwuView();
            BeanUtils.copyProperties( renwu , view );//把实体数据重构到view中

            //字典表字典转换
            ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
            dictionaryMap = (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
            this.dictionaryConvert(view);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody RenwuEntity renwu, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,renwu:{}",this.getClass().getName(),renwu.toString());
        Wrapper<RenwuEntity> queryWrapper = new EntityWrapper<RenwuEntity>()
            .eq("renwu_types", renwu.getRenwuTypes())
            .eq("bumen_types", renwu.getBumenTypes())
            .eq("zhiwei_types", renwu.getZhiweiTypes())
            .eq("renwu_content", renwu.getRenwuContent())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        RenwuEntity renwuEntity = renwuService.selectOne(queryWrapper);
        if(renwuEntity==null){
            renwu.setInsertTime(new Date());
            renwu.setCreateTime(new Date());
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      renwu.set
        //  }
            renwuService.insert(renwu);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody RenwuEntity renwu, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,renwu:{}",this.getClass().getName(),renwu.toString());
        //根据字段查询是否有相同数据
        Wrapper<RenwuEntity> queryWrapper = new EntityWrapper<RenwuEntity>()
            .notIn("id",renwu.getId())
            .eq("renwu_types", renwu.getRenwuTypes())
            .eq("bumen_types", renwu.getBumenTypes())
            .eq("zhiwei_types", renwu.getZhiweiTypes())
            .eq("renwu_content", renwu.getRenwuContent())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        RenwuEntity renwuEntity = renwuService.selectOne(queryWrapper);
        if(renwuEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      renwu.set
            //  }
            renwuService.updateById(renwu);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        renwuService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }

    /**
    *字典表数据转换
    */
    public void dictionaryConvert(RenwuView renwuView){
        //当前表的字典字段
        if(StringUtil.isNotEmpty(String.valueOf(renwuView.getRenwuTypes()))){
            renwuView.setRenwuValue(dictionaryMap.get("renwu_types").get(renwuView.getRenwuTypes()));
        }
        if(StringUtil.isNotEmpty(String.valueOf(renwuView.getBumenTypes()))){
            Integer bumenTypes = renwuView.getBumenTypes();
            if(bumenTypes!=null){
                if(bumenTypes==0){
                    renwuView.setBumenValue("所有部门");
                }else{
                    renwuView.setBumenValue(dictionaryMap.get("bumen_types").get(bumenTypes));
                }
            }
        }
        if(StringUtil.isNotEmpty(String.valueOf(renwuView.getZhiweiTypes()))){
            Integer zhiweiTypes = renwuView.getZhiweiTypes();
            if(zhiweiTypes!=null){
                if(zhiweiTypes==0){
                    renwuView.setZhiweiValue("所有职位");
                }else{
                    renwuView.setZhiweiValue(dictionaryMap.get("zhiwei_types").get(renwuView.getZhiweiTypes()));
                }
            }

        }

        //级联表的字典字段
    }


}

论文参考:

目 录

目 录III

1 绪论1

1.1 研究背景1

1.2 目的和意义1

1.3 论文结构安排2

2 相关技术3

2.1 SSM框架介绍3

2.2 B/S结构介绍3

2.3 Mysql数据库介绍4

3 系统分析6

3.1 系统可行性分析6

3.1.1 技术可行性分析6

3.1.2 经济可行性分析6

3.1.3 运行可行性分析6

3.2 系统性能分析7

3.2.1 易用性指标7

3.2.2 可扩展性指标7

3.2.3 健壮性指标7

3.2.4 安全性指标8

3.3 系统流程分析8

3.3.1 操作流程分析8

3.3.2 登录流程分析9

3.3.3 信息添加流程分析10

3.3.4 信息删除流程分析11

4 系统设计12

4.1 系统概要设计12

4.2 系统功能结构设计12

4.3 数据库设计13

4.3.1 数据库E-R图设计13

4.3.2 数据库表结构设计16

5 系统实现19

5.1 管理员功能介绍19

5.1.1 员工管理19

5.1.2 考勤管理19

5.1.3 薪资管理20

5.1.4 请假管理20

6 系统测试22

6.1 系统测试的特点 22

6.2 系统功能测试23

6.2.1 登录功能测试23

6.2.2 添加类别功能测试23

6.3 测试结果分析23

结 论25

致 谢26

参考文献27

获取源码:
大家 点赞、收藏、关注、评 啦 、 查看 👇🏻 获取联系方式 👇🏻
精彩专栏 推荐订阅 下方专栏 👇🏻
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fast admin 使用百度富文本编辑器添加赋值

这篇文章为大家介绍一下fastadmin框架如何引入并使用百度富文本 文章目录 前言下载文件编辑文件配置上传图片添加代码总结 前言 在学习fastadmin的时候需要使用到富文本编辑器&#xff0c;于是查阅了一下资料&#xff0c;实现后将我的经验分享给大家 一、下载文件并放入自己的…

es6的模块化 import()方法进行动态加载模块

import 语句和import()方法是不一样的 import 语句是在编译的时候起作用&#xff0c;if&#xff08;&#xff09;{import 语句} 这句话在编译的时候不会执行if语句&#xff0c;会报错 import 语句无法在运行时加载模块&#xff0c;在语法上&#xff0c;按条件加载模块是不行…

Andriod开发 fragment

1.fragment fragment是一个可以嵌入到Activity中的可重用UI组件。它可以让你在一个Activity中展示多个界面&#xff0c;并且可以在运行时动态地添加、移除、替换和组合不同的fragment&#xff0c;从而实现复杂的UI交互效果。 与Activity类似&#xff0c;Fragment也有自己的生…

Linux监控Raid磁盘健康状态

Raid卡型号与操作 Raid卡市场主要是LSI、Adaptec、Highpoint、Promise等厂商提供。Adaptac被PMC收购后&#xff0c;提供的Raid卡即为PMC,简称为P卡。LSI公司提供的Raid卡&#xff0c;即为L卡。 Raid卡配置操作方式 Raid配置可以通过BIOS启动后进入Raid的配置页面进行配置&#…

【Proteus仿真】74HC192功能验证

前言 74HC192是一种四位可向上或向下计数的计数器芯片&#xff0c;可用于电子设备中的计数器、定时器和频率计等应用。74HC192的模式可以分为4种&#xff0c;向上计数&#xff0c;向下计数&#xff0c;并行输入&#xff0c;重置。还有就是&#xff0c;仿真中一些引脚的名称可能…

【硬件】嵌入式电子设计基础之单片机

本篇文章介绍了基于单片机平台开发的一些基本理论知识&#xff0c;包括了硬件最小系统的说明以及基于单片机开发的过程。文中还额外介绍了ARM体系架构&#xff0c;帮助读者从更深层次去熟悉我们平常最容易接触的开发平台&#xff0c;熟悉这些寄存器定义和处理器模式能够帮助我们…

为什么说网络安全是IT行业最后的红利?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万…

Python实现京东茅台抢购脚本, 原来这么简单

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 开发环境: python 3.8 运行代码 pycharm 2022.3.2 辅助敲代码 专业版 京东茅台抢购脚本可以分为以下几部分&#xff0c;具体实现步骤如下&#xff1a; 1. 登录京东账号 首先需要登录京东账号。 一个简单的方式是使用Pyth…

Linux 读书笔记之《鸟哥的 Linux 私房菜 基础学习篇(第四版)》

文章目录 鸟哥 Linux 私房菜&#xff08;基础学习篇&#xff09;第零章、计算器概论第一章、Linux 是什么与如何学习第二章、主机规划与磁盘分区第四章、首次登入与在线求助第五章、Linux 的文件权限与目录配置第六章、Linux 文件与目录管理第七章、Linux 磁盘与文件系统管理第…

springCloudAlibaba组件-Nacos-服务发现与负载均衡(三)

文章目录 服务发现概述服务发现两种形式nacos的负载均衡机制 服务发现概述 如果项目使用微服务架构&#xff0c;如果A微服务需要访问B微服务&#xff0c;需要http请求进行调用&#xff0c;当然需要B微服务的地址与端口号&#xff0c;微服务可以向之前提到的服务中心进行获取B服…

U盘无法格式化?快速解决方法大揭秘!

简介&#xff1a;本文将介绍如何解决U盘无法格式化的问题&#xff0c;并提供快速解决方法。无法格式化的U盘可能会导致数据无法读取或写入&#xff0c;因此解决这个问题具有重要价值。 工具原料&#xff1a; 电脑品牌型号&#xff1a;Lenovo ThinkPad T480 操作系统版本&…

开源代码分享(4)—考虑自动重合闸与DG的配电网可靠性评估(附matlab代码)

摘要&#xff1a;电力系统的可靠性是现代电力系统规划、设计和运行中的一个关键方面。智能电网概念的崛起为开发一个能够成为自愈电网的智能网络带来了很高的希望&#xff0c;提供了克服效用面临的中断问题的能力&#xff0c;并花费了数千万美元的维修和损失。在这项工作中&…

【C语言】C语言从入门到精通第1章C语言概述

目录 一、C语言发展史 &#xff08;一&#xff09;程序语言简述 1、机器语言 2、汇编语言 3、高级语言 &#xff08;二&#xff09;C语言的历史 二、C语言的特点 &#xff08;一&#xff09;高效性 &#xff08;二&#xff09;灵活性 &#xff08;三&#xff09;功能丰…

常用的几种图像置乱算法

图像置乱算法是一种用于保护图像信息安全的技术&#xff0c;它可以将原始的图像信息进行加密和混淆&#xff0c;使得未经授权的用户无法获取到原始的图像信息。在信息安全领域中&#xff0c;图像置乱技术被广泛应用于图像加密、数字水印、安全传输等方面。下面是几种常用的图像…

English Learning - L3 作业打卡 Lesson6 Day39 2023.6.12 周一

English Learning - L3 作业打卡 Lesson6 Day39 2023.6.12 周一 引言&#x1f349;句1: A Festival for the Dead is held once a year in Japan.成分划分弱读连读语调 &#x1f349;句2: This festival is a cheerful occasion.成分划分弱读连读语调 &#x1f349;句3: For on…

腾讯太狠:40亿QQ号, 给你1G内存,怎么去重?

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如腾讯、美团、阿里、拼多多、极兔、有赞、希音的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; 40亿Q号如何设计算法去重&#xff0c;相同的Q号码仅保留一个&#x…

在 Quarkus 中的使用 Mutiny 进行响应式编程

在 Quarkus 中使用 Mutiny - 事件驱动的 Java 响应式编程库 本教程介绍在 Quarkus 中使用事件驱动的 Mutiny 响应式编程库 以应对异步系统开发中的挑战。 概述 Mutiny 是一个&#xff08;Reactive Programming&#xff09;响应式编程库, 事件是 Mutiny 的设计核心&#xff0…

1.3 springboot项目中,数据层HikariCP与MyBatis整合

步骤1&#xff1a;在顶级父工程中pom引入mysql和mybatis依赖 <!-- mysql驱动 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.41</version> </dependency> <…

微信公众号每天定时发送消息给女朋友

前言 这是我在这个网站整理的笔记&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;RodmaChen 每天定时发送消息给女朋友 一. 环境准备二. 代码拉取和配置三. 项目部署3.1 直接运行3.2 后台运行 四. 效果图 参考地址&#xff1a;https://github.com/limoes…

云服务器部署极简版openGauss,本地Data Studio远程连接

openGauss是一款开源关系型数据库管理系统&#xff0c;华为研发&#xff0c;2020年7月1日开源。Data Studio提供了一个图形化界面来管理openGauss数据库。 1.下载安装包 在华为云上租一台服务器&#xff0c;操作系统选&#xff1a;openEuler 20.03 64bit (64-bit) 获取openGa…