diff --git a/docs/README.md b/docs/README.md index e69de29..94520a5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,6 @@ +구현할 기능 +Application.java - 메인함수, 입출력 기능, +문자열로 과목과 학점을 받고 쉼표로 각각 분리, 다시 -로 과목과 학점, 평점 분리해서 Major, GeneralEducation 클래스 리스트로 담기, +Student 클래스에서 취득학점, 평점평균, 전공 평점평균 가져와서 출력하기 +Major.java, GeneralEducation.java - 각각 과목, 학점, 평점 필드를 가지고 있는 클래스 +Student.java - 한 학생의 취득학점, 평점평균, 전공 평점평균 필드를 가지고 있는 클래스, Major, GeneralEducation 클래스 리스트에서 과목, 학점, 평점을 가져와 계산하기 diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..656f2e6 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Dfile.encoding=UTF-8 \ No newline at end of file diff --git a/src/main/java/gpacalc/Application.java b/src/main/java/gpacalc/Application.java index 57e79e1..eab0e04 100644 --- a/src/main/java/gpacalc/Application.java +++ b/src/main/java/gpacalc/Application.java @@ -1,7 +1,83 @@ package gpacalc; +import static camp.nextstep.edu.missionutils.Console.readLine; + +import camp.nextstep.edu.missionutils.Console; +import java.util.ArrayList; + + public class Application { public static void main(String[] args) { //TODO: 구현 + + Student student = new Student(); + ArrayList majors = new ArrayList(); + ArrayList generals = new ArrayList(); + System.out.println("전공 과목명과 이수학점, 평점을 입력해주세요(예시: 프로그래밍언어론-3-A+,소프트웨어공학-3-B+):"); + String input = Console.readLine(); + if (input.trim().equals("")) { + throw new IllegalArgumentException("공백으로만 구성됨"); + } + String[] subject = input.split(","); + for (int i = 0; i < subject.length; i++) { + String[] token = subject[i].split("-"); + if (token.length != 3) { + throw new IllegalArgumentException("입력 형식 오류"); + } + String subjectName = token[0]; + String subjectCredit = token[1]; + String subjectGrade = token[2]; + Major major = new Major(subjectName, subjectCredit, subjectGrade); + if(major.getSubjectCredit()<1 || major.getSubjectCredit()>4){ + throw new IllegalArgumentException("잘못된 학점"); + } + student.setCreditSum(major.getSubjectCredit(), major.getSubjectGrade()); + student.setGradeSum(major.getSubjectGrade(), major.getSubjectCredit()); + student.setMajorCredit(major.getSubjectCredit()); + student.setMajorSum(major.getSubjectGrade(), major.getSubjectCredit()); + student.setMajorAvg(student.getMajorSum(), student.getMajorCredit()); + student.setGradeAvg(student.getGradeSum()); + majors.add(major); + } + System.out.println("교양 과목명과 이수학점, 평점을 입력해주세요(예시: 선형대수학-3-C0,인간관계와자기성장-3-P):"); + String input2 = Console.readLine(); + if (input2.trim().equals("")) { + throw new IllegalArgumentException("공백으로만 구성됨"); + } + String[] subject2 = input2.split(","); + for (int i = 0; i < subject2.length; i++) { + String[] token2 = subject2[i].split("-"); + if (token2.length != 3) { + throw new IllegalArgumentException("입력 형식 오류"); + } + String subjectName = token2[0]; + String subjectCredit = token2[1]; + String subjectGrade = token2[2]; + GeneralEducation general = new GeneralEducation(subjectName, subjectCredit, subjectGrade); + if(general.getSubjectCredit()<1 || general.getSubjectCredit()>4){ + throw new IllegalArgumentException("잘못된 학점"); + } + student.setCreditSum(general.getSubjectCredit(), general.getSubjectGrade()); + student.setGradeSum(general.getSubjectGrade(), general.getSubjectCredit()); + student.setGradeAvg(student.getGradeSum()); + generals.add(general); + } + System.out.println("\n<과목 목록>");; + for (int i = 0; i < majors.size(); i++) { + System.out.println("[전공] " + majors.get(i).getSubjectName() + "," + majors.get(i).getSubjectCredit() + "," + majors.get(i).getSubjectGrade()); + } + for (int i = 0; i < generals.size(); i++) { + System.out.println("[교양] " + generals.get(i).getSubjectName() + "," + generals.get(i).getSubjectCredit() + "," + generals.get(i).getSubjectGrade()); + } + + System.out.println("\n<취득학점>"); + System.out.println(student.getCreditSum() + "학점"); + System.out.println("\n<평점평균>"); + String str = String.format("%.2f", student.getGradeAvg()); + System.out.println(str + " / 4.5"); + + System.out.println("\n<전공 평점평균>"); + str = String.format("%.2f", student.getMajorAvg()); + System.out.println(str + " / 4.5"); } } diff --git a/src/main/java/gpacalc/GeneralEducation.java b/src/main/java/gpacalc/GeneralEducation.java new file mode 100644 index 0000000..ca25e81 --- /dev/null +++ b/src/main/java/gpacalc/GeneralEducation.java @@ -0,0 +1,32 @@ +package gpacalc; + +public class GeneralEducation { + private String subjectName; + private int subjectCredit; + private String subjectGrade; + + GeneralEducation(String subjectName, String subjectCredit, String subjectGrade) { + setSubjectName(subjectName); + setSubjectCredit(subjectCredit); + setSubjectGrade(subjectGrade); + } + + public String getSubjectName() { + return subjectName; + } + public void setSubjectName(String subjectName) { + this.subjectName = subjectName; + } + public int getSubjectCredit() { + return subjectCredit; + } + public void setSubjectCredit(String subjectCredit) { + this.subjectCredit = Integer.parseInt(subjectCredit); + } + public String getSubjectGrade() { + return subjectGrade; + } + public void setSubjectGrade(String subjectGrade) { + this.subjectGrade = subjectGrade; + } +} diff --git a/src/main/java/gpacalc/Major.java b/src/main/java/gpacalc/Major.java new file mode 100644 index 0000000..825c8bb --- /dev/null +++ b/src/main/java/gpacalc/Major.java @@ -0,0 +1,34 @@ +package gpacalc; + +import javax.security.auth.Subject; + +public class Major { + private String subjectName; + private int subjectCredit; + private String subjectGrade; + + Major(String subjectName, String subjectCredit, String subjectGrade) { + setSubjectName(subjectName); + setSubjectCredit(subjectCredit); + setSubjectGrade(subjectGrade); + } + + public String getSubjectName() { + return subjectName; + } + public void setSubjectName(String subjectName) { + this.subjectName = subjectName; + } + public int getSubjectCredit() { + return subjectCredit; + } + public void setSubjectCredit(String subjectCredit) { + this.subjectCredit = Integer.parseInt(subjectCredit); + } + public String getSubjectGrade() { + return subjectGrade; + } + public void setSubjectGrade(String subjectGrade) { + this.subjectGrade = subjectGrade; + } +} diff --git a/src/main/java/gpacalc/Student.java b/src/main/java/gpacalc/Student.java new file mode 100644 index 0000000..d78c081 --- /dev/null +++ b/src/main/java/gpacalc/Student.java @@ -0,0 +1,154 @@ +package gpacalc; + +public class Student { + private int creditSum; + private float gradeSum; + private float majorSum; + private float gradeAvg; + private float majorAvg; + private int majorCredit; + private int countWithoutPF; + + Student() { + this.creditSum = 0; + this.gradeSum = 0; + this.majorSum = 0; + this.gradeAvg = 0.0f; + this.majorAvg = 0.0f; + this.majorCredit = 0; + this.countWithoutPF = 0; + } + + public void setMajorCredit(int majorCount) { + this.majorCredit += majorCount; + } + + public int getMajorCredit() { + return majorCredit; + } + + public int getCountWithoutPF() { + return countWithoutPF; + } + + public void setGradeSum(String grade, int credit) { + float grade1 = 0.0f; + if (grade.equals("P")||grade.equals("NP")) { + grade1 += 0.0; + this.countWithoutPF += 0; + } + else { + if (grade.equals("A+")) { + grade1 += 4.5; + } + else if (grade.equals("A0")) { + grade1 += 4.0; + } + else if (grade.equals("B+")) { + grade1 += 3.5; + } + else if (grade.equals("B0")) { + grade1 += 3.0; + } + else if (grade.equals("C+")) { + grade1 += 2.5; + } + else if (grade.equals("C0")) { + grade1 += 2.0; + } + else if (grade.equals("D+")) { + grade1 += 1.5; + } + else if (grade.equals("D0")) { + grade1 += 1.0; + } + else if (grade.equals("F")) { + grade1 += 0.0; + } + else { + throw new IllegalArgumentException("잘못된 평점값"); + } + this.countWithoutPF += credit; + } + + gradeSum += grade1 * credit; + } + + public float getGradeSum() { + return gradeSum; + } + + public void setMajorSum(String grade, int credit) { + float grade1 = 0.0f; + if (grade.equals("P")||grade.equals("NP")) { + grade1 += 0.0; + } + else if (grade.equals("A+")) { + grade1 += 4.5; + } + else if (grade.equals("A0")) { + grade1 += 4.0; + } + else if (grade.equals("B+")) { + grade1 += 3.5; + } + else if (grade.equals("B0")) { + grade1 += 3.0; + } + else if (grade.equals("C+")) { + grade1 += 2.5; + } + else if (grade.equals("C0")) { + grade1 += 2.0; + } + else if (grade.equals("D+")) { + grade1 += 1.5; + } + else if (grade.equals("D0")) { + grade1 += 1.0; + } + else if (grade.equals("F")) { + grade1 += 0.0; + } + else { + throw new IllegalArgumentException("잘못된 평점값"); + } + majorSum += grade1 * credit; + } + public float getMajorSum() { + return majorSum; + } + + public int getCreditSum() { + return creditSum; + } + + public void setCreditSum(int creditSum, String grade) { + if (grade.equals("F")||grade.equals("NP")) { + this.creditSum += 0; + } + else if (grade.equals("A+")||grade.equals("A0")||grade.equals("B+")||grade.equals("B0")||grade.equals("C+")||grade.equals("C0")||grade.equals("D+")||grade.equals("D0")||grade.equals("P")) { + this.creditSum += creditSum; + } + else { + throw new IllegalArgumentException("잘못된 평점값"); + } + } + + public float getGradeAvg() { + return gradeAvg; + } + + public void setGradeAvg(float gradeSum) { + this.gradeAvg = gradeSum / getCountWithoutPF(); + } + + public float getMajorAvg() { + + return majorAvg; + } + + public void setMajorAvg(float majorAvg, int majorCount) { + this.majorAvg = majorSum / majorCount; + } +}