#18 oop : grade calculator
This commit is contained in:
@@ -0,0 +1,49 @@
|
|||||||
|
package org.example.grade;
|
||||||
|
|
||||||
|
public class Course {
|
||||||
|
|
||||||
|
private final String subject; // 과목명
|
||||||
|
private final int credit; // 학점
|
||||||
|
private final String grade; // 성적
|
||||||
|
|
||||||
|
public Course(String subject, int credit, String grade) {
|
||||||
|
this.subject = subject;
|
||||||
|
this.credit = credit;
|
||||||
|
this.grade = grade;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double multiplyCreditAndCourseGrade() {
|
||||||
|
return credit * getGradeToNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCredit() {
|
||||||
|
return credit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getGradeToNumber() {
|
||||||
|
double grade = 0;
|
||||||
|
|
||||||
|
switch (this.grade) {
|
||||||
|
case "A+":
|
||||||
|
grade = 4.5;
|
||||||
|
break;
|
||||||
|
case "A":
|
||||||
|
grade = 4.0;
|
||||||
|
break;
|
||||||
|
case "B+":
|
||||||
|
grade = 3.5;
|
||||||
|
break;
|
||||||
|
case "B":
|
||||||
|
grade = 3.0;
|
||||||
|
break;
|
||||||
|
case "C+":
|
||||||
|
grade = 2.5;
|
||||||
|
break;
|
||||||
|
case "C":
|
||||||
|
grade = 2.0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return grade;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package org.example.grade;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Courses {
|
||||||
|
|
||||||
|
private final List<Course> courses;
|
||||||
|
|
||||||
|
public Courses(List<Course> courses) {
|
||||||
|
this.courses = courses;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double multiplyCreditAndCourseGrade() {
|
||||||
|
return courses.stream()
|
||||||
|
.mapToDouble(Course::multiplyCreditAndCourseGrade)
|
||||||
|
.sum();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int calculateTotalCompletedCredit() {
|
||||||
|
return courses.stream()
|
||||||
|
.mapToInt(Course::getCredit)
|
||||||
|
.sum();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package org.example.grade;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class GradeCalculator {
|
||||||
|
private final Courses courses;
|
||||||
|
public GradeCalculator(List<Course> courses) {
|
||||||
|
this.courses = new Courses(courses);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double calculateGrade() {
|
||||||
|
|
||||||
|
double multiplyCreditAndCourseGrade = courses.multiplyCreditAndCourseGrade();
|
||||||
|
int totalCompletedCredit = courses.calculateTotalCompletedCredit();
|
||||||
|
|
||||||
|
return multiplyCreditAndCourseGrade / totalCompletedCredit;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package org.example.grade;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatCode;
|
||||||
|
|
||||||
|
public class CourseTest {
|
||||||
|
|
||||||
|
@DisplayName("과목(코스)를 생성한다.")
|
||||||
|
@Test
|
||||||
|
void createTest() {
|
||||||
|
assertThatCode(() -> new Course("OOP", 3, "A+"))
|
||||||
|
.doesNotThrowAnyException();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package org.example.grade;
|
||||||
|
|
||||||
|
import org.assertj.core.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 평균학점 계산 방법 = (학점 * 성적)의 합계 / 수강신청 총학점 수
|
||||||
|
* 일급 컬렉션 사용
|
||||||
|
*/
|
||||||
|
public class GradeCalculatorTest {
|
||||||
|
|
||||||
|
@DisplayName("평균 학점을 계산한다.")
|
||||||
|
@Test
|
||||||
|
void calculateGradeTest() {
|
||||||
|
List<Course> courses = List.of(
|
||||||
|
new Course("OOP", 3, "A+"),
|
||||||
|
new Course("자료구조", 3, "A+")
|
||||||
|
);
|
||||||
|
|
||||||
|
GradeCalculator gradeCalculator = new GradeCalculator(courses);
|
||||||
|
double gradeResult = gradeCalculator.calculateGrade();
|
||||||
|
|
||||||
|
assertThat(gradeResult).isEqualTo(4.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user