博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐进主页热门专栏推荐订阅⭐ 订阅收藏起来,防止下次找不到
🔎千套Java / PHP / nod.js / asp.net/ Python等项目实战更新中~
🔎百套小程序APP项目实战更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系❤️ ⚠️一定要先收藏⚠️
4功能结构
为了更好的去理清本系统整体思路,对该系统以结构图的形式表达出来,设计实现该大学生志愿者管理系统的功能结构图如下所示:
图4-1 系统总体结构图
4.1 数据库设计
4.1.1 数据库E/R图
ER图是由实体及其关系构成的图,通过E/R图可以清楚地描述系统涉及到的实体之间的相互关系。在系统中对一些主要的几个关键实体如下图:
4.2 数据库表结构设计
从E-R系统的系统库的设计中可以看出,该系统包含了用户信息等方面。
在此基础上,结合工程实际需求,结合E-R模式的实际情况,对数据库的具体结构进行了详细的描述。具体的表设计如下所示:
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 留言人id | |||
username | varchar | 200 | 用户名 | ||
avatarurl | longtext | 4294967295 | 头像 | ||
content | longtext | 4294967295 | 留言内容 | ||
cpicture | longtext | 4294967295 | 留言图片 | ||
reply | longtext | 4294967295 | 回复内容 | ||
rpicture | longtext | 4294967295 | 回复图片 |
表4-2:活动类型
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
huodongleixing | varchar | 200 | 活动类型 |
表4-3:组织风采
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zuzhibianhao | varchar | 200 | 组织编号 | ||
zuzhimingcheng | varchar | 200 | 组织名称 | ||
tupian | longtext | 4294967295 | 图片 | ||
shipin | longtext | 4294967295 | 视频 | ||
xiangqing | longtext | 4294967295 | 详情 |
表4-4:活动报名
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
huodongzhuti | varchar | 200 | 活动主题 | ||
huodongleixing | varchar | 200 | 活动类型 | ||
huodongdidian | varchar | 200 | 活动地点 | ||
zuzhibianhao | varchar | 200 | 组织编号 | ||
zuzhimingcheng | varchar | 200 | 组织名称 | ||
zhiyuanzhezhanghao | varchar | 200 | 志愿者账号 | ||
zhiyuanzhexingming | varchar | 200 | 志愿者姓名 | ||
baomingliyou | longtext | 4294967295 | 报名理由 | ||
baomingshijian | date | 报名时间 | |||
sfsh | varchar | 200 | 是否审核 | 待审核 | |
shhf | longtext | 4294967295 | 审核回复 |
表4-5:组织报名
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zuzhibianhao | varchar | 200 | 组织编号 | ||
zuzhimingcheng | varchar | 200 | 组织名称 | ||
zhiyuanzhezhanghao | varchar | 200 | 志愿者账号 | ||
zhiyuanzhexingming | varchar | 200 | 志愿者姓名 | ||
shenqingliyou | longtext | 4294967295 | 申请理由 | ||
baomingshijian | date | 报名时间 | |||
sfsh | varchar | 200 | 是否审核 | 待审核 | |
shhf | longtext | 4294967295 | 审核回复 |
表4-6:配置文件
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
name | varchar | 100 | 配置参数名称 | ||
value | varchar | 100 | 配置参数值 |
表4-7:志愿组织
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zuzhibianhao | varchar | 200 | 组织编号 | ||
mima | varchar | 200 | 密码 | ||
zuzhimingcheng | varchar | 200 | 组织名称 | ||
tupian | longtext | 4294967295 | 组织logo | ||
chenglishijian | date | 成立时间 | |||
fuzeren | varchar | 200 | 负责人 | ||
lianxidianhua | varchar | 200 | 联系电话 | ||
zuzhijianjie | varchar | 200 | 组织简介 | ||
clicktime | datetime | 最近点击时间 |
表4-8:关于我们
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 标题 | ||
subtitle | varchar | 200 | 副标题 | ||
content | longtext | 4294967295 | 内容 | ||
picture1 | longtext | 4294967295 | 图片1 | ||
picture2 | longtext | 4294967295 | 图片2 | ||
picture3 | longtext | 4294967295 | 图片3 |
表4-9:志愿者
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhiyuanzhezhanghao | varchar | 200 | 志愿者账号 | ||
mima | varchar | 200 | 密码 | ||
zhiyuanzhexingming | varchar | 200 | 志愿者姓名 | ||
zhaopian | longtext | 4294967295 | 照片 | ||
xingbie | varchar | 200 | 性别 | ||
nianling | int | 年龄 | |||
shoujihaoma | varchar | 200 | 手机号码 |
表4-10:志愿活动
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
huodongzhuti | varchar | 200 | 活动主题 | ||
huodongleixing | varchar | 200 | 活动类型 | ||
huodongtupian | longtext | 4294967295 | 活动图片 | ||
huodongdidian | varchar | 200 | 活动地点 | ||
kaishishijian | datetime | 开始时间 | |||
jieshushijian | datetime | 结束时间 | |||
huodongxiangqing | longtext | 4294967295 | 活动详情 | ||
zuzhibianhao | varchar | 200 | 组织编号 | ||
zuzhimingcheng | varchar | 200 | 组织名称 | ||
fabushijian | date | 发布时间 |
表4-11:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
表4-12:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表4-13:收藏表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
refid | bigint | 商品id | |||
tablename | varchar | 200 | 表名 | ||
name | varchar | 200 | 名称 | ||
picture | longtext | 4294967295 | 图片 | ||
type | varchar | 200 | 类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注) | 1 | |
inteltype | varchar | 200 | 推荐类型 | ||
remark | varchar | 200 | 备注 |
表4-14:公告信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 标题 | ||
introduction | longtext | 4294967295 | 简介 | ||
picture | longtext | 4294967295 | 图片 | ||
content | longtext | 4294967295 | 内容 |
4.3 基于MySQL数据库的存储设计
在MySQL数据库管理平台上进行了系统的开发。在进行了系统架构的基础上,结合MySQL应用的特性,开发了相应的数据库,并对其进行了存贮和总体的体系架构。数据技术要求数据删除,修改,添加,查询等功能,并对数据进行维护与管理。并针对特定组织优化程序级应用服务。习惯统一管理和维护删除、修改、添加、查询功能。
MySQL数据库主要包括两个部分:指令行和操作接口。该方法利用SQL语句和数据库操作指令来建立数据库,并设计并存储数据库表。但是,命令行的运行模式对操作员的技术要求很高,而且在整个系统中也很难被发现。
4.4 注册、登录、重新功能设计
这对系统的登陆安全起到了很大的作用。以前是该体系的主要功能,大学生志愿者管理系统对其进行了介绍,因其有关的存储特点,要求进行了机密的管理。大学生志愿者管理系统有关的人员的权利划分是:将各种权限的操作划分成各种类型,并在此基础上进行了相应的注册管理。文章利用网络进行了系统注册,并对其进行了注册。
接下来根据有关的软件开发原理,对代码进行了具体的设计,并在此基础上进行了系统注册。进入主要的体系。主要系统的结构设计较为规范,对使用者来说,主要的导航链路会依据使用者的授权来设定连结能否跳跃,而主控程式则使用架构式设定程式。
用户在注册页面中需要填写注册信息,如果用户名存在了或者两次密码输入一致的话则不能够成功注册。
图4.1 注册流程图
(2)登录
用户想要使用系统的功能之前首先需要登录,在登录页面中输入用户名和密码之后点击登录按钮,如果通过了验证则能够进入到主页当中。
图4.2 登录流程图
管理员登录系统之后可以在后台管理中搜索系统的信息,如果输入的系统信息在数据库记录中找不到则不能显示查询信息。
图4.3 查询流程图
5 大学生志愿者管理系统的实现
5.1 前台功能模块
当游客打开系统的网址后,首先看到的就是首页界面。在这里,游客能够看到大学生志愿者管理系统的导航条显示首页、志愿组织、组织风采、志愿活动、公告信息、留言板、后台管理、个人中心。系统首页界面如图5-1所示:
图5-1 系统首页界面
在系统首页点击中间的注册/登录按钮,然后页面跳转到注册登录界面,后来输入信息完成后,单击注册或者登录操作,如图5-2所示:
图5-2 志愿者注册、志愿者登录界面
志愿者点击志愿组织,在志愿组织页面的搜索栏输入组织名称,进行查询,然后还可以查看组织编号、组织名称、组织LOGO、成立时间、负责人、联系电话、组织简介,最后如果有需要可以点击报名或者收藏等操作;如图5-3所示:
图5-3志愿组织页面
志愿者点击组织风采,在组织风采页面的搜索栏输入组织名称,进行查询,然后可以查看组织编号、组织名称、图片、视频,最后可以点击收藏等操作;如图5-4所示:
图5-4组织风采页面
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();
}
}
源码获取
大家点赞、收藏、关注 ,让更多需要的同学看到
⭐进主页热门专栏推荐订阅⭐ 订阅收藏起来,防止下次找不到
🔎千套Java / PHP / nod.js / asp.net/ Python等项目实战更新中~
🔎百套小程序APP项目实战更新中~👇下方有我的微信名片👇