Skip to content

haramsong/classschedule

Repository files navigation

교과 배정 프로그램 (Class Schedule)

2022 Math Schedule Project — 부산대학교 수학과

과거 강의 시간표 데이터(2016~2021년)를 기반으로 교수별 선호 시간대를 분석하고, 강의 시간·요일·강의실을 자동 배정하는 데스크톱 프로그램입니다.

프로젝트 배경

기존 시간표 배정은 다음과 같은 수동 절차로 진행되었습니다:

  1. 회의를 통한 학부 개설 교과목 확정
  2. 학부 개설 교과목 담당 교수 확정
  3. 대학원 개설 교과목 확정
  4. 학부 개설 교과목 시간표 배정
  5. 대학원 시간표 배정

이 과정에서 일일이 임용 순대로 선호 시간대를 물어보는 과정이 번거롭고 시간이 많이 소요되어, 자동화된 시스템이 필요했습니다.

주요 기능

  • 마스터데이터 관리 — 강좌, 교수, 강의실 정보의 조회·등록·수정·삭제
  • 자동 강의 배정 — 과거 시간표 데이터셋을 분석하여 교수별 요일·시간·강의실을 랜덤 배정 (시간 충돌 자동 검증)
  • 수동 강의 배정 — 사용자가 직접 교수·강좌·요일·시간을 지정하여 배정
  • 시간표 미리보기 — 학부/대학원별 시간표를 요일×시간 테이블 형태로 확인
  • 강의 확정 및 엑셀 내보내기 — 배정 결과를 확정하고 Excel 파일로 저장

시스템 구조

┌────────────────────────────────────────────────────────────┐
│                       Main Screen                          │
│   강의 정보 │ 강의실 정보 │ 교수 정보 │ 강의 배정                    │
└──────┬──────────┬─────────┬──────────┬─────────────────────┘
       │          │         │          │
  ┌────▼────┐┌────▼────┐┌───▼────┐┌────▼──────────┐
  │강의 관리  ││ 강의실관리 ││ 교수관리 ││  강의 배정 관리   │
  └────┬────┘└────┬────┘└───┬────┘└────┬──────────┘
       │          │          │          │
  ┌────▼──────────▼──────────▼───┐ ┌────▼──────────────┐
  │         Master DB            │ │     Lesson DB     │
  │ 강의정보·강의실정보·교수정보        │ │   시간표정보·배정정보  │
  └──────────────────────────────┘ │    (학부/대학원)     │
                                   └───────────────────┘
  • Master DBdata/ 내 강의·교수·강의실 Excel 파일
  • Lesson DB — 확정 시간표, 학부/대학원 배정 데이터, 과거 데이터셋

기술 스택

  • Python 3.8
  • PyQt5 (GUI)
  • pandas / numpy (데이터 처리)
  • openpyxl (Excel 입출력)

프로젝트 구조

classschedule/
├── main.py                  # 프로그램 진입점 (메인 화면)
├── dialog.py                # 마스터데이터 관리 화면 (강좌/교수/강의실 CRUD)
├── timetable.py             # 시간표 화면 (학년도·학기별 조회)
├── users_lesson_assign.py   # 강의 배정 핵심 로직 (자동/수동 배정, 충돌 검증)
├── show_timetable.py        # 시간표 미리보기 화면 (학부/대학원)
├── data_load.py             # 데이터 로드 및 과거 데이터셋 전처리
├── global_py.py             # 공통 UI 유틸리티 (폰트, 버튼, 메시지박스)
├── imports.py               # 공통 import 모듈
├── info_type.json           # 화면 간 상태 전달용 설정 파일
├── data/                    # 마스터데이터 (Excel)
│   ├── classroom_info.xlsx      # 강의실 정보
│   ├── professor_info.xlsx      # 교수 정보
│   ├── lesson_info.xlsx         # 강좌 정보
│   ├── lesson_assign.xlsx       # 강의 배정 결과 (확정)
│   ├── lesson_assign_under.xlsx # 학부 배정 데이터
│   ├── lesson_assign_dae.xlsx   # 대학원 배정 데이터
│   ├── time_period.xlsx         # 시간대 정보 (30분 간격)
│   ├── global_master.xlsx       # 글로벌 마스터
│   ├── class_dataset/           # 과거 강의 시간표 (2016~2021, 학기별 12개 파일)
│   └── backup/                  # 백업 데이터
├── development_procedure/   # 개발 문서
│   ├── 강의배정_프로젝트_발표자료.pdf
│   ├── 강의배정_program_manual.pdf
│   ├── System_Diagram.pdf
│   └── 프로젝트_일정.pdf
├── img/                     # UI 아이콘 이미지
└── format/                  # 데이터 포맷 유틸리티

실행 방법

pip install PyQt5 pandas numpy openpyxl
python main.py

사용 흐름

  1. 메인 화면에서 강좌/교수/강의실 정보를 등록·관리합니다.
  2. 강의 배정 메뉴에서 학부 또는 대학원을 선택합니다.
  3. 배정(▶) 버튼을 클릭하면 과거 데이터 기반으로 자동 배정이 수행됩니다.
    • 충돌 발생 시 다른 시간대로 재배정을 시도합니다 (재귀 호출, 최대 10회 반복).
  4. 필요 시 수동으로 교수·강좌·요일·시간을 지정하여 수정할 수 있습니다.
  5. 시간표 미리보기로 요일×시간 테이블을 확인한 후 강의 확정엑셀 다운로드를 수행합니다.

자동 배정 알고리즘

1. 데이터셋 로드 및 전처리

  • data/class_dataset/ 내 과거 시간표(2016~2021년, 학기별 12개 파일)를 하나의 데이터프레임으로 통합합니다.
  • 학부(수학과)와 대학원 데이터를 분리합니다.
  • 강의시간을 30분 간격 시간ID로 변환하여 [교수명, 과목명, 요일, 시간ID, 강의실명] 형태로 전처리합니다.

2. 교수별 선호시간 분석

과거 데이터를 분석한 결과, 교수별로 뚜렷한 선호 시간대 패턴이 존재합니다:

교수 선호 요일 선호 시간 빈도
이용훈 화, 목 13:30 4회
이상율 월, 수 15:00 5회
정일효 화, 목 09:00 3회
조홍래 화, 목 15:00 5회
이동희 월, 수 16:30 7회
김준교 화, 목 09:00 3회
표준철 화, 목 15:00 3회
윤지훈 화, 목 10:30 4회
최영준 월, 수 10:30 3회
김상일 화, 목 10:30 3회

3. 랜덤 배정 프로세스

  1. 교수 순번에 따라 배정 순서를 결정합니다.
  2. 각 교수의 과거 데이터셋에서 랜덤으로 시간대를 선택합니다.
  3. 선택된 시간대가 기존 배정과 충돌하는지 검증합니다.
  4. 충돌이 없으면 배정을 확정하고, 충돌 시 다음 반복에서 재시도합니다.
  5. 모든 배정이 끝날 때까지 재귀함수 형태로 반복 실행합니다 (무한 루프 방지를 위해 최대 횟수 제한).

4. 충돌 검증 규칙

배정 시 다음 3가지 규칙을 검증합니다:

  1. 교수 중복 방지 — 같은 요일, 같은 시간에 동일 교수가 중복 배정될 수 없음
  2. 강의실 중복 방지 — 같은 요일, 같은 시간에 동일 강의실이 중복 사용될 수 없음
  3. 학년별 필수과목 충돌 방지 — 같은 학년 대상 강의가 동일 시간대에 겹치지 않도록 배정

검증 데이터 구조: [교수명, 강의실명, 학년] 을 시간ID × 요일(월~금) 2차원 배열로 관리합니다.

5. 배정 결과 정확도

실제 배정 결과와 교수 선호시간을 비교한 결과:

  • 선호시간 일치: 6 / 11명 (55%)
  • 선호시간 유사: 2 / 11명 (27%)

화면 구성

화면 설명
메인 화면 강의정보, 교수정보, 강의실 정보, 강의 배정 4개 메뉴
강의 정보 강좌명, 학기, 대상학과, 과정(학년), 학점 관리
교수 정보 성명, 직급, 순번 관리
강의실 정보 강의실명, 제한인원 관리
강의 배정 학년도·학기별 시간표 조회 (요일×시간 테이블)
사용자 지정 배정 학부/대학원 선택, 자동 배정(▶), 수동 입력, 시간표 미리보기

개발 문서

development_procedure/ 디렉토리에 아래 문서가 포함되어 있습니다:

About

Pusan national university class scheduling program using algorithms with python, pyqt5

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages