Java项目:springboot宿舍管理系统

作者主页:Java毕设网

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

一、相关文档

        学生住宿管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样做非常麻烦,会浪费许多时间,因此效率比较低。当今社会是飞速发展的世界,原始的记录方式应该被社会淘汰,信息化管理才是适应时代的数据管理方式。进入21世纪,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。

        基于以上背景,我设计并实现了一套学生住宿管理系统。此管理系统被设计成一个采用B/S架构的Web应用程序,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。此系统具有运行速度快、安全性高、稳定性好的优点,并且具备完善的人机交互、信息修改功能,能够快速的查询到所需要的学生住宿信息。

      

        系统的主要功能执行流程是:宿舍管理员登录系统,向数据库中插入一条学生信息。系统根据插入的学生信息自动为该学生创建一个账户,用户名和密码默认值都是学生的学号。学生使用该用户名和密码登录系统,先修改密码,然后选择想入住的寝室并提交入住申请。宿舍管理员在后台通过入住申请,为该学生分配宿舍。学生可登录系统查看分配给自己的宿舍。

二、项目介绍

宿舍管理系统,分为系统管理员与学生两种角色;
系统管理员主要功能包括:
系统管理:用户列表、角色与权限;
学生管理:学生列表、教学班级;
宿舍管理:寝室列表、寝室类型;
入住管理:住宿申请、宿舍分配详情;

学生主要功能包括:
申请入住、个人信息管理;

三、环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
4.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
5.数据库:MySql 5.7版本;

四、技术栈

(1)Spring Boot v2.3.1  
(2)Spring Data JPA 的 hibernate实现  
(3)shiro 用于授权与认证  
(4)Thymeleaf+html 服务器端模板引擎  
(5)layui 布局前端界面
(6)jQuery 简化Dom操作与Ajax请求

五、使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置
4. 运行项目,输入localhost:8080/ 登录

六、运行截图

七、相关代码

学生管理控制器

package com.sdms.controller;

import com.sdms.bean.business.Student;

import com.sdms.bean.business.TeachingClass;
import com.sdms.service.StudentService;
import com.sdms.service.TeachingClassService;
import com.sdms.util.MyStringUtils;
import com.sdms.util.QueryResult;
import com.sdms.util.ResultUtils;
import com.sdms.vo.StudentVO;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Controller
public class StudentController {

    @Resource
    private StudentService studentService;

    @Resource
    private TeachingClassService teachingClassService;

    //使用thymeleaf模板渲染,这里的字符串指的是URL
    @RequestMapping("/admin/student-list")
    public String toStudentList(Model model) {
        List<TeachingClass> teachingClassList = teachingClassService.findAll();
        model.addAttribute("teachingClassList", teachingClassList);
        return "/admin/student-list";//这里的字符串指的是模板 /admin/student-list.html
    }

    //使用ajax在前端渲染

    /**
     * @param pageFromLayUI  计数方式是 1,2,3,4...,n  默认为 1 ;
     *                       但是 Pageable.page 的计数方式是 0,1,2,3,...,n-1 默认为 0
     * @param limitFromLayUI 等于 Pageable.size
     * @return 能被 layUI 接受的 JSON, 格式为 { "code": 0, "msg": "OK", count": 14, "data":[{},{},{}] }
     */
    @RequestMapping("/admin/students")
    @ResponseBody
    public ResultUtils<StudentVO> findAll(@RequestParam(value = "page", defaultValue = "1") Integer pageFromLayUI,
                                          @RequestParam(value = "limit", defaultValue = "10") Integer limitFromLayUI,
                                          @RequestParam(value = "queryParam[studentId]", defaultValue = "") String studentId,
                                          @RequestParam(value = "queryParam[keyWord]", defaultValue = "") String keyWord,
                                          @RequestParam(value = "queryParam[teachingClassId]", defaultValue = "-1") String teachingClassId,
                                          @RequestParam(value = "queryParam[queryType]", defaultValue = "1") String queryType) {
        //0精确搜索
        if ("0".equals(queryType)) {
            //精确查询
            if (!StringUtils.isEmpty(studentId)) {
                //传入的学生ID不为空
                Student student = studentService.findStudentById(studentId);
                if (null != student) {
                    StudentVO studentVO = StudentVO.convert(student);
                    List<StudentVO> studentVOList = new ArrayList<>();
                    studentVOList.add(studentVO);
                    return ResultUtils.layUITable(1L, studentVOList);
                }
            }
            //传入的用户编号不是数字 或者 null==student
            return ResultUtils.layUITable(0L, new ArrayList<>());
        } else {
            //模糊查询
            Student param = new Student();
            if (null == keyWord) {
                keyWord = "";
            }
            String s = StringUtils.trimAllWhitespace(keyWord);
            param.setName(s);
            QueryResult<StudentVO> queryResult;
            if ((!"-1".equals(teachingClassId)) && MyStringUtils.isNumeric(teachingClassId)) {
                System.out.println("限制");
                //限制班级
                queryResult = studentService.queryByKeyWordLikeWithClass(pageFromLayUI - 1, limitFromLayUI, param, Long.parseLong(teachingClassId));
            } else {
                //不限班级
                queryResult = studentService.queryByKeyWordLikeNoClass(pageFromLayUI - 1, limitFromLayUI, param);
            }
            //返回JSON结果
            return ResultUtils.layUITable(queryResult.getTotalCount(), queryResult.getData());
        }
    }

    //使用thymeleaf模板渲染
    @RequestMapping("/admin/student-input")
    //@RequiresPermissions(value = {"student-update", "student-add"}, logical = Logical.OR)
    public String toStudentInput(String studentId, Model model) {
        if ("-1".equals(studentId)) {
            model.addAttribute("operation", "添加新学生");
            model.addAttribute("student", new Student());
        } else {
            model.addAttribute("operation", "更新学生信息");
            Student student = studentService.findStudentById(studentId);
            model.addAttribute("student", student);
        }
        List<TeachingClass> teachingClasses = teachingClassService.findAll();
        model.addAttribute("teachingClasses", teachingClasses);
        return "/admin/student-input";//这里的字符串指的是 /admin/student-input.html
    }

    @RequestMapping("/admin/student-save")
    //@RequiresPermissions(value = {"student-update", "student-add"}, logical = Logical.OR)
    public String save(Student student) {
        studentService.save(student);
        return "redirect:/admin/student-list";
    }

    @RequestMapping("/admin/student-delete")
    //@RequiresPermissions({"student-delete"})
    public String deleteById(String studentId) {
        studentService.deleteById(studentId);
        return "redirect:/admin/student-list";
    }

    @RequestMapping("/admin/student-deleteAll")
    //@RequiresPermissions({"student-delete"})
    public String deleteByIds(String ids) {
        studentService.deleteAll(ids);
        return "redirect:/admin/student-list";
    }

}

教师管理控制器

package com.sdms.controller;

import com.sdms.bean.business.TeachingClass;
import com.sdms.service.TeachingClassService;
import com.sdms.util.ResultUtils;
import com.sdms.vo.TeachingClassVO;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

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

@Controller
public class TeachingClassController {
    @Resource
    private TeachingClassService teachingClassService;

    //使用thymeleaf模板渲染
    @RequestMapping("/admin/teachingClass-list")
    public String toTeachingClassList() {
        return "/admin/teachingClass-list";
    }

    //使用ajax在前端渲染

    /**
     * @param pageFromLayUI  计数方式是 1,2,3,4...,n  默认为 1 ;
     *                       但是 Pageable.page 的计数方式是 0,1,2,3,...,n-1 默认为 0
     * @param limitFromLayUI 等于 Pageable.size
     * @return 能被 layUI 接受的 JSON, 格式为 { "code": 0, "msg": "OK", count": 14, "data":[{},{},{}] }
     */
    @RequestMapping("/admin/teachingClasses")
    @ResponseBody
    public ResultUtils<TeachingClassVO> findAll(@RequestParam("page") Integer pageFromLayUI,
                                                @RequestParam("limit") Integer limitFromLayUI) {
        //获取记录的总数,交给前端计算分页
        Long count = teachingClassService.getTotalCount();
        //获取当前页的记录列表交给前端渲染,注意 layUI 和 pageable 关于 page 的计数差别
        List<TeachingClassVO> data = teachingClassService.findAll(pageFromLayUI - 1, limitFromLayUI);
        //返回JSON结果
        return ResultUtils.layUITable(count, data);
    }

    //使用thymeleaf模板渲染
    @RequestMapping("/admin/teachingClass-input")
    public String toTypeInput(Long teachingClassId, Model model) {
        if (-1 == teachingClassId) {
            model.addAttribute("operation", "添加班级");
            model.addAttribute("teachingClass", new TeachingClass());
        } else {
            model.addAttribute("operation", "更新班级");
            TeachingClass teachingClass = teachingClassService.findTeachingClassById(teachingClassId);
            model.addAttribute("teachingClass", teachingClass);
        }
        return "/admin/teachingClass-input";
    }

    @RequestMapping("/admin/teachingClass-save")
    public String save(@RequestParam("teachingClassId") Long teachingClassId,
                       @RequestParam("teachingClassName") String teachingClassName
    ) {
        TeachingClass teachingClass;
        if (null == teachingClassId) {
            teachingClass = new TeachingClass();
        } else {
            teachingClass = teachingClassService.findTeachingClassById(teachingClassId);
            if (null == teachingClass) {
                teachingClass = new TeachingClass();
            }
        }
        teachingClass.setName(teachingClassName);
        teachingClassService.save(teachingClass);
        return "redirect:/admin/teachingClass-list";
    }

    @RequestMapping("/admin/teachingClass-delete")
    public String delete(Long teachingClassId) {
        teachingClassService.deleteById(teachingClassId);
        return "redirect:/admin/teachingClass-list";
    }

    @RequestMapping("/admin/teachingClass-deleteAll")
    //@RequiresPermissions({"user-delete"})
    public String deleteById(String ids) {
        teachingClassService.deleteAll(ids);
        return "redirect:/admin/teachingClass-list";
    }
}

八、如果也想学习本系统,下面领取。关注并回复:056springboot

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值