본문 바로가기

프로그래밍 언어/JAVA

JAVA 입문 - 학점 산출 프로그램 만들기

지난 글 : [프로그래밍 언어/JAVA] - JAVA 입문 - 그 외 입출력 클래스

 

문제 정의하기

프로그램 시나리오 :

JAVA School에는 5명의 학생이 수업을 듣는다. 과목은 국어, 영어이고 각 학생은 두 과목 모두 수강한다. 그리고 국어국문학과 학생은 국어가, 영어교육과 학생은 영어가 필수 과목이다. 이번 학기 각 학생의 과목별 성적은 아래와 같다.

학점을 부여하는 방법은 단순히 A, B, C, D, F를 사용하는 방법과 A+, B- 처럼 +/-를 사용하는 방법, 통과(pass), 탈락(fail)을 사용하는 방법 등 여러 방법이 있다. 여기서 각 학생에게 학점을 부여하는 방법은 두 가지다. 일반 과목이면 A~F로, 필수 과목이면 S~F로 분류한다. 점수에 따른 자세한 학점 부여 기준은 아래와 같다.

똑같이 95점을 받더라도 필수 과목이라면 S, 일반 과목이면 A를 받는다. 

============================================================================================

 

클래스 정의하기 

학생 클래스

 

과목 클래스

 

점수 클래스

 

프로그램 전반에서 사용하는 상수 클래스

 

인터페이스 정의하기

위에서 말했듯 점수에 따른 학점을 평가하는 방법은 여러 가지 있을 수 있다. 그러므로 먼저 여러 산출 방법 클래스가 구현할 내용을 인터페이스로 정의한다.

getGrade( ) 메서드는 점수가 있으면 그 점수에 따른 학점을 문자열로 반환해 준다. 이제 학점을 산출하는 두 가지 정책을 구현해야 한다.

 

인터페이스를 구현한 학점 산출 클래스

일반 과목 학점 산출하기

 

필수 과목 학점 산출하기

 

리포트 클래스

실제 서비스를 운영하는 쇼핑몰, 검색 등에서 리포트 프로그램은 매우 많은 양을 차지한다고 한다. 특히 관리와 통계를 위한 프로그램이 많다 한다. 여기서 학점 리포트는 각 과목당 산출한다.

학점을 산출하기 위해 사용하는 클래스를 배열로 정의했다. 학점 평가 클래스는 GradeEvaluation 인터페이스를 구현했으므로 GradeEvaluation형으로 선언하고 인스턴스를 생성한 후 필요할 때 사용한다. 학점을 계산하려는 점수의 과목이 필수일 경우 Define.SAB_TYPE 값을 배열에 넣는다. 그럼 MajorEvaluation( ) 메서드의 계산 방법이 적용된다.

 

프로그램 테스트하기

학교 클래스

 

테스트 프로그램

학생, 과목, 점수 등을 각각 생성하고 리포트 클래스를 생성해 성적과 학점을 출력하자.

 

과목과 학점 정책이 추가되는 경우

'가창' 과목이 개설되고 이 과목의 학점 평가 정책은 pass/fail로 정해졌다. 평가 기준은 70점 이상은 pass, 70점 미만은 fail이다. 그리고 학생 다섯 명 중 세 명만 수강 신청했다. 이렇게 과목과 정책이 추가되는 경우 프로그램을 업그레이드 해보자. 

 

우선 추가된 과목 자체의 속성은 이전 과목들과 동일하다. 따라서 TestMain 클래스에서 Subject 클래스만 추가로 생성하고 학생들이 그 과목에 등록한다. 만약 추가된 과목에 기존 과목에서 확장되는 기능이나 속성이 있다면 상속을 사용하면 된다. 또 학점 정책이 새로 생겼으므로 GradeEvaluation 인터페이스를 구현하는 클래스를 새로 생성한다. 그리고 Subject 클래스에서 gradeType 변수 값으로 pass/fail 방식임을 지정한다. 

 

우선 Define 클래스에 과목 코드와 학점 정책 코드를 추가한다.

그리고 TestMain 클래스에서 과목을 생성한 후 생성한 과목에 학생 3명을 등록한다.

GradeEvaluation 인터페이스를 구현한 PassFailEvaluation 클래스는 아래와 같다.

리포트를 생성하는 코드의 학점 평가 정책 인스턴스 배열에 PassFailEvaluation 인스턴스를 추가한다. 정책이 PF_TYPE인 경우 이 인스턴스의 getGrade( ) 메서드를 호출한다. 그리고 PF_TYPE의 평가가 수행되도록 조건문을 추가한다.

하지만 자꾸 오류가 난다. 혼자 3시간 동안 책을 보며 수정하고 고민해봤지만 안 풀려서 이번주 토요일에 사촌 누나에게 물어보러 갈 계획이다. 

 

참고 서적 : 자바 프로그래밍 입문 - 박은종