From 880ff5bd81c3e6ea973f14e0f1834055f5b0597e Mon Sep 17 00:00:00 2001 From: kaileekiki <151707426+kaileekiki@users.noreply.github.com> Date: Sun, 14 Jan 2024 17:04:04 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[12=EA=B8=B0]=20=EC=9D=B4=EC=A7=80=EA=B4=91?= =?UTF-8?q?=20=EA=B3=BC=EC=A0=9C=20=EC=A0=9C=EC=B6=9C=ED=95=A9=EB=8B=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/calculator.java | 210 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 src/calculator.java diff --git a/src/calculator.java b/src/calculator.java new file mode 100644 index 0000000..9aa1afd --- /dev/null +++ b/src/calculator.java @@ -0,0 +1,210 @@ +import java.util.Scanner; +public class calculator { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + //전공과 교양 한줄로 입력받기 + System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); + String coreStr = scanner.nextLine(); + + System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); + String subStr = scanner.nextLine(); + + + //전공과목 저장 + String[] core = coreStr.split(","); + + String[][] coreMem = new String[core.length][]; //전공과목 저장을 위한 배열(문자열 형태) + + for(int i=0; i10){ + check++; + } + coreName[i] = coreMem[i][0]; //전공 복사 + } + + for(int i=0; i10){ + check++; + } + subName[i] = subMem[i][0]; //교양 복사 + } + + //학점 + for(int i=0; i4 || coreNum[i]<1){ + check++; + } + } + + for(int i=0; i4 || subNum[i]<1){ + check++; + } + } + + if(check!=0){ + int error = checkError(check); + System.out.println(error); + System.exit(0); + } + + //성적 + for(int i=0; i"); + for(int i=0; i"); + System.out.println(point + "학점"); + + System.out.println("\n<평점평균>"); + System.out.println(String.format("%.2f", allAverage) + " / 4.5"); + + System.out.println("\n<전공 평점평균>"); + System.out.println(String.format("%.2f", coreAverage) + " / 4.5"); + + } + + public static int checkError(int i) throws IllegalArgumentException{ + throw new IllegalArgumentException("입력이 잘못되었습니다."); + } +} \ No newline at end of file From d792df82de836d74d35fc13d238e1ea20270cfe0 Mon Sep 17 00:00:00 2001 From: kaileekiki <151707426+kaileekiki@users.noreply.github.com> Date: Thu, 18 Jan 2024 04:08:21 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[12=EA=B8=B0]=20=EC=9D=B4=EC=A7=80=EA=B4=91?= =?UTF-8?q?=20=EA=B3=BC=EC=A0=9C=20=EC=A0=9C=EC=B6=9C=ED=95=A9=EB=8B=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 전에 했던 코드를 멘토님들의 조언을 받아 고치면서 코드가 점점 예뻐지는 것을 보고 기분이 좋았고, 테스트 코드는 정말 신기한 경험이었습니다. --- .../src/main/java/gpacalc/Calculator.java | 76 +++++++++++++++++++ .../src/main/java/gpacalc/CheckingError.java | 36 +++++++++ .../gpacalc/src/main/java/gpacalc/Input.java | 24 ++++++ .../gpacalc/src/main/java/gpacalc/Main.java | 31 ++++++++ .../gpacalc/src/main/java/gpacalc/Output.java | 25 ++++++ .../src/test/java/gpacalc/CalculatorTest.java | 41 ++++++++++ .../test/java/gpacalc/CheckingErrorTest.java | 63 +++++++++++++++ .../src/test/java/gpacalc/MainTest.java | 56 ++++++++++++++ 8 files changed, 352 insertions(+) create mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/Calculator.java create mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/CheckingError.java create mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/Input.java create mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/Main.java create mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/Output.java create mode 100644 src/main/java/gpacalc/src/test/java/gpacalc/CalculatorTest.java create mode 100644 src/main/java/gpacalc/src/test/java/gpacalc/CheckingErrorTest.java create mode 100644 src/main/java/gpacalc/src/test/java/gpacalc/MainTest.java diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/Calculator.java b/src/main/java/gpacalc/src/main/java/gpacalc/Calculator.java new file mode 100644 index 0000000..587118a --- /dev/null +++ b/src/main/java/gpacalc/src/main/java/gpacalc/Calculator.java @@ -0,0 +1,76 @@ +package gpacalc; + +public class Calculator { + int point = 0; //취득학점 + int gradePoint = 0; //과목학점 총합 + double allGrade = 0.0; //과목성적가중치 총합 + int majorPoint = 0; //전공과목학점 + double majorGrade = 0.0; //전공성적가중치 + + public int getPoint(String[][] major, String[][] general){ + for (String[] score : major) { + if (!(score[2].equals("F") || score[2].equals("NP"))) { + point += Integer.parseInt(score[1]); + } + } + for (String[] score : general) { + if (!(score[2].equals("F") || score[2].equals("NP"))) { + point += Integer.parseInt(score[1]); + } + } + return point; + } + + public double getAllAverage(String[][] major, String[][] general){ + for (String[] point : major) { + if(!(point[2].equals("P")||point[2].equals("NP"))) { + double score = getScore(point[2]); + allGrade += calculateGPA(score, point[1]); + gradePoint += Integer.parseInt(point[1]); + } + } + for (String[] point : general) { + if(!(point[2].equals("P")||point[2].equals("NP"))) { + double score = getScore(point[2]); + allGrade += calculateGPA(score, point[1]); + gradePoint += Integer.parseInt(point[1]); + } + } + return allGrade/(double) gradePoint; + } + + public double getMajorAverage(String[][] major){ + for (String[] point : major) { + if(!(point[2].equals("P")||point[2].equals("NP"))) { + double score = getScore(point[2]); + majorGrade += calculateGPA(score, point[1]); + majorPoint += Integer.parseInt(point[1]); + } + } + return majorGrade/(double) majorPoint; + } + + public double calculateGPA(double score, String point){ + return score * (double) Integer.parseInt(point); + } + + static double getScore(String scr) { + double score; + + switch(scr){ + case "A+" -> score = 4.5; + case "A0" -> score = 4.0; + case "B+" -> score = 3.5; + case "B0" -> score = 3.0; + case "C+" -> score = 2.5; + case "C0" -> score = 2.0; + case "D+" -> score = 1.5; + case "D0" -> score = 1.0; + case "F" -> score = 0; + case "P" -> score = 0; + case "NP" -> score = 0; + default -> throw new IllegalArgumentException("잘못된 입력입니다."); + } + return score; + } +} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/CheckingError.java b/src/main/java/gpacalc/src/main/java/gpacalc/CheckingError.java new file mode 100644 index 0000000..8a7a6d1 --- /dev/null +++ b/src/main/java/gpacalc/src/main/java/gpacalc/CheckingError.java @@ -0,0 +1,36 @@ +package gpacalc; +public class CheckingError { + + public void checkError(String[][] mem){ + for (String[] num : mem) { + if(num[0].isBlank()){ + throw new IllegalArgumentException("공백으로만 채워지면 안됩니다."); + } + if(num[0].length() > 10) { + throw new IllegalArgumentException("글자수가 10개가 넘어가면 안됩니다."); + } + if(Integer.parseInt(num[1]) > 4 || Integer.parseInt(num[1]) < 1) { + throw new IllegalArgumentException("전공 학점입력이 잘못되었습니다."); + } + checkScore(num[2]); + } + } + + public void checkScore(String score){ + boolean check; + switch(score){ + case "A+" -> check = true; + case "A0" -> check = true; + case "B+" -> check = true; + case "B0" -> check = true; + case "C+" -> check = true; + case "C0" -> check = true; + case "D+" -> check = true; + case "D0" -> check = true; + case "F" -> check = true; + case "P" -> check = true; + case "NP" -> check = true; + default -> throw new IllegalArgumentException("잘못된 성적 입력입니다."); + } + } +} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/Input.java b/src/main/java/gpacalc/src/main/java/gpacalc/Input.java new file mode 100644 index 0000000..dfcfe26 --- /dev/null +++ b/src/main/java/gpacalc/src/main/java/gpacalc/Input.java @@ -0,0 +1,24 @@ +package gpacalc; +import camp.nextstep.edu.missionutils.Console; + +public class Input { + + public String getMajorInput(){ + System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); + return Console.readLine(); + } + + public String getElectiveInput(){ + System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); + return Console.readLine(); + } + + public String[][] separateStr (String str){ + String[] firstSplit = str.split(","); + String[][] lastSplit = new String[firstSplit.length][]; //전공과목 저장을 위한 배열(문자열 형태) + for (int i = 0; i < firstSplit.length; i++) { + lastSplit[i] = firstSplit[i].split("-"); + } + return lastSplit; + } +} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/Main.java b/src/main/java/gpacalc/src/main/java/gpacalc/Main.java new file mode 100644 index 0000000..6215cbf --- /dev/null +++ b/src/main/java/gpacalc/src/main/java/gpacalc/Main.java @@ -0,0 +1,31 @@ +package gpacalc; + +public class Main { + public static void main(String[] args) { + + //받기 + gpacalc.Input newStr = new Input(); + String major = newStr.getMajorInput(); + String general = newStr.getElectiveInput(); + + //나눠서 저장 + String[][] majorInfo = newStr.separateStr(major); + String[][] generalInfo = newStr.separateStr(general); + + //에러 체크 + gpacalc.CheckingError errorCheck = new CheckingError(); + errorCheck.checkError(majorInfo); + errorCheck.checkError(generalInfo); + + //계산 + gpacalc.Calculator calculator = new Calculator(); + int point = calculator.getPoint(majorInfo,generalInfo); + double allAverage = calculator.getAllAverage(majorInfo,generalInfo); + double majorAverage = calculator.getMajorAverage(majorInfo); + + //출력 + gpacalc.Output printOutput = new Output(); + printOutput.printInfo(majorInfo,generalInfo); + printOutput.printScore(point,allAverage,majorAverage); + } +} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/Output.java b/src/main/java/gpacalc/src/main/java/gpacalc/Output.java new file mode 100644 index 0000000..9810fdf --- /dev/null +++ b/src/main/java/gpacalc/src/main/java/gpacalc/Output.java @@ -0,0 +1,25 @@ +package gpacalc; + +public class Output { + + public void printInfo(String[][] major, String[][] general){ + System.out.println("\n<과목 목록>"); + for (String[] info : major) { + System.out.println("[전공] " + info[0] + "," + info[1] + "," + info[2]); + } + for (String[] info : general) { + System.out.println("[교양] " + info[0] + "," + info[1] + "," + info[2]); + } + } + + public void printScore(int point, double allAve, double majorAve){ + System.out.println("\n<취득학점>"); + System.out.println(point + "학점"); + + System.out.println("\n<평점평균>"); + System.out.println(String.format("%.2f", allAve) + " / 4.5"); + + System.out.println("\n<전공 평점평균>"); + System.out.println(String.format("%.2f", majorAve) + " / 4.5"); + } +} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/test/java/gpacalc/CalculatorTest.java b/src/main/java/gpacalc/src/test/java/gpacalc/CalculatorTest.java new file mode 100644 index 0000000..4579218 --- /dev/null +++ b/src/main/java/gpacalc/src/test/java/gpacalc/CalculatorTest.java @@ -0,0 +1,41 @@ +package gpacalc; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.internal.matchers.Null; + +import static org.junit.jupiter.api.Assertions.*; +class CalculatorTest { + + Calculator calculator; + + @BeforeEach + public void setUp() { + calculator = new Calculator(); + } + + @DisplayName("전체 학점 평균 테스트") + @Test + void allAverageTest() { + //when + String[][] input = {{"데이타구조","3","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; + double result = calculator.getAllAverage(input,input); + //then + assertEquals(2.75, result); + } + + @DisplayName("전공 학점 평균 테스트") + @Test + void majorAverageTest() { + //when + String[][] input = {{"데이타구조","3","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; + double result = calculator.getMajorAverage(input); + //then + assertEquals(2.75, result); + } + +} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/test/java/gpacalc/CheckingErrorTest.java b/src/main/java/gpacalc/src/test/java/gpacalc/CheckingErrorTest.java new file mode 100644 index 0000000..14e7915 --- /dev/null +++ b/src/main/java/gpacalc/src/test/java/gpacalc/CheckingErrorTest.java @@ -0,0 +1,63 @@ +package gpacalc; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.internal.matchers.Null; + +import static org.junit.jupiter.api.Assertions.*; + +class CheckingErrorTest { + + CheckingError checkingError; + + @BeforeEach + public void setUp() { + checkingError = new CheckingError(); + } + + @DisplayName("공백 메서드 테스트") + @Test + void checkError() { + //when + String[][] num = {{" ", " "}, {" ", " "}}; + //then + assertThrows(IllegalArgumentException.class, () -> { + checkingError.checkError(num); + }); + } + + @DisplayName("학점 범위 테스트") + @Test + void checkPointException() { + + //when + String[][] mem = {{"데이타구조","5","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; + + //then + assertThrows(IllegalArgumentException.class, () -> { + checkingError.checkError(mem); + }); + + } + + @DisplayName("성적 범위 테스트") + @Test + void checkScoreException() { + + //when + String[][] mem = {{"데이타구조","2","A0"},{"자바프로그래밍언어","3","P+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; + + //then + assertThrows(IllegalArgumentException.class, () -> { + checkingError.checkError(mem); + }); + + } +} + + + diff --git a/src/main/java/gpacalc/src/test/java/gpacalc/MainTest.java b/src/main/java/gpacalc/src/test/java/gpacalc/MainTest.java new file mode 100644 index 0000000..8aaf657 --- /dev/null +++ b/src/main/java/gpacalc/src/test/java/gpacalc/MainTest.java @@ -0,0 +1,56 @@ +package gpacalc; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; + +import camp.nextstep.edu.missionutils.test.NsTest; +import gpacalc.Main; +import org.junit.jupiter.api.Test; + +public class MainTest extends NsTest { + + @Test + void 평점평균_계산() { + run("데이타구조-3-A0,자바프로그래밍언어-3-B+,컴퓨터구조-3-C0,컴퓨터네트워크-3-D+", + "미술의이해-3-P,교양특론3-1-NP,기독교의이해-2-F"); + assertThat(output()).contains( + "<과목 목록>", + "[전공] 데이타구조,3,A0", + "[전공] 자바프로그래밍언어,3,B+", + "[전공] 컴퓨터구조,3,C0", + "[전공] 컴퓨터네트워크,3,D+", + "[교양] 미술의이해,3,P", + "[교양] 교양특론3,1,NP", + "[교양] 기독교의이해,2,F", + "<취득학점>", + "15학점", + "<평점평균>", + "2.36 / 4.5", + "<전공 평점평균>", + "2.75 / 4.5" + ); + } + + @Test + void 예외처리_잘못된_성적_입력() { + assertThatIllegalArgumentException() + .isThrownBy(() -> { + run("자바프로그래밍언어-3-E0", "한동인성교육-1-P"); + run("자바프로그래밍언어-3-A+", "한동인성교육-1-PD"); + }); + } + + @Test + void 예외처리_잘못된_학점_입력() { + assertThatIllegalArgumentException() + .isThrownBy(() -> { + run("프로그래밍언어론-5-A0", "한동인성교육-1-P"); + run("프로그래밍언어론-3-A0", "한동인성교육-0-P"); + }); + } + + @Override + protected void runMain() { + Main.main(new String[]{}); + } +} \ No newline at end of file From 002c7493d9a8b27478fe3469b4558a2ccad0ae0d Mon Sep 17 00:00:00 2001 From: kaileekiki <151707426+kaileekiki@users.noreply.github.com> Date: Thu, 18 Jan 2024 04:34:29 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[12=EA=B8=B0]=20=EC=9D=B4=EC=A7=80=EA=B4=91?= =?UTF-8?q?=20=EA=B3=BC=EC=A0=9C=20=EC=A0=9C=EC=B6=9C=ED=95=A9=EB=8B=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 전에 짰던 코드를 멘토님들의 조언을 받아 고치면서 코드가 점점 예뻐지는 것을 보고 시간가는 줄 몰랐고, 이제서야 조금의 기능을 다룰 수 있다고 생각함과 동시에 내가 전에 짰던 코드가 JAVA라고 할 수 없는 코드라는 것을 뼈저리게 느꼈다. 때문에 내가 어느 부분이 부족한지 코딩하는 내내 궁금했다. 또한 테스트 코드는 정말 새로운 경험이었다. --- src/java-gpacalc/docs/README.md | 14 ++++ .../src/main/java/gpacalc/Calculator.java | 76 +++++++++++++++++++ .../src/main/java/gpacalc/CheckingError.java | 36 +++++++++ .../src/main/java/gpacalc/Input.java | 24 ++++++ .../src/main/java/gpacalc/Main.java | 31 ++++++++ .../src/main/java/gpacalc/Output.java | 25 ++++++ .../src/test/java/gpacalc/CalculatorTest.java | 41 ++++++++++ .../test/java/gpacalc/CheckingErrorTest.java | 63 +++++++++++++++ .../src/test/java/gpacalc/MainTest.java | 56 ++++++++++++++ 9 files changed, 366 insertions(+) create mode 100644 src/java-gpacalc/docs/README.md create mode 100644 src/java-gpacalc/src/main/java/gpacalc/Calculator.java create mode 100644 src/java-gpacalc/src/main/java/gpacalc/CheckingError.java create mode 100644 src/java-gpacalc/src/main/java/gpacalc/Input.java create mode 100644 src/java-gpacalc/src/main/java/gpacalc/Main.java create mode 100644 src/java-gpacalc/src/main/java/gpacalc/Output.java create mode 100644 src/java-gpacalc/src/test/java/gpacalc/CalculatorTest.java create mode 100644 src/java-gpacalc/src/test/java/gpacalc/CheckingErrorTest.java create mode 100644 src/java-gpacalc/src/test/java/gpacalc/MainTest.java diff --git a/src/java-gpacalc/docs/README.md b/src/java-gpacalc/docs/README.md new file mode 100644 index 0000000..43739e5 --- /dev/null +++ b/src/java-gpacalc/docs/README.md @@ -0,0 +1,14 @@ +진행 순서 +1. 전공 과목 정보 입력 +2. 교양 과목 정보 입력 +3. 과목 목록 출력 +4. 취득 학점 출력 +5. 평점 평균 줄력 +6. 전공 평점 평균 출력 + +기능 구현 순서 +1. 전공,교양 과목 입력받기 +2. 나눠서 배열에 저장하기 +3. 주어진 조건에 따른 에러 확인 +4. 전공, 교양에 맞춰 평점 평균 계산 +5. 출력 \ No newline at end of file diff --git a/src/java-gpacalc/src/main/java/gpacalc/Calculator.java b/src/java-gpacalc/src/main/java/gpacalc/Calculator.java new file mode 100644 index 0000000..587118a --- /dev/null +++ b/src/java-gpacalc/src/main/java/gpacalc/Calculator.java @@ -0,0 +1,76 @@ +package gpacalc; + +public class Calculator { + int point = 0; //취득학점 + int gradePoint = 0; //과목학점 총합 + double allGrade = 0.0; //과목성적가중치 총합 + int majorPoint = 0; //전공과목학점 + double majorGrade = 0.0; //전공성적가중치 + + public int getPoint(String[][] major, String[][] general){ + for (String[] score : major) { + if (!(score[2].equals("F") || score[2].equals("NP"))) { + point += Integer.parseInt(score[1]); + } + } + for (String[] score : general) { + if (!(score[2].equals("F") || score[2].equals("NP"))) { + point += Integer.parseInt(score[1]); + } + } + return point; + } + + public double getAllAverage(String[][] major, String[][] general){ + for (String[] point : major) { + if(!(point[2].equals("P")||point[2].equals("NP"))) { + double score = getScore(point[2]); + allGrade += calculateGPA(score, point[1]); + gradePoint += Integer.parseInt(point[1]); + } + } + for (String[] point : general) { + if(!(point[2].equals("P")||point[2].equals("NP"))) { + double score = getScore(point[2]); + allGrade += calculateGPA(score, point[1]); + gradePoint += Integer.parseInt(point[1]); + } + } + return allGrade/(double) gradePoint; + } + + public double getMajorAverage(String[][] major){ + for (String[] point : major) { + if(!(point[2].equals("P")||point[2].equals("NP"))) { + double score = getScore(point[2]); + majorGrade += calculateGPA(score, point[1]); + majorPoint += Integer.parseInt(point[1]); + } + } + return majorGrade/(double) majorPoint; + } + + public double calculateGPA(double score, String point){ + return score * (double) Integer.parseInt(point); + } + + static double getScore(String scr) { + double score; + + switch(scr){ + case "A+" -> score = 4.5; + case "A0" -> score = 4.0; + case "B+" -> score = 3.5; + case "B0" -> score = 3.0; + case "C+" -> score = 2.5; + case "C0" -> score = 2.0; + case "D+" -> score = 1.5; + case "D0" -> score = 1.0; + case "F" -> score = 0; + case "P" -> score = 0; + case "NP" -> score = 0; + default -> throw new IllegalArgumentException("잘못된 입력입니다."); + } + return score; + } +} \ No newline at end of file diff --git a/src/java-gpacalc/src/main/java/gpacalc/CheckingError.java b/src/java-gpacalc/src/main/java/gpacalc/CheckingError.java new file mode 100644 index 0000000..8a7a6d1 --- /dev/null +++ b/src/java-gpacalc/src/main/java/gpacalc/CheckingError.java @@ -0,0 +1,36 @@ +package gpacalc; +public class CheckingError { + + public void checkError(String[][] mem){ + for (String[] num : mem) { + if(num[0].isBlank()){ + throw new IllegalArgumentException("공백으로만 채워지면 안됩니다."); + } + if(num[0].length() > 10) { + throw new IllegalArgumentException("글자수가 10개가 넘어가면 안됩니다."); + } + if(Integer.parseInt(num[1]) > 4 || Integer.parseInt(num[1]) < 1) { + throw new IllegalArgumentException("전공 학점입력이 잘못되었습니다."); + } + checkScore(num[2]); + } + } + + public void checkScore(String score){ + boolean check; + switch(score){ + case "A+" -> check = true; + case "A0" -> check = true; + case "B+" -> check = true; + case "B0" -> check = true; + case "C+" -> check = true; + case "C0" -> check = true; + case "D+" -> check = true; + case "D0" -> check = true; + case "F" -> check = true; + case "P" -> check = true; + case "NP" -> check = true; + default -> throw new IllegalArgumentException("잘못된 성적 입력입니다."); + } + } +} \ No newline at end of file diff --git a/src/java-gpacalc/src/main/java/gpacalc/Input.java b/src/java-gpacalc/src/main/java/gpacalc/Input.java new file mode 100644 index 0000000..dfcfe26 --- /dev/null +++ b/src/java-gpacalc/src/main/java/gpacalc/Input.java @@ -0,0 +1,24 @@ +package gpacalc; +import camp.nextstep.edu.missionutils.Console; + +public class Input { + + public String getMajorInput(){ + System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); + return Console.readLine(); + } + + public String getElectiveInput(){ + System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); + return Console.readLine(); + } + + public String[][] separateStr (String str){ + String[] firstSplit = str.split(","); + String[][] lastSplit = new String[firstSplit.length][]; //전공과목 저장을 위한 배열(문자열 형태) + for (int i = 0; i < firstSplit.length; i++) { + lastSplit[i] = firstSplit[i].split("-"); + } + return lastSplit; + } +} \ No newline at end of file diff --git a/src/java-gpacalc/src/main/java/gpacalc/Main.java b/src/java-gpacalc/src/main/java/gpacalc/Main.java new file mode 100644 index 0000000..6215cbf --- /dev/null +++ b/src/java-gpacalc/src/main/java/gpacalc/Main.java @@ -0,0 +1,31 @@ +package gpacalc; + +public class Main { + public static void main(String[] args) { + + //받기 + gpacalc.Input newStr = new Input(); + String major = newStr.getMajorInput(); + String general = newStr.getElectiveInput(); + + //나눠서 저장 + String[][] majorInfo = newStr.separateStr(major); + String[][] generalInfo = newStr.separateStr(general); + + //에러 체크 + gpacalc.CheckingError errorCheck = new CheckingError(); + errorCheck.checkError(majorInfo); + errorCheck.checkError(generalInfo); + + //계산 + gpacalc.Calculator calculator = new Calculator(); + int point = calculator.getPoint(majorInfo,generalInfo); + double allAverage = calculator.getAllAverage(majorInfo,generalInfo); + double majorAverage = calculator.getMajorAverage(majorInfo); + + //출력 + gpacalc.Output printOutput = new Output(); + printOutput.printInfo(majorInfo,generalInfo); + printOutput.printScore(point,allAverage,majorAverage); + } +} \ No newline at end of file diff --git a/src/java-gpacalc/src/main/java/gpacalc/Output.java b/src/java-gpacalc/src/main/java/gpacalc/Output.java new file mode 100644 index 0000000..9810fdf --- /dev/null +++ b/src/java-gpacalc/src/main/java/gpacalc/Output.java @@ -0,0 +1,25 @@ +package gpacalc; + +public class Output { + + public void printInfo(String[][] major, String[][] general){ + System.out.println("\n<과목 목록>"); + for (String[] info : major) { + System.out.println("[전공] " + info[0] + "," + info[1] + "," + info[2]); + } + for (String[] info : general) { + System.out.println("[교양] " + info[0] + "," + info[1] + "," + info[2]); + } + } + + public void printScore(int point, double allAve, double majorAve){ + System.out.println("\n<취득학점>"); + System.out.println(point + "학점"); + + System.out.println("\n<평점평균>"); + System.out.println(String.format("%.2f", allAve) + " / 4.5"); + + System.out.println("\n<전공 평점평균>"); + System.out.println(String.format("%.2f", majorAve) + " / 4.5"); + } +} \ No newline at end of file diff --git a/src/java-gpacalc/src/test/java/gpacalc/CalculatorTest.java b/src/java-gpacalc/src/test/java/gpacalc/CalculatorTest.java new file mode 100644 index 0000000..4579218 --- /dev/null +++ b/src/java-gpacalc/src/test/java/gpacalc/CalculatorTest.java @@ -0,0 +1,41 @@ +package gpacalc; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.internal.matchers.Null; + +import static org.junit.jupiter.api.Assertions.*; +class CalculatorTest { + + Calculator calculator; + + @BeforeEach + public void setUp() { + calculator = new Calculator(); + } + + @DisplayName("전체 학점 평균 테스트") + @Test + void allAverageTest() { + //when + String[][] input = {{"데이타구조","3","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; + double result = calculator.getAllAverage(input,input); + //then + assertEquals(2.75, result); + } + + @DisplayName("전공 학점 평균 테스트") + @Test + void majorAverageTest() { + //when + String[][] input = {{"데이타구조","3","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; + double result = calculator.getMajorAverage(input); + //then + assertEquals(2.75, result); + } + +} \ No newline at end of file diff --git a/src/java-gpacalc/src/test/java/gpacalc/CheckingErrorTest.java b/src/java-gpacalc/src/test/java/gpacalc/CheckingErrorTest.java new file mode 100644 index 0000000..14e7915 --- /dev/null +++ b/src/java-gpacalc/src/test/java/gpacalc/CheckingErrorTest.java @@ -0,0 +1,63 @@ +package gpacalc; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.internal.matchers.Null; + +import static org.junit.jupiter.api.Assertions.*; + +class CheckingErrorTest { + + CheckingError checkingError; + + @BeforeEach + public void setUp() { + checkingError = new CheckingError(); + } + + @DisplayName("공백 메서드 테스트") + @Test + void checkError() { + //when + String[][] num = {{" ", " "}, {" ", " "}}; + //then + assertThrows(IllegalArgumentException.class, () -> { + checkingError.checkError(num); + }); + } + + @DisplayName("학점 범위 테스트") + @Test + void checkPointException() { + + //when + String[][] mem = {{"데이타구조","5","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; + + //then + assertThrows(IllegalArgumentException.class, () -> { + checkingError.checkError(mem); + }); + + } + + @DisplayName("성적 범위 테스트") + @Test + void checkScoreException() { + + //when + String[][] mem = {{"데이타구조","2","A0"},{"자바프로그래밍언어","3","P+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; + + //then + assertThrows(IllegalArgumentException.class, () -> { + checkingError.checkError(mem); + }); + + } +} + + + diff --git a/src/java-gpacalc/src/test/java/gpacalc/MainTest.java b/src/java-gpacalc/src/test/java/gpacalc/MainTest.java new file mode 100644 index 0000000..8aaf657 --- /dev/null +++ b/src/java-gpacalc/src/test/java/gpacalc/MainTest.java @@ -0,0 +1,56 @@ +package gpacalc; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; + +import camp.nextstep.edu.missionutils.test.NsTest; +import gpacalc.Main; +import org.junit.jupiter.api.Test; + +public class MainTest extends NsTest { + + @Test + void 평점평균_계산() { + run("데이타구조-3-A0,자바프로그래밍언어-3-B+,컴퓨터구조-3-C0,컴퓨터네트워크-3-D+", + "미술의이해-3-P,교양특론3-1-NP,기독교의이해-2-F"); + assertThat(output()).contains( + "<과목 목록>", + "[전공] 데이타구조,3,A0", + "[전공] 자바프로그래밍언어,3,B+", + "[전공] 컴퓨터구조,3,C0", + "[전공] 컴퓨터네트워크,3,D+", + "[교양] 미술의이해,3,P", + "[교양] 교양특론3,1,NP", + "[교양] 기독교의이해,2,F", + "<취득학점>", + "15학점", + "<평점평균>", + "2.36 / 4.5", + "<전공 평점평균>", + "2.75 / 4.5" + ); + } + + @Test + void 예외처리_잘못된_성적_입력() { + assertThatIllegalArgumentException() + .isThrownBy(() -> { + run("자바프로그래밍언어-3-E0", "한동인성교육-1-P"); + run("자바프로그래밍언어-3-A+", "한동인성교육-1-PD"); + }); + } + + @Test + void 예외처리_잘못된_학점_입력() { + assertThatIllegalArgumentException() + .isThrownBy(() -> { + run("프로그래밍언어론-5-A0", "한동인성교육-1-P"); + run("프로그래밍언어론-3-A0", "한동인성교육-0-P"); + }); + } + + @Override + protected void runMain() { + Main.main(new String[]{}); + } +} \ No newline at end of file From 365162a76109ac295bf12dcf4df68bcf9b11eb91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A7=80=EA=B4=91?= Date: Thu, 18 Jan 2024 15:49:56 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=EC=A4=91=EB=B3=B5=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/wrapper/gradle-wrapper.properties | 3 +- src/calculator.java | 210 ------------------ src/java-gpacalc/docs/README.md | 14 -- src/main/java/gpacalc/Application.java | 7 - .../main/java/gpacalc/Calculator.java | 0 .../main/java/gpacalc/CheckingError.java | 0 .../src => }/main/java/gpacalc/Input.java | 0 .../src => }/main/java/gpacalc/Main.java | 0 .../src => }/main/java/gpacalc/Output.java | 0 .../src/main/java/gpacalc/Calculator.java | 76 ------- .../src/main/java/gpacalc/CheckingError.java | 36 --- .../gpacalc/src/main/java/gpacalc/Input.java | 24 -- .../gpacalc/src/main/java/gpacalc/Main.java | 31 --- .../gpacalc/src/main/java/gpacalc/Output.java | 25 --- .../src/test/java/gpacalc/CalculatorTest.java | 41 ---- .../test/java/gpacalc/CheckingErrorTest.java | 63 ------ .../src/test/java/gpacalc/MainTest.java | 56 ----- src/test/java/ApplicationTest.java | 54 ----- .../test/java/gpacalc/CalculatorTest.java | 0 .../test/java/gpacalc/CheckingErrorTest.java | 0 .../src => }/test/java/gpacalc/MainTest.java | 0 21 files changed, 1 insertion(+), 639 deletions(-) delete mode 100644 src/calculator.java delete mode 100644 src/java-gpacalc/docs/README.md delete mode 100644 src/main/java/gpacalc/Application.java rename src/{java-gpacalc/src => }/main/java/gpacalc/Calculator.java (100%) rename src/{java-gpacalc/src => }/main/java/gpacalc/CheckingError.java (100%) rename src/{java-gpacalc/src => }/main/java/gpacalc/Input.java (100%) rename src/{java-gpacalc/src => }/main/java/gpacalc/Main.java (100%) rename src/{java-gpacalc/src => }/main/java/gpacalc/Output.java (100%) delete mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/Calculator.java delete mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/CheckingError.java delete mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/Input.java delete mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/Main.java delete mode 100644 src/main/java/gpacalc/src/main/java/gpacalc/Output.java delete mode 100644 src/main/java/gpacalc/src/test/java/gpacalc/CalculatorTest.java delete mode 100644 src/main/java/gpacalc/src/test/java/gpacalc/CheckingErrorTest.java delete mode 100644 src/main/java/gpacalc/src/test/java/gpacalc/MainTest.java delete mode 100644 src/test/java/ApplicationTest.java rename src/{java-gpacalc/src => }/test/java/gpacalc/CalculatorTest.java (100%) rename src/{java-gpacalc/src => }/test/java/gpacalc/CheckingErrorTest.java (100%) rename src/{java-gpacalc/src => }/test/java/gpacalc/MainTest.java (100%) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3ef7dbe..a595206 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Sat Dec 30 05:45:58 KST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/calculator.java b/src/calculator.java deleted file mode 100644 index 9aa1afd..0000000 --- a/src/calculator.java +++ /dev/null @@ -1,210 +0,0 @@ -import java.util.Scanner; -public class calculator { - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - - //전공과 교양 한줄로 입력받기 - System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); - String coreStr = scanner.nextLine(); - - System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); - String subStr = scanner.nextLine(); - - - //전공과목 저장 - String[] core = coreStr.split(","); - - String[][] coreMem = new String[core.length][]; //전공과목 저장을 위한 배열(문자열 형태) - - for(int i=0; i10){ - check++; - } - coreName[i] = coreMem[i][0]; //전공 복사 - } - - for(int i=0; i10){ - check++; - } - subName[i] = subMem[i][0]; //교양 복사 - } - - //학점 - for(int i=0; i4 || coreNum[i]<1){ - check++; - } - } - - for(int i=0; i4 || subNum[i]<1){ - check++; - } - } - - if(check!=0){ - int error = checkError(check); - System.out.println(error); - System.exit(0); - } - - //성적 - for(int i=0; i"); - for(int i=0; i"); - System.out.println(point + "학점"); - - System.out.println("\n<평점평균>"); - System.out.println(String.format("%.2f", allAverage) + " / 4.5"); - - System.out.println("\n<전공 평점평균>"); - System.out.println(String.format("%.2f", coreAverage) + " / 4.5"); - - } - - public static int checkError(int i) throws IllegalArgumentException{ - throw new IllegalArgumentException("입력이 잘못되었습니다."); - } -} \ No newline at end of file diff --git a/src/java-gpacalc/docs/README.md b/src/java-gpacalc/docs/README.md deleted file mode 100644 index 43739e5..0000000 --- a/src/java-gpacalc/docs/README.md +++ /dev/null @@ -1,14 +0,0 @@ -진행 순서 -1. 전공 과목 정보 입력 -2. 교양 과목 정보 입력 -3. 과목 목록 출력 -4. 취득 학점 출력 -5. 평점 평균 줄력 -6. 전공 평점 평균 출력 - -기능 구현 순서 -1. 전공,교양 과목 입력받기 -2. 나눠서 배열에 저장하기 -3. 주어진 조건에 따른 에러 확인 -4. 전공, 교양에 맞춰 평점 평균 계산 -5. 출력 \ No newline at end of file diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java deleted file mode 100644 index 57e79e1..0000000 --- a/src/main/java/gpacalc/Application.java +++ /dev/null @@ -1,7 +0,0 @@ -package gpacalc; - -public class Application { - public static void main(String[] args) { - //TODO: 구현 - } -} diff --git a/src/java-gpacalc/src/main/java/gpacalc/Calculator.java b/src/main/java/gpacalc/Calculator.java similarity index 100% rename from src/java-gpacalc/src/main/java/gpacalc/Calculator.java rename to src/main/java/gpacalc/Calculator.java diff --git a/src/java-gpacalc/src/main/java/gpacalc/CheckingError.java b/src/main/java/gpacalc/CheckingError.java similarity index 100% rename from src/java-gpacalc/src/main/java/gpacalc/CheckingError.java rename to src/main/java/gpacalc/CheckingError.java diff --git a/src/java-gpacalc/src/main/java/gpacalc/Input.java b/src/main/java/gpacalc/Input.java similarity index 100% rename from src/java-gpacalc/src/main/java/gpacalc/Input.java rename to src/main/java/gpacalc/Input.java diff --git a/src/java-gpacalc/src/main/java/gpacalc/Main.java b/src/main/java/gpacalc/Main.java similarity index 100% rename from src/java-gpacalc/src/main/java/gpacalc/Main.java rename to src/main/java/gpacalc/Main.java diff --git a/src/java-gpacalc/src/main/java/gpacalc/Output.java b/src/main/java/gpacalc/Output.java similarity index 100% rename from src/java-gpacalc/src/main/java/gpacalc/Output.java rename to src/main/java/gpacalc/Output.java diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/Calculator.java b/src/main/java/gpacalc/src/main/java/gpacalc/Calculator.java deleted file mode 100644 index 587118a..0000000 --- a/src/main/java/gpacalc/src/main/java/gpacalc/Calculator.java +++ /dev/null @@ -1,76 +0,0 @@ -package gpacalc; - -public class Calculator { - int point = 0; //취득학점 - int gradePoint = 0; //과목학점 총합 - double allGrade = 0.0; //과목성적가중치 총합 - int majorPoint = 0; //전공과목학점 - double majorGrade = 0.0; //전공성적가중치 - - public int getPoint(String[][] major, String[][] general){ - for (String[] score : major) { - if (!(score[2].equals("F") || score[2].equals("NP"))) { - point += Integer.parseInt(score[1]); - } - } - for (String[] score : general) { - if (!(score[2].equals("F") || score[2].equals("NP"))) { - point += Integer.parseInt(score[1]); - } - } - return point; - } - - public double getAllAverage(String[][] major, String[][] general){ - for (String[] point : major) { - if(!(point[2].equals("P")||point[2].equals("NP"))) { - double score = getScore(point[2]); - allGrade += calculateGPA(score, point[1]); - gradePoint += Integer.parseInt(point[1]); - } - } - for (String[] point : general) { - if(!(point[2].equals("P")||point[2].equals("NP"))) { - double score = getScore(point[2]); - allGrade += calculateGPA(score, point[1]); - gradePoint += Integer.parseInt(point[1]); - } - } - return allGrade/(double) gradePoint; - } - - public double getMajorAverage(String[][] major){ - for (String[] point : major) { - if(!(point[2].equals("P")||point[2].equals("NP"))) { - double score = getScore(point[2]); - majorGrade += calculateGPA(score, point[1]); - majorPoint += Integer.parseInt(point[1]); - } - } - return majorGrade/(double) majorPoint; - } - - public double calculateGPA(double score, String point){ - return score * (double) Integer.parseInt(point); - } - - static double getScore(String scr) { - double score; - - switch(scr){ - case "A+" -> score = 4.5; - case "A0" -> score = 4.0; - case "B+" -> score = 3.5; - case "B0" -> score = 3.0; - case "C+" -> score = 2.5; - case "C0" -> score = 2.0; - case "D+" -> score = 1.5; - case "D0" -> score = 1.0; - case "F" -> score = 0; - case "P" -> score = 0; - case "NP" -> score = 0; - default -> throw new IllegalArgumentException("잘못된 입력입니다."); - } - return score; - } -} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/CheckingError.java b/src/main/java/gpacalc/src/main/java/gpacalc/CheckingError.java deleted file mode 100644 index 8a7a6d1..0000000 --- a/src/main/java/gpacalc/src/main/java/gpacalc/CheckingError.java +++ /dev/null @@ -1,36 +0,0 @@ -package gpacalc; -public class CheckingError { - - public void checkError(String[][] mem){ - for (String[] num : mem) { - if(num[0].isBlank()){ - throw new IllegalArgumentException("공백으로만 채워지면 안됩니다."); - } - if(num[0].length() > 10) { - throw new IllegalArgumentException("글자수가 10개가 넘어가면 안됩니다."); - } - if(Integer.parseInt(num[1]) > 4 || Integer.parseInt(num[1]) < 1) { - throw new IllegalArgumentException("전공 학점입력이 잘못되었습니다."); - } - checkScore(num[2]); - } - } - - public void checkScore(String score){ - boolean check; - switch(score){ - case "A+" -> check = true; - case "A0" -> check = true; - case "B+" -> check = true; - case "B0" -> check = true; - case "C+" -> check = true; - case "C0" -> check = true; - case "D+" -> check = true; - case "D0" -> check = true; - case "F" -> check = true; - case "P" -> check = true; - case "NP" -> check = true; - default -> throw new IllegalArgumentException("잘못된 성적 입력입니다."); - } - } -} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/Input.java b/src/main/java/gpacalc/src/main/java/gpacalc/Input.java deleted file mode 100644 index dfcfe26..0000000 --- a/src/main/java/gpacalc/src/main/java/gpacalc/Input.java +++ /dev/null @@ -1,24 +0,0 @@ -package gpacalc; -import camp.nextstep.edu.missionutils.Console; - -public class Input { - - public String getMajorInput(){ - System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); - return Console.readLine(); - } - - public String getElectiveInput(){ - System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); - return Console.readLine(); - } - - public String[][] separateStr (String str){ - String[] firstSplit = str.split(","); - String[][] lastSplit = new String[firstSplit.length][]; //전공과목 저장을 위한 배열(문자열 형태) - for (int i = 0; i < firstSplit.length; i++) { - lastSplit[i] = firstSplit[i].split("-"); - } - return lastSplit; - } -} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/Main.java b/src/main/java/gpacalc/src/main/java/gpacalc/Main.java deleted file mode 100644 index 6215cbf..0000000 --- a/src/main/java/gpacalc/src/main/java/gpacalc/Main.java +++ /dev/null @@ -1,31 +0,0 @@ -package gpacalc; - -public class Main { - public static void main(String[] args) { - - //받기 - gpacalc.Input newStr = new Input(); - String major = newStr.getMajorInput(); - String general = newStr.getElectiveInput(); - - //나눠서 저장 - String[][] majorInfo = newStr.separateStr(major); - String[][] generalInfo = newStr.separateStr(general); - - //에러 체크 - gpacalc.CheckingError errorCheck = new CheckingError(); - errorCheck.checkError(majorInfo); - errorCheck.checkError(generalInfo); - - //계산 - gpacalc.Calculator calculator = new Calculator(); - int point = calculator.getPoint(majorInfo,generalInfo); - double allAverage = calculator.getAllAverage(majorInfo,generalInfo); - double majorAverage = calculator.getMajorAverage(majorInfo); - - //출력 - gpacalc.Output printOutput = new Output(); - printOutput.printInfo(majorInfo,generalInfo); - printOutput.printScore(point,allAverage,majorAverage); - } -} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/main/java/gpacalc/Output.java b/src/main/java/gpacalc/src/main/java/gpacalc/Output.java deleted file mode 100644 index 9810fdf..0000000 --- a/src/main/java/gpacalc/src/main/java/gpacalc/Output.java +++ /dev/null @@ -1,25 +0,0 @@ -package gpacalc; - -public class Output { - - public void printInfo(String[][] major, String[][] general){ - System.out.println("\n<과목 목록>"); - for (String[] info : major) { - System.out.println("[전공] " + info[0] + "," + info[1] + "," + info[2]); - } - for (String[] info : general) { - System.out.println("[교양] " + info[0] + "," + info[1] + "," + info[2]); - } - } - - public void printScore(int point, double allAve, double majorAve){ - System.out.println("\n<취득학점>"); - System.out.println(point + "학점"); - - System.out.println("\n<평점평균>"); - System.out.println(String.format("%.2f", allAve) + " / 4.5"); - - System.out.println("\n<전공 평점평균>"); - System.out.println(String.format("%.2f", majorAve) + " / 4.5"); - } -} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/test/java/gpacalc/CalculatorTest.java b/src/main/java/gpacalc/src/test/java/gpacalc/CalculatorTest.java deleted file mode 100644 index 4579218..0000000 --- a/src/main/java/gpacalc/src/test/java/gpacalc/CalculatorTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package gpacalc; - -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.mockito.internal.matchers.Null; - -import static org.junit.jupiter.api.Assertions.*; -class CalculatorTest { - - Calculator calculator; - - @BeforeEach - public void setUp() { - calculator = new Calculator(); - } - - @DisplayName("전체 학점 평균 테스트") - @Test - void allAverageTest() { - //when - String[][] input = {{"데이타구조","3","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; - double result = calculator.getAllAverage(input,input); - //then - assertEquals(2.75, result); - } - - @DisplayName("전공 학점 평균 테스트") - @Test - void majorAverageTest() { - //when - String[][] input = {{"데이타구조","3","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; - double result = calculator.getMajorAverage(input); - //then - assertEquals(2.75, result); - } - -} \ No newline at end of file diff --git a/src/main/java/gpacalc/src/test/java/gpacalc/CheckingErrorTest.java b/src/main/java/gpacalc/src/test/java/gpacalc/CheckingErrorTest.java deleted file mode 100644 index 14e7915..0000000 --- a/src/main/java/gpacalc/src/test/java/gpacalc/CheckingErrorTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package gpacalc; - -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.mockito.internal.matchers.Null; - -import static org.junit.jupiter.api.Assertions.*; - -class CheckingErrorTest { - - CheckingError checkingError; - - @BeforeEach - public void setUp() { - checkingError = new CheckingError(); - } - - @DisplayName("공백 메서드 테스트") - @Test - void checkError() { - //when - String[][] num = {{" ", " "}, {" ", " "}}; - //then - assertThrows(IllegalArgumentException.class, () -> { - checkingError.checkError(num); - }); - } - - @DisplayName("학점 범위 테스트") - @Test - void checkPointException() { - - //when - String[][] mem = {{"데이타구조","5","A0"},{"자바프로그래밍언어","3","B+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; - - //then - assertThrows(IllegalArgumentException.class, () -> { - checkingError.checkError(mem); - }); - - } - - @DisplayName("성적 범위 테스트") - @Test - void checkScoreException() { - - //when - String[][] mem = {{"데이타구조","2","A0"},{"자바프로그래밍언어","3","P+"},{"컴퓨터구조","3","C0"},{"컴퓨터네트워크","3","D+"}}; - - //then - assertThrows(IllegalArgumentException.class, () -> { - checkingError.checkError(mem); - }); - - } -} - - - diff --git a/src/main/java/gpacalc/src/test/java/gpacalc/MainTest.java b/src/main/java/gpacalc/src/test/java/gpacalc/MainTest.java deleted file mode 100644 index 8aaf657..0000000 --- a/src/main/java/gpacalc/src/test/java/gpacalc/MainTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package gpacalc; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; - -import camp.nextstep.edu.missionutils.test.NsTest; -import gpacalc.Main; -import org.junit.jupiter.api.Test; - -public class MainTest extends NsTest { - - @Test - void 평점평균_계산() { - run("데이타구조-3-A0,자바프로그래밍언어-3-B+,컴퓨터구조-3-C0,컴퓨터네트워크-3-D+", - "미술의이해-3-P,교양특론3-1-NP,기독교의이해-2-F"); - assertThat(output()).contains( - "<과목 목록>", - "[전공] 데이타구조,3,A0", - "[전공] 자바프로그래밍언어,3,B+", - "[전공] 컴퓨터구조,3,C0", - "[전공] 컴퓨터네트워크,3,D+", - "[교양] 미술의이해,3,P", - "[교양] 교양특론3,1,NP", - "[교양] 기독교의이해,2,F", - "<취득학점>", - "15학점", - "<평점평균>", - "2.36 / 4.5", - "<전공 평점평균>", - "2.75 / 4.5" - ); - } - - @Test - void 예외처리_잘못된_성적_입력() { - assertThatIllegalArgumentException() - .isThrownBy(() -> { - run("자바프로그래밍언어-3-E0", "한동인성교육-1-P"); - run("자바프로그래밍언어-3-A+", "한동인성교육-1-PD"); - }); - } - - @Test - void 예외처리_잘못된_학점_입력() { - assertThatIllegalArgumentException() - .isThrownBy(() -> { - run("프로그래밍언어론-5-A0", "한동인성교육-1-P"); - run("프로그래밍언어론-3-A0", "한동인성교육-0-P"); - }); - } - - @Override - protected void runMain() { - Main.main(new String[]{}); - } -} \ No newline at end of file diff --git a/src/test/java/ApplicationTest.java b/src/test/java/ApplicationTest.java deleted file mode 100644 index 38086f8..0000000 --- a/src/test/java/ApplicationTest.java +++ /dev/null @@ -1,54 +0,0 @@ -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; - -import camp.nextstep.edu.missionutils.test.NsTest; -import gpacalc.Application; -import org.junit.jupiter.api.Test; - -public class ApplicationTest extends NsTest { - - @Test - void 평점평균_계산() { - run("데이타구조-3-A0,자바프로그래밍언어-3-B+,컴퓨터구조-3-C0,컴퓨터네트워크-3-D+", - "미술의이해-3-P,교양특론3-1-NP,기독교의이해-2-F"); - assertThat(output()).contains( - "<과목 목록>", - "[전공] 데이타구조,3,A0", - "[전공] 자바프로그래밍언어,3,B+", - "[전공] 컴퓨터구조,3,C0", - "[전공] 컴퓨터네트워크,3,D+", - "[교양] 미술의이해,3,P", - "[교양] 교양특론3,1,NP", - "[교양] 기독교의이해,2,F", - "<취득학점>", - "15학점", - "<평점평균>", - "2.36 / 4.5", - "<전공 평점평균>", - "2.75 / 4.5" - ); - } - - @Test - void 예외처리_잘못된_성적_입력() { - assertThatIllegalArgumentException() - .isThrownBy(() -> { - run("자바프로그래밍언어-3-E0", "한동인성교육-1-P"); - run("자바프로그래밍언어-3-A+", "한동인성교육-1-PD"); - }); - } - - @Test - void 예외처리_잘못된_학점_입력() { - assertThatIllegalArgumentException() - .isThrownBy(() -> { - run("프로그래밍언어론-5-A0", "한동인성교육-1-P"); - run("프로그래밍언어론-3-A0", "한동인성교육-0-P"); - }); - } - - @Override - protected void runMain() { - Application.main(new String[]{}); - } -} diff --git a/src/java-gpacalc/src/test/java/gpacalc/CalculatorTest.java b/src/test/java/gpacalc/CalculatorTest.java similarity index 100% rename from src/java-gpacalc/src/test/java/gpacalc/CalculatorTest.java rename to src/test/java/gpacalc/CalculatorTest.java diff --git a/src/java-gpacalc/src/test/java/gpacalc/CheckingErrorTest.java b/src/test/java/gpacalc/CheckingErrorTest.java similarity index 100% rename from src/java-gpacalc/src/test/java/gpacalc/CheckingErrorTest.java rename to src/test/java/gpacalc/CheckingErrorTest.java diff --git a/src/java-gpacalc/src/test/java/gpacalc/MainTest.java b/src/test/java/gpacalc/MainTest.java similarity index 100% rename from src/java-gpacalc/src/test/java/gpacalc/MainTest.java rename to src/test/java/gpacalc/MainTest.java