作者主页: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";
}
}