基于Java+SpringBoot+Vue 社团管理系统设计与实现

系统简介

本次开发的是一款专门为校园社团设计的管理软件。随着互联网网络的发展,校园社团人员流动和社团日常工作渐渐实现通过软件的方式进行管理。传统的线下管理方式不再满足当下社团管理所需的及时性以及便捷性需求,因此,通过社管管理软件对社团用户以及社团活动进行管理成为了本次开发的社团管理软件首要考虑的功能模块。
本次开发的社团管理软件包含社团信息管理、社团成员管理、入团申请管理、社团活动管理、通知信息管理、社团费用管理等功能模块。通过简洁明了的界面和流畅的操作流程,社团成员可以轻松参与活动,组织者也可以方便地管理社团事务。此外,该软件还具备强大的数据统计和分析功能,可以帮助社团组织者更好地了解社团成员的需求和喜好,为社团的未来发展提供有力支持。
系统功能模块图
本次开发的社团管理系统用户角色分为社团用户和管理员两种角色。管理员拥有社团信息管理、社团成员管理、入团申请管理、社团活动管理、通知信息管理、费用记录管理、个人信息管理的功能。社团用户拥有社团信息浏览、社团活动浏览、入团申请记录浏览、社团费用记录浏览、个人信息管理的功能。
部署教程视频部署运行教程


一 技术框架

1. SpringBoot 框架

Spring Boot是一个由Pivotal团队提供的全新框架,旨在为所有基于Spring Framework 5.0开发的项目提供一个起点。它被设计为简化Spring应用程序的搭建和开发过程,以尽可能快速地运行Spring应用程序,并尽可能减少配置文件。
Spring Boot基于Spring 4.0设计,继承了Spring框架原有的优秀特性,并通过简化配置进一步简化了Spring应用的整个搭建和开发过程。它还通过集成大量的框架解决了依赖包的版本冲突以及引用不稳定等问题。
Spring Boot具有以下特征:

  1. 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs。
  2. 内嵌Tomcat或Jetty等Servlet容器。
  3. 提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置。
  4. 尽可能自动配置Spring容器。
  5. 提供准备好的特性,如指标、健康检查和外部化配置。
  6. 绝对没有代码生成,不需要XML配置。这使得开发人员可以摆脱复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。
    总的来说,Spring Boot是一个功能强大的框架,它简化了Spring应用程序的开发过程,提高了开发效率。

2. Vue 框架

Vue.js 是一个构建用户界面的渐进式框架。与其他大型框架不同的是,Vue 被设计为可以自底向上逐层应用。核心库只关注视图层,易于与其它库或已有项目整合。另一方面,当与现代化的工具链和各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供结构。
以下是 Vue 的核心特性:

  1. 响应式数据绑定:Vue.js 使用了 MVVM 模式,模型通过观察者模式与视图进行通信,任何对模型的修改都会自动更新到视图上。
  2. 组件系统:Vue.js 的另一个主要特性是它的组件系统。组件是自定义元素,通过 Vue 实例或另一个组件实例化并管理。
  3. 模板语法:Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将已存在的 DOM 绑定至 Vue 实例的数据。
  4. 虚拟 DOM:Vue.js 使用了一个虚拟 DOM 来实现高效的更新。所有的 DOM 操作都由 JavaScript 在背后处理,这使得开发者无需关心底层的 DOM 操作。
  5. 组件化开发:Vue.js 允许开发者将应用程序划分为可重用的组件,这使得代码更易于理解和维护。
  6. 指令:Vue.js 提供了一些特殊的属性,称为指令,如 v-if, v-for, v-bind 等,这些指令可以用来控制元素的渲染行为。
  7. 插件化架构:Vue.js 的插件化架构使得开发者可以轻松地扩展其功能,同时也可以创建可重用的组件和代码共享。
  8. 路由:Vue Router 是 Vue.js 的官方路由库,用于构建单页面应用。它提供了许多功能,如懒加载、嵌套路由等。
  9. 状态管理:Vuex 是 Vue.js 的状态管理模式和库,用于管理组件之间的共享状态。
    使用 Vue,你可以构建出复杂的单页应用,而无需关心底层的 DOM 操作。同时,由于其组件化的特性,你可以将你的应用划分为多个可重用的组件,使得代码更易于维护和扩展。

3. Mybatis 技术

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
以下是 MyBatis 的一些主要特点:

  1. SQL 映射: MyBatis 可以直接使用 SQL,这意味着你可以直接编写 SQL 语句,而不需要在 Java 代码中写 JDBC 语句。
  2. 动态 SQL: MyBatis 支持动态 SQL,可以根据不同的条件生成不同的 SQL 语句。
  3. 结果映射: MyBatis 支持将 SQL 查询的结果直接映射到 Java 对象。
  4. 事务管理: MyBatis 支持事务管理,可以方便地进行数据库事务的操作。
  5. 缓存: MyBatis 支持二级缓存,可以有效地提高查询效率。
  6. 与 Spring 集成: MyBatis 可以与 Spring 框架无缝集成,方便开发者在 Spring 项目中使用 MyBatis。
    使用 MyBatis,开发者可以更加专注于业务逻辑的实现,而不需要花费过多的精力在数据库的操作上。同时,MyBatis 也为项目提供了更高的灵活性和扩展性。

4. JDBC技术

JDBC(Java DataBase Connectivity)是Java运行平台的核心类库中的一部分,提供了访问数据库的API。它定义了在Java语言中连接数据库、执行SQL语句的标准,可以为多种关系数据库提供统一访问。
JDBC技术的主要功能包括:

  1. 与一个数据库建立连接。
  2. 向已连接的数据库发送SQL语句。
  3. 处理SQL语句返回的结果。
    在JDBC3.0标准中,常用接口与类包括Driver接口。这个接口的作用是来定义数据库驱动对象应该具备的一些能力,比如与数据库建立连接的方法的定义。所有支持java语言连接的数据库都实现了该接口,实现该接口的类称之为数据库驱动类。在程序中要连接数据库,必须先通过JDK的反射机制加载数据库驱动类,将其实例化。

二 功能截图

1.注册登录页面

在这里插入图片描述
在这里插入图片描述

2.系统首页

在这里插入图片描述

3.社团信息浏览

在这里插入图片描述

4.社团成员管理

在这里插入图片描述

5.入团申请处理

在这里插入图片描述

6.社团活动浏览

在这里插入图片描述

7.通知信息管理

在这里插入图片描述

8.费用记录管理

在这里插入图片描述

三 代码参考

package com.bishe.club.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bishe.club.dao.MembersDao;
import com.bishe.club.dao.UsersDao;
import com.bishe.club.entity.Members;
import com.bishe.club.entity.Users;
import com.bishe.club.msg.PageData;
import com.bishe.club.service.UsersService;
import com.bishe.club.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service("usersService")
public class UsersServiceImpl implements UsersService {

    @Autowired
    private MembersDao membersDao;

    @Autowired
    private UsersDao usersDao;

    @Override
    @Transactional
    public void add(Users users) {
        usersDao.insert(users);
    }

    @Override
    @Transactional
    public void update(Users users) {
        usersDao.updateById(users);
    }

    @Override
    @Transactional
    public void delete(Users users) {
        usersDao.deleteById(users);
    }

    @Override
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public Boolean isRemove(String userId){
        QueryWrapper<Members> qw = new QueryWrapper<Members>();
        qw.eq("user_id", userId);
        Integer total = membersDao.selectCount(qw);
        return total <= 0;
    }

    @Override
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public Users getOne(String id) {
        Users users = usersDao.selectById(id);
        return users;
    }

    @Override
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public Users getUserByUserName(String userName) {
        QueryWrapper<Users> qw = new QueryWrapper<Users>();
        qw.eq("user_name", userName);
        Users user = usersDao.selectOne(qw);
        return user;
    }

    @Override
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public PageData getPageInfo(Long pageIndex, Long pageSize, Users users) {

        QueryWrapper<Users> qw = new QueryWrapper<Users>();
        if (StringUtils.isNotNullOrEmpty(users.getUserName())) {
            qw.like("user_name", users.getUserName());
        }
        if (StringUtils.isNotNullOrEmpty(users.getName())) {
            qw.like("name", users.getName());
        }
        if (StringUtils.isNotNullOrEmpty(users.getPhone())) {
            qw.like("phone", users.getPhone());
        }
        qw.orderByDesc("create_time");
        Page<Users> page =
                usersDao.selectPage(new Page<Users>(pageIndex, pageSize), qw);
        return parsePage(page);
    }

    /**
     * 转化分页查询的结果
     */
    public PageData parsePage(Page<Users> p) {

        List<Map<String, Object>> resl = new ArrayList<Map<String, Object>>();
        for (Users users : p.getRecords()) {
            Map<String, Object> temp = new HashMap<String, Object>();
            temp.put("id", users.getId());
            temp.put("userName", users.getUserName());
            temp.put("passWord", users.getPassWord());
            temp.put("name", users.getName());
            temp.put("gender", users.getGender());
            temp.put("age", users.getAge());
            temp.put("phone", users.getPhone());
            temp.put("address", users.getAddress());
            temp.put("status", users.getStatus());
            temp.put("createTime", users.getCreateTime());
            temp.put("type", users.getType());
            resl.add(temp);
        }

        PageData pageData = new PageData(p.getCurrent(), p.getSize(), p.getTotal(), resl);
        return pageData;
    }
}

源码获取

大家点赞、关注、评论、留言,会经常免费分享源码

关注“毕业不难”公众号,回复004获取分享源码

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业不难

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值