Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# GPA Calculator

## Steps
1. 입력 줄을 "," 기준으로 나눔 -> 전공 교양 list 따로 만듬
2. 1번에 list 는 과목 객체로 데이터 값 입력
3. loop를 통해서 취득 학점, 평점 평균, 전공 평균 계산
4. 출력
70 changes: 70 additions & 0 deletions src/main/java/gpacalc/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,77 @@
package gpacalc;

import camp.nextstep.edu.missionutils.Console;
import gpacalc.util.ScoreValue;
import gpacalc.util.Sepearate;
import gpacalc.vo.Subject;

import java.util.ArrayList;

public class Application {
public static void main(String[] args) {
//TODO: 구현
ArrayList<String> majorString = new ArrayList<>();
ArrayList<String> generalString = new ArrayList<>();
ArrayList<Subject> major = new ArrayList<>();
ArrayList<Subject> 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);

int total_credit = 0;
int total_credit_average = 0;
double weight_total = 0.0;
for (Subject s : major) {
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());
}
}
double majorScore = (double) Math.round(weight_total / total_credit_average * 100) /100;

for (Subject s : general) {
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());
}
}
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");

}

public static double calculateWeight(String score, int credit) {
return ScoreValue.findValue(score) * credit;
}
}
17 changes: 17 additions & 0 deletions src/main/java/gpacalc/util/ScoreValue.java
Original file line number Diff line number Diff line change
@@ -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;
};
}
}
46 changes: 46 additions & 0 deletions src/main/java/gpacalc/util/Sepearate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package gpacalc.util;

import gpacalc.vo.Subject;

import java.util.ArrayList;
import java.util.StringTokenizer;

public class Sepearate {
public static ArrayList<String> separateByComma(String line) {
ArrayList<String> result = new ArrayList<>();
StringTokenizer st = new StringTokenizer(line, ",");
while (st.hasMoreTokens()) {
String info = st.nextToken();
result.add(info);
}
return result;
}
public static ArrayList<Subject> separateByHyphen(ArrayList<String> subjects) {
ArrayList<Subject> result = new ArrayList<>();
StringTokenizer st;
for (String s: subjects) {
st = new StringTokenizer(s, "-");
String subjectName = 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);

throw new IllegalArgumentException();
}

result.add(new Subject(subjectName, credit, score));
}
return result;
}
}
41 changes: 41 additions & 0 deletions src/main/java/gpacalc/vo/Subject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
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;
}

public String toString() {
return subjectName + "," + credit + "," + score;
}
}