시스템 기능 설명
Java Swing과 MySQL 기반 학생 출석 관리 시스템은 학생, 교사, 시스템 관리자 세 가지 역할로 구성됩니다.
학생 기능
- 시스템 로그인
- 비밀번호 변경 및 시스템 종료
- 학생 목록 조회
- 수강 과목 선택
- 출석 체크
교사 기능
- 학생 등록 및 관리
- 학급 생성 및 관리
- 교사 목록 조회
- 강의 등록 및 관리
- 수강 신청 관리
- 출석 기록 관리 및 통계
시스템 관리자 기능
- 모든 사용자 관리(학생/교사)
- 학급 및 강의 관리
- 전체 출석 통계 관리
핵심 구현 코드
데이터베이스 연결 관리
package com.system.util;
import java.sql.*;
public class DBConnector {
private String url = "jdbc:mysql://localhost:3306/student_db";
private String user = "admin";
private String password = "secure123";
private String driver = "com.mysql.cj.jdbc.Driver";
public Connection getConnection() {
try {
Class.forName(driver);
return DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void closeConnection(Connection conn) throws SQLException {
if (conn != null) conn.close();
}
}
출석 정보 엔티티
package com.system.model;
public class AttendanceRecord {
private int recordId;
private int studentId;
private int courseId;
private String checkDate;
// Getter와 Setter 메서드
public int getRecordId() { return recordId; }
public void setRecordId(int recordId) { this.recordId = recordId; }
public int getStudentId() { return studentId; }
public void setStudentId(int studentId) { this.studentId = studentId; }
public int getCourseId() { return courseId; }
public void setCourseId(int courseId) { this.courseId = courseId; }
public String getCheckDate() { return checkDate; }
public void setCheckDate(String checkDate) { this.checkDate = checkDate; }
}
출석 데이터 접근 객체
package com.system.dao;
import com.system.model.AttendanceRecord;
import java.sql.*;
import java.util.*;
public class AttendanceDAO {
public boolean insertRecord(AttendanceRecord record, Connection conn) {
String query = "INSERT INTO attendance VALUES (NULL, ?, ?, ?)";
try (PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.setInt(1, record.getStudentId());
stmt.setInt(2, record.getCourseId());
stmt.setString(3, record.getCheckDate());
return stmt.executeUpdate() > 0;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public List<AttendanceRecord> getRecords(int studentId, int courseId, String date) {
List<AttendanceRecord> records = new ArrayList<>();
StringBuilder sql = new StringBuilder("SELECT * FROM attendance WHERE 1=1");
if (studentId != 0) sql.append(" AND student_id = ").append(studentId);
if (courseId != 0) sql.append(" AND course_id = ").append(courseId);
if (date != null) sql.append(" AND check_date LIKE '%").append(date).append("%'");
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql.toString())) {
while (rs.next()) {
AttendanceRecord record = new AttendanceRecord();
record.setRecordId(rs.getInt("id"));
record.setStudentId(rs.getInt("student_id"));
record.setCourseId(rs.getInt("course_id"));
record.setCheckDate(rs.getString("check_date"));
records.add(record);
}
} catch (SQLException e) {
e.printStackTrace();
}
return records;
}
}
메인 프레임 UI 구조
package com.system.view;
import javax.swing.*;
import java.awt.*;
public class MainFrame extends JFrame {
private JDesktopPane desktop;
public MainFrame() {
setTitle("학생 관리 시스템");
setSize(1000, 800);
JMenuBar menuBar = new JMenuBar();
JMenu systemMenu = new JMenu("시스템 설정");
JMenuItem changePwd = new JMenuItem("비밀번호 변경");
systemMenu.add(changePwd);
menuBar.add(systemMenu);
// 추가 메뉴 항목 구성
// ...
setJMenuBar(menuBar);
desktop = new JDesktopPane();
add(desktop, BorderLayout.CENTER);
setLocationRelativeTo(null);
}
}