Sparta 내일배움캠프 Java 5기/[3주차] 캠프 관리 프로그램 Team Project ✓
(24.05.08) main에서 기능을 분리하여 새로운 클래스에서 정의 및 main에서 구현
더보기
package camp;
import camp.model.Score;
import camp.model.Student;
import camp.model.Subject;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import static camp.CampManagementApplication.*;
public class GradeInquiry {
public static void inquireRoundGradeBySubject() {
Scanner sc = new Scanner(System.in);
//입력된 수강생 찾기
String studentId;
System.out.print("\n관리할 수강생의 번호를 입력하시오...");
String id = sc.next();
if (getStudentStore().stream().noneMatch((Student s) -> s.getStudentId().equals(id))) {
studentId = null;
} else {
studentId = id;
}
//미등록 수강생 처리
if (studentId == null) {
System.out.println("\n해당 수강생이 없습니다.");
System.out.println("\n등급 조회 종료\n");
return;
}
//아이디로 학생찾기
Student resultStudent = getStudentStore().stream().filter((Student s) -> s.getStudentId().equals(studentId)).toList().get(0);
/*조회할 과목 선택 후 회차별 등급 조회*/
System.out.println("\n다음은 " + resultStudent.getStudentName() + " 학생의 수강 과목입니다.");
System.out.printf("%-10s%-10s%-20s%n", "과목ID", "과목타입", "과목이름");
System.out.println("----------------------------------");
for (Subject subject : resultStudent.getEnrolledSubjects()) {
String subjectType = subject.getSubjectType();
String subjectName = subject.getSubjectName();
String subjectId = subject.getSubjectId();
System.out.printf("%-10s%-15s%-20s%n", subjectId, subjectType, subjectName);
}
/*입력한 과목 회차별 등급 조회*/
System.out.print("\n조회할 과목ID 입력해주세요. :");
String searchID = sc.next().toUpperCase();
Subject resultSubject = getSubjectStore().stream().filter((Subject s) -> s.getSubjectId().equals(searchID)).toList().get(0);
System.out.println("\n" + resultSubject.getSubjectName() + " 과목의 회차별 등급을 조회합니다...");
List<Score> resultScore = getScoreStore().stream().filter(s -> s.getStudent().equals(resultStudent) && s.getSubject().equals(resultSubject)).toList();
if (!resultScore.isEmpty()) {
System.out.printf("%-8s%-10s%n", "회차", "등급");
System.out.println("------------");
for (Score score : resultScore) {
int round = score.getRound();
char grade = score.getGrade();
System.out.printf("%-10s%-10s%n", round, grade);
}
} else {
System.out.println("점수가 등록되어 있지 않습니다.");
}
/*과목별 평균 등급을 조회*/
System.out.print("\n과목별 평균 등급을 조회하시겠습니까? (yes 입력 시, 조회):");
String input = sc.next();
if (input.equals("yes")) {
System.out.println("\n과목이름(과목타입) : 평균등급");
System.out.println("----------------------------------");
for (Subject subject : resultStudent.getEnrolledSubjects()) {
double average = 0; // 과목별 평균 점수
char averageGrade = 0; // 과목별 평균 등급
List<Score> subjectScore = getScoreStore().stream().filter(s -> s.getStudent().equals(resultStudent) && s.getSubject().equals(subject)).toList();
for (Score score : subjectScore) {
average += score.getScore();
}
average /= subjectScore.size();
Score averageScore = new Score(null, null, subject, 0, (int) Math.round(average));
averageGrade = averageScore.getGrade();
System.out.print(subject.getSubjectName() + "(" + subject.getSubjectType() + ") : ");
if (Double.isNaN(average)) {
System.out.println("점수 미등록");
} else {
System.out.println(averageGrade);
}
}
}
/*다시 메인으로 돌아가기 전 출력문구*/
System.out.println("\n등급 조회 종료");
}
}
- 학생의 과목별 회차별 등급조회, 모든 과목의 평균 등급 조회를 한번에 inquireRoundGradeBySubject 메서드에서 진행 -> main 위에서 많은 코드가 진행이 되기 때문에 새로운 GradeInquiry 클래스를 만들어 기능을 분리
- main 위에 데이터를 저장하는 컬렉션이 모두 캡슐화 되어 private static 제어자로 설정 -> main 에 해당 변수의 Getter를 생성 후, 데이터에 접근 할 수 있도록함
- 학생, 과목, 점수를 저장하는 변수들의 Getter를 main 생성
// studentStore의 getter 메서드
public static List<Student> getStudentStore() {
return studentStore;
}
// subjectStore의 getter 메서드
public static List<Subject> getSubjectStore() {
return subjectStore;
}
// scoreStore의 getter 메서드
public static List<Score> getScoreStore() {
return scoreStore;
}
'Sparta 내일배움캠프 Java 5기 > [3주차] 캠프 관리 프로그램 Team Project ✓' 카테고리의 다른 글
(24.05.10) A07조 칠순잔치 캠프 관리 프로그램 Project - KPT 회고 (0) | 2024.05.10 |
---|---|
(24.05.09) 기능 실행 여부를 위한 입력값의 대소문자 구분 없이 가능하게 변경 (0) | 2024.05.09 |
(24.05.07) 미등록 조회 데이터(학생 정보) 조회 (0) | 2024.05.08 |
(24.05.03) 회차별 등급조회 구현 (0) | 2024.05.08 |
(24.05.02) 캠프 관리 프로그램 Project 정리, User Flow, 기능분배 (0) | 2024.05.02 |