From 6515992e842c3efb89482317970ec8eac0d863db Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Wed, 10 Jan 2024 12:33:26 +0900 Subject: [PATCH 1/9] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29..5926d70 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,26 @@ +# 기능 목록 + +## 1. 기능 목록 + +- [ ] 사용자로부터 과목 정보를 입력받아 저장한다. +- [ ] 저장된 과목 목록 정보를 출력한다. +- [ ] 저장된 과목 목록 정보를 통해 취득학점을 출력한다. +- [ ] 저장된 과목 목록 정보를 통해 평점평균을 출력한다. +- [ ] 저장된 과목 목록 정보를 통해 전공 평점평균을 출력한다. +- [ ] 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`을 발생시키고 애플리케이션을 종료한다. + +#### 1.1 IllegalArgumentException +- [ ] 과목명은 공백 포함 5자 이내로 입력한다. +- [ ] 과목명은 공백만으로 구성될 수 없다. +- [ ] 학점은 1 ~ 4 사이의 정수만 입력한다. +- [ ] 성적은 A+, A0, A-, B+, B0, B-, C+, C0, C-, D+, D0, D-, F, P, NP 중 하나만 입력한다. + +#### 1.2 취득 학점 계산 +- [ ] NP, F 성적은 취득 학점에서 제외된다. + +#### 1.3 평점 평균 계산 +- [ ] 평점평균 계산 공식 + - `평점평균` = `과목성적가중치의 총합` / `과목학점의 총합` + - `과목성적가중치` = `과목평점` * `과목학점` +- [ ] P/NP 과목은 평점평균 계산에서 제외한다. +- [ ] 평점평균은 소수점 셋째 자리에서 반올림하여 둘째 자리까지 표현한다. \ No newline at end of file From ad7877915e83d993823c6a215791cfddddc5608d Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Wed, 10 Jan 2024 12:42:11 +0900 Subject: [PATCH 2/9] =?UTF-8?q?Subject=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/gpacalc/Grade.java | 29 +++++++++++++++++++++++++++++ src/main/java/gpacalc/Subject.java | 26 ++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/main/java/gpacalc/Grade.java create mode 100644 src/main/java/gpacalc/Subject.java diff --git a/src/main/java/gpacalc/Grade.java b/src/main/java/gpacalc/Grade.java new file mode 100644 index 0000000..5c91478 --- /dev/null +++ b/src/main/java/gpacalc/Grade.java @@ -0,0 +1,29 @@ +package gpacalc; + +public enum Grade { + A_PLUS(4.5), + A_ZERO(4.0), + B_PLUS(3.5), + B_ZERO(3.0), + C_PLUS(2.5), + C_ZERO(2.0), + D_PLUS(1.5), + D_ZERO(1.0), + P(0), + NP(0), + F(0); + + private final double score; + + Grade(double score) { + this.score = score; + } + + public double getScore() { + return score; + } + + public static Grade of(String grade) { + return Grade.valueOf(grade); + } +} diff --git a/src/main/java/gpacalc/Subject.java b/src/main/java/gpacalc/Subject.java new file mode 100644 index 0000000..52379e6 --- /dev/null +++ b/src/main/java/gpacalc/Subject.java @@ -0,0 +1,26 @@ +package gpacalc; + + +public class Subject { + private final String name; + private final int credit; + private final Grade grade; + + public Subject(String name, int credit, Grade grade) { + this.name = name; + this.credit = credit; + this.grade = grade; + } + + public String getName() { + return name; + } + + public int getCredit() { + return credit; + } + + public Grade getGrade() { + return grade; + } +} From f0a4a3f8d1e6a0f59d6b67863dccb1665fe2218c Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Wed, 10 Jan 2024 13:22:11 +0900 Subject: [PATCH 3/9] =?UTF-8?q?=EA=B3=BC=EB=AA=A9=EB=AA=85=EA=B3=BC=20?= =?UTF-8?q?=EC=9D=B4=EC=88=98=ED=95=99=EC=A0=90,=20=ED=8F=89=EC=A0=90?= =?UTF-8?q?=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B=EA=B3=A0=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=99=84?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/gpacalc/Application.java | 1 + src/main/java/gpacalc/Grade.java | 44 ++++++++++++-------- src/main/java/gpacalc/GradeCalculator.java | 48 ++++++++++++++++++++++ 3 files changed, 76 insertions(+), 17 deletions(-) create mode 100644 src/main/java/gpacalc/GradeCalculator.java diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java index 57e79e1..5d07529 100644 --- a/src/main/java/gpacalc/Application.java +++ b/src/main/java/gpacalc/Application.java @@ -3,5 +3,6 @@ public class Application { public static void main(String[] args) { //TODO: 구현 + new GradeCalculator().run(); } } diff --git a/src/main/java/gpacalc/Grade.java b/src/main/java/gpacalc/Grade.java index 5c91478..0453f0a 100644 --- a/src/main/java/gpacalc/Grade.java +++ b/src/main/java/gpacalc/Grade.java @@ -1,29 +1,39 @@ package gpacalc; public enum Grade { - A_PLUS(4.5), - A_ZERO(4.0), - B_PLUS(3.5), - B_ZERO(3.0), - C_PLUS(2.5), - C_ZERO(2.0), - D_PLUS(1.5), - D_ZERO(1.0), - P(0), - NP(0), - F(0); - + A_PLUS("A+",4.5), + A_ZERO("A0",4.0), + B_PLUS("B+",3.5), + B_ZERO("B0",3.0), + C_PLUS("C+",2.5), + C_ZERO("C0",2.0), + D_PLUS("D+",1.5), + D_ZERO("D0",1.0), + P("P",0.0), + NP("NP",0.0), + F("F",0.0);; + private final String grade; private final double score; - Grade(double score) { + Grade(String grade, double score){ + this.grade = grade; this.score = score; } - public double getScore() { - return score; + public static Grade of(String grade){ + for(Grade g : Grade.values()){ + if(g.grade.equals(grade)){ + return g; + } + } + throw new IllegalArgumentException("잘못된 성적 입력입니다."); + } + + public double getScore(){ + return this.score; } - public static Grade of(String grade) { - return Grade.valueOf(grade); + public String getGrade(){ + return this.grade; } } diff --git a/src/main/java/gpacalc/GradeCalculator.java b/src/main/java/gpacalc/GradeCalculator.java new file mode 100644 index 0000000..07af806 --- /dev/null +++ b/src/main/java/gpacalc/GradeCalculator.java @@ -0,0 +1,48 @@ +package gpacalc; +import static camp.nextstep.edu.missionutils.Console.readLine; +import camp.nextstep.edu.missionutils.Console; + +public class GradeCalculator { + private Subject[] majorSubjects; + private Subject[] nonMajorSubjects; + + public void run() { + inputMajorSubjects(); + System.out.println(); + inputNonMajorSubjects(); + System.out.println(); + printSubjects(); + } + + private void inputMajorSubjects() { + System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); + String input = Console.readLine(); + String[] subjectStrings = input.split(","); + majorSubjects = new Subject[subjectStrings.length]; + for (int i = 0; i < subjectStrings.length; i++) { + String[] subjectString = subjectStrings[i].split("-"); + majorSubjects[i] = new Subject(subjectString[0], Integer.parseInt(subjectString[1]), Grade.of(subjectString[2])); + } + } + + private void inputNonMajorSubjects() { + System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); + String input = Console.readLine(); + String[] subjectStrings = input.split(","); + nonMajorSubjects = new Subject[subjectStrings.length]; + for (int i = 0; i < subjectStrings.length; i++) { + String[] subjectString = subjectStrings[i].split("-"); + nonMajorSubjects[i] = new Subject(subjectString[0], Integer.parseInt(subjectString[1]), Grade.of(subjectString[2])); + } + } + + private void printSubjects() { + System.out.println("<과목 목록>"); + for (Subject subject : majorSubjects) { + System.out.println("[전공] " + subject.getName() + "," + subject.getCredit() + "," + subject.getGrade().getGrade()); + } + for (Subject subject : nonMajorSubjects) { + System.out.println("[교양] " + subject.getName() + "," + subject.getCredit() + "," + subject.getGrade().getGrade()); + } + } +} From a8d5fd58669fa97092db1efc0f55e7abaad8ea97 Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Wed, 10 Jan 2024 14:35:01 +0900 Subject: [PATCH 4/9] =?UTF-8?q?=EC=B7=A8=EB=93=9D=ED=95=99=EC=A0=90=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5,=20=ED=8F=89=EC=A0=90=ED=8F=89=EA=B7=A0=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5,=20=EC=A0=84=EA=B3=B5=20=ED=8F=89=EC=A0=90?= =?UTF-8?q?=20=ED=8F=89=EA=B7=A0=20=EC=B6=9C=EB=A0=A5=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?,=20=EC=84=B1=EC=A0=81=EC=9D=B4=20=EC=9E=98=EB=AA=BB=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EB=90=9C=20=EA=B2=BD=EC=9A=B0=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 22 +++++----- src/main/java/gpacalc/GradeCalculator.java | 30 +++++++++++++- .../java/gpacalc/GradeCalculatorUtil.java | 41 +++++++++++++++++++ src/main/java/gpacalc/Subject.java | 7 ++++ 4 files changed, 87 insertions(+), 13 deletions(-) create mode 100644 src/main/java/gpacalc/GradeCalculatorUtil.java diff --git a/docs/README.md b/docs/README.md index 5926d70..fffea5e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,25 +2,25 @@ ## 1. 기능 목록 -- [ ] 사용자로부터 과목 정보를 입력받아 저장한다. -- [ ] 저장된 과목 목록 정보를 출력한다. -- [ ] 저장된 과목 목록 정보를 통해 취득학점을 출력한다. -- [ ] 저장된 과목 목록 정보를 통해 평점평균을 출력한다. -- [ ] 저장된 과목 목록 정보를 통해 전공 평점평균을 출력한다. +- [x] 사용자로부터 과목 정보를 입력받아 저장한다. +- [x] 저장된 과목 목록 정보를 출력한다. +- [x] 저장된 과목 목록 정보를 통해 취득 학점을 출력한다. +- [x] 저장된 과목 목록 정보를 통해 평점 평균을 출력한다. +- [x] 저장된 과목 목록 정보를 통해 전공 평점 평균을 출력한다. - [ ] 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`을 발생시키고 애플리케이션을 종료한다. #### 1.1 IllegalArgumentException -- [ ] 과목명은 공백 포함 5자 이내로 입력한다. +- [ ] 과목명은 공백 포함 10자 이내로 입력한다. - [ ] 과목명은 공백만으로 구성될 수 없다. - [ ] 학점은 1 ~ 4 사이의 정수만 입력한다. -- [ ] 성적은 A+, A0, A-, B+, B0, B-, C+, C0, C-, D+, D0, D-, F, P, NP 중 하나만 입력한다. +- [x] 성적은 A+, A0, A-, B+, B0, B-, C+, C0, C-, D+, D0, D-, F, P, NP 중 하나만 입력한다. #### 1.2 취득 학점 계산 -- [ ] NP, F 성적은 취득 학점에서 제외된다. +- [x] NP, F 성적은 취득 학점에서 제외된다. #### 1.3 평점 평균 계산 -- [ ] 평점평균 계산 공식 +- [x] 평점평균 계산 공식 - `평점평균` = `과목성적가중치의 총합` / `과목학점의 총합` - `과목성적가중치` = `과목평점` * `과목학점` -- [ ] P/NP 과목은 평점평균 계산에서 제외한다. -- [ ] 평점평균은 소수점 셋째 자리에서 반올림하여 둘째 자리까지 표현한다. \ No newline at end of file +- [x] P/NP 과목은 평점평균 계산에서 제외한다. +- [x] 평점평균은 소수점 셋째 자리에서 반올림하여 둘째 자리까지 표현한다. \ No newline at end of file diff --git a/src/main/java/gpacalc/GradeCalculator.java b/src/main/java/gpacalc/GradeCalculator.java index 07af806..0109bfc 100644 --- a/src/main/java/gpacalc/GradeCalculator.java +++ b/src/main/java/gpacalc/GradeCalculator.java @@ -6,12 +6,19 @@ public class GradeCalculator { private Subject[] majorSubjects; private Subject[] nonMajorSubjects; + private int acquiredCredit; + private double majorAverage; + private double average; + public void run() { inputMajorSubjects(); System.out.println(); inputNonMajorSubjects(); System.out.println(); - printSubjects(); + calculate(); + printData(); + System.out.println(); + } private void inputMajorSubjects() { @@ -36,7 +43,7 @@ private void inputNonMajorSubjects() { } } - private void printSubjects() { + private void printData() { System.out.println("<과목 목록>"); for (Subject subject : majorSubjects) { System.out.println("[전공] " + subject.getName() + "," + subject.getCredit() + "," + subject.getGrade().getGrade()); @@ -44,5 +51,24 @@ private void printSubjects() { for (Subject subject : nonMajorSubjects) { System.out.println("[교양] " + subject.getName() + "," + subject.getCredit() + "," + subject.getGrade().getGrade()); } + System.out.println(); + System.out.println("<취득학점>"); + System.out.println(acquiredCredit + "학점"); + System.out.println(); + System.out.println("<평점평균>"); + System.out.println(String.format("%.2f", average) + " / 4.5"); + System.out.println(); + System.out.println("<전공 평점평균>"); + System.out.println(String.format("%.2f", majorAverage) + " / 4.5"); + } + + private void calculate() { + int totalGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, nonMajorSubjects); + acquiredCredit=GradeCalculatorUtil.calculateAcquiredCredit(majorSubjects,nonMajorSubjects); + double weightedTotalGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, nonMajorSubjects); + int majorGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, new Subject[0]); + double weightedMajorGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, new Subject[0]); + average = weightedTotalGrade / totalGradeCredit; + majorAverage = weightedMajorGrade / majorGradeCredit; } } diff --git a/src/main/java/gpacalc/GradeCalculatorUtil.java b/src/main/java/gpacalc/GradeCalculatorUtil.java new file mode 100644 index 0000000..8841d23 --- /dev/null +++ b/src/main/java/gpacalc/GradeCalculatorUtil.java @@ -0,0 +1,41 @@ +package gpacalc; + +public class GradeCalculatorUtil { + public static int calculateAcquiredCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) { + int majorCredit = 0; + int nonMajorCredit = 0; + for (Subject subject : majorSubjects) { + majorCredit += subject.getAcquiredCredit(); + } + for (Subject subject : nonMajorSubjects) { + nonMajorCredit += subject.getAcquiredCredit(); + } + return majorCredit + nonMajorCredit; + } + + public static int calculateTotalGradeCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) { + int majorCredit = 0; + int nonMajorCredit = 0; + for (Subject subject : majorSubjects) { + if(subject.getGrade() != Grade.NP && subject.getGrade() != Grade.P) + majorCredit += subject.getCredit(); + } + for (Subject subject : nonMajorSubjects) { + if(subject.getGrade() != Grade.NP && subject.getGrade() != Grade.P) + nonMajorCredit += subject.getCredit(); + } + return majorCredit + nonMajorCredit; + } + + public static double calculateWeightedTotalGrade(Subject[] majorSubjects, Subject[] nonMajorSubjects) { + double majorTotalGrade = 0; + double nonMajorTotalGrade = 0; + for (Subject subject : majorSubjects) { + majorTotalGrade += subject.getGrade().getScore() * subject.getCredit(); + } + for (Subject subject : nonMajorSubjects) { + nonMajorTotalGrade += subject.getGrade().getScore() * subject.getCredit(); + } + return majorTotalGrade + nonMajorTotalGrade; + } +} diff --git a/src/main/java/gpacalc/Subject.java b/src/main/java/gpacalc/Subject.java index 52379e6..57205ee 100644 --- a/src/main/java/gpacalc/Subject.java +++ b/src/main/java/gpacalc/Subject.java @@ -23,4 +23,11 @@ public int getCredit() { public Grade getGrade() { return grade; } + + public int getAcquiredCredit() { + if (grade == Grade.NP || grade == Grade.F) { + return 0; + } + return credit; + } } From 9b6ee545c9e54ad21e0e5206b886ccf0beea0a3e Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Wed, 10 Jan 2024 14:50:08 +0900 Subject: [PATCH 5/9] =?UTF-8?q?=EA=B3=BC=EB=AA=A9=EB=AA=85=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=EA=B5=AC=ED=98=84,=20?= =?UTF-8?q?=ED=95=99=EC=A0=90=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 8 ++++---- src/main/java/gpacalc/Subject.java | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/README.md b/docs/README.md index fffea5e..e596bc1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,12 +7,12 @@ - [x] 저장된 과목 목록 정보를 통해 취득 학점을 출력한다. - [x] 저장된 과목 목록 정보를 통해 평점 평균을 출력한다. - [x] 저장된 과목 목록 정보를 통해 전공 평점 평균을 출력한다. -- [ ] 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`을 발생시키고 애플리케이션을 종료한다. +- [x] 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`을 발생시키고 애플리케이션을 종료한다. #### 1.1 IllegalArgumentException -- [ ] 과목명은 공백 포함 10자 이내로 입력한다. -- [ ] 과목명은 공백만으로 구성될 수 없다. -- [ ] 학점은 1 ~ 4 사이의 정수만 입력한다. +- [x] 과목명은 공백 포함 10자 이내로 입력한다. +- [x] 과목명은 공백만으로 구성될 수 없다. +- [x] 학점은 1 ~ 4 사이의 정수만 입력한다. - [x] 성적은 A+, A0, A-, B+, B0, B-, C+, C0, C-, D+, D0, D-, F, P, NP 중 하나만 입력한다. #### 1.2 취득 학점 계산 diff --git a/src/main/java/gpacalc/Subject.java b/src/main/java/gpacalc/Subject.java index 57205ee..568bf3e 100644 --- a/src/main/java/gpacalc/Subject.java +++ b/src/main/java/gpacalc/Subject.java @@ -7,6 +7,12 @@ public class Subject { private final Grade grade; public Subject(String name, int credit, Grade grade) { + if (name.length()>10 || name.isBlank()) { + throw new IllegalArgumentException("잘못된 과목명 입력입니다."); + } + if (credit < 1 || credit > 4) { + throw new IllegalArgumentException("잘못된 학점 입력입니다."); + } this.name = name; this.credit = credit; this.grade = grade; From 9dcc3caf26e3ea5b2ca696618c3f3fc592a7f6f5 Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Wed, 10 Jan 2024 15:03:53 +0900 Subject: [PATCH 6/9] =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=9E=85=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/gpacalc/Application.java | 2 +- src/main/java/gpacalc/Grade.java | 8 +++--- src/main/java/gpacalc/GradeCalculator.java | 28 +++++++++---------- .../java/gpacalc/GradeCalculatorUtil.java | 6 ++-- src/main/java/gpacalc/Subject.java | 8 +++--- 5 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java index 5d07529..6619af5 100644 --- a/src/main/java/gpacalc/Application.java +++ b/src/main/java/gpacalc/Application.java @@ -3,6 +3,6 @@ public class Application { public static void main(String[] args) { //TODO: 구현 - new GradeCalculator().run(); + new GradeCalculator().run();// 프로그램 실행 } } diff --git a/src/main/java/gpacalc/Grade.java b/src/main/java/gpacalc/Grade.java index 0453f0a..c64d191 100644 --- a/src/main/java/gpacalc/Grade.java +++ b/src/main/java/gpacalc/Grade.java @@ -1,6 +1,6 @@ package gpacalc; -public enum Grade { +public enum Grade {// 성적 enum 클래스 A_PLUS("A+",4.5), A_ZERO("A0",4.0), B_PLUS("B+",3.5), @@ -11,7 +11,7 @@ public enum Grade { D_ZERO("D0",1.0), P("P",0.0), NP("NP",0.0), - F("F",0.0);; + F("F",0.0); private final String grade; private final double score; @@ -20,13 +20,13 @@ public enum Grade { this.score = score; } - public static Grade of(String grade){ + public static Grade of(String grade){// 입력받은 성적에 해당하는 enum 반환 for(Grade g : Grade.values()){ if(g.grade.equals(grade)){ return g; } } - throw new IllegalArgumentException("잘못된 성적 입력입니다."); + throw new IllegalArgumentException("잘못된 성적 입력입니다.");// 잘못된 성적 입력시 예외처리 } public double getScore(){ diff --git a/src/main/java/gpacalc/GradeCalculator.java b/src/main/java/gpacalc/GradeCalculator.java index 0109bfc..a949744 100644 --- a/src/main/java/gpacalc/GradeCalculator.java +++ b/src/main/java/gpacalc/GradeCalculator.java @@ -1,22 +1,20 @@ package gpacalc; -import static camp.nextstep.edu.missionutils.Console.readLine; import camp.nextstep.edu.missionutils.Console; public class GradeCalculator { private Subject[] majorSubjects; private Subject[] nonMajorSubjects; - private int acquiredCredit; private double majorAverage; private double average; - public void run() { - inputMajorSubjects(); + public void run() {// 프로그램 실행 + inputMajorSubjects();// 전공 과목 입력 System.out.println(); - inputNonMajorSubjects(); + inputNonMajorSubjects();// 교양 과목 입력 System.out.println(); - calculate(); - printData(); + calculate();// 취득 학점, 평점평균, 전공 평점평균 계산 + printResult();// 결과 출력 System.out.println(); } @@ -43,7 +41,7 @@ private void inputNonMajorSubjects() { } } - private void printData() { + private void printResult() { System.out.println("<과목 목록>"); for (Subject subject : majorSubjects) { System.out.println("[전공] " + subject.getName() + "," + subject.getCredit() + "," + subject.getGrade().getGrade()); @@ -63,12 +61,12 @@ private void printData() { } private void calculate() { - int totalGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, nonMajorSubjects); - acquiredCredit=GradeCalculatorUtil.calculateAcquiredCredit(majorSubjects,nonMajorSubjects); - double weightedTotalGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, nonMajorSubjects); - int majorGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, new Subject[0]); - double weightedMajorGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, new Subject[0]); - average = weightedTotalGrade / totalGradeCredit; - majorAverage = weightedMajorGrade / majorGradeCredit; + int totalGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, nonMajorSubjects);// 총 학점 계산 + acquiredCredit=GradeCalculatorUtil.calculateAcquiredCredit(majorSubjects,nonMajorSubjects);// 취득 학점 계산 + double weightedTotalGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, nonMajorSubjects);// 가중 평점 계산 + int majorGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, new Subject[0]);// 전공 과목 grade 학점 계산 + double weightedMajorGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, new Subject[0]);// 전공 과목 가중 평점 계산 + average = weightedTotalGrade / totalGradeCredit;// 평점평균 계산 + majorAverage = weightedMajorGrade / majorGradeCredit;// 전공 평점평균 계산 } } diff --git a/src/main/java/gpacalc/GradeCalculatorUtil.java b/src/main/java/gpacalc/GradeCalculatorUtil.java index 8841d23..92729b4 100644 --- a/src/main/java/gpacalc/GradeCalculatorUtil.java +++ b/src/main/java/gpacalc/GradeCalculatorUtil.java @@ -1,7 +1,7 @@ package gpacalc; public class GradeCalculatorUtil { - public static int calculateAcquiredCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) { + public static int calculateAcquiredCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) {// 취득학점 계산 int majorCredit = 0; int nonMajorCredit = 0; for (Subject subject : majorSubjects) { @@ -13,7 +13,7 @@ public static int calculateAcquiredCredit(Subject[] majorSubjects, Subject[] non return majorCredit + nonMajorCredit; } - public static int calculateTotalGradeCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) { + public static int calculateTotalGradeCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) {// 총 학점 계산 int majorCredit = 0; int nonMajorCredit = 0; for (Subject subject : majorSubjects) { @@ -27,7 +27,7 @@ public static int calculateTotalGradeCredit(Subject[] majorSubjects, Subject[] n return majorCredit + nonMajorCredit; } - public static double calculateWeightedTotalGrade(Subject[] majorSubjects, Subject[] nonMajorSubjects) { + public static double calculateWeightedTotalGrade(Subject[] majorSubjects, Subject[] nonMajorSubjects) {// 가중 평점 계산 double majorTotalGrade = 0; double nonMajorTotalGrade = 0; for (Subject subject : majorSubjects) { diff --git a/src/main/java/gpacalc/Subject.java b/src/main/java/gpacalc/Subject.java index 568bf3e..78c0163 100644 --- a/src/main/java/gpacalc/Subject.java +++ b/src/main/java/gpacalc/Subject.java @@ -8,10 +8,10 @@ public class Subject { public Subject(String name, int credit, Grade grade) { if (name.length()>10 || name.isBlank()) { - throw new IllegalArgumentException("잘못된 과목명 입력입니다."); + throw new IllegalArgumentException("잘못된 과목명 입력입니다.");// 잘못된 과목명 입력시 예외처리 } if (credit < 1 || credit > 4) { - throw new IllegalArgumentException("잘못된 학점 입력입니다."); + throw new IllegalArgumentException("잘못된 학점 입력입니다.");// 잘못된 학점 입력시 예외처리 } this.name = name; this.credit = credit; @@ -30,8 +30,8 @@ public Grade getGrade() { return grade; } - public int getAcquiredCredit() { - if (grade == Grade.NP || grade == Grade.F) { + public int getAcquiredCredit() {// 취득학점 계산 + if (grade == Grade.NP || grade == Grade.F) {// NP, F인 경우 0학점 return 0; } return credit; From f15439c2e5098404b2b7e75bf0830bc9560cf6ee Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Wed, 10 Jan 2024 15:12:52 +0900 Subject: [PATCH 7/9] =?UTF-8?q?PF=20=EA=B3=BC=EB=AA=A9=EB=A7=8C=20?= =?UTF-8?q?=EB=93=A4=EC=97=88=EC=9D=84=20=EA=B2=BD=EC=9A=B0=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/gpacalc/GradeCalculator.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/gpacalc/GradeCalculator.java b/src/main/java/gpacalc/GradeCalculator.java index a949744..d6d08c8 100644 --- a/src/main/java/gpacalc/GradeCalculator.java +++ b/src/main/java/gpacalc/GradeCalculator.java @@ -66,7 +66,15 @@ private void calculate() { double weightedTotalGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, nonMajorSubjects);// 가중 평점 계산 int majorGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, new Subject[0]);// 전공 과목 grade 학점 계산 double weightedMajorGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, new Subject[0]);// 전공 과목 가중 평점 계산 - average = weightedTotalGrade / totalGradeCredit;// 평점평균 계산 - majorAverage = weightedMajorGrade / majorGradeCredit;// 전공 평점평균 계산 + if (totalGradeCredit == 0) { + average = 0; + }else{ + average = weightedTotalGrade / totalGradeCredit;// 평점평균 계산 + } + if (majorGradeCredit == 0) { + majorAverage = 0; + }else{ + majorAverage = weightedMajorGrade / majorGradeCredit;// 전공 평점평균 계산 + } } } From 0d5c6206a4d27057520f74e75a2d60998e24c303 Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Tue, 16 Jan 2024 21:48:43 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/gpacalc/Application.java | 2 +- src/main/java/gpacalc/Grade.java | 6 +- src/main/java/gpacalc/GradeCalculator.java | 89 ++++++------------- src/main/java/gpacalc/GradeCalculatorIO.java | 49 ++++++++++ .../java/gpacalc/GradeCalculatorUtil.java | 13 ++- src/main/java/gpacalc/Subject.java | 31 +++++-- 6 files changed, 114 insertions(+), 76 deletions(-) create mode 100644 src/main/java/gpacalc/GradeCalculatorIO.java diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java index 6619af5..5d07529 100644 --- a/src/main/java/gpacalc/Application.java +++ b/src/main/java/gpacalc/Application.java @@ -3,6 +3,6 @@ public class Application { public static void main(String[] args) { //TODO: 구현 - new GradeCalculator().run();// 프로그램 실행 + new GradeCalculator().run(); } } diff --git a/src/main/java/gpacalc/Grade.java b/src/main/java/gpacalc/Grade.java index c64d191..9b0dd86 100644 --- a/src/main/java/gpacalc/Grade.java +++ b/src/main/java/gpacalc/Grade.java @@ -1,6 +1,6 @@ package gpacalc; -public enum Grade {// 성적 enum 클래스 +public enum Grade { A_PLUS("A+",4.5), A_ZERO("A0",4.0), B_PLUS("B+",3.5), @@ -20,13 +20,13 @@ public enum Grade {// 성적 enum 클래스 this.score = score; } - public static Grade of(String grade){// 입력받은 성적에 해당하는 enum 반환 + public static Grade of(String grade){ for(Grade g : Grade.values()){ if(g.grade.equals(grade)){ return g; } } - throw new IllegalArgumentException("잘못된 성적 입력입니다.");// 잘못된 성적 입력시 예외처리 + throw new IllegalArgumentException("잘못된 성적 입력입니다."); } public double getScore(){ diff --git a/src/main/java/gpacalc/GradeCalculator.java b/src/main/java/gpacalc/GradeCalculator.java index d6d08c8..50ab7fe 100644 --- a/src/main/java/gpacalc/GradeCalculator.java +++ b/src/main/java/gpacalc/GradeCalculator.java @@ -1,80 +1,47 @@ package gpacalc; -import camp.nextstep.edu.missionutils.Console; public class GradeCalculator { private Subject[] majorSubjects; private Subject[] nonMajorSubjects; private int acquiredCredit; - private double majorAverage; - private double average; + private double majorGPA; - public void run() {// 프로그램 실행 - inputMajorSubjects();// 전공 과목 입력 - System.out.println(); - inputNonMajorSubjects();// 교양 과목 입력 - System.out.println(); - calculate();// 취득 학점, 평점평균, 전공 평점평균 계산 - printResult();// 결과 출력 - System.out.println(); + private double gpa; - } + public void run() { + getSubjects(); - private void inputMajorSubjects() { - System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); - String input = Console.readLine(); - String[] subjectStrings = input.split(","); - majorSubjects = new Subject[subjectStrings.length]; - for (int i = 0; i < subjectStrings.length; i++) { - String[] subjectString = subjectStrings[i].split("-"); - majorSubjects[i] = new Subject(subjectString[0], Integer.parseInt(subjectString[1]), Grade.of(subjectString[2])); - } - } + calculateAcquiredCreditAndGPA(); + + printSubjectsResult(); - private void inputNonMajorSubjects() { - System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); - String input = Console.readLine(); - String[] subjectStrings = input.split(","); - nonMajorSubjects = new Subject[subjectStrings.length]; - for (int i = 0; i < subjectStrings.length; i++) { - String[] subjectString = subjectStrings[i].split("-"); - nonMajorSubjects[i] = new Subject(subjectString[0], Integer.parseInt(subjectString[1]), Grade.of(subjectString[2])); - } + printCalculatedResult(); } - private void printResult() { - System.out.println("<과목 목록>"); - for (Subject subject : majorSubjects) { - System.out.println("[전공] " + subject.getName() + "," + subject.getCredit() + "," + subject.getGrade().getGrade()); - } - for (Subject subject : nonMajorSubjects) { - System.out.println("[교양] " + subject.getName() + "," + subject.getCredit() + "," + subject.getGrade().getGrade()); - } + private void getSubjects() { + majorSubjects=GradeCalculatorIO.inputMajorSubjects(); System.out.println(); - System.out.println("<취득학점>"); - System.out.println(acquiredCredit + "학점"); + + nonMajorSubjects=GradeCalculatorIO.inputNonMajorSubjects(); System.out.println(); - System.out.println("<평점평균>"); - System.out.println(String.format("%.2f", average) + " / 4.5"); + } + + private void printSubjectsResult() { + System.out.println("<과목 목록>"); + GradeCalculatorIO.printSubjects(majorSubjects,"전공"); + GradeCalculatorIO.printSubjects(nonMajorSubjects,"교양"); System.out.println(); - System.out.println("<전공 평점평균>"); - System.out.println(String.format("%.2f", majorAverage) + " / 4.5"); } - private void calculate() { - int totalGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, nonMajorSubjects);// 총 학점 계산 - acquiredCredit=GradeCalculatorUtil.calculateAcquiredCredit(majorSubjects,nonMajorSubjects);// 취득 학점 계산 - double weightedTotalGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, nonMajorSubjects);// 가중 평점 계산 - int majorGradeCredit = GradeCalculatorUtil.calculateTotalGradeCredit(majorSubjects, new Subject[0]);// 전공 과목 grade 학점 계산 - double weightedMajorGrade = GradeCalculatorUtil.calculateWeightedTotalGrade(majorSubjects, new Subject[0]);// 전공 과목 가중 평점 계산 - if (totalGradeCredit == 0) { - average = 0; - }else{ - average = weightedTotalGrade / totalGradeCredit;// 평점평균 계산 - } - if (majorGradeCredit == 0) { - majorAverage = 0; - }else{ - majorAverage = weightedMajorGrade / majorGradeCredit;// 전공 평점평균 계산 - } + private void printCalculatedResult() { + GradeCalculatorIO.printAcquiredCredit(acquiredCredit); + GradeCalculatorIO.printGPA(gpa); + GradeCalculatorIO.printMajorGPA(majorGPA); + } + + private void calculateAcquiredCreditAndGPA() { + acquiredCredit=GradeCalculatorUtil.calculateAcquiredCredit(majorSubjects,nonMajorSubjects); + gpa=GradeCalculatorUtil.calculateGPA(majorSubjects,nonMajorSubjects); + majorGPA=GradeCalculatorUtil.calculateGPA(majorSubjects,new Subject[0]); } } diff --git a/src/main/java/gpacalc/GradeCalculatorIO.java b/src/main/java/gpacalc/GradeCalculatorIO.java new file mode 100644 index 0000000..a37dc84 --- /dev/null +++ b/src/main/java/gpacalc/GradeCalculatorIO.java @@ -0,0 +1,49 @@ +package gpacalc; + +import camp.nextstep.edu.missionutils.Console; + +public class GradeCalculatorIO { + public static Subject[] inputMajorSubjects() { + System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); + return inputToSubjects(Console.readLine()); + } + + public static Subject[] inputNonMajorSubjects() { + System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); + return inputToSubjects(Console.readLine()); + } + + private static Subject[] inputToSubjects(String input){ + String[] subjectStrings = input.split(","); + Subject[] subjects = new Subject[subjectStrings.length]; + for (int i = 0; i < subjectStrings.length; i++) { + String[] subjectString = subjectStrings[i].split("-"); + subjects[i] = new Subject(subjectString[0], Integer.parseInt(subjectString[1]), Grade.of(subjectString[2])); + } + return subjects; + } + + public static void printSubjects(Subject[] subjects, String type){ + for (Subject subject : subjects) { + System.out.println("["+type+"] "+subject.getName() + "," + subject.getCredit() + "," + subject.getGrade().getGrade()); + } + } + + public static void printAcquiredCredit(int acquiredCredit){ + System.out.println("<취득학점>"); + System.out.println(acquiredCredit + "학점"); + System.out.println(); + } + + public static void printGPA(double gpa){ + System.out.println("<평점평균>"); + System.out.println(String.format("%.2f", gpa) + " / 4.5"); + System.out.println(); + } + + public static void printMajorGPA(double majorGPA){ + System.out.println("<전공 평점평균>"); + System.out.println(String.format("%.2f", majorGPA) + " / 4.5"); + System.out.println(); + } +} diff --git a/src/main/java/gpacalc/GradeCalculatorUtil.java b/src/main/java/gpacalc/GradeCalculatorUtil.java index 92729b4..3d8ed46 100644 --- a/src/main/java/gpacalc/GradeCalculatorUtil.java +++ b/src/main/java/gpacalc/GradeCalculatorUtil.java @@ -1,7 +1,7 @@ package gpacalc; public class GradeCalculatorUtil { - public static int calculateAcquiredCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) {// 취득학점 계산 + public static int calculateAcquiredCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) { int majorCredit = 0; int nonMajorCredit = 0; for (Subject subject : majorSubjects) { @@ -13,7 +13,7 @@ public static int calculateAcquiredCredit(Subject[] majorSubjects, Subject[] non return majorCredit + nonMajorCredit; } - public static int calculateTotalGradeCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) {// 총 학점 계산 + private static int calculateTotalGradeCredit(Subject[] majorSubjects, Subject[] nonMajorSubjects) { int majorCredit = 0; int nonMajorCredit = 0; for (Subject subject : majorSubjects) { @@ -27,7 +27,7 @@ public static int calculateTotalGradeCredit(Subject[] majorSubjects, Subject[] n return majorCredit + nonMajorCredit; } - public static double calculateWeightedTotalGrade(Subject[] majorSubjects, Subject[] nonMajorSubjects) {// 가중 평점 계산 + private static double calculateWeightedTotalGrade(Subject[] majorSubjects, Subject[] nonMajorSubjects) { double majorTotalGrade = 0; double nonMajorTotalGrade = 0; for (Subject subject : majorSubjects) { @@ -38,4 +38,11 @@ public static double calculateWeightedTotalGrade(Subject[] majorSubjects, Subjec } return majorTotalGrade + nonMajorTotalGrade; } + + public static double calculateGPA(Subject[] majorSubjects, Subject[] nonMajorSubjects) { + if (calculateTotalGradeCredit(majorSubjects, nonMajorSubjects) == 0) { + return 0; + } + return calculateWeightedTotalGrade(majorSubjects, nonMajorSubjects) / calculateTotalGradeCredit(majorSubjects, nonMajorSubjects); + } } diff --git a/src/main/java/gpacalc/Subject.java b/src/main/java/gpacalc/Subject.java index 78c0163..73dba37 100644 --- a/src/main/java/gpacalc/Subject.java +++ b/src/main/java/gpacalc/Subject.java @@ -2,22 +2,37 @@ public class Subject { + + private static final int MAX_CREDIT = 4; + + private static final int MIN_CREDIT = 1; + + private static final int MAX_NAME_LENGTH = 10; + private final String name; private final int credit; private final Grade grade; public Subject(String name, int credit, Grade grade) { - if (name.length()>10 || name.isBlank()) { - throw new IllegalArgumentException("잘못된 과목명 입력입니다.");// 잘못된 과목명 입력시 예외처리 - } - if (credit < 1 || credit > 4) { - throw new IllegalArgumentException("잘못된 학점 입력입니다.");// 잘못된 학점 입력시 예외처리 - } + checkNameValidation(name); + checkCreditValidation(credit); this.name = name; this.credit = credit; this.grade = grade; } + private void checkNameValidation(String name) { + if (name.length()>MAX_NAME_LENGTH || name.isBlank()) { + throw new IllegalArgumentException("잘못된 과목명 입력입니다."); + } + } + + private void checkCreditValidation(int credit) { + if (credit < MIN_CREDIT || credit > MAX_CREDIT) { + throw new IllegalArgumentException("잘못된 학점 입력입니다."); + } + } + public String getName() { return name; } @@ -30,8 +45,8 @@ public Grade getGrade() { return grade; } - public int getAcquiredCredit() {// 취득학점 계산 - if (grade == Grade.NP || grade == Grade.F) {// NP, F인 경우 0학점 + public int getAcquiredCredit() { + if (grade == Grade.NP || grade == Grade.F) { return 0; } return credit; From d2aa94365ff11590117ce3694b60b9a9a3a1794c Mon Sep 17 00:00:00 2001 From: LimYeonKyuu Date: Wed, 17 Jan 2024 00:29:29 +0900 Subject: [PATCH 9/9] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/gpacalc/GradeCalculatorUtilTest.java | 44 +++++++++++++++++++ src/test/java/gpacalc/GradeTest.java | 14 ++++++ src/test/java/gpacalc/SubjectTest.java | 24 ++++++++++ 3 files changed, 82 insertions(+) create mode 100644 src/test/java/gpacalc/GradeCalculatorUtilTest.java create mode 100644 src/test/java/gpacalc/GradeTest.java create mode 100644 src/test/java/gpacalc/SubjectTest.java diff --git a/src/test/java/gpacalc/GradeCalculatorUtilTest.java b/src/test/java/gpacalc/GradeCalculatorUtilTest.java new file mode 100644 index 0000000..875ab40 --- /dev/null +++ b/src/test/java/gpacalc/GradeCalculatorUtilTest.java @@ -0,0 +1,44 @@ +package gpacalc; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class GradeCalculatorUtilTest { + //given + Subject [] majorSubjects1; + Subject [] majorSubjects2; + Subject [] nonMajorSubjects1; + Subject [] nonMajorSubjects2; + @BeforeEach + void setup(){ + majorSubjects1 = new Subject[]{ + new Subject("데이타구조", 3, Grade.A_ZERO), + new Subject("자바프로그래밍언어", 3, Grade.B_PLUS) + }; + nonMajorSubjects1 = new Subject[]{ + new Subject("미술의이해", 3, Grade.A_PLUS), + new Subject("교양특론3", 3, Grade.NP) + }; + majorSubjects2 = new Subject[]{ + new Subject("데이타구조", 3, Grade.A_ZERO) + }; + nonMajorSubjects2 = new Subject[]{ + new Subject("미술의이해", 2, Grade.B_ZERO) + }; + } + @Test + void 평점평균계산테스트() { + assertEquals(4.0, GradeCalculatorUtil.calculateGPA(majorSubjects1, nonMajorSubjects1)); + assertEquals(3.6, GradeCalculatorUtil.calculateGPA(majorSubjects2, nonMajorSubjects2)); + } + + @AfterEach void tearDown() { + majorSubjects1 = null; + majorSubjects2 = null; + nonMajorSubjects1 = null; + nonMajorSubjects2 = null; + } +} \ No newline at end of file diff --git a/src/test/java/gpacalc/GradeTest.java b/src/test/java/gpacalc/GradeTest.java new file mode 100644 index 0000000..402bcd4 --- /dev/null +++ b/src/test/java/gpacalc/GradeTest.java @@ -0,0 +1,14 @@ +package gpacalc; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class GradeTest { + + @Test + void 허용되지않는성적예외처리() { + assertThatThrownBy(() -> Grade.of("PD")) + .isInstanceOf(IllegalArgumentException.class); + } +} \ No newline at end of file diff --git a/src/test/java/gpacalc/SubjectTest.java b/src/test/java/gpacalc/SubjectTest.java new file mode 100644 index 0000000..b24cbe2 --- /dev/null +++ b/src/test/java/gpacalc/SubjectTest.java @@ -0,0 +1,24 @@ +package gpacalc; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class SubjectTest { + + @Test + void 과목명이공백만으로입력된경우예외처리() { + assertThatThrownBy(() -> new Subject(" ", 3, Grade.A_ZERO)) + .isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> new Subject(" ", 3, Grade.A_ZERO)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + void 학점이범위밖인경우예외처리() { + assertThatThrownBy(() -> new Subject("실전프로젝트", 0, Grade.A_ZERO)) + .isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> new Subject("실전프로젝트", 6, Grade.A_ZERO)) + .isInstanceOf(IllegalArgumentException.class); + } +} \ No newline at end of file