#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