基于Springboot实现高校社团管理系统
项目编号:BS-XX-124
一,项目简介
本项目基于Springboot+Mybatis开发实现了一个高校社团管理系统,系统包含三个角色:管理员、团长、会员。管理员主要是做一些基础数据的管理,比较用户管理,新闻管理,活动审批,社团创建审批等等,会员可以申请加入相关的社团,也可自己申请社团,管理员审批通过后成为团长,可以申请开展相关的活动。团长登陆后可以审批申请加入本社团的申请信息,并管理和查看相关的社团用户信息。各角色进入均可以查看发布的新闻信息。
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7 Redis缓存数据库
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发技术:Springboot+Mybatis+SpringCache缓存框架
前端开发技术:Jquery+AjAX+JSP
三,系统展示
下面展示一下系统的相关功能模块:
管理员登陆后主要操作功能
登陆注册界面

主界面

查看社团活动信息

用户管理

社团管理

审核 管理

新闻管理

团长登陆系统后
申请创建活动

管理本社团成员

审核加入社团申请

学生登陆
申请创建社团

申请加入社团

四,核心代码展示
package com.example.association2.controller;import com.example.association2.service.impl.ActivityServiceImpl;import com.example.association2.service.impl.AssociationMemberServiceImpl;import com.example.association2.utils.PicUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;public class ActivityController {
private AssociationMemberServiceImpl associationMemberService;
private ActivityServiceImpl activityService; //所有活动页面
public String toActivities(HttpServletRequest httpServletRequest, int key) { //key判断点击的活动分类
if (key == 0) {//所有活动
httpServletRequest.setAttribute("activityList", activityService.findAllActivityAndName());
httpServletRequest.setAttribute("key", key);
} else if (key == 1) {//文体类活动
httpServletRequest.setAttribute("activityList", activityService.findActivityAndNameByAssociationType(key));
httpServletRequest.setAttribute("key", key);
} else if (key == 2) {//学术类活动
httpServletRequest.setAttribute("activityList", activityService.findActivityAndNameByAssociationType(key));
httpServletRequest.setAttribute("key", key);
} else if (key == 3) {//公益类活动
httpServletRequest.setAttribute("activityList", activityService.findActivityAndNameByAssociationType(key));
httpServletRequest.setAttribute("key", key);
} return "jsp/activity";
} //活动详情页面
public String act_detail(HttpServletRequest httpServletRequest, int activityId) {
String imglocation[] = activityService.findActivityById(activityId).getPicture().split( ";");//把活动图片路径和分号切割后返回正确的图片路径
httpServletRequest.setAttribute("imgLocation", imglocation); int imgNum = imglocation.length;
httpServletRequest.setAttribute("imgNum", imgNum);//获取图片数量
httpServletRequest.setAttribute("activity", activityService.findActivityById(activityId)); return "jsp/act_detail";//活动详情页面
} //申请活动页面
public String toApply(HttpServletRequest httpServletRequest) { HttpSession session = httpServletRequest.getSession(); int userId = (int) session.getAttribute("userId");
httpServletRequest.setAttribute("associationId", associationMemberService.findassociationIdByUserId(userId)); return "jsp/act_apply";
} //提交活动申请
public String addAct(int associationId,
String startTime,
String endTime,
String location, float material, String base64Data0, String base64Data1, String base64Data2,
HttpServletRequest httpServletRequest) { String title,
String description, String picture1 = ""; String picture2 = ""; String picture3 = ""; String picture = ""; if (base64Data0 == null || "".equals(base64Data0)) { //提示上传图片错误
} else {
picture1 = PicUtil.pictureUtil(base64Data0, httpServletRequest);
picture = picture1;
} if (base64Data1 == null || "".equals(base64Data1)) { //提示上传图片错误
} else {
picture2 = PicUtil.pictureUtil(base64Data1, httpServletRequest);
picture = picture + ";" + picture2;
} if (base64Data2 == null || "".equals(base64Data2)) { //提示上传图片错误
} else {
picture3 = PicUtil.pictureUtil(base64Data2, httpServletRequest);
picture = picture + ";" + picture3;
}
activityService.addActivity(title, description, associationId, startTime, endTime, location, material, picture); //HttpSession session = httpServletRequest.getSession();
String result = "1"; return result;
} //活动申请结果页面
public String toresult() { return "jsp/apply_result";
}
public ModelAndView actDelete(int activityId) {
activityService.deleteActivity(activityId); int bar = 2; ModelAndView mv = new ModelAndView();
mv.addObject("bar", bar);
mv.setViewName("forward:assManage"); return mv;
} //查看申请的活动图片
public String act_picture(HttpServletRequest httpServletRequest, int activityId) {
String imglocation[] = activityService.findActivityById(activityId).getPicture().split( ";");//把活动图片路径和分号切割后返回正确的图片路径
httpServletRequest.setAttribute("imgLocation", imglocation); int imgNum = imglocation.length;
httpServletRequest.setAttribute("imgNum", imgNum);//获取图片数量
httpServletRequest.setAttribute("activity", activityService.findActivityById(activityId)); return "jsp/manage/act_picture";//活动详情页面
} //活动修改页面
public String toAssModify(int activityId,
HttpServletRequest httpServletRequest) {
String imglocation[] = activityService.findActivityAndNameById(activityId).getPicture().split( ";");//把活动图片路径和分号切割后返回正确的图片路径
httpServletRequest.setAttribute("imgLocation", imglocation); int imgNum = imglocation.length;
httpServletRequest.setAttribute("imgNum", imgNum);//获取图片数量
httpServletRequest.setAttribute("act", activityService.findActivityAndNameById(activityId)); return "jsp/manage/act_modify";
} //提交活动修改
public String actModify( int activityId, int activityStatus, String title,
String description, int associationId,
String startTime,
String endTime,
String location, float material, String base64Data0, String base64Data1, String base64Data2,
HttpServletRequest httpServletRequest) { String picture1 = ""; String picture2 = ""; String picture3 = ""; String picture = ""; if("data".equals(base64Data0.substring(0,4))){//本地上传的图片
if (base64Data0 == null || "".equals(base64Data0)) { //提示上传图片错误
} else {
picture1 = PicUtil.pictureUtil(base64Data0, httpServletRequest);
picture = picture1;
} if (base64Data1 == null || "".equals(base64Data1)) { //提示上传图片错误
} else {
picture2 = PicUtil.pictureUtil(base64Data1, httpServletRequest);
picture = picture + ";" + picture2;
} if (base64Data2 == null || "".equals(base64Data2)) { //提示上传图片错误
} else {
picture3 = PicUtil.pictureUtil(base64Data2, httpServletRequest);
picture = picture + ";" + picture3;
}
}else {//是从数据库读取的图片
if (base64Data0 == null || "".equals(base64Data0)) { //提示上传图片错误
} else {
picture1 = base64Data0;
picture = picture1;
} if (base64Data1 == null || "".equals(base64Data1)) { //提示上传图片错误
} else {
picture2 = base64Data1;
picture = picture + ";" + picture2;
} if (base64Data2 == null || "".equals(base64Data2)) { //提示上传图片错误
} else {
picture3 =base64Data2;
picture = picture + ";" + picture3;
}
}
activityService.updateActivity(title,description,associationId,startTime,endTime,location,picture,material,activityStatus,activityId); String result = "1"; return result;
}
public String toAddAss(int associationId,HttpServletRequest httpServletRequest) {
httpServletRequest.setAttribute("associationId",associationId); return "jsp/manage/act_add";
} //活动添加业务逻辑
public String actAdd(int associationId,
String startTime,
String endTime,
String location, float material, String base64Data0, String base64Data1, String base64Data2,
HttpServletRequest httpServletRequest) { String title,
String description, String picture1 = ""; String picture2 = ""; String picture3 = ""; String picture = ""; if (base64Data0 == null || "".equals(base64Data0)) { //提示上传图片错误
} else {
picture1 = PicUtil.pictureUtil(base64Data0, httpServletRequest);
picture = picture1;
} if (base64Data1 == null || "".equals(base64Data1)) { //提示上传图片错误
} else {
picture2 = PicUtil.pictureUtil(base64Data1, httpServletRequest);
picture = picture + ";" + picture2;
} if (base64Data2 == null || "".equals(base64Data2)) { //提示上传图片错误
} else {
picture3 = PicUtil.pictureUtil(base64Data2, httpServletRequest);
picture = picture + ";" + picture3;
}
activityService.addActivity(title, description, associationId, startTime, endTime, location, material, picture); //HttpSession session = httpServletRequest.getSession();
String result = "1"; return result;
} //活动申请通过
public ModelAndView actApplySuccess(int activityId) {
activityService.applyPass(activityId); int bar = 1; ModelAndView mv = new ModelAndView();
mv.addObject("bar", bar);
mv.setViewName("forward:applyManage"); return mv;
} //活动申请拒绝
public ModelAndView actApplyRefuse(int activityId) {
activityService.applyRefuse(activityId); int bar = 1; ModelAndView mv = new ModelAndView();
mv.addObject("bar", bar);
mv.setViewName("forward:applyManage"); return mv;
}
}
package com.example.association2.controller;import com.example.association2.service.impl.ActivityServiceImpl;import com.example.association2.service.impl.AssociationMemberServiceImpl;import com.example.association2.service.impl.AssociationServiceImpl;import com.example.association2.service.impl.NewsServiceImpl;import com.example.association2.utils.PicUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import java.text.SimpleDateFormat;import java.util.Date;public class AssociationController {
private AssociationServiceImpl associationService;
private AssociationMemberServiceImpl associationMemberService;
private ActivityServiceImpl activityService;
private NewsServiceImpl newsService; //所有社团页面
public String index(HttpServletRequest httpServletRequest, int type) {
httpServletRequest.setAttribute( "type", type);
httpServletRequest.setAttribute("associationsList", associationService.findAssociationsByType(type));
httpServletRequest.setAttribute("lastActivity", activityService.findLastActivity()); return "jsp/mid/index";
} //申请创建社团页面
public String toApplyAss(HttpServletRequest httpServletRequest) { HttpSession session = httpServletRequest.getSession(); int userId = (int) session.getAttribute("userId");
httpServletRequest.setAttribute("userId", userId); return "jsp/ass_apply";
} //提交创建社团申请
public String addAss(String name,
String description, int ownerId, int type, String base64Data,
HttpServletRequest httpServletRequest) { String logo = "";
String s[]; if (base64Data == null || "".equals(base64Data)) { //提示上传图片错误
} else {
logo = PicUtil.pictureUtil(base64Data, httpServletRequest);
logo = logo.substring(3, logo.length());
System.out.println(logo);
}
associationService.addAssociation(description, name, null, type, ownerId, logo); String result = "1"; return result;
} //社团详情页面
public String association( int associationId, int bar,
HttpServletRequest httpServletRequest) { switch (bar) { case 1: //首页
httpServletRequest.setAttribute("bar", 1); break; case 2: //成员列表
httpServletRequest.setAttribute("presidentDes",
associationMemberService.findPresidentDesByAssid(associationId));
httpServletRequest.setAttribute("VicePresidentDes",
associationMemberService.findVicePresidentDesByAssid(associationId));
httpServletRequest.setAttribute("MinisterDes",
associationMemberService.findMinisterDesByAssid(associationId));
httpServletRequest.setAttribute("bar", 2); break; case 3: //活动列表
httpServletRequest.setAttribute("activityList",
activityService.findActivityByAssociationId(associationId));
httpServletRequest.setAttribute("signatureActivity",associationService.findSignatureActivityName(associationId));
httpServletRequest.setAttribute("bar", 3); break;
}
httpServletRequest.setAttribute("association", associationService.findAssociationById(associationId)); return "jsp/ass_detail";
}
public String toAssManage(int bar,
HttpServletRequest httpServletRequest) { switch (bar) { case 1:
httpServletRequest.setAttribute("assList", associationService.findAllAss());
httpServletRequest.setAttribute("bar", 1); break; case 2:
httpServletRequest.setAttribute("actList", activityService.findAllActivityAndName());
httpServletRequest.setAttribute("bar", 2); break;
} return "jsp/manage/ass_manage";
}
public String toAddAss() { return "jsp/manage/ass_add";
}
public String AddAss(String name,
String description, int ownerId, int type, String base64Data,
HttpServletRequest httpServletRequest) { String logo = "";
String s[]; if (base64Data == null || "".equals(base64Data)) { //提示上传图片错误
} else {
logo = PicUtil.pictureUtil(base64Data, httpServletRequest);
logo = logo.substring(3, logo.length());
System.out.println(logo);
} String createTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
associationService.addAss(description, name, createTime, type, ownerId, logo); String result = "1"; return result;
}
public ModelAndView amDelete(int associationId) {
associationService.deleteAss(associationId); int bar = 2; ModelAndView mv = new ModelAndView();
mv.addObject("bar", bar);
mv.setViewName("forward:assManage"); return mv;
}
public String toAssModify(int associationId,
HttpServletRequest httpServletRequest) {
httpServletRequest.setAttribute( "ass", associationService.findAssociationById(associationId)); return "jsp/manage/ass_modify";
}
public String assModify( int associationId,
String name,
String description, int ownerId, int type,
Integer signatureActivity, String base64Data,
HttpServletRequest httpServletRequest) { String logo = ""; if("data".equals(base64Data.substring(0,4))) {//本地上传的图片
if (base64Data == null || "".equals(base64Data)) { //提示上传图片错误
} else {
logo = PicUtil.pictureUtil(base64Data, httpServletRequest);
logo = logo.substring(3, logo.length());
}
}else {
logo=base64Data.substring(22,base64Data.length()) ;
}
associationService.assModify(description,name,type,ownerId,logo,signatureActivity,associationId);
associationMemberService.updatePresidentByAssociationId(associationId,ownerId); String result = "1"; return result;
}
public String toApplyManage(int bar,
HttpServletRequest httpServletRequest) { switch (bar) { case 1:
httpServletRequest.setAttribute("actApplyList", activityService.findAllActivityApply());
httpServletRequest.setAttribute("bar", 1); break; case 2:
httpServletRequest.setAttribute("assApplyList", associationService.findAllAssociationsApply());
httpServletRequest.setAttribute("bar", 2); break;
} return "jsp/manage/apply_manage";
}
public ModelAndView assApplySuccess(int associationId) { String createTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
associationService.applyPass(createTime,associationId);
associationMemberService.updatePresidentByAssociationId(associationId,associationService.findOwnerIdByAssociationId(associationId));
associationMemberService.updateUserByAssociationId(associationId,associationService.findOwnerIdByAssociationId(associationId)); int bar = 2; ModelAndView mv = new ModelAndView();
mv.addObject("bar", bar);
mv.setViewName("forward:applyManage"); return mv;
}
public ModelAndView assApplyRefuse(int associationId) {
associationService.applyRefuse(associationId); int bar = 2; ModelAndView mv = new ModelAndView();
mv.addObject("bar", bar);
mv.setViewName("forward:applyManage"); return mv;
}
}
package com.example.association2.controller;import com.example.association2.enums.UserType;import com.example.association2.model.User;import com.example.association2.service.impl.ActivityServiceImpl;import com.example.association2.service.impl.AssociationServiceImpl;import com.example.association2.service.impl.NewsServiceImpl;import com.example.association2.service.impl.UserServiceImpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;//@ResponseBodypublic class LoginController{
private UserServiceImpl userService;
private NewsServiceImpl newsService;
private AssociationServiceImpl associationService;
private ActivityServiceImpl activityService; //登录界面
public String tologin(){ return "templates/login2";
} //校验账户密码
public String check(User user, HttpSession session, HttpServletRequest httpServletRequest, RedirectAttributes redirectAttributes) {
User u1=userService.validUser(user.getUserId(), user.getPassword()); if(u1==null) {//账户密码不匹配
httpServletRequest.setAttribute("msg","用户名密码错误" ); return "templates/login2";
}else {
session.setAttribute("userId", user.getUserId());
session.setAttribute("userType", userService.finUserTypeById(user.getUserId())); return "redirect:associations";
}
} //注册界面
public String Register(Model model) { //model.addAttribute("user", new User());
return "templates/register";
} //进行注册
public String Register(User user,HttpSession session, HttpServletRequest httpServletRequest, RedirectAttributes redirectAttributes) {
User u2=userService.validUserAccount(user.getUserId()); if(u2!=null) {//账户已存在
httpServletRequest.setAttribute("msg","用户已存在" ); return "templates/register";
} else//进行注册
userService.addUser(user.getUserId(), user.getPassword(), UserType.STUDENT.getUserType());
session.setAttribute("userId", user.getUserId());
session.setAttribute("userType", userService.finUserTypeById(user.getUserId())); return "redirect:associations";
} //注销
public String exit(HttpSession session, HttpServletRequest httpServletRequest,
Model model, int type) {
httpServletRequest.setAttribute( "type",type);
httpServletRequest.setAttribute("associationsList",associationService.findAssociationsByType(type));
model.addAttribute("signatureActivity","**大赛");
httpServletRequest.setAttribute("lastNews",newsService.findLastNews());
httpServletRequest.setAttribute("lastActivity",activityService.findLastActivity());
session.invalidate(); return "jsp/mid/index";
}
}
五,项目总结
整个项目基本功能完整,业务逻辑清晰,有严格的审批流程,比较适合做毕业设计或课程设计使用。