From 772a001b61398480cca472df31e30b5b1385f5c6 Mon Sep 17 00:00:00 2001 From: hyeokkiyaa Date: Tue, 24 Dec 2024 12:30:28 +0900 Subject: [PATCH 1/6] first commit --- docs/README.md | 2 ++ src/main/java/gpacalc/Application.java | 1 + 2 files changed, 3 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29..2f20649 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,2 @@ +#GPA Calculator + diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java index 57e79e1..24f4062 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: 구현 + } } From 2804cb7d2999a88a5e41cfa386519b69d405a585 Mon Sep 17 00:00:00 2001 From: hyeokkiyaa Date: Tue, 24 Dec 2024 13:14:42 +0900 Subject: [PATCH 2/6] input made --- docs/README.md | 7 ++++- src/main/java/gpacalc/Application.java | 28 +++++++++++++++++ src/main/java/gpacalc/util/Sepearate.java | 30 ++++++++++++++++++ src/main/java/gpacalc/vo/Subject.java | 37 +++++++++++++++++++++++ src/test/java/ApplicationTest.java | 2 ++ 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/main/java/gpacalc/util/Sepearate.java create mode 100644 src/main/java/gpacalc/vo/Subject.java diff --git a/docs/README.md b/docs/README.md index 2f20649..2a5404a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,2 +1,7 @@ -#GPA Calculator +# GPA Calculator +## Steps +1. 입력 줄을 "," 기준으로 나눔 -> 전공 교양 list 따로 만듬 +2. 1번에 list 는 과목 객체로 데이터 값 입력 +3. loop를 통해서 취득 학점, 평점 평균, 전공 평균 계산 +4. 출력 diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java index 24f4062..963faa0 100644 --- a/src/main/java/gpacalc/Application.java +++ b/src/main/java/gpacalc/Application.java @@ -1,8 +1,36 @@ package gpacalc; +import camp.nextstep.edu.missionutils.Console; +import gpacalc.util.Sepearate; +import gpacalc.vo.Subject; + +import java.util.ArrayList; + public class Application { public static void main(String[] args) { //TODO: 구현 + ArrayList majorString = new ArrayList<>(); + ArrayList generalString = new ArrayList<>(); + ArrayList major = new ArrayList<>(); + ArrayList general = new ArrayList<>(); + + System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); + String majorInput = Console.readLine(); + System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); + String generalInput = Console.readLine(); + + majorString = Sepearate.separateByComma(majorInput); + generalString = Sepearate.separateByComma(generalInput); + + major = Sepearate.separateByHyphen(majorString); + general = Sepearate.separateByHyphen(generalString); + + for (Subject s : major) { + System.out.println(s.getSubjectName()); + } + for (Subject s : general) { + System.out.println(s.getSubjectName()); + } } } diff --git a/src/main/java/gpacalc/util/Sepearate.java b/src/main/java/gpacalc/util/Sepearate.java new file mode 100644 index 0000000..80d3029 --- /dev/null +++ b/src/main/java/gpacalc/util/Sepearate.java @@ -0,0 +1,30 @@ +package gpacalc.util; + +import gpacalc.vo.Subject; + +import java.util.ArrayList; +import java.util.StringTokenizer; + +public class Sepearate { + public static ArrayList separateByComma(String line) { + ArrayList result = new ArrayList<>(); + StringTokenizer st = new StringTokenizer(line, ","); + while (st.hasMoreTokens()) { + String info = st.nextToken(); + result.add(info); + } + return result; + } + public static ArrayList separateByHyphen(ArrayList subjects) { + ArrayList result = new ArrayList<>(); + StringTokenizer st; + for (String s: subjects) { + st = new StringTokenizer(s, "-"); + String subjectName = st.nextToken(); + int credit = Integer.parseInt(st.nextToken()); + String score = st.nextToken(); + result.add(new Subject(subjectName, credit, score)); + } + return result; + } +} diff --git a/src/main/java/gpacalc/vo/Subject.java b/src/main/java/gpacalc/vo/Subject.java new file mode 100644 index 0000000..4225695 --- /dev/null +++ b/src/main/java/gpacalc/vo/Subject.java @@ -0,0 +1,37 @@ +package gpacalc.vo; + +public class Subject { + private String subjectName; + private int credit; + private String score; + + public Subject(String subjectName, int credit, String score) { + this.subjectName = subjectName; + this.credit = credit; + this.score = score; + } + + public String getSubjectName() { + return subjectName; + } + + public void setSubjectName(String subjectName) { + this.subjectName = subjectName; + } + + public int getCredit() { + return credit; + } + + public void setCredit(int credit) { + this.credit = credit; + } + + public String getScore() { + return score; + } + + public void setScore(String score) { + this.score = score; + } +} diff --git a/src/test/java/ApplicationTest.java b/src/test/java/ApplicationTest.java index 38086f8..aa89fa8 100644 --- a/src/test/java/ApplicationTest.java +++ b/src/test/java/ApplicationTest.java @@ -1,3 +1,4 @@ +/* import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; @@ -52,3 +53,4 @@ protected void runMain() { Application.main(new String[]{}); } } +*/ From 413e26cd0bd1b3cc60a7d19e3e53526a43f57dbd Mon Sep 17 00:00:00 2001 From: hyeokkiyaa Date: Tue, 24 Dec 2024 15:30:21 +0900 Subject: [PATCH 3/6] gpa calculate finish --- src/main/java/gpacalc/Application.java | 24 ++++++++++++++++++++-- src/main/java/gpacalc/util/ScoreValue.java | 17 +++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/main/java/gpacalc/util/ScoreValue.java diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java index 963faa0..906e9fd 100644 --- a/src/main/java/gpacalc/Application.java +++ b/src/main/java/gpacalc/Application.java @@ -1,6 +1,7 @@ package gpacalc; import camp.nextstep.edu.missionutils.Console; +import gpacalc.util.ScoreValue; import gpacalc.util.Sepearate; import gpacalc.vo.Subject; @@ -25,12 +26,31 @@ public static void main(String[] args) { major = Sepearate.separateByHyphen(majorString); general = Sepearate.separateByHyphen(generalString); + int total_credit = 0; + int total_credit_average = 0; + double weight_total = 0.0; for (Subject s : major) { - System.out.println(s.getSubjectName()); + total_credit += s.getCredit(); + if (!s.getScore().equals("P") && !s.getScore().equals("NP")) { + total_credit_average += s.getCredit(); + weight_total += calculateWeight(s.getScore(), s.getCredit()); + } } + double majorScore = (double) Math.round(weight_total / total_credit_average * 100) /100; + for (Subject s : general) { - System.out.println(s.getSubjectName()); + total_credit += s.getCredit(); + if (!s.getScore().equals("P") && !s.getScore().equals("NP")) { + total_credit_average += s.getCredit(); + weight_total += calculateWeight(s.getScore(), s.getCredit()); + } } + double allScore = (double) Math.round(weight_total / total_credit_average * 100) /100; + + + } + public static double calculateWeight(String score, int credit) { + return ScoreValue.findValue(score) * credit; } } diff --git a/src/main/java/gpacalc/util/ScoreValue.java b/src/main/java/gpacalc/util/ScoreValue.java new file mode 100644 index 0000000..d098f32 --- /dev/null +++ b/src/main/java/gpacalc/util/ScoreValue.java @@ -0,0 +1,17 @@ +package gpacalc.util; + +public class ScoreValue { + public static double findValue(String score) { + return switch (score) { + case "A+" -> 4.5; + case "A0" -> 4.0; + case "B+" -> 3.5; + case "B0" -> 3.0; + case "C+" -> 2.5; + case "C0" -> 2.0; + case "D+" -> 1.5; + case "D0" -> 1.0; + default -> 0.0; + }; + } +} From 9182527535e7ca73ac691eb273af043697b71d2e Mon Sep 17 00:00:00 2001 From: hyeokkiyaa Date: Tue, 24 Dec 2024 16:39:15 +0900 Subject: [PATCH 4/6] print made --- src/main/java/gpacalc/Application.java | 25 +++++++++++++++++++++++-- src/main/java/gpacalc/vo/Subject.java | 4 ++++ src/test/java/ApplicationTest.java | 2 -- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java index 906e9fd..9b72c1e 100644 --- a/src/main/java/gpacalc/Application.java +++ b/src/main/java/gpacalc/Application.java @@ -30,7 +30,10 @@ public static void main(String[] args) { int total_credit_average = 0; double weight_total = 0.0; for (Subject s : major) { - total_credit += s.getCredit(); + if (!s.getScore().equals("NP") && !s.getScore().equals("F")) { + total_credit += s.getCredit(); + } + if (!s.getScore().equals("P") && !s.getScore().equals("NP")) { total_credit_average += s.getCredit(); weight_total += calculateWeight(s.getScore(), s.getCredit()); @@ -39,7 +42,9 @@ public static void main(String[] args) { double majorScore = (double) Math.round(weight_total / total_credit_average * 100) /100; for (Subject s : general) { - total_credit += s.getCredit(); + if (!s.getScore().equals("NP") && !s.getScore().equals("F")) { + total_credit += s.getCredit(); + } if (!s.getScore().equals("P") && !s.getScore().equals("NP")) { total_credit_average += s.getCredit(); weight_total += calculateWeight(s.getScore(), s.getCredit()); @@ -47,6 +52,22 @@ public static void main(String[] args) { } double allScore = (double) Math.round(weight_total / total_credit_average * 100) /100; + System.out.println("\n<과목 목록>"); + for (Subject s : major) { + System.out.print("[전공] "); + System.out.println(s.toString()); + } + for (Subject s : general) { + System.out.print("[교양] "); + System.out.println(s.toString()); + } + + System.out.println("\n<취득학점>"); + System.out.println(total_credit+"학점\n"); + System.out.println("<평점평균>"); + System.out.println(allScore + " / 4.5\n"); + System.out.println("<전공 평점평균>"); + System.out.println(majorScore + " / 4.5"); } diff --git a/src/main/java/gpacalc/vo/Subject.java b/src/main/java/gpacalc/vo/Subject.java index 4225695..17be134 100644 --- a/src/main/java/gpacalc/vo/Subject.java +++ b/src/main/java/gpacalc/vo/Subject.java @@ -34,4 +34,8 @@ public String getScore() { public void setScore(String score) { this.score = score; } + + public String toString() { + return subjectName + "," + credit + "," + score; + } } diff --git a/src/test/java/ApplicationTest.java b/src/test/java/ApplicationTest.java index aa89fa8..38086f8 100644 --- a/src/test/java/ApplicationTest.java +++ b/src/test/java/ApplicationTest.java @@ -1,4 +1,3 @@ -/* import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; @@ -53,4 +52,3 @@ protected void runMain() { Application.main(new String[]{}); } } -*/ From b7961ab6d36ece728960398a32ae0c6bdc0cba05 Mon Sep 17 00:00:00 2001 From: hyeokkiyaa Date: Tue, 24 Dec 2024 16:55:33 +0900 Subject: [PATCH 5/6] exception handling made but not perfect --- src/main/java/gpacalc/util/Sepearate.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/gpacalc/util/Sepearate.java b/src/main/java/gpacalc/util/Sepearate.java index 80d3029..1b1d4d4 100644 --- a/src/main/java/gpacalc/util/Sepearate.java +++ b/src/main/java/gpacalc/util/Sepearate.java @@ -21,8 +21,22 @@ public static ArrayList separateByHyphen(ArrayList subjects) { for (String s: subjects) { st = new StringTokenizer(s, "-"); String subjectName = st.nextToken(); - int credit = Integer.parseInt(st.nextToken()); - String score = st.nextToken(); + int credit = 0; + String score = ""; + try { + credit = Integer.parseInt(st.nextToken()); + if (credit < 1 || credit > 4) { + throw new IllegalArgumentException("학점은 1부터 4까지만"); + } + score = st.nextToken(); + if (!score.equals("A+") && !score.equals("A0") && !score.equals("B+") && !score.equals("B0") && !score.equals("C+") && !score.equals("C0") && !score.equals("D+") && !score.equals("D0") && !score.equals("F") && !score.equals("P") && !score.equals("NP")) { + throw new IllegalArgumentException("평점이 이상한디,,,"); + } + } catch (IllegalArgumentException e) { + System.out.println("예외가 발생: " + e.getMessage()); + System.exit(0); + } + result.add(new Subject(subjectName, credit, score)); } return result; From 2b71c3f35d91270ffcd3c2750d290949b8cc4e17 Mon Sep 17 00:00:00 2001 From: hyeokkiyaa Date: Tue, 24 Dec 2024 17:14:54 +0900 Subject: [PATCH 6/6] exception handling changed --- src/main/java/gpacalc/util/Sepearate.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/gpacalc/util/Sepearate.java b/src/main/java/gpacalc/util/Sepearate.java index 1b1d4d4..5d5ad52 100644 --- a/src/main/java/gpacalc/util/Sepearate.java +++ b/src/main/java/gpacalc/util/Sepearate.java @@ -34,7 +34,9 @@ public static ArrayList separateByHyphen(ArrayList subjects) { } } catch (IllegalArgumentException e) { System.out.println("예외가 발생: " + e.getMessage()); - System.exit(0); +// System.exit(0); + + throw new IllegalArgumentException(); } result.add(new Subject(subjectName, credit, score));