Sprinboot学生社团管理系统
1.项目简介
高校社团管理系统分为前后台,角色分为三种:管理员、社长、普通社员。
超级管理员角色包含以下功能:会员管理,物品管理,活动审批,系统用户管理,社团添加删除等功能。
社长角色包含以下功能:社团管理员登录,会员管理,物品管理,活动管理,查询社团信息,密码修改等功能。
普通社员角色包含以下功能:社员登录,申请入社,物品查看,活动申请等功能
前台主要是展示社团列表、社团风采、社团活动、新闻列表 前台登录后进入个人中心,在个人中心能申请加入社团、查看参加的社团活动等 后台为管理员与社长使用,应用于对社团的管理及内容发布等。
开发环境
1.运行环境:最好是java jdk 1.8 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.Redis需要配置3.2版本以上 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 8.0版本;
实用技术 Springboot+Redis+Mysql+Boostrap+mybatis
使用说明 1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;注:数据库使用mysql 8.0,注意版本要匹配,否则可能会产生连接异常的情况, 2. 将项目中db.properties配置文件中的数据库配置改为自己的配置 3. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,配置文件
普通社员账号:13030303 密码:123
管理员账号:1 密码:123123 社长账号:14040404 密码:123
功能模块图
创新功能
2.数据库设计
2.1表结构
user表
news表
associationmember表
association表
activity表
2.2ER图
3.项目实现
3.1项目配置文件编写
```yaml
访问相关配置
server.port=8081
Spring boot视图配置
JSP配置
页面默认前缀
spring.mvc.view.prefix=/WEB-INF/
响应页面默认后缀
spring.mvc.view.suffix=.jsp
thymeleaf模板引擎配置
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=/WEB-INF/
spring.thymeleaf.suffix=.html
spring.thymeleaf.enabled=false
spring.freemarker.checkTemplateLocation=false
静态文件访问配置
spring.mvc.static-path-pattern=/static/**
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/association?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.main.allow-bean-definition-overriding=true
Redis数据库索引(默认为0)
spring.redis.database=1
Redis服务器地址
spring.redis.host=127.0.0.1
Redis服务器连接端口
spring.redis.port=6379
Redis服务器连接密码(默认为空)
spring.redis.password=
连接池最大连接数(使用负值表示没有限制)
此项过时,请使用spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.max-idle=8
连接池最大阻塞等待时间(使用负值表示没有限制).
此项过时,请使用spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.max-wait=-1
连接池中的最小空闲连接
此项过时,请使用spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.min-idle=0
连接超时时间(毫秒)
spring.redis.timeout=5000 ```
3.2Redis配置
```java @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport {
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
@SuppressWarnings("rawtypes")
@Bean
//缓存管理器
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheManager cacheManager = RedisCacheManager.create(connectionFactory);
//设置缓存过期时间
return cacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
} ```
3.3全局拦截器配置
```java package com.example.association2.config;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.*; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.thymeleaf.spring5.SpringTemplateEngine; import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; import org.thymeleaf.spring5.view.ThymeleafViewResolver; import org.thymeleaf.templateresolver.ITemplateResolver;
@Configuration//用来定义 DispatcherServlet 应用上下文中的 bean @EnableWebMvc @ComponentScan public class Webconfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".jsp");
resolver.setViewNames("jsp/*");
resolver.setOrder(2);
return resolver;
}
@Bean
public ITemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setTemplateMode("HTML5");
templateResolver.setPrefix("/WEB-INF/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("utf-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
public ThymeleafViewResolver viewResolverThymeLeaf() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("utf-8");
viewResolver.setViewNames(new String[]{"thymeleaf/*"});
viewResolver.setOrder(1);
return viewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
} ```
3.4图片工具类
```java public class PicUtil { public static String pictureUtil(String base64Data, HttpServletRequest httpServletRequest){ String dataPrix = ""; String data = "";
String[] d = base64Data.split("base64,");
if (d != null && d.length == 2) {
dataPrix = d[0];
data = d[1];
}
String suffix = "";
if ("data:image/jpeg;".equalsIgnoreCase(dataPrix)) {//data:image/jpeg;base64,base64编码的jpeg图片数据
suffix = ".jpg";
} else if ("data:image/x-icon;".equalsIgnoreCase(dataPrix)) {//data:image/x-icon;base64,base64编码的icon图片数据
suffix = ".ico";
} else if ("data:image/gif;".equalsIgnoreCase(dataPrix)) {//data:image/gif;base64,base64编码的gif图片数据
suffix = ".gif";
} else if ("data:image/png;".equalsIgnoreCase(dataPrix)) {//data:image/png;base64,base64编码的png图片数据
suffix = ".png";
}
String imgName = UUID.randomUUID().toString();
String tempFileName = imgName + suffix;
byte[] bs = Base64Utils.decodeFromString(data);
String url = httpServletRequest.getSession().getServletContext().getRealPath("/upload");
try {
FileUtils.writeByteArrayToFile(new File(url + "/" + tempFileName), bs);
} catch (IOException e) {
e.printStackTrace();
}
String picture="../upload/"+tempFileName;
return picture;
}
} ```
3.5主要功能实现
```java //申请创建社团页面 @GetMapping("/associationApply") public String toApplyAss(HttpServletRequest httpServletRequest) { HttpSession session = httpServletRequest.getSession(); int userId = (int) session.getAttribute("userId"); httpServletRequest.setAttribute("userId", userId); return "jsp/ass_apply"; }
//提交创建社团申请 @PostMapping("/associationApply") @ResponseBody public String addAss(String name, String description, int ownerId, int type, @RequestParam(name = "base64Data", required = true) 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; }
//社团详情页面 @GetMapping("/association") public String association( @RequestParam(name = "associationId", required = true) int associationId, @RequestParam(name = "bar", defaultValue = "1") 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"; } ```
3.6自定义枚举类
java
public enum AssociationType {
ASS1(1),
ASS2(2),
ASS3(3),
;
private int associationType;
private AssociationType(int associationType){
this.associationType=associationType;
}
public int getAssociationType(){
return associationType;
}
}
4.项目实现
4.1学生页面
登录页
主页
个人中心
修改密码
浏览活动
申请创建社团
申请加入社团
4.2社长页面
主页
社团介绍
用户管理
4.3管理员页面
后台用户管理
社团管理
创建活动
社团信息更新
审核管理
新闻管理
参考文献
- 某高校团员管理系统的设计与实现(厦门大学·刘泉)
- 基于Spring Boot的学生信息管理系统的设计与实现(武汉轻工大学·杨东)
- 基于Struts+Hibernate的学生社团管理系统的设计与实现(吉林大学·左欣夏)
- 基于Java Web的学生社团管理系统的设计与实现(吉林大学·王佳宝)
- 企业内部管理系统的设计与实现(山东大学·李灿灿)
- 基于B/S模式的高中教师信息管理系统的设计与实现(电子科技大学·吴敏)
- 基于SNS导向的高校学生社团活动支持平台设计与实现(湖北工业大学·熊志)
- 基于Spring的高校教学管理信息系统的设计与实现(西安电子科技大学·刘爱玉)
- 基于UML的教务管理系统分析与设计(南京理工大学·陈芬)
- 基于SSH的人事管理系统的分析与设计(北方工业大学·戴青)
- 基于WEB高校资料信息系统的设计(中国海洋大学·夏斌)
- 基于ssh2架构的科研管理系统研究与实现(电子科技大学·龚强)
- 基于Java EE的学生就业信息管理系统的设计与实现(东北大学·苏姗娜)
- 基于LAMP架构的校园微活动管理平台的设计与实现(北京工业大学·庄欠林)
- 基于Spring Boot的学生信息管理系统的设计与实现(武汉轻工大学·杨东)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码导航 ,原文地址:https://m.bishedaima.com/yuanma/35475.html