TIL

(2024-05-08)자바 팀과제 협업,조회기능

o_coding 2024. 5. 9. 03:44
//회차별 특정과목 등급 조회
public void inquireRoundGradeBySubject (){
String studentId = getStudentId(); // 관리할 수강생 고유 번호
// 기능 구현 (조회할 특정 과목)
studentId = validationStudentId(studentId);
if (studentId != null) {
System.out.println("조회할 과목을 입력하세요 :");
int count = 0;
ArrayList<Subject> sub = new ArrayList<>(); //조회용 과목들을 담을 리스트
for (Subject subject : InitData.getSubjectStore()) {
if(subject.getStudentId().equals(studentId)){
count++;
sub.add(subject);
System.out.println(count+"."+subject.getSubjectName());
}
}

int selectNum = 0;
selectNum = sc.nextInt();

Subject sub2;

if (selectNum < 1 || selectNum > sub.size()) {
System.out.println("유효하지 않은 선택입니다. 다시 시도하세요.");
return; // 인덱스 범위 벗어남을 방지하기 위해 종료
}
sub2 = sub.get(selectNum-1);

System.out.println(sub2.getSubjectName());
boolean subjectOk = false;
//과목 유효성 검사
for (Subject subject1 : InitData.getSubjectStore()) {
if (sub2.getSubjectId().equals(subject1.getSubjectId())) {
System.out.println("과목 유효성 검사...");
subjectOk = true;
break;
}
}

if (subjectOk) {
System.out.println("회차별 등급을 조회합니다...");

for (Score score1 : InitData.getScoreStore()) {
if (score1.getStudentId().equals(studentId) && score1.getSubjectId().equals(sub2.getSubjectId())) {
System.out.println(score1.getTimes() + "회차 " + "등급: " + score1.getRank());
}
}
System.out.println("\n등급 조회 성공!");
}else{
System.out.println("해당 과목이 존재하지 않습니다.");
}
} else {
System.out.println("입력한 학생번호가 존재하지 않습니다.");
}
}

회차별 등급 조회 구현 

필요한 값들을 for문과 if문 을 사용해서 찾은후 사용 했다. 데이터를 자주 파싱하다 보니 코드가 난잡해진 것 같다.

 

public void inquireAverageByStatus(){
System.out.println("상태를 입력하세요 : ");
System.out.println("1.Green");
System.out.println("2.Yellow");
System.out.println("3.Red");
String condition = "";
int select = sc.nextInt();

switch(select){
case 1:
condition = InitData.getConditionGreen();
break;
case 2:
condition = InitData.getConditionYellow();
break;
case 3:
condition = InitData.getConditionRed();
break;
}
List<Student> students = new ArrayList<>();
List<Subject> subjects = new ArrayList<>();
List<String> studentIds = new ArrayList<>();
List<Integer> conditionScore = new ArrayList<>();

//입력한 상태의 학생 학번 수집
for (Student student : InitData.getStudentStore()) {
if(student.getCondition().equals(condition)){
studentIds.add(student.getStudentId());
}
}

//필수과목 저장
for (String studentId : studentIds) {
for (Subject subject : InitData.getSubjectStore()) {
if(subject.getSubjectType().equals(InitData.getSubjectTypeMandatory()) && studentId.equals(subject.getStudentId()))
subjects.add(subject);
}
}


for (Score score : InitData.getScoreStore()) {
for (Subject subject : subjects) {
if(subject.getStudentId().equals(score.getStudentId())){
conditionScore.add(score.getScore());
}
}
}

int average = (int)conditionScore.stream().mapToInt(num -> num).summaryStatistics().getAverage();
char averageRank = calculateMandatorySubjectGrade(average);
System.out.println(condition + "상태의 학생들 필수과목 평균점수 : " + average + " 평균 등급 : " + averageRank);

}

수강생 상태에 따른 필수과목 평균등급 조회 구현

요구사항이 복잡해서 어떻게 필요한 데이터를 파싱할지 많이 고민했다.