文末获取源码
开发语言:Java
框架:springboot+vue
Node:node.js
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7/8.0
数据库工具:Navicat11
开发软件:eclipse/idea,Visual
Maven包:Maven3.3.9
浏览器:谷歌浏览器
目录
一、前言介绍
随着计算机科学技术的日渐成熟,人们已经深刻地认识到了计算机在各个领域中发挥的功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。目前社团网站管理是一项系统而复杂的工作,它需要一个团队互相配合、分工协作。在该领域,传统的手工存取或者借助一些软件对学校学生社团涉及到的信息进行管理方式常常不能对学校学生社团各种信息进行实时跟踪与管理,为进一步完善软件学校学生社团信息管理流程及资源的统一管理,更加全面、有效的服务于软件开发过程,更好的方便软件开发过程管理,故开发此学生社团管理系统。
论文针对在学生社团信息数据规模大,管理员人员和用户需要对学生社团涉及到的信息进行管理的需求,设计了学生社团管理系统的框架,给出了学生社团管理系统的总体设计,并对学生社团管理系统的架构及关键模块的实现过程进行了详细论述。采用Java语言和MySQL数据库技术,基于springboot框架实现了一个完整系统的设计,为使用者提供了良好的学生社团管理系统。
二、系统功能
按照学生社团管理系统的角色,我划分为了普通管理模块,社长模块和管理员模块这三大部分。
2.1普通用户管理模块
(1)用户注册登录:游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现加入社团,就必须有这个系统的账号,如果没有账号的话,可以注册成员用户进行相关的操作,同时用户还可以通过“我的”这以按钮对个人信息以及操作的信息进行管控。
(2)查看学生社团管理系统的首页信息:学生社团管理系统的首页信息包含了首页、线上调查表、公告消息、社团信息、创社申请、社团活动、社团新闻等。
(3)社团详情:用户点击“社团信息”这个菜单按钮,就会显示所有的社团列表,在查询到自己想要社团报名的时候,可以进入查看详细的介绍,在这个界面,也可以对社团进行加入、点赞、收藏、评论操作。
(3)社团报名:用户点击社团详情页面中右下角“加入”这一按钮以后会跳转到信息填写的界面,其中社团编号+社团名称+学号是自动生成的,用户只要填写好姓名+学院+专业+班级名称+自我介绍+特长及爱好,点击提交以后社团报名就完成一半了。
(4)社团报名管理:用户进入用户后台后可以管理自己申请加入订社团信息,能够查看审核状态以及审核回复等。
2.2社长管理模块
(1)活动申请:社长点击“活动申请”这一菜单,能够查看到自己提交的活动申请信息,可以添加+编辑+删除+查询活动申请信息。
(2)成员信息:社长点击“成员信息”这一菜单,可以查看到自己社团里面的成员的信息,可以对社团成员进行增删改查操作。
(3)社团信息:社长点击“社团信息”这一菜单,可以查看到自己添加的社团信息,也可以对社团信息进行增删改查,同时也可以查看前台用户对社团提交的评论。
(4)社团报名:社长点击“社团报名”这一菜单,可以查看到用户提交的社团报名申请信息,可以对其进行审核以及审核回复。
2.3管理员管理模块
(1)站点管理:管理员可以对系统前台展示的轮播图以及公告进行增伤改查,方便用户进行查看。
(2)用户管理:管理员可以对学生社团管理系统中的管理员,社长以及前台注册的普通用户进行增删改查。
(3)内容管理:管理员可以对学生社团管理系统前台展示的社团资讯以及社团资讯所属的分类进行管控。
(4)更多管理:在“更多管理”这一菜单下,可以对社长操作的活动申请,社团信息,社团财务以及在前台用户提交的社团成员信息、社团报名进行管控。
三、系统详细设计
3.1前台首页模块
3.2社团信息模块
3.3创社申请模块
3.4社团活动模块
四、管理员功能模块
4.1后台首页模块
4.2公告栏模块
4.3社团管理模块
4.4调查表模块
4.5社团信息模块
五、部分核心代码
5.1用户登录关键代码
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
5.2用户注册关键代码
/**
* 注册
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
5.3活动信息关键代码
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
5.4社团信息查询关键代码
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.5站点管理关键代码
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}