Sign In

모의 수강신청📑

수강신청이 처음인 신입생들을 위한 모의 수강신청!
모의 수강신청 코딩
import re class Course: def __init__(self, code, name, max_students, schedule): self.code = code self.name = name self.max_students = max_students # 정원 20명으로 설정 self.schedule = self.parse_schedule(schedule) # 리스트로 저장됨 self.schedule_raw = schedule # 사용자에게 보여줄 원래 형식 self.enrolled_students = 0 def is_available(self): return self.enrolled_students < self.max_students def enroll(self): if self.is_available(): self.enrolled_students += 1 return True return False def cancel(self): if self.enrolled_students > 0: self.enrolled_students -= 1 return True return False def parse_schedule(self, schedule_str): # e.g. "월/수 09:00-10:30" days_part, time_part = schedule_str.split(" ") days = days_part.split("/") start_time, end_time = time_part.split("-") start_minutes = self.to_minutes(start_time) end_minutes = self.to_minutes(end_time) return [(day, start_minutes, end_minutes) for day in days] def to_minutes(self, time_str): hours, minutes = map(int, time_str.split(":")) return hours * 60 + minutes class Student: def __init__(self): self.enrolled_courses = [] def has_schedule_conflict(self, new_course): for new_day, new_start, new_end in new_course.schedule: for course in self.enrolled_courses: for day, start, end in course.schedule: if day == new_day and not (new_end <= start or new_start >= end): return True, course return False, None def add_course(self, course): if course in self.enrolled_courses: print("⚠️ 이미 신청한 과목입니다.") return conflict, conflicting_course = self.has_schedule_conflict(course) if conflict: print(f"❌ 시간표가 겹칩니다: [{conflicting_course.name}] 와 [{course.name}]") return if course.enroll(): self.enrolled_courses.append(course) print(f"✅ {course.name} 과목을 신청했습니다.") else: print("⚠️ 정원이 초과되어 신청할 수 없습니다.") def drop_course(self, course): if course in self.enrolled_courses: course.cancel() self.enrolled_courses.remove(course) print(f"✅ {course.name} 과목을 취소했습니다.") else: print("⚠️ 신청한 과목이 아닙니다.") def list_courses(self): if not self.enrolled_courses: print("📭 신청한 과목이 없습니다.") else: print("📋 신청한 과목 목록:") for course in self.enrolled_courses: print(f"- {course.name} ({course.code}) / 시간: {course.schedule_raw}") def main(): courses = [ Course("CS101", "컴퓨터개론", 20, "월/수 09:00-10:30"), Course("MATH101", "미적분학", 20, "수/금 09:30-11:00"), Course("ENG101", "영어회화", 20, "화/목 13:00-15:00"), Course("HIST101", "한국사", 20, "금 09:00-10:00"), ] student = Student() while True: print("\n[모의 수강신청 시스템]") print("1. 과목 목록 보기") print("2. 과목 신청") print("3. 과목 취소") print("4. 신청한 과목 보기") print("5. 종료") choice = input("원하는 메뉴 번호를 입력하세요: ") if choice == '1': print("\n[과목 목록]") for course in courses: status = f"{course.enrolled_students}/{course.max_students}" print(f"{course.code} - {course.name} | 시간: {course.schedule_raw} | 정원: {status}") elif choice == '2': code = input("신청할 과목 코드를 입력하세요: ").upper() selected = next((c for c in courses if c.code == code), None) if selected: student.add_course(selected) else: print("❗ 존재하지 않는 과목입니다.") elif choice == '3': code = input("취소할 과목 코드를 입력하세요: ").upper() selected = next((c for c in courses if c.code == code), None) if selected: student.drop_course(selected) else: print("❗ 존재하지 않는 과목입니다.") elif choice == '4': student.list_courses() elif choice == '5': print("👋 수강신청 프로그램을 종료합니다.") break else: print("⚠️ 올바른 번호를 입력해주세요.") if __name__ == "__main__": main()

코딩 복사 후 아래 사이트 접속해서 붙여넣기 후 RUN 실행