社团管理系统-MSSQL

社团管理系统开发实践

项目概述

本系统基于Java+SQL Server技术栈实现,采用Maven进行项目管理,主要解决高校社团信息化管理痛点。系统提供成员管理、活动管理、权限控制等核心功能

项目Github地址:https://github.com/YXCS-cya/Club-Manage

项目展示

数据统计与报表界面

权限管理示例

技术栈

技术领域 技术选型
前端开发 Swing UI & JFrame
后端开发 Java SE 8、JDBC API
数据库 SQL Server 2012
项目管理 Maven 3.9.5
开发工具 IntelliJ IDEA、Power Designer
安全机制 视图封装、RBAC权限模型

系统设计

E-R图

程序流程图

核心时序图

核心数据库设计

物理结构

数据库规范

  • 符合3NF规范
  • 使用Power Designer建模
  • 建立6张主表+2个视图

关键表结构

​​社团表 (Club)​

CREATE TABLE Club (
    Club_ID INT PRIMARY KEY,
    Club_Name VARCHAR(255) NOT NULL,
    Club_Type VARCHAR(100),
    Club_ManagerID INT REFERENCES Member(Member_ID),
    Club_Teacher VARCHAR(100),
    Club_Number INT CHECK(Club_Number >= 0),
    Club_Add VARCHAR(255)
);

多对多关系表 (ClubMember)​

CREATE TABLE ClubMember (
    Club_ID INT REFERENCES Club(Club_ID),
    Member_ID INT REFERENCES Member(Member_ID),
    PRIMARY KEY (Club_ID, Member_ID)
);

优化视图

CREATE VIEW ClubactView AS
SELECT c.Club_Name, a.Activity_Name, r.AttendanceCount 
FROM Activity a
JOIN Club c ON a.Club_ID = c.Club_ID
LEFT JOIN ClubActivityRecord r ON a.Activity_ID = r.Activity_ID;

系统实现

注:此处代码存在修改,源码见Github库

JDBC连接池

public class DatabaseHelper {
    private static final String URL = "jdbc:sqlserver://localhost:1433;...";
    
    static {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, "sa", "123456");
    }
}

事务处理模版

public void updateClubInfo(Club club) {
    Connection conn = null;
    try {
        conn = DatabaseHelper.getConnection();
        conn.setAutoCommit(false);
        
        // 更新基础信息
        updateBasicInfo(conn, club);
        // 更新成员数量
        updateMemberCount(conn, club.getClub_ID());
        
        conn.commit();
    } catch (SQLException e) {
        if(conn != null) try { conn.rollback(); } catch (SQLException ex) {}
    } finally {
        if(conn != null) try { conn.close(); } catch (SQLException e) {}
    }
}

安全控制

​​视图封装​​:通过ClubLeaderView限制普通用户访问字段
​​参数化查询​​:防止SQL注入

PreparedStatement ps = conn.prepareStatement(
    "SELECT * FROM Member WHERE Member_Name LIKE ?");
ps.setString(1, "%" + keyword + "%");

性能优化

​​索引策略​​:在Club_ID、Member_ID等外键字段建立索引
​​批量处理​​:使用JDBC批处理提升数据导入效率

public void batchInsertMembers(List<Member> members) {
    try (Connection conn = DatabaseHelper.getConnection();
         PreparedStatement ps = conn.prepareStatement(
             "INSERT INTO Member VALUES (?,?,?,?,?)")) {
        
        for (Member m : members) {
            ps.setInt(1, m.getId());
            ps.setString(2, m.getName());
            ps.addBatch();
        }
        ps.executeBatch();
    }
}
posted @ 2025-05-15 16:18  云下成伞  阅读(48)  评论(0)    收藏  举报