基于javaweb+mysql的+JPA学生宿舍学生住宿申请管理系统(管理员、学生)

基于javaweb+mysql的+JPA学生宿舍学生住宿申请管理系统(管理员、学生)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

后台管理员:管理用户、学生、班级、宿舍、处理住宿申请、分配宿舍

前台学生:查询宿舍、申请宿舍

后台管理员:

前台学生:

技术框架

JSP JavaScript SpringBoot SpringDataJPA thymeleaf MySQL HTML


适用

课程设计,大作业,毕业设计,项目练习,学习演示等

            <div class="search" style="padding-top: 10px;">
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <input type="text" id="q_student_id" placeholder="请输入学号" autocomplete="off" class="layui-input">
                </div>
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <input type="text" id="q_key_word" placeholder="请输入姓名或其它关键词" autocomplete="off" class="layui-input">
                </div>
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <select id="q_teaching_class_id" lay-filter="teachingClasses">
                        <option value="" selected="">不限班级</option>
                        <option th:each="teachingClass : ${teachingClasses}"
                                th:value="${teachingClass.id}"
                                th:text="${teachingClass.name}"
                                value="">
                        </option>
                    </select>
                </div>
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <select id="q_query_type" lay-filter="">
    <link rel="icon" href="../../static/favicon.ico" th:href="@{/favicon.ico}" type="image/x-icon">
    <!--导入网页图标 -->
    <link rel="shortcut icon" href="../../static/favicon.ico" th:href="@{/favicon.ico}" type="image/x-icon">
    <!--导入layUI css库 -->
    <link rel="stylesheet" href="../../static/lib/layui/css/layui.css" th:href="@{/lib/layui/css/layui.css}"
          media="all">
    <!--导入公共的css,其中可定义整个网页的配色方案 -->
    <link rel="stylesheet" href="../../static/css/common.css" th:href="@{/css/common.css}">
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
    <!-- 页面的header -->
    <div th:replace="admin/_fragments :: admin-header" class="layui-header">
        <a href="javascript:void(0)">
            <div id="l-logo" class="layui-logo">学生住宿管理系统</div>
        </a>
                </a>
                <dl class="layui-nav-child">
                    <dd><a href="/user">个人中心</a></dd>
                </dl>
            </li>
            <li class="layui-nav-item"><a href="/logout">安全退出</a></li>
        </ul>
    </div>
    <!-- 页面的menu/左边的导航栏 -->
    <div th:replace="admin/_fragments :: admin-menu" id="div_side_bg" class="layui-side layui-bg-black">
        <div class="layui-side-scroll">
            <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
            <ul class="layui-nav layui-nav-tree" lay-filter="nav-dom">
                <li class="layui-nav-item">
                    <a class="" href="javascript:void(0)">系统管理</a>
                    <dl class="layui-nav-child">
                        <dd><a href="javascript:void(0)" th:href="@{/admin/user-list}">用户列表</a></dd>
                        <!--<dd><a href="javascript:void(0)" th:href="@{/admin/role-list}">角色与权限</a></dd>-->
                    </dl>
                </li>
                <li class="layui-nav-item">
                    <a href="javascript:void(0)">学生管理</a>
                    <dl class="layui-nav-child">
                        <dd><a href="javascript:void(0)" th:href="@{/admin/student-list}">学生列表</a></dd>
                        <dd><a href="javascript:void(0)" th:href="@{/admin/teaching-class-list}">教学班级</a></dd>
    public String toAdminRoomRequestList(Model model) {
        model.addAttribute("statuses", roomRequestService.listAllStatuses());
        return "admin/room-request-list"; // Thymeleaf模板的名字,表示 templates/admin/room-request-list.html
    }

    @ApiOperation("ajax:分页查询住宿申请信息")
    @RequestMapping(value = "/admin/room-requests", method = {RequestMethod.POST})
    @ResponseBody
    public Page<RoomRequest> fetchPage(@RequestBody PageRequest pageRequest) {
        return roomRequestService.fetchPage(pageRequest);
    }

    @ApiOperation("ajax:根据id查询住宿申请")
    @GetMapping("/admin/room-request/{id}")
    @ResponseBody
    public RoomRequest getRoomRequestById(@PathVariable Long id) {
        return roomRequestService.getRoomRequestById(id);
    }

    @ApiOperation("跳转到住宿申请编辑界面")
    @GetMapping("/admin/room-request/edit")
    public String toEditRoomRequestById(@RequestParam(defaultValue = "-1") long id, Model model) {
            var data = obj.data;
            if (obj.event === 'del') {
                layer.confirm("确定要删除名称为" + data.name + "的寝室吗?", {icon: 0, title: '提示'}, function (index) {
                    deleteByIds(data.id);
                    layer.close(index);
                });
            } else if (obj.event === 'edit') {
                window.location.href = "/admin/room/edit?id=" + data.id;
            }
        });
    });
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head th:replace="admin/_fragments :: head(~{::title})">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <div style="margin-top: 10px">
                <span class="layui-breadcrumb" lay-separator=" | ">
                <a href="/admin/index">首页</a>
                <a href="/admin/room-request-list">住宿申请</a>
                </span>
            </div>
            <div class="search" style="padding-top: 10px;">
                <div class="display-none layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <input type="text" id="q_room-request_id" placeholder="请输入ID" autocomplete="off"
                           class="layui-input">
                </div>
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <input type="text" id="q_key_word" placeholder="请输入关键词" autocomplete="off" class="layui-input">
                </div>
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <select id="q_status_id" lay-filter="statuses">
                        <option value="" selected="">不限状态</option>
                        <option th:each="status : ${statuses}"
                                th:value="${status.code}"
                                th:text="${status.message}"
                                value="">
                        </option>
                    </select>
                </div>
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <select id="q_query_type" lay-filter="">
                        <option value="0" selected="">模糊查询</option>
                    layer.msg("删除成功", {icon: 1, offset: 'c', time: 800});
                    window.location.reload();
                } else {
                    layer.msg("删除失败", {icon: 2, offset: 'c', time: 1000});
                }
            });
        }
        // 为表格配置查询条件
        var active = {
            reload: function () {
                //执行重载
                table.reload('table_id', {
                    page: {
                        curr: 1 //重新从第 1 页开始
                    },
        } else {
            // 新增,同时创建一个用户名和密码都是学号的用户
            val user = new User();
            user.setUsername(student.getId());
            user.setPassword(student.getId());
            val role = new Role();
            role.setId(1L); // 1表示学生
            user.setRole(role);
            val result = userService.saveUser(user);
            if (result.isSuccess()) {
                student.setUser(result.getValue());
                return success(studentDao.save(student));
            } else {
                return failure("创建用户失败");
            }
        }
    }

    @Override
                    <select id="q_query_type" lay-filter="">
                        <option value="0" selected="">模糊查询</option>
                        <option value="1">精确查询</option>
                    </select>
                </div>
                <button class="layui-btn layui-icon layui-icon-search" id="search_btn" data-type="reload"></button>
            </div>
            <table class="layui-hide" id="data-table" lay-filter="data-table"></table>
        </div>
        <div hidden id="info" th:text="${#strings.isEmpty(info)?'':info}"></div>
        <div hidden id="error" th:text="${#strings.isEmpty(error)?'':error}"></div>
    </div>
    <div th:replace="admin/_fragments :: admin-footer" class="layui-footer" id="sdms-footer"></div>
</div>
<!--导入footer -->
<script src="../../static/js/footer.js" th:src="@{/js/footer.js}"></script>
<!--导入jQuery库 -->
<script src="../../static/lib/jQuery/jquery-3.5.1.min.js" th:src="@{/lib/jQuery/jquery-3.5.1.min.js}"></script>
<!--导入cookie库 -->
<script src="../../static/lib/cookie/js.cookie-2.2.1.min.js" th:src="@{/lib/cookie/js.cookie-2.2.1.min.js}"></script>
<!--导入layUI js库 -->
import com.demo.common.result.LayuiResult;
import com.demo.entity.User;
import com.demo.service.RoleService;
import com.demo.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.val;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.annotation.Resource;

@Api("用户相关api")
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Collection;

import static com.demo.common.result.OperationResult.failure;
import static com.demo.common.result.OperationResult.success;
import static com.demo.common.util.BeanUtils.copyProperties;
import static com.demo.common.util.BeanUtils.getNullPropertyNames;
import static com.demo.common.util.StringUtils.isBlankOrNull;
import static com.demo.common.util.StringUtils.parseLong;
import static com.demo.common.util.StringUtils.trimAllWhitespace;

@Slf4j
@Service
public class UserServiceImpl implements UserService {
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <select id="q_category_id" lay-filter="categories">
                        <option value="" selected="">不限类型</option>
                        <option th:each="category : ${categories}"
                                th:value="${category.id}"
                                th:text="${category.name}"
                                value="">
                        </option>
                    </select>
                </div>
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <select id="q_query_type" lay-filter="">
                        <option value="0" selected="">模糊查询</option>
                        <option value="1">精确查询</option>
    <div th:replace="admin/_fragments :: admin-footer" class="layui-footer" id="sdms-footer"></div>
</div>
<!--导入footer -->
<script src="../../static/js/footer.js" th:src="@{/js/footer.js}"></script>
<!--导入jQuery库 -->
<script src="../../static/lib/jQuery/jquery-3.5.1.min.js" th:src="@{/lib/jQuery/jquery-3.5.1.min.js}"></script>
<!--导入cookie库 -->
<script src="../../static/lib/cookie/js.cookie-2.2.1.min.js" th:src="@{/lib/cookie/js.cookie-2.2.1.min.js}"></script>
<!--导入layUI js库 -->
<script src="../../static/lib/layui/layui.js" th:src="@{/lib/layui/layui.js}"></script>
<!--导入公共的js,其中实现了菜单按钮的点击事件-->
<script src="../../static/js/common.js" th:src="@{/js/common.js}"></script>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="create">添加用户</button>
        <button class="layui-btn layui-btn-danger layui-btn-sm" lay-event="deleteBatch">批量删除</button>
    </div>
</script>
<script type="text/html" id="rowBar">
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    public OperationResult<TeachingClass> saveTeachingClass(TeachingClass teachingClass) {
        if (teachingClass == null) {
            return failure("班级为null");
        }
        val name = teachingClass.getName();
        if (isBlankOrNull(name)) {
            return failure("班级名称不可以为空或者空白串");
        }
        return success(teachingClassDao.save(teachingClass));
    }

    @Override
    public OperationResult<String> deleteTeachingClassByIds(Collection<Long> ids) {
        try {
            teachingClassDao.deleteTeachingClassesByIdIn(ids);
        } catch (Exception e) {
            log.error("班级删除失败,ids=" + ids + ",error is " + e.getMessage());
            return failure("删除失败");
        }
                                class="layui-badge"
                                th:text="${session.noHandleCount==null?'0':session.noHandleCount}">6</span></a></dd>
                        <dd><a href="javascript:void(0)" th:href="@{/admin/allocation-list}">宿舍分配详情</a></dd>
                    </dl>
                </li>
            </ul>
        </div>
    </div>
    <div class="layui-body">
        <!-- 内容主体区域 -->
        <div style="width: 94%;height:92%; margin:auto">
            <!-- 面包屑-->
            <div style="margin-top: 10px">
                <span class="layui-breadcrumb" lay-separator=" | ">
                <a href="/admin/index">首页</a>
                <a href="/admin/student-list">学生列表</a>
                </span>
            </div>
            <div class="search" style="padding-top: 10px;">
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <input type="text" id="q_student_id" placeholder="请输入学号" autocomplete="off" class="layui-input">
                </div>
                <div class="layui-form layui-form-item layui-inline" style="margin-bottom: 0">
                    <input type="text" id="q_key_word" placeholder="请输入姓名或其它关键词" autocomplete="off" class="layui-input">
<!--导入footer -->
<script src="../../static/js/footer.js" th:src="@{/js/footer.js}"></script>
<!--导入jQuery库 -->
<script src="../../static/lib/jQuery/jquery-3.5.1.min.js" th:src="@{/lib/jQuery/jquery-3.5.1.min.js}"></script>
<!--导入cookie库 -->
<script src="../../static/lib/cookie/js.cookie-2.2.1.min.js" th:src="@{/lib/cookie/js.cookie-2.2.1.min.js}"></script>
<!--导入layUI js库 -->
<script src="../../static/lib/layui/layui.js" th:src="@{/lib/layui/layui.js}"></script>
<!--导入公共的js,其中实现了菜单按钮的点击事件-->
<script src="../../static/js/common.js" th:src="@{/js/common.js}"></script>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="create">添加用户</button>

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值