社团管理系统-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();
}
}