주제 선정 계기
대학생이라면 누구나 한 번쯤은 수강 신청을 해본 경험이 있을 것입니다. 누군가는 성공했을 수도, 실패했을 수 있습니다. 저는 실패한 경험이 많아서 수강 신청 프로그램을 내가 짜보면 어떨까라는 생각이 들어 선정하게 되었습니다.
<업무 처리 규정>
- 학적과에는 각 과목을 강의하는 강사, 등록한 학생, 강의가 이루어지는 시간 및 장소 등의 데이터가 유지된다.
- 한 강사가 여러 개의 과목을 강의할 수 있습니다.
- 강사에 대해서는 강사 번호, 강사명 등의 정보가 유지되어야 한다.
- 과목에 대해서는 과목 번호, 과목명 등의 정보가 유지되어야 한다.
- 학생에 대해서는 학번, 이름, 주소 등의 정보가 유지되어야 한다.
- 강의에 대해서는 강의 번호, 시간, 장소 등의 정보가 유지되어야 한다.
<메뉴>
- 1. 수강 신청: 학생 학번, 수강할 과목 번호, 해당 교수 번호 입력 -> 수강 신청
- 2. 수강 신청 삭제: 수강 신청 과목 삭제
- 3. 수강 신청 조회
- 4. 수강 신청 수정
- 5. 프로그램 종료
위의 내용을 따르게 MySQL을 이용해서 데이터베이스를 설계해서 EER Diagram을 통해 관계성까지 파악해보겠습니다.
가장 먼저 class 데이터베이스를 만들어줍니다.
강사, 과목, 학생, 강의 정보로 4개의 테이블을 생각할 수 있습니다.
강사 : 과목 -> 1 : M
과목 : 강의 정보 -> 1 : M
과목 : 강사 -> N : M
강사가 여러 과목을 강의할 수 있습니다. 따라서 N : M의 관계를 조정할 필요가 있어 보입니다.
이므로 과목 : 강사을 1: M 관계로 만들어줍니다.
*위의 테이블이 없다면 강사가 여러 과목을 강의하도록 설정하기 어렵습니다.
수강 신청 프로그램을 만들기 위해서 데이터들을 DB의 테이블에 입력한 후 enrollment 테이블만 빈 태이블로 둡니다,
위의 쿼리를 이용하여 코드를 실행합니다.
결과적으로 다음과 같은 관계가 존재함을 EER 다이어그램을 통해 확인할 수 있습니다.
이렇게 DB를 설계한 후 jupyter notebook을 실행시켜 파이썬 코드와 연동한 후 메뉴들을 생성하여 수강 신청 프로그램 코드를 작성해보겠습니다.
Mode 클래스를 생성하여 display_course(수강 신청 조회)메소드, enroll_course(수강 신청) 메소드, remove_course(수강 신청 취소) 메소드, modify_course(수강 신청 수정) 메소드를 만들어보겠습니다.
메뉴 클래스를 생성하여 1~5번을 선택시 구현될 수 있도록 코드를 짭니다.
위와 같이 1~5번 모두 실행되는 것을 확인할 수 있습니다.
그러나 위의 코드는 set, get()을 사용하지 않고 변수 값에 직접 접근하여 값이 변할 위험이 있기 때문에 객체 지향에서 좋은 방법이라고 할 수 없습니다. 앞서 단어장으로 학습했듯이 set, get() 메소드를 사용하여 값에 접근하여 다루어 보도록 하겠습니다. 그러기 위해서는 클래스를 하나 더 만듭니다. 다른 클래스에서 set(), get() 메소드를 이용하기 위해서는 클래스를 생성하여 객체에 값을 저장하는 과정이 필요합니다.
또 등록하기를 등록과 출력으로 메뉴를 나누어서 코드 작성해보겠습니다.
단어장에서의 코드와 비슷하게 구현했더니 코드가 더 깔끔한 것을 확인할 수 있습니다. 앞으로는 전자보다 후자의 코드구현을 위해 힘써야겠습니다.
DB 설계 주제 정하는 과정부터 만만치 않았다. 만들어 보고 싶었던 프로그램들은 매우 많았으나 테이블과 필드들의 관계성을 고려하는 부분에서 초반에 어려움을 겪었다. 떠올랐던 주제들은 메뉴 주문, 쇼핑몰 의류 주문, 미용실 예약 등 여러 가지 있었지만 수강 신청 프로그램을 선택하게 되었다. 그 이유는 실제로 수강 신청시에 정원 때문에어려움을 겪었던 경험이 있었다. 그래서 어떻게 만들길래 이정도 밖에 못 만들지?라는 생각이 앞섰는데 실제로 구현해보려고 하니 쉽지 않았다. 수강 과목의 정원을 고려하는 클래스까지 고민했어야 했는데...기간 내에 못 끝낼 것 같아 만들지 않았다...
그럼에도 메뉴들을 생성하여 각 메뉴를 선택하면 원하는 대로 수강 신청, 삭제, 조회까지 구현해서 어느정도 형태를 갖추고 있는 것으로 보아 파이썬과 MySQL 문법을 익히는 데에 만족했다.
첫 프로젝트여서 미비된 점도 많았지만 에러없이 끝낸 것으로 만족하고 있다.
DB TEST. (0) | 2024.04.05 |
---|---|
DB를 활용한 단어장! (0) | 2024.03.28 |
디렉토리 관리 시나리오 (0) | 2024.03.25 |
주민번호 유효성 검사 프로그래밍(through Python) (0) | 2024.03.19 |
로또 예측 게임(through Python) (0) | 2024.03.18 |