【零基础实战】Java+MySQL开发校园社团活动管理系统

项目概述

开发一个基于Java和MySQL的校园社团活动管理系统,涵盖社团管理、活动发布、成员报名、数据统计等功能。适合零基础学习Java Web开发与数据库交互的实战项目。

技术栈选择

  • 后端:Java 8+、Servlet/JSP(或Spring Boot简化开发)
  • 数据库:MySQL 8.0
  • 前端:HTML/CSS/JavaScript + Bootstrap(快速构建UI)
  • 工具:Maven(依赖管理)、Git(版本控制)

数据库设计

核心表结构
-- 社团表
CREATE TABLE `club` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `description` TEXT,
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 活动表
CREATE TABLE `activity` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `club_id` INT NOT NULL,
  `title` VARCHAR(100) NOT NULL,
  `content` TEXT,
  `start_time` DATETIME,
  `end_time` DATETIME,
  FOREIGN KEY (`club_id`) REFERENCES `club`(`id`)
);

-- 用户表(成员)
CREATE TABLE `user` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `student_id` VARCHAR(20) UNIQUE NOT NULL,
  `name` VARCHAR(50) NOT NULL,
  `password` VARCHAR(100) NOT NULL
);

-- 报名记录表
CREATE TABLE `registration` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `user_id` INT NOT NULL,
  `activity_id` INT NOT NULL,
  `register_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`user_id`) REFERENCES `user`(`id`),
  FOREIGN KEY (`activity_id`) REFERENCES `activity`(`id`)
);


核心功能实现

数据库连接配置

使用JDBC连接MySQL,建议封装为工具类:

public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/club_db";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

活动发布功能
// ActivityDao.java
public class ActivityDao {
    public boolean addActivity(Activity activity) {
        String sql = "INSERT INTO activity (club_id, title, content, start_time, end_time) VALUES (?, ?, ?, ?, ?)";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement stmt = conn.prepareStatement(sql)) {
            stmt.setInt(1, activity.getClubId());
            stmt.setString(2, activity.getTitle());
            stmt.setString(3, activity.getContent());
            stmt.setTimestamp(4, new Timestamp(activity.getStartTime().getTime()));
            stmt.setTimestamp(5, new Timestamp(activity.getEndTime().getTime()));
            return stmt.executeUpdate() > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
}

用户报名功能
// RegistrationServlet.java
@WebServlet("/register")
public class RegistrationServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        int userId = Integer.parseInt(request.getParameter("user_id"));
        int activityId = Integer.parseInt(request.getParameter("activity_id"));

        RegistrationDao dao = new RegistrationDao();
        if (dao.addRegistration(userId, activityId)) {
            response.sendRedirect("success.jsp");
        } else {
            response.sendRedirect("error.jsp");
        }
    }
}


前端页面示例

活动列表页(JSP)
<%@ page import="java.util.List" %>
<%@ page import="com.example.model.Activity" %>
<% List<Activity> activities = (List<Activity>) request.getAttribute("activities"); %>

<div class="container">
    <h3>近期活动</h3>
    <table class="table">
        <c:forEach items="${activities}" var="activity">
            <tr>
                <td>${activity.title}</td>
                <td><fmt:formatDate value="${activity.startTime}" pattern="yyyy-MM-dd HH:mm"/></td>
                <td><a href="/register?activity_id=${activity.id}" class="btn btn-primary">报名</a></td>
            </tr>
        </c:forEach>
    </table>
</div>


部署与测试

  1. 环境准备:安装JDK 8+、MySQL 8.0、Tomcat 9+
  2. 数据库初始化:执行SQL脚本创建表结构
  3. 项目打包:使用Maven命令mvn clean package生成WAR文件
  4. 部署运行:将WAR文件放入Tomcat的webapps目录
  5. 访问测试:通过浏览器访问http://localhost:8080/项目名

扩展建议

  • 增加权限控制(管理员/普通用户角色)
  • 实现活动签到二维码功能
  • 添加活动评价与反馈模块
  • 使用Redis缓存热门活动数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值