• SpringBoot+Vue项目在线学生请假管理系统


    文末获取源码

    开发语言:Java

    使用框架:spring boot

    前端技术:JavaScript、Vue 、css3

    开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

    数据库:MySQL 5.7/8.0

    数据库管理工具:phpstudy/Navicat

    JDK版本:jdk1.8

    Maven:apache-maven 3.8.1-bin

    目录

    一、前言介绍 

    二、系统架构设计

    三、系统实现功能模块 

    3.1系统登录界面

    3.2学生用户管理模块

    3.3学生请假记录管理

    3.4行程上报记录管理模块

    3.5考勤打卡管理模块 

    四、部分核心代码

    4.1行程上报记录发布的关键代码 

    4.2考勤打卡关键代码

    4.3学生请假记录管理关键代码

    4.4学生管理关键代码

    4.5登录系统主要代码


    一、前言介绍 

    本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型。后端部分:采用springboot作为开发框架,同时集成MyBatis、Redis等相关技术。

    本文以java为开发技术,实现了一个在线学生请假管理系统。在线学生请假管理系统的主要使用者分为管理员、注册用户、招聘企业;管理员功能分为:首页、用户管理、行程上报记录、考勤打卡、学生请假记录、学生销假记录、请假类型管理,通过这些功能模块的设计,基本上实现了整个在线学生请假管理系统的过程。

    具体在系统设计上,采用了B/S的结构,同时,也使用java技术在动态页面上进行了设计,后台上采用Mysql数据库,是一个非常优秀的在线学生请假管理系统。

    二、系统架构设计

    在线学生请假管理系统的系统项目的概述设计分析,主要内容自习室管理系统 信息的具体分析,进行数据库的是设计,数据采用mysql数据库,并且对于系统的设计采用比较人性化的操作设计,对于系统出现的错误信息可以及时做出处理及反馈。

    在线学生请假管理系统的设计基于现有的手机,可以实现管理员:首页、用户管理、行程上报记录、考勤打卡、学生请假记录、学生销假记录、请假类型管理等详细的了解及统计分析。根据系统功能需求建立的模块关系图如下图

    这些功能可以充分满足在线学生请假管理系统的需求。此系统功能较为全面如下图系统功能结构如图

    系统功能结构图

    三、系统实现功能模块 

    3.1系统登录界面

    3.2学生用户管理模块

    3.3学生请假记录管理

    3.4行程上报记录管理模块

    3.5考勤打卡管理模块 

    四、部分核心代码

    4.1行程上报记录发布的关键代码 

    1. @RequestMapping("/get_obj")
    2. public Map<String, Object> obj(HttpServletRequest request) {
    3. Query select = service.select(service.readQuery(request), service.readConfig(request));
    4. List resultList = select.getResultList();
    5. if (resultList.size() > 0) {
    6. JSONObject jsonObject = new JSONObject();
    7. jsonObject.put("obj",resultList.get(0));
    8. return success(jsonObject);
    9. } else {
    10. return success(null);
    11. }
    12. }
    13. public Query select(Map<String,String> query,Map<String,String> config){
    14. StringBuffer sql = new StringBuffer("select ");
    15. sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
    16. sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
    17. if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
    18. sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
    19. }
    20. if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
    21. sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
    22. }
    23. if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
    24. int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
    25. int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
    26. sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
    27. }
    28. log.info("[{}] - 查询操作,sql: {}",table,sql);
    29. return runEntitySql(sql.toString());
    30. }

    4.2考勤打卡关键代码

    1. @RequestMapping(value = {"/count_group", "/count"})
    2. public Map<String, Object> count(HttpServletRequest request) {
    3. Query count = service.count(service.readQuery(request), service.readConfig(request));
    4. return success(count.getResultList());
    5. }

    4.3学生请假记录管理关键代码

    1. @RequestMapping(value = {"/sum_group", "/sum"})
    2. public Map<String, Object> sum(HttpServletRequest request) {
    3. Query count = service.sum(service.readQuery(request), service.readConfig(request));
    4. return success(count.getResultList());
    5. }

    4.4学生管理关键代码

    1. @RequestMapping(value = {"/sum_group", "/sum"})
    2. public Map<String, Object> sum(HttpServletRequest request) {
    3. Query count = service.sum(service.readQuery(request), service.readConfig(request));
    4. return success(count.getResultList());
    5. }

    4.5登录系统主要代码

    1. /**
    2. * 登录
    3. * @param data
    4. * @param httpServletRequest
    5. * @return
    6. */
    7. @PostMapping("login")
    8. public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
    9. log.info("[执行登录接口]");
    10. String username = data.get("username");
    11. String email = data.get("email");
    12. String phone = data.get("phone");
    13. String password = data.get("password");
    14. List resultList = null;
    15. Map<String, String> map = new HashMap<>();
    16. if(username != null && "".equals(username) == false){
    17. map.put("username", username);
    18. resultList = service.select(map, new HashMap<>()).getResultList();
    19. }
    20. else if(email != null && "".equals(email) == false){
    21. map.put("email", email);
    22. resultList = service.select(map, new HashMap<>()).getResultList();
    23. }
    24. else if(phone != null && "".equals(phone) == false){
    25. map.put("phone", phone);
    26. resultList = service.select(map, new HashMap<>()).getResultList();
    27. }else{
    28. return error(30000, "账号或密码不能为空");
    29. }
    30. if (resultList == null || password == null) {
    31. return error(30000, "账号或密码不能为空");
    32. }
    33. //判断是否有这个用户
    34. if (resultList.size()<=0){
    35. return error(30000,"用户不存在");
    36. }
    37. User byUsername = (User) resultList.get(0);
    38. Map<String, String> groupMap = new HashMap<>();
    39. groupMap.put("name",byUsername.getUserGroup());
    40. List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
    41. if (groupList.size()<1){
    42. return error(30000,"用户组不存在");
    43. }
    44. UserGroup userGroup = (UserGroup) groupList.get(0);
    45. //查询用户审核状态
    46. if (!StringUtils.isEmpty(userGroup.getSourceTable())){
    47. String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
    48. String res = String.valueOf(service.runCountSql(sql).getSingleResult());
    49. if (res==null){
    50. return error(30000,"用户不存在");
    51. }
    52. if (!res.equals("已通过")){
    53. return error(30000,"该用户审核未通过");
    54. }
    55. }
    56. //查询用户状态
    57. if (byUsername.getState()!=1){
    58. return error(30000,"用户非可用状态,不能登录");
    59. }
    60. String md5password = service.encryption(password);
    61. if (byUsername.getPassword().equals(md5password)) {
    62. // 存储Token到数据库
    63. AccessToken accessToken = new AccessToken();
    64. accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
    65. accessToken.setUser_id(byUsername.getUserId());
    66. tokenService.save(accessToken);
    67. // 返回用户信息
    68. JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
    69. user.put("token", accessToken.getToken());
    70. JSONObject ret = new JSONObject();
    71. ret.put("obj",user);
    72. return success(ret);
    73. } else {
    74. return error(30000, "账号或密码不正确");
    75. }
    76. }
  • 相关阅读:
    Linux系统编程:文件描述符以及IO多路复用
    SpringMVC04之JSON和全局异常处理
    PureFlash云原生存储部署方法
    开设自己的网站系类02配置服务器
    18、ajax、fetch、axios区别
    程序员面试金典 - 面试题 17.23. 最大黑方阵
    使用netty实现WebSocket协议通信
    runc和docker
    【洛谷】P2893 Making the Grade G
    [数据结构]~栈和队列(0-1)
  • 原文地址:https://blog.csdn.net/m0_49113107/article/details/127855528