博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到🔎百套Python实战项目持续更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系❤️ ⚠️一定要先收藏⚠️
4系统概要设计
4.1概述
本系统后台采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要学生能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示:
图4-1系统工作原理图
4.2系统结构
设计的管理员功能结构图如下图所示:
图4-2管理员功能结构图
设计的学生功能结构图如下图所示:
图4-2学生功能结构图
4.3.数据库设计
概念设计的目标是设计出反映某个组织部门信息需求的数据库系统概念模式,数据库系统的概念模式独立于数据库系统的逻辑结构、独立于数据库管理系统(DBMS)、独立于计算机系统。
概念模式的设计方法是在需求分析的基础上,用概念数据模型(例如E-R模型)表示数据及数据之间的相互联系,设计出反映学生信息需求和处理需求的数据库系统概念模式。概念设计的目标是准确描述应用领域的信息模式,支持学生的各种应用,这样既容易转换为数据库系统逻辑模式,又容易为学生理解。数据库系统概念模式是面向现实世界的数据模型,不能直接用于数据库系统的实现。在此阶段,学生可以参与和评价数据库系统的设计,从而有利于保证数据库系统的设计与学生的需求相吻合。在概念模式的设计中,E-R模型法是最常见的设计方法。本系统的E-R图如下图所示:
图4.12 学生信息实体属性图
(2)宿舍实体属性图如图4.13所示:
图4.13 宿舍实体属性图
(3)班级信息实体属性图如图4.14所示:
图4.14 班级信息实体属性图
宿舍管理系统小程序需要后台数据库,下面介绍数据库中的各个表的详细信息:
表4.1 班级
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
banji | varchar(200) | 否 | 班级 |
表4.2 报修处理
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
baoxiushebei | varchar(200) | 是 | NULL | 报修设备 |
leixing | varchar(200) | 是 | NULL | 类型 |
tupian | varchar(200) | 是 | NULL | 图片 |
baoxiuriqi | varchar(200) | 是 | NULL | 报修日期 |
weixiufankui | varchar(200) | 是 | NULL | 维修反馈 |
weixiujindu | varchar(200) | 是 | NULL | 维修进度 |
gengxinriqi | datetime | 是 | NULL | 更新日期 |
xuehao | varchar(200) | 是 | NULL | 学号 |
xueshengxingming | varchar(200) | 是 | NULL | 学生姓名 |
sushehao | varchar(200) | 是 | NULL | 宿舍号 |
banji | varchar(200) | 是 | NULL | 班级 |
userid | bigint(20) | 是 | NULL | 学生id |
表4.3 报修信息
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
baoxiushebei | varchar(200) | 否 | 报修设备 | |
leixing | varchar(200) | 否 | 类型 | |
tupian | varchar(200) | 是 | NULL | 图片 |
baoxiuneirong | longtext | 是 | NULL | 报修内容 |
baoxiuriqi | date | 是 | NULL | 报修日期 |
xuehao | varchar(200) | 是 | NULL | 学号 |
xueshengxingming | varchar(200) | 是 | NULL | 学生姓名 |
banji | varchar(200) | 是 | NULL | 班级 |
sushehao | varchar(200) | 是 | NULL | 宿舍号 |
shouji | varchar(200) | 是 | NULL | 手机 |
sfsh | varchar(200) | 是 | 否 | 是否审核 |
shhf | longtext | 是 | NULL | 审核回复 |
userid | bigint(20) | 是 | NULL | 学生id |
表4.4 公告信息评论表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
refid | bigint(20) | 否 | 关联表id | |
userid | bigint(20) | 否 | 学生id | |
nickname | varchar(200) | 是 | NULL | 学生名 |
content | longtext | 否 | 评论内容 | |
reply | longtext | 是 | NULL | 回复内容 |
表4.5 公告信息
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
gonggaobiaoti | varchar(200) | 否 | 公告标题 | |
leixing | varchar(200) | 否 | 类型 | |
tupian | varchar(200) | 是 | NULL | 图片 |
neirong | longtext | 是 | NULL | 内容 |
faburiqi | date | 是 | NULL | 发布日期 |
表4.6 离宿申请
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
sushehao | varchar(200) | 是 | NULL | 宿舍号 |
susheleixing | varchar(200) | 是 | NULL | 宿舍类型 |
tupian | varchar(200) | 是 | NULL | 图片 |
xuehao | varchar(200) | 是 | NULL | 学号 |
xueshengxingming | varchar(200) | 是 | NULL | 学生姓名 |
banji | varchar(200) | 是 | NULL | 班级 |
lisushijian | date | 否 | 离宿时间 | |
lisushenqing | longtext | 是 | NULL | 离宿申请 |
shenqingriqi | date | 是 | NULL | 申请日期 |
sfsh | varchar(200) | 是 | 否 | 是否审核 |
shhf | longtext | 是 | NULL | 审核回复 |
userid | bigint(20) | 是 | NULL | 学生id |
表4.7 收藏表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
userid | bigint(20) | 否 | 学生id | |
refid | bigint(20) | 是 | NULL | 收藏id |
tablename | varchar(200) | 是 | NULL | 表名 |
name | varchar(200) | 否 | 收藏名称 | |
picture | varchar(200) | 否 | 收藏图片 |
表4.8 宿舍安排
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
sushehao | varchar(200) | 是 | NULL | 宿舍号 |
susheleixing | varchar(200) | 是 | NULL | 宿舍类型 |
tupian | varchar(200) | 是 | NULL | 图片 |
loudong | varchar(200) | 是 | NULL | 楼栋 |
weizhi | varchar(200) | 是 | NULL | 位置 |
kezhurenshu | varchar(200) | 是 | NULL | 可住人数 |
xuehao | varchar(200) | 是 | NULL | 学号 |
xueshengxingming | varchar(200) | 是 | NULL | 学生姓名 |
banji | varchar(200) | 是 | NULL | 班级 |
anpairiqi | date | 是 | NULL | 安排日期 |
userid | bigint(20) | 是 | NULL | 学生id |
表4.9 宿舍评分
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
sushehao | varchar(200) | 是 | NULL | 宿舍号 |
susheleixing | varchar(200) | 是 | NULL | 宿舍类型 |
tupian | varchar(200) | 是 | NULL | 图片 |
loudong | varchar(200) | 是 | NULL | 楼栋 |
xuehao | varchar(200) | 是 | NULL | 学号 |
xueshengxingming | varchar(200) | 是 | NULL | 学生姓名 |
banji | varchar(200) | 是 | NULL | 班级 |
jianchaneirong | varchar(200) | 是 | NULL | 检查内容 |
shifouzhengjie | varchar(200) | 是 | NULL | 是否整洁 |
shifouweigui | varchar(200) | 是 | NULL | 是否违规 |
pingfen | int(11) | 是 | NULL | 评分 |
jianchajieguo | varchar(200) | 是 | NULL | 检查结果 |
jianchariqi | date | 是 | NULL | 检查日期 |
userid | bigint(20) | 是 | NULL | 学生id |
表4.10 宿舍信息
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
sushehao | varchar(200) | 否 | 宿舍号 | |
susheleixing | varchar(200) | 否 | 宿舍类型 | |
tupian | varchar(200) | 是 | NULL | 图片 |
loudong | varchar(200) | 是 | NULL | 楼栋 |
weizhi | varchar(200) | 是 | NULL | 位置 |
kezhurenshu | int(11) | 是 | NULL | 可住人数 |
beizhu | varchar(200) | 是 | NULL | 备注 |
表4.11 管理员表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
username | varchar(100) | 否 | 学生名 | |
password | varchar(100) | 否 | 密码 | |
role | varchar(100) | 是 | 管理员 | 角色 |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 新增时间 |
表4.12 晚归登记
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
xuehao | varchar(200) | 是 | NULL | 学号 |
xueshengxingming | varchar(200) | 是 | NULL | 学生姓名 |
touxiang | varchar(200) | 是 | NULL | 头像 |
banji | varchar(200) | 是 | NULL | 班级 |
sushehao | varchar(200) | 是 | NULL | 宿舍号 |
wanguiyuanyin | varchar(200) | 是 | NULL | 晚归原因 |
wanguishijian | datetime | 是 | NULL | 晚归时间 |
beizhu | varchar(200) | 是 | NULL | 备注 |
userid | bigint(20) | 是 | NULL | 学生id |
表4.13 学生
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
xuehao | varchar(200) | 否 | 学号 | |
mima | varchar(200) | 否 | 密码 | |
xueshengxingming | varchar(200) | 否 | 学生姓名 | |
xingbie | varchar(200) | 是 | NULL | 性别 |
touxiang | varchar(200) | 是 | NULL | 头像 |
banji | varchar(200) | 是 | NULL | 班级 |
shouji | varchar(200) | 是 | NULL | 手机 |
youxiang | varchar(200) | 是 | NULL | 邮箱 |
sushehao | varchar(200) | 是 | NULL | 宿舍号 |
5系统详细实现
5.1 管理员模块的实现
5.1.1 学生信息管理
管理员可以管理学生信息,可以对通过微信小程序端注册的学生信息修改删除。具体界面的展示如图5.1所示
图5.1 学生信息管理界面
5.1.2 公告信息管理
管理员可以对公告信息进行添加,修改删除查询操作。具体界面如图5.2所示。
图5.2 公告信息管理界面
5.1.3 宿舍信息管理
系统管理员可以查看宿舍信息,并且可以对宿舍信息进行添加修改删除操作。界面如下图所示:
图5.3 宿舍信息管理界面
系统管理员可以查看晚归登记,并且可以对晚归登记的信息进行修改删除操作。界面如下图所示:
图5.4 晚归登记管理界面
小程序学生是需要注册才可以进行登录的。界面如下图所示:
图5.5 注册界面
小程序首页会显示公告信息,宿舍信息还有其他信息,通过下滑就可以获取到。界面如下图所示:
图5.6 小程序首页
学生可以提交离宿申请。界面如下图所示:
图5.6 离宿申请
小程序最下面是导航模块,点击我的,可以出现关于我的相关功能。界面如下图所示:
图5.6 我的
JAVA后端代码实现
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
源码获取
大家点赞、收藏、关注 ,让更多需要的同学看到
不同开发语言专栏推荐订阅:
👇下方有我的微信名片👇