当前位置: 首页 > news >正文

基于javaweb的SpringBoot公司日常考勤系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。

主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。

🍅文末获取源码联系🍅
🍅文末获取源码联系🍅
🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

《课程设计专栏》
《Java专栏》
《Python专栏》
⛺️心若有所向往,何惧道阻且长

文章目录

    • 一、运行环境与开发工具​
      • 运行环境要求​
    • 二、适用场景​
    • 三、功能说明​
      • 员工功能​
      • 管理员功能​
    • 四、环境搭建要点​
    • 五、技术栈解析​
      • 后端技术​
      • 前端技术​
    • 六、使用说明​
    • 七、功能页面展示
    • 八、部分代码展示

在当今数字化办公的浪潮下,高效的考勤管理系统成为企业提升管理效率的关键工具。今天,我们就来深入了解一款基于 JavaWeb 的 SpringBoot 公司日常考勤系统,它融合了多种前沿技术,为企业考勤管理提供了全面解决方案。​

一、运行环境与开发工具​

运行环境要求​

Java:版本需在 Java≥8 ,建议使用 Java JDK 1.8,系统在此环境下经过充分测试,稳定性高。虽然理论上其他版本也可行,但可能会出现兼容性问题。​

MySQL:数据库版本要求 MySQL≥5.7 ,5.7/8.0 版本均可稳定运行。​

Node.js:最低要求 Node.js≥14 ,需要注意的是,此项目为前后端分离架构,若没有 Node.js 基础,不建议尝试。​
开发工具推荐​

后端:eclipse、idea、myeclipse、sts 等开发工具均可进行配置运行。其中,IDEA 以其强大的功能和便捷的操作,成为众多开发者的首选。​

前端:WebStorm、VSCode、HBuilderX 等工具都能满足项目前端开发需求,开发者可根据个人习惯自由选择。​

二、适用场景​

这款考勤系统适用于各类课程设计、大作业、毕业设计、项目练习以及学习演示等场景。无论是学生用于实践学习,还是开发者用于技术研究,都具有很高的参考价值。​

三、功能说明​

系统包含员工和管理员两个角色,不同角色拥有不同的功能权限:​

员工功能​

登录:员工通过输入账号密码登录系统,进入个人工作界面。​

个人中心:员工可在此查看和管理个人信息。​

通知公告管理:接收公司发布的各类通知和公告,确保信息及时掌握。​

员工管理:可查看个人相关的工作信息,如岗位、部门等。

部门信息管理:了解所在部门的架构和人员信息。​

考勤基点管理:查看个人考勤相关的基础设置和规则。​

员工工资管理:查询个人工资明细等信息。​

管理员功能​

登录:管理员通过专属账号登录,进入管理后台。​

个人中心:管理个人账号设置等。​

通知公告管理:发布、编辑和删除公司通知公告。​

员工管理:对所有员工信息进行增删改查操作。​

部门信息管理:管理公司部门架构,包括新增、调整和删除部门等。​

考勤基点管理:设置和调整公司考勤规则和基础参数。​

员工请假管理:审批员工请假申请,管理请假流程。​

员工考勤管理:查看和统计员工考勤数据。​

员工工资管理:核算和管理员工工资发放。​

四、环境搭建要点​

运行环境:务必确保 Java JDK 1.8 安装配置正确,这是项目稳定运行的基础。​

IDE 环境:选择适合自己的开发工具,如 IDEA、Eclipse 或 Myeclipse ,导入项目并进行相关配置。​

硬件环境:操作系统为 windows 7/8/10,内存要求 1G 以上;Mac OS 系统同样适用。​

数据库:安装并配置好 MySql 5.7/8.0 版本,创建对应数据库并导入项目的 sql 文件。​

Maven 项目:此项目为 Maven 项目,导入成功后需执行 maven clean 和 maven install 命令,确保项目依赖全部下载。​

五、技术栈解析​

后端技术​

SpringBoot:快速构建后端应用,简化开发流程,提高开发效率。​

Mybaits:优秀的持久层框架,方便数据库操作和数据映射。​

前端技术​

Vue:流行的前端框架,构建交互式的 Web 界面。​

elementui:基于 Vue 的组件库,提供丰富美观的组件,提升用户体验。​

六、使用说明​

数据库导入:使用 Navicat 或其他数据库管理工具,在 mysql 中创建与项目 sql 文件同名的数据库,并导入 sql 文件。​

项目导入:使用 IDEA/Eclipse/MyEclipse 导入项目,导入后执行 maven clean 和 maven install 命令。​

配置修改:将项目中 application.yml 配置文件里的数据库配置修改为自己的数据库信息。​

项目运行:启动项目,在浏览器中输入登录页面地址:http://localhost:8080/springbootqi5ww/admin/dist/index.html​
管理员账号:abo 密码:abo​

员工账户:员工 1 密码:123456​

注意事项:项目文件路径中不能包含中文、空格、特殊字符等,否则可能导致图片上传失败。​

其中的技术细节或项目部署还有疑问,欢迎随时向我提问,我可以进一步为你提供更详细的解释和建议。​

七、功能页面展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、部分代码展示

@RestController
@RequestMapping("/leave")
public class LeaveController {
    @Autowired
    private LeaveService leaveService;

    /**
     * 发送申请表
     * @param leave
     * @return
     */
    @PostMapping("/sendLeave")
    public String sendLeave(@RequestBody Leave leave) {
        return leaveService.InsertLeave(leave);
    }

    /**
     * 修改申请表
     * @param leave
     * @return
     */
    @PostMapping("/updateLeave")
    public String updateLeave(@RequestBody Leave leave) {
        return leaveService.UpdateLeave(leave);
    }

    /**
     * *查找单个申请表
     * @param id
     * @return
     */
    @GetMapping("/findAllById/{id}")
    public Leave findAllByUsername(@PathVariable("id") Integer id) {
        return leaveService.findAllById(id);
    }

    /**
     * 学生查询申请表当前状态
     * @param username
     * @return
     */
    @GetMapping("/ShowOwnLeave/{username}")
    public Map<String, Object> ShowOwnLeave(@PathVariable("username") String username) {
        Map<String, Object> returnMap = new HashMap<String, Object>();
        List list = new ArrayList();
        Leave ownleave = leaveService.ShowOwnLeave(username);
        if(ownleave == null) {
            return returnMap;
        }else {
            returnMap.put("content", list);
            list.add(ownleave);
            returnMap.put("content", list);
            return returnMap;
        }
    }

    /**
     * 查询以往申请记录
     * @param currentPage
     * @param pageSize
     * @param username
     * @return
     */
    @GetMapping("/ShowOldLeave/{currentPage}/{pageSize}/{username}")
    public Map<String, Object> ShowOldLeave(@PathVariable("currentPage") Integer currentPage,
                                            @PathVariable("pageSize") Integer pageSize,
                                            @PathVariable("username") String username) {
        List test = leaveService.findAll(username);
        Integer size = test.size();//数据库中所有请假信息的总数
        PageHelper.startPage(currentPage, pageSize);
        Integer total = currentPage * pageSize; //分页可展示的总数
        Map<String, Object> returnMap = new HashMap<String, Object>();
        List list = null;
        returnMap.put("content", list);
        list = leaveService.showAOldLeave(username,total,size);
        returnMap.put("content", list);
        return returnMap;
    }

    /**
     * 按审核状态查询以往审核记录
     * @param currentPage
     * @param pageSize
     * @param username
     * @return
     */
    @GetMapping("/ShowLeave/{currentPage}/{pageSize}/{username}/{state}")
    public Map<String, Object> ShowLeave(@PathVariable("currentPage") Integer currentPage,
                                         @PathVariable("pageSize") Integer pageSize,
                                         @PathVariable("username") String username,
                                         @PathVariable("state") String state){
        Map<String, Object> returnMap = new HashMap<String, Object>();
        List list = null;
        List pagelist = null;
        returnMap.put("content", list);
        list = leaveService.showLeave(username, state);
        pagelist = leaveService.startPage(list, currentPage, pageSize);
        returnMap.put("content", pagelist);
        return returnMap;
    }

    /**
     * 删除申请表
     * @param id
     */
    @DeleteMapping("deleteLeave/{id}")
    public void deleteData(@PathVariable("id") Integer id) {
        leaveService.deleteLeave(id);
    }

    /**
     * 查找辅导员管理的班级
     * @param checkname
     * @return
     */
    @GetMapping("/findClass/{checkname}")
    public List findClass(@PathVariable("checkname") String checkname) {
        List audit = leaveService.FindClass(checkname);
        List list = new ArrayList();
        for(int i = 0 ; i < audit.size(); i++) {
            String classes = audit.get(i).getClasses();
            list.add(classes);
        }
        return list;
    }

    /**
     * 删除辅导员管理的班级
     * @param classes
     */
    @DeleteMapping("delClass/{classes}")
    public void delClass(@PathVariable("classes") String classes) {
        leaveService.delClass(classes);
    }

    /**
     * 添加辅导员要管理的班级
     * @param classes
     * @param realname
     * @return
     */
    @PostMapping("/insertClass")
    public String insertClass(@RequestBody Audit aidit) {
        return leaveService.insertAudit(aidit);
    }

    /**
     * 按班级查找对应的辅导员
     * @param classes
     * @return
     */
    @GetMapping("/findCheckname/{classes}")
    public String findCheckname(@PathVariable("classes") String classes) {
        String checkname = leaveService.FindCheckname(classes);
        if(checkname == null) {
            return "error";
        } else {
            return checkname;
        }
    }

    /**
     * 查询需要审核的请假表
     * @param currentPage
     * @param pageSize
     * @param username
     * @return
     */
    @GetMapping("/showExamLeave/{currentPage}/{pageSize}/{username}")
    public Map<String, Object> showExamLeave(@PathVariable("currentPage") Integer currentPage,
                                             @PathVariable("pageSize") Integer pageSize,
                                             @PathVariable("username") String username) {
        PageHelper.startPage(currentPage, pageSize);
        Map<String, Object> returnMap = new HashMap<String, Object>();
        List list = leaveService.showExamLeave(username);
        if(list == null) {
            return returnMap;
        }else {
            returnMap.put("content", list);
            return returnMap;
        }
    }

    /**
     * 审核请假表
     * @param username
     * @param leave
     * @return
     */
    @PostMapping("/examLeave/{username}")
    public String examLeave(@PathVariable("username") String username,@RequestBody Leave leave) {
        String StuUsername = leave.getUsername();
        Leave ownleave = leaveService.ShowOwnLeave(StuUsername);
        Integer oldId = ownleave.getId();
        Integer id = leave.getId();
        if(oldId == id) {
            return leaveService.examLeave(leave, username);
        }else {
            return "repeat";
        }
    }
}
@RestController
@RequestMapping("/attend")
public class AttendController {
    @Autowired
    private AttendService attendService;
    @Autowired
    private DataService dataService;

    /**
     * 添加学生考勤信息
     * @param attend
     * @return
     */
    @PostMapping("/insertAttend")
    public String insertAttend(@
@RestController
@RequestMapping("/user")
public class AccountController {
    @Autowired
    private UserService userService;
    @Autowired
    private DataService dataService;

    /**
     * 注册
     * @param user
     * @return
     */
    @PostMapping("/register")
    public String register(@RequestBody User user) {
        String username = user.getUsername();
        String choice = user.getChoice();
        String checkChoice = dataService.getChoice(username);
        if(checkChoice.equals("empty")) {
            // 学生信息不存在,请核对信息或者先进行录入
            return "empty";
        }else {
            if(choice.equals(checkChoice)) {
                // 学生姓名和学号与真实对应,可进行注册
                return userService.insertUser(user);
            }else {
                // 选择用户错误
                return "error";
            }
        }
    }

    /**
     * 登录
     * @param user
     * @return
     */
    @PostMapping("/login")
    public String login(@RequestBody User user) {
        String username = user.getUsername();
        String password = user.getPassword();
        String check = user.getChoice();
        User test = userService.findAllByUsername(username);
        if(test != null){
            String choice = test.getChoice();
            String encrypassword = test.getPassword();
            if (check.equals(choice)) {
                String matches = userService.matchesEncoder(password, encrypassword);
                return matches;
            }else {
                return "check";
            }
        }else {
            if(username.equals("admin")||username.equals("Admin")){
                return userService.loginAdmin(user);
            } else {
                return "empty";
            }
        }
    }

    /**
     * 通过旧密码或者验证码修改密码
     * @param user
     * @return
     */
    @PostMapping("/updatePassword")
    public String updatePassword(@RequestBody User user) {
        String username = user.getUsername();
        String check = user.getChoice();//前端输入的密码或验证码
        String newpassword = user.getPassword();
        User test = userService.findAllByUsername(username);
        if(test != null){
            String oldpassword = test.getPassword();
            String oldverifyCode = test.getVerifyCode();
            String passwordMatches =userService.matchesEncoder(check, oldpassword);
            String verifyCodeMatches =userService.matchesEncoder(check, oldverifyCode);
            if(passwordMatches.equals("success")||verifyCodeMatches.equals("success")) {
                userService.updatePassword(username,newpassword);
                return "success";
            } else {
                return "error";
            }
        }else {
            return "empty";
        }
    }

    /**
     * 通过验证码修改邮箱
     * @param user
     * @return
     */
    @PostMapping("/changeEmial")
    public String changeEmial(@RequestBody User user){
        String username = user.getUsername();
        String email = user.getEmail();
        String verifyCode = user.getVerifyCode();
        User test = userService.findAllByUsername(username);
        if(test != null){
            String oldverifyCode = test.getVerifyCode();
            String matches =userService.matchesEncoder(verifyCode, oldverifyCode);
            if(matches.equals("success")) {
                userService.updateEmail(username, email);
                return "success";
            }else {
                return "error";
            }
        }else {
            return "empty";
        }
    }

    /**
     * 发送邮箱并获取验证码
     * @param user
     * @return
     */
    @PostMapping("/getCheckemail")
    public String sendCodeToMail(@RequestBody User user){
        String username = user.getUsername();
        String email = user.getEmail();
        String choice = user.getChoice();
        User test = userService.findAllByUsername(username);
        if(test != null){ //判断用户是否存在
            String mailAddress = test.getEmail();
            String checkchoice = test.getChoice();
            String checkusername = test.getUsername();
            if (checkusername.equals(username)&&choice.equals(checkchoice)) {
                //根据username获取保存的邮箱
                if(email.equals(mailAddress)){ //用户输入邮箱与绑定邮箱一致→发送验证码
                    try{
                        //生成验证码
                        String verifyCode = RandomUtil.getCode();
                        //邮件主题
                        String emailTitle = "邮箱验证";
                        //邮件内容
                        String emailContent = "您正在进行邮箱验证,您的验证码为:" + verifyCode
                                +"\n\n 验证码将于5分钟后失效!";
                        //发送邮件
                        SendMailUtil.sendEmail(mailAddress, emailTitle, emailContent);
                        /* 将验证码注入数据库 */
                        userService.updateCode(username, verifyCode);
                        /* 验证码在指定时间内失效 */
                        Timer timer = new Timer();
                        timer.schedule(new TimerTask() {
                            public void run() {
                                String RandomCode = RandomUtil.getCode();
                                userService.updateCode(username, RandomCode);
                            }
                        },300000);//300000ms(300s)即5分钟
                        return "success";
                    }catch(Exception e){
                        return "error";
                    }
                }else{
                    //邮箱地址错误
                    return "addressError";
                }
            } else {
                //用户或选择用户错误
                return "userError";
            }
        }else{
            //用户不存在
            return "empty";
        }
    }

    /**
     * 按用户名查找单个账号信息
     * @param username
     * @return
     */
    @GetMapping("/findAllByUsername/{username}")
    public User findAllByUsername(@PathVariable("username") String username) {
        return userService.findAllByUsername(username);
    }

    /**
     * 分页查询所有账号信息
     * @param currentPage
     * @param pageSize
     * @return
     */
    @GetMapping("findAll/{currentPage}/{pageSize}")
    public Map<String,Object> findAll(@PathVariable("currentPage") Integer currentPage, @PathVariable("pageSize") Integer pageSize){
        PageHelper.startPage(currentPage, pageSize);
        Map<String,Object> returnMap=new HashMap<String,Object>();
        List list=null;
        returnMap.put("content", list);
        list= userService.findAll();
        returnMap.put("content", list);
        return returnMap;
    }

    /**
     * 按用户类型查询账号所有信息
     * @param currentPage
     * @param pageSize
     * @param choice
     * @return
     */
    @GetMapping("findAllByChoice/{currentPage}/{pageSize}/{choice}")
    public Map<String,Object> findAllByChoice(@PathVariable("currentPage") Integer currentPage, @PathVariable("pageSize") Integer pageSize
           , @PathVariable("choice") String choice){
        PageHelper.startPage(currentPage, pageSize);
        Map<String,Object> returnMap=new HashMap<String,Object>();
        List list=null;
        returnMap.put("content", list);
        list= userService.findAllByChoice(choice);
        returnMap.put("content", list);
        return returnMap;
    }

    /**
     * 删除用户信息
     * @param username
     */
    @DeleteMapping("deleteByUsername/{username}")
    public void deleteByUsername(@PathVariable("username") String username) {
        userService.deleteByUsername(username);
    }

    /**
     * 删除用户信息
     * @param username
     */
    @DeleteMapping("deleteAll")
    public void deleteByUsername() {
        userService.deleteAll();
    }

    /**
     * 通过验证码注销账号
     * @param user
     * @return
     */
    @SuppressWarnings("unused")
    @PostMapping("/delUser")
    public String delUserByCode(@RequestBody User user){
        String username = user.getUsername();
        String email = user.getEmail();
        String verifyCode = user.getVerifyCode();
        User test = userService.findAllByUsername(username);
        if(test != null){
            String oldverifyCode = test.getVerifyCode();
            String matches =userService.matchesEncoder(verifyCode, oldverifyCode);
            if(matches.equals("success")) {
                userService.deleteByUsername(username);
                return "success";
            }else {
                return "error";
            }
        }else {
            return "empty";
        }
    }

    /**
     * 按姓名模糊查询全部
     * @param currentPage
     * @param pageSize
     * @param realname
     * @return
     */
    @GetMapping("FuzzyQuery/{currentPage}/{pageSize}/{realname}")
    public Map<String, Object> FuzzyQuery(@PathVariable("currentPage") Integer currentPage,
                                          @PathVariable("pageSize") Integer pageSize, @PathVariable("realname") String realname) {
        PageHelper.startPage(currentPage, pageSize);
        Map<String, Object> returnMap = new HashMap<String, Object>();
        List list = null;
        returnMap.put("content", list);
        list = userService.FuzzyQueryByRealname(realname);
        returnMap.put("content", list);
        return returnMap;
    }

    /**
     * 按用户类型通过姓名模糊查询
     * @param currentPage
     * @param pageSize
     * @param realname
     * @param choice
     * @return
     */
    @GetMapping("FuzzyQuery/{currentPage}/{pageSize}/{realname}/{choice}")
    public Map<String, Object> FuzzyQueryByChoice(@PathVariable("currentPage") Integer currentPage,
                                                  @PathVariable("pageSize") Integer pageSize, @PathVariable("realname") String realname,
                                                  @PathVariable("choice") String choice) {
        PageHelper.startPage(currentPage, pageSize);
        Map<String, Object> returnMap = new HashMap<String, Object>();
        List list = null;
        returnMap.put("content", list);
        list = userService.FuzzyQueryByChioce(realname, choice);
        returnMap.put("content", list);
        return returnMap;
    }
}

相关文章:

  • CMake基础之-控制流
  • 【备赛】遇到的小问题-1
  • 施磊老师高级c++(一)
  • 8. Merge Sorted Array
  • 【C++基础】CMake项目
  • 使用 Spring 的 FactoryBean 创建和获取 Bean 对象
  • 将 VOC 格式 XML 转换为 YOLO 格式 TXT
  • 数据结构 -- 二叉树的存储结构
  • 使用python seaborn创建配对图:从核心概念到实战案例
  • 跨系统投屏:Realme手机(远程)投屏到Linux系统的简单方法
  • winx64 安装对应版本火狐浏览器驱动
  • 图生生AI修图,用“画面扩充“重构创作想象
  • 基于FPGA的3U机箱温度采集板PT100,应用于轨道交通/电力储能等
  • 如何在 Github 上获得 1000 star?
  • AI预测体彩排3新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月18日第22弹
  • 如何把视频转成动态图?
  • 调试 Rust + WebAssembly 版康威生命游戏
  • 【JavaEE】Mybatis 简单启动
  • 技术革命、需求升级与商业生态迭代——基于开源AI大模型与智能商业范式的创新研究
  • Batch Norm和Layer Norm
  • 王毅谈中拉论坛第四届部长级会议重要共识
  • 巴基斯坦总理:希望通过和平对话方式解决与印方问题
  • 巴基斯坦外长:印巴停火
  • 教育部答澎湃:2025世界数字教育大会将发布系列重磅成果
  • 近4小时会谈、3项联合声明、20多份双边合作文本,中俄元首今年首次面对面会晤成果颇丰
  • 治沙“异瞳”男生疑似摆拍,团队称合作12天多期视频为策划拍摄