본문 바로가기
프로젝트

수강생의 과목별 회차 점수 수정.(pt2)

by wjdtmdgjs 2024. 8. 6.

    public static void updateRoundScoreBySubject() {
        String studentId = getInputStudentId();
        //for문 학생숫자*50회 돌아감
        for (int i = 0; i < CampManagementApp.scoreStore.size(); i++) {
            Score bigScore = CampManagementApp.scoreStore.get(i);
            //studentId 일치하는 학생 찾음 (50 개)
            if (bigScore.getStudentId().equals(studentId)) {
                String subjectId = getInputSubjectId();

                //그중에 입력한 과목 id가 있는지 확인 없으면 안듣는거
                //듣는다면 회차수 10개 만큼 나옴
                if (bigScore.getSubjectId().equals(subjectId)) {

                    System.out.println("회차입력");
                    Scanner sc2 = new Scanner(System.in);
                    int round = sc2.nextInt();

                    //과목 타입 체크!
                    String subjectType = "";
                    for (int j = 0; j < CampManagementApp.subjectStore.size(); j++) {
                        Subject check = CampManagementApp.subjectStore.get(i);
                        if (check.getSubjectId().equals(subjectId)) {
                            subjectType = check.getSubjectType();
                            break;
                        }
                    }

                    //10개중 해당 회차를 찾아서 들어가기
                    if (bigScore.getRound() == round) {
                        System.out.println("(점수, 등급)은 (" + bigScore.getScore() + ", " + bigScore.getGrade() + ")입니다.");
                        System.out.println("");
                        System.out.println("몇 점으로 수정하시겠습니까?");
                        Scanner sc3 = new Scanner(System.in);
                        int newScore = sc2.nextInt();

                        //0<=점수<=100 인지 확인
                        if (0 <= newScore && newScore <= 100) {
                            bigScore.setScore(newScore);

                            if (subjectType.equals("필수")) {
                                if (95 <= newScore) {
                                    bigScore.setGrade("A");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else if (90 <= newScore) {
                                    bigScore.setGrade("B");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else if (80 <= newScore) {
                                    bigScore.setGrade("C");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else if (70 <= newScore) {
                                    bigScore.setGrade("D");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else if (60 <= newScore) {
                                    bigScore.setGrade("E");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else {
                                    bigScore.setGrade("F");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                }
                            } else if (subjectType.equals("선택")) {
                                if (90 <= newScore) {
                                    bigScore.setGrade("A");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else if (80 <= newScore) {
                                    bigScore.setGrade("B");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else if (70 <= newScore) {
                                    bigScore.setGrade("V");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else if (60 <= newScore) {
                                    bigScore.setGrade("D");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else if (50 <= newScore) {
                                    bigScore.setGrade("E");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                } else {
                                    bigScore.setGrade("F");
                                    System.out.println(newScore + " / " + subjectType + " / " + bigScore.getGrade() + " 로 변경되었습니다. ");
                                }
                            }
                        } else {
                            System.out.println("점수값을 0~100사이로 입력하세요");
                        }
                    } else {
                        System.out.println("해당 회차가 없습니다.");
                    }
                } else {
                    System.out.println("과목ID에 해당하는 과목이 없습니다.");
                }
            } else {
                System.out.println("학생Id에 해당하는 정보가 없습니다.");
            }

        }

    }

 

@@@@전체적으로 for문으로 덮어놔서 원하는 값이 나올때까지 계속 에러처리가 난다.

단계를 한계씩 잘라서 오류처리를 하나씩 해주었다.

오류가났을때 바로 돌아갈 수 있다.

public static void updateRoundScoreBySubject() {
    String studentId = getInputStudentId();


        if (getStudentScores(studentId).isEmpty()) {
            System.out.println("점수가 없는 학생입니다.");
            return;
        }

        String subName = getInputSubjectname();

        if (!isSubjectList(studentId, subName)) {
            System.out.println("해당 과목을 수강하지않습니다.");
            return;
        }

        String subjectId = getSubjectId(subName);

    while(true) {

        System.out.println("회차입력");
        Scanner sc = new Scanner(System.in);
        int round = sc.nextInt();


        Score bigScore = null;

        for (int i = 0; i < scores.size(); i++) {

            if (scores.get(i).getStudentId().equals(studentId) && scores.get(i).getSubjectId().equals(subjectId) && scores.get(i).getRound() == round) {
                bigScore = getThatScore(studentId, subjectId, round);
                break;
            }

            if (i + 1 == scores.size() && bigScore == null) {
                System.out.println("해당 회차에 대한 정보가 없습니다.");
            }
        }

        if(bigScore == null) {
            continue;
        }

        System.out.println("점수 : " + bigScore.getScore() + " 등급 : " + bigScore.getGrade() + " 입니다.\n");
        System.out.println("몇 점으로 수정하시겠습니까? ");
        int newScore = sc.nextInt();
        if (newScore > 100 || newScore < 0) {
            System.out.println("0~100점 사이로 입력하세요");
            return;
        }
        System.out.println("과목의 타입을 입력하세요(MANDATORY or CHOICE)");
        String type = sc.next();
        if (!checkType(type)) {
            System.out.println("과목의 타입을 제대로 입력하세요");
            return;
        }
        bigScore.setScore(newScore);
        bigScore.setGrade(returnGrade(type, newScore));
        System.out.println("점수 : " + bigScore.getScore() + " 등급 : " + bigScore.getGrade() + " 입니다.");
        return;
    }
}