Java Swing과 MySQL을 활용한 학생 출석 관리 시스템

시스템 기능 설명

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);
    }
}

태그: Java Swing MySQL GUI 애플리케이션 출석 시스템 데이터베이스 설계

7월 31일 21:25에 게시됨