Author's homepage: Programming Thousand Paper Cranes
About the author: Java, front-end, and Python have been developed for many years, and have worked as a senior engineer, project manager, and architect
Main content: Java project development, Python project development, university data and AI project development, MCU project design, interview technology arrangement, latest technology sharing
Favorites, likes, don't get lost, it's good to follow the author
Get the source code at the end of the article
Item number: BS-XX-212
1. Environmental introduction
Locale: Java: jdk1.8
Database: Mysql: mysql5.7
Application server: Tomcat: tomcat8.5.31
Development tools: IDEA or eclipse
Development technology: Springboot+Vue
2. Project introduction
This project is based on the development and implementation of a community volunteer platform management system based on Springboot+Vue. There are two types of users: platform administrators and front-end users. The platform administrator mainly implements: administrator management, user management, announcement management, carousel map management, style display management, event information management, volunteer application review, event participation management, comment filtering management and other related functions. Front-end users mainly have operational functions such as registration and login, viewing event information, viewing announcement information, viewing past event appearances, information comments, and volunteer evaluations. The system has complete functions, friendly and generous interface, and is suitable for graduation design.
The system table structure is as follows:
[Administrator] module, table name: admins |
||
field name |
Field Type |
name |
id |
int |
(primary key) |
username |
varchar(50) |
account number |
pwd |
varchar(50) |
password |
[Carousel map] module, table name: lunbotu |
||
field name |
Field Type |
name |
id |
int |
(primary key) |
title |
varchar(50) |
title |
image |
varchar(255) |
picture |
url |
varchar(255) |
connection address |
[User] module, table name: yonghu |
||
field name |
Field Type |
name |
id |
int |
(primary key) |
cx |
varchar(50) |
permissions |
yonghuming |
varchar(50) |
username |
mima |
varchar(50) |
password |
xingming |
varchar(50) |
Name |
xingbie |
varchar(10) |
gender |
shouji |
varchar(50) |
cell phone |
youxiang |
varchar(50) |
|
jifen |
int |
integral |
shenfenzheng |
varchar(50) |
ID card |
touxiang |
varchar(255) |
avatar |
【Presentation display】Module, table name: fengcaizhanshi |
||
field name |
Field Type |
name |
id |
int |
(primary key) |
suoluetu |
varchar(255) |
thumbnail |
foreign |
text |
atlas |
biaoti |
varchar(255) |
title |
suoshushequ |
int |
Community |
Xiangqing |
longtext |
details |
Faburen |
varchar(50) |
publisher |
addtime |
timestamp |
添加时间 |
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
【评论】模块,表名:pinglun |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
biao |
varchar(50) |
表 |
biaoid |
int |
表id |
biaoti |
varchar(255) |
标题 |
pingfen |
varchar(255) |
评分 |
pinglunneirong |
text |
评论内容 |
pinglunren |
varchar(50) |
评论人 |
addtime |
timestamp |
评论时间 |
【社区】模块,表名:shequ |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
shequmingcheng |
varchar(255) |
社区名称 |
【活动信息】模块,表名:huodongxinxi |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
huodongbianhao |
varchar(50) |
活动编号 |
tupian |
varchar(255) |
图片 |
huodongbiaoti |
varchar(255) |
活动标题 |
suoshushequ |
int |
所属社区 |
zhaomurenshu |
int |
招募人数 |
yibaomingrenshu |
int |
已报名人数 |
zhuangtai |
varchar(50) |
状态 |
kehuodejifen |
int |
可获得积分 |
huodongxiangqing |
longtext |
活动详情 |
faburen |
varchar(50) |
发布人 |
addtime |
timestamp |
添加时间 |
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
【申请志愿者】模块,表名:shenqingzhiyuanzhe |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
shenqingbianhao |
varchar(50) |
申请编号 |
biaoti |
varchar(50) |
标题 |
shenqingyonghu |
varchar(50) |
申请用户 |
zhenshixingming |
varchar(50) |
真实姓名 |
xingbie |
varchar(10) |
性别 |
shenfenzhenghao |
varchar(50) |
身份证号 |
lianxidianhua |
varchar(50) |
联系电话 |
gongzuodanwei |
varchar(50) |
工作单位 |
xianjuzhudizhi |
varchar(255) |
现居住地址 |
hujidizhi |
varchar(255) |
户籍地址 |
shenqingmiaoshu |
text |
申请描述 |
shenqingzhuangtai |
varchar(50) |
申请状态 |
addtime |
timestamp |
申请时间 |
【申请审核】模块,表名:shenqingshenhe |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
shenqingzhiyuanzheid |
int |
申请志愿者id |
shenqingbianhao |
varchar(50) |
申请编号 |
biaoti |
varchar(50) |
标题 |
shenqingyonghu |
varchar(50) |
申请用户 |
zhenshixingming |
varchar(50) |
真实姓名 |
shenhe |
varchar(50) |
审核 |
beizhu |
text |
备注 |
shenheren |
varchar(50) |
审核人 |
addtime |
timestamp |
添加时间 |
设置索引, 字段:shenqingzhiyuanzheid , 关联表【shenqingzhiyuanzhe】中字段id |
【邀请成为志愿者】模块,表名:yaoqingchengweizhiyuanzhe |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
yonghuid |
int |
用户id |
yonghuming |
varchar(50) |
用户名 |
xingming |
varchar(50) |
姓名 |
biaoti |
varchar(50) |
标题 |
neirong |
longtext |
内容 |
yaoqingren |
varchar(50) |
邀请人 |
addtime |
timestamp |
添加时间 |
设置索引, 字段:yonghuid , 关联表【yonghu】中字段id |
【公告】模块,表名:gonggao |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
biaoti |
varchar(50) |
标题 |
neirong |
longtext |
内容 |
faburen |
varchar(50) |
发布人 |
addtime |
timestamp |
添加时间 |
【报名活动】模块,表名:baominghuodong |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
baomingbianhao |
varchar(50) |
报名编号 |
huodongxinxiid |
int |
活动信息id |
huodongbianhao |
varchar(50) |
活动编号 |
huodongbiaoti |
varchar(255) |
活动标题 |
suoshushequ |
int |
所属社区 |
kehuodejifen |
int |
可获得积分 |
faburen |
varchar(50) |
发布人 |
shenhezhuangtai |
varchar(50) |
审核状态 |
baomingshuoming |
text |
报名说明 |
baomingren |
varchar(50) |
报名人 |
addtime |
timestamp |
报名时间 |
设置索引, 字段:huodongxinxiid , 关联表【huodongxinxi】中字段id |
||
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
【报名审核】模块,表名:baomingshenhe |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
baominghuodongid |
int |
报名活动id |
baomingbianhao |
varchar(50) |
报名编号 |
huodongbianhao |
varchar(50) |
活动编号 |
huodongbiaoti |
varchar(255) |
活动标题 |
suoshushequ |
int |
所属社区 |
kehuodejifen |
int |
可获得积分 |
baomingren |
varchar(50) |
报名人 |
shenhe |
varchar(50) |
审核 |
beizhu |
text |
备注 |
shenheren |
varchar(50) |
审核人 |
addtime |
timestamp |
添加时间 |
设置索引, 字段:baominghuodongid , 关联表【baominghuodong】中字段id |
||
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
【志愿者评价】模块,表名:zhiyuanzhepingjia |
||
字段名 |
字段类型 |
名称 |
id |
int |
(主键) |
huodongxinxiid |
int |
活动信息id |
huodongbianhao |
varchar(50) |
活动编号 |
huodongbiaoti |
varchar(255) |
活动标题 |
suoshushequ |
int |
所属社区 |
faburen |
varchar(50) |
发布人 |
zhiyuanzhe |
varchar(50) |
志愿者 |
pingfen |
varchar(50) |
评分 |
shifouniming |
varchar(50) |
是否匿名 |
pingjiaren |
varchar(50) |
评价人 |
pingjianeirong |
longtext |
评价内容 |
addtime |
timestamp |
添加时间 |
设置索引, 字段:huodongxinxiid , 关联表【huodongxinxi】中字段id |
||
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
三,系统展示
志愿者活动
活动评价
志愿者评价
活动风采展示
系统公告
用户注册
志愿者个人中心
个人资料管理
志愿者申请管理
活动报名查询
评论评价管理
管理员登录
管理员管理
轮播图和公告管理
活动风采展示
社区管理和活动信息管理
志愿者审核管理
活动报名审核
过滤词管理
四,核心代码展示
package com.spring.controller;
import com.jntoo.db.*;
import com.jntoo.db.utils.*;
import com.spring.dao.*;
import com.spring.entity.*;
import com.spring.service.*;
import com.spring.util.*;
import com.spring.util.Info;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import tk.mybatis.mapper.entity.Example;
/**
* 管理员 */
@Controller
public class AdminsController extends BaseController {
@Autowired
private AdminsMapper dao;
@Autowired
private AdminsService service;
/**
* 后台列表页
*
*/
@RequestMapping("/admins_list")
public String list() {
// 检测是否有登录,没登录则跳转到登录页面
if (!checkLogin()) {
return showError("尚未登录", "./login.do");
}
String order = Request.get("order", "id"); // 获取前台提交的URL参数 order 如果没有则设置为id
String sort = Request.get("sort", "desc"); // 获取前台提交的URL参数 sort 如果没有则设置为desc
int pagesize = Request.getInt("pagesize", 12); // 获取前台一页多少行数据
Example example = new Example(Admins.class); // 创建一个扩展搜索类
Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类
String where = " 1=1 "; // 创建初始条件为:1=1
where += getWhere(); // 从方法中获取url 上的参数,并写成 sql条件语句
criteria.andCondition(where); // 将条件写进上面的扩展条件类中
if (sort.equals("desc")) { // 判断前台提交的sort 参数是否等于 desc倒序 是则使用倒序,否则使用正序
example.orderBy(order).desc(); // 把sql 语句设置成倒序
} else {
example.orderBy(order).asc(); // 把 sql 设置成正序
}
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 获取前台提交的URL参数 page 如果没有则设置为1
page = Math.max(1, page); // 取两个数的最大值,防止page 小于1
List<Admins> list = service.selectPageExample(example, page, pagesize); // 获取当前页的行数
// 将列表写给界面使用
assign("totalCount", request.getAttribute("totalCount"));
assign("list", list);
assign("orderby", order); // 把当前排序结果写进前台
assign("sort", sort); // 把当前排序结果写进前台
return json(); // 将数据写给前端
}
public String getWhere() {
_var = new LinkedHashMap(); // 重置数据
String where = " ";
// 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句
if (!Request.get("username").equals("")) {
where += " AND username LIKE '%" + Request.get("username") + "%' ";
}
return where;
}
@RequestMapping("/admins_add")
public String add() {
_var = new LinkedHashMap(); // 重置数据
return json(); // 将数据写给前端
}
@RequestMapping("/admins_updt")
public String updt() {
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
// 获取行数据,并赋值给前台jsp页面
Admins mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 0);
return json(); // 将数据写给前端
}
@RequestMapping("/admins_updtself")
public String updtself() {
_var = new LinkedHashMap(); // 重置数据
// 更新个人资料
int id = (int) request.getSession().getAttribute("id");
Admins mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 1);
return json(); // 将数据写给前端
}
/**
* 添加内容
* @return
*/
@RequestMapping("/adminsinsert")
public String insert() {
_var = new LinkedHashMap(); // 重置数据
String tmp = "";
Admins post = new Admins(); // 创建实体类
// 设置前台提交上来的数据到实体类中
post.setUsername(Request.get("username"));
post.setPwd(Request.get("pwd"));
service.insert(post); // 插入数据
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
return showSuccess("保存成功", Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
}
/**
* 更新内容
* @return
*/
@RequestMapping("/adminsupdate")
public String update() {
_var = new LinkedHashMap(); // 重置数据
// 创建实体类
Admins post = new Admins();
// 将前台表单数据填充到实体类
if (!Request.get("username").equals("")) post.setUsername(Request.get("username"));
if (!Request.get("pwd").equals("")) post.setPwd(Request.get("pwd"));
post.setId(Request.getInt("id"));
service.update(post); // 更新数据
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
if (Request.getInt("updtself") == 1) {
return showSuccess("保存成功", "admins_updtself.do");
}
return showSuccess("保存成功", Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
}
/**
* 删除
*/
@RequestMapping("/admins_delete")
public String delete() {
_var = new LinkedHashMap(); // 重置数据
if (!checkLogin()) {
return showError("尚未登录");
}
int id = Request.getInt("id"); // 根据id 删除某行数据
Map map = Query.make("admins").find(id);
service.delete(id); // 根据id 删除某行数据
return showSuccess("删除成功", request.getHeader("referer")); //弹出删除成功,并跳回上一页
}
}
package com.spring.controller;
import com.alibaba.fastjson.JSON;
import com.spring.util.JsonResult;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
/**
* 控制器基类
*/
public abstract class BaseController {
@Autowired
protected HttpServletRequest request; // 注入
@Autowired
protected HttpServletResponse response; // 注入
@Autowired
protected HttpSession session; // 注入
protected ModelAndView mView;
protected Map<Object, Object> _var;
/**
* 控制器
*/
public BaseController() {
//request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
//response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
mView = new ModelAndView();
_var = new LinkedHashMap();
}
/**
* 往模板中写入数据
* @param name
* @param value
*/
protected void assign(String name, Object value) {
request.setAttribute(name, value);
_var.put(name, value);
}
/**
* 弹出框
* @param message
* @param code
* @param jumpUrl
* @param jumpTime
* @return
*/
protected String showMessage(String message, int code, Object data, String jumpUrl, int jumpTime) {
if (isAjax()) {
JsonResult jsonResult = new JsonResult(code, message, data);
return renderString(response, JSON.toJSONString(jsonResult));
}
assign("message", message == null ? data : message);
assign("code", code);
assign("jumpUrl", jumpUrl);
assign("jumpTime", jumpTime);
return "message";
}
/**
* 将写入json写到前端
* @return
*/
public String json() {
return jsonResult(_var);
}
public String jsonReturn(String message, int code, Object data) {
JsonResult result = new JsonResult(code, message, data);
return renderString(response, JSON.toJSONString(result));
}
public String jsonResult(Object data) {
return jsonReturn(null, 0, data);
}
public String jsonError(String msg) {
return jsonReturn(msg, 1, null);
}
public Object getRequestAttributeMap() {
//Map<Object,Object> map = new LinkedHashMap();
Enumeration<String> names = request.getAttributeNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
if (!_var.containsKey(key)) {
// 没有,则写入
_var.put(key, request.getAttribute(key));
}
}
return _var;
}
public String getJson() {
Map<Object, Object> map = new LinkedHashMap();
Enumeration<String> names = request.getAttributeNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
Object value = request.getAttribute(key);
map.put(key, value);
}
return renderString(response, JSON.toJSONString(map));
}
/**
* 将字符串渲染到客户端
*
* @param response 渲染对象
* @param string 待渲染的字符串
* @return null
*/
public String renderString(HttpServletResponse response, String string) {
try {
request.getSession();
OutputStream stream = response.getOutputStream();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
stream.write(string.getBytes());
stream.flush();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
protected boolean isAjax() {
String accept = request.getHeader("accept");
if (accept != null && accept.indexOf("application/json") != -1) {
return true;
}
String xRequestedWith = request.getHeader("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) {
return true;
}
String ajax = request.getParameter("format");
if ("json".equalsIgnoreCase(ajax)) {
return true;
}
return false;
}
/**
* 检测是否登录
* @return
*/
protected boolean checkLogin() {
if (request.getSession().getAttribute("username") == null || "".equals(request.getSession().getAttribute("username"))) {
return false;
}
return true;
}
/**
* 弹出错误信息
* @param message
* @return
*/
protected String showError(String message) {
return showMessage(message, 1, null, "javascript:history(-1);", 2250);
}
/**
* 弹出错误信息
* @param message
* @param code
* @return
*/
protected String showError(String message, int code) {
return showMessage(message, code, null, "javascript:history(-1);", 2250);
}
/**
* 弹出错误信息
* @param message
* @param url
* @return
*/
protected String showError(String message, String url) {
return showMessage(message, 1, null, url, 2250);
}
/**
* 弹出成功信息
* @param data
* @return
*/
protected String showSuccess(Object data) {
return showMessage(null, 0, data, request.getHeader("referer"), 2250);
}
/**
* 弹出成功信息
* @param data
* @param url
* @return
*/
protected String showSuccess(String data, String url) {
return showMessage(null, 0, data, url, 2250);
}
}
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
Front-end practical projects developed based on Nodejs, Vue and other front-end technologies
Related works based on WeChat applet and Android APP application development
Development and application of embedded IoT based on 51 single-chip microcomputer
AI intelligent application based on various algorithms
Various data management and recommendation systems based on big data