ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [부트캠프] NBCStudentManager 프로젝트 1일차
    부트캠프/프로젝트 2024. 8. 7. 20:54

    프로젝트 명 NBCStudentManager 

    학생 정보를 관리하는 프로그램을 만드는 프로젝트로 

    다음의 UML 기반으로 제작했다.

     

    [ 프로그램 UML ]

    내가 맡은 역할 

    조회하고자 하는 학생이 듣는 과목의 특정 회차 등급을 조회하는 함수를 구현하는 것이 내가 맡은 역할이었다. 

     

    우선, 제일 먼저 해당 함수의 시나리오를 구상해봤다.

     

    • 학생의 고유번호를 입력 받는다.
    • 학생이 실존하는 학생인지 체크한다.
    • 과목 번호를 입력 받는다.
    • 학생이 해당 과목을 듣는지 체크한다.
    • 회차를 입력 받는다.
    • 학생이 해당 회차에 시험을 봤는지 체크한다.
    • 출력한다.

    그 다음, 아래와 내용과 같이 세부적으로 파고 들었다.

    • 학생이 실존하는 학생인지 체크하기
      • List에 해당 학생의 ID가 있는지 확인한다.
    • 과목 번호를 입력받는다.
      • List에 해당 과목ID와 일치한 객체가 있는지 확인한다.
      • 그 후, 해당 Student객체에서 수강중인 과목 List에 입력받은 과목 번호가 있는지 체크한다.
    • 회차를 입력 받는다.
      • 회차가 1~10 사이의 숫자인지 체크한다.
      • Score List에 입력받은 과목 ID, 학생 ID 정보를 담고 있는 내용이 있는지 확인하고, 
        해당 회차에 시험을 봤는지 확인한다.

     

    문제점

    Filter와 findFirst와 같은 메서드를 처음 써보다보니 확인하는 기능을 구현하던 중 길을 잃었다.

     

    내가 예상한 findFirst는 매개 변수로 Ramda 함수를 넣어줄 경우 해당 내용과 일치하는 첫번째 객체를 반환할 줄 알았지만,

    Stream.Filter와 연계되어 작동되는 것이었다.

    시나리오대로 작성한 코드

    // 수강생의 특정 과목 회차별 등급 조회
        private static void inquireRoundGradeBySubject() {
            try {
                Student student = getStudentByInput();
                showStudentInfo(student);
                Subject foundSubject = getSubjectByInput(student);
                Score subjectScore = findScoreByStudentIDSubjectId(foundSubject.getSubjectId(), student.getStudentId());
                int round = getRoundByInput() - 1;
    
                // 회차 점수 확인
                if (subjectScore.getScores()[round] == -1) {
                    throw new Exception("해당 회차의 시험을 본 이력이 존재하지 않습니다.");
                }
    
                System.out.printf("%s의 %s과목 %d회차 등급은 %c입니다.", student.getStudentName(), foundSubject.getSubjectName(), round + 1, subjectScore.getRank()[round]);
            } catch (Exception ex) {
                System.out.println("Error : " + ex.toString());
            }
        }

    완성

    [ 결과 ]

Designed by Tistory.