Java 팀 프로젝트 1일차

이상민·2024년 8월 2일
0

오늘부터 목요일까지 팀프로젝트를 진행한다.
팀프로젝트 내용은






와 같은 조건을 담은 수강생과 점수를 관리하는 프로그램을 만들어 보는 프로젝트이다.

회의 시작전

처음에 프로젝트가 주어지고 어떤 방향으로 가야할 지 우리 팀원 모두 갈피가 잡히지 않아서 한번 개인적으로 만들어보고 다시 회의를 진행하기로 하였다.

1차 나의 코드

나는 필수 요구사항 중에 하나인 학생등록기능을 구현하는 코드를 만들어 보았다.


   private static void createStudent() { // 메서드 선언 : 새로운 수강생을 등록
        System.out.println("\n수강생을 등록합니다...");
        System.out.print("수강생 이름 입력: ");
        String studentName = sc.next(); // 사용자의 입력을 받아서 변수에 저장
        // 기능 구현 (필수 과목, 선택 과목)
                List<Subject> selectSubjects = new ArrayList<>(); // 사용자가 선택한 과목을 저장할 리스트를 초기화
        boolean add = true; // while 문에 사용하기위해

해설

수강생을 등록하는 기능에 요구조건이 (고유번호,이름,과목)이므로 선택한 과목은 필수 과목,선택 과목으로 나누어져 있기 때문에 이를 저장할 수 있는 기능을 먼저 구현할려고 하였다.
새로운 수강생을 등록하기위한 메서드 createStudent를 만들어주고 사용자의 입력을 받도록 만들었다
그리고 사용자가 선택한 과목을 저장할 selectSubjects리스트를 초기화 해주었다.

 while (add) { // true일 경우 반복문을 실행하여 과목을 선택
            System.out.println("\n등록할 과목을 선택하세요:"); // \n은 줄바꿈
            for (int i = 0; i < subjectStore.size(); i++) { // 등록 가능한 과목을 나열
                Subject subject = subjectStore.get(i); // 리스트에서 i 인덱스에 있는 subject 객체를 가져옴
                System.out.println((i+1) + ". " + subject.getSubjectName() + "( " + subject.getSubjectType() + " )");
                // 각 과목의 번호, 이름, 타입 출력 i+1은 인덱스가 0부터 시작하기 때문에
            }

for문을 활용하여 등록 가능한 과목을 나열하고 for문 안에서 i인덱스에 있는 객체를 subject에 넣어주었다.


            System.out.print("과목 번호 입력: ");
            int subjectIndex = sc.nextInt() - 1; // 사용자의 입력 과목 번호를 저장 , 인덱스 형태로 저장해야 해서 -1을 해주었다

            if (subjectIndex >= 0 && subjectIndex < subjectStore.size()) {  // 사용자가 입력한 과목 범위가 0이상 리스트의 크기보다 작을때
                selectSubjects.add(subjectStore.get(subjectIndex));
                // subjectIndex 위치의 subject 객체를 가져와서 사용자가 현재까지 선택한 과목들을 저장
                System.out.print("더 등록하시겠습니까? (y/n : ");
                add = sc.next().equals("y"); // 입력값이 y일경우에 true가 되므로 다시 while문 구현
            } else {
                System.out.println("잘못된 과목 번호입니다.");
            }
        }

사용자의 입력 과목을 정수 타입에 subjectIndex에 저장해 주었는데 인덱스 형태이므로 사용자가 입력한 값에 -1을 해주었다. 그리고 사용자가 0보다 큰 숫자를 입력하고 리스트에 크기보다 작은 숫자를 입력할 경우에 subjectIndex위치에 subject 객체를 가져와서 사용자가 선택한 과목들을 저장하도록 하였다.

        Student student = new Student(sequence(INDEX_TYPE_STUDENT), studentName , selectSubjects); // 수강생 인스턴스 생성 예시 코드 (고유 번호, 수강생 이름)
        studentStore.add(student); // 생성된 수강생 객체를 리스트 타입의 저장소 studentStore에 저장, 리스트 끝에 student 객체를 추가
        System.out.println("수강생 등록 성공!\n");

마지막으로 이렇게 생성된 수강생 객체를 리스트 타입의 저장소 studentStore에 저장해주었다.

회의

팀원들과 함께 자신이 짠 코드들을 공유하면서 어떤 것이 좋을지 그리고 역할을 분담하는 회의를 진행하였다. 등록 코드를 짜온 팀원은 나를 포함해서 3명이였는데, linkedList를 활용하여 코드를 짠 팀원분께 좋다는 의견이 많아서 그 코드를 사용하기로 하였다.

    // 수강생 등록
    private static void createStudent() {
        System.out.println("\n수강생을 등록합니다...");
        System.out.print("수강생 이름 입력: ");
        String studentName = sc.next();
        // 기능 구현 (필수 과목, 선택 과목)

        Student student = new Student(sequence(INDEX_TYPE_STUDENT), studentName, new LinkedList<>()); // 수강생 인스턴스 생성 예시 코드
        boolean flag = true;
        // 기능 구현
        while(flag) {
            System.out.println("필수과목 3개 / 선택과목 2개를 반드시 선택해야 합니다.");

            int mandatoryCount = 0;
            int choiceCount = 0;
            int min = 1;
            int max = 5;

            ArrayList<String> mandatoryArray = new ArrayList<>();
            ArrayList<String> choiceArray = new ArrayList<>();

            for (Subject subject : subjectStore) {

                String subjectName = subject.getSubjectName();

                System.out.println("현재까지 고른 과목 => 필수과목 : (" + mandatoryCount + ")" + mandatoryArray + ", 선택과목 (" + choiceCount + ")" + choiceArray);
                System.out.println("(" + subject.getSubjectType() + ") [" + min + "/" + max + "] " + subjectName + "를(을) 수강하시겠습니까? (0 : ㄴㄴ / 1: ㅇㅇ)");

                int input = sc.nextInt();
                if (input == 1) {
                    if (subject.getSubjectType().equals("MANDATORY")) {
                        mandatoryCount++;
                        mandatoryArray.add(subjectName);
                    }
                    else if (subject.getSubjectType().equals("CHOICE")) {
                        choiceCount++;
                        choiceArray.add(subjectName);
                    }

                    student.setStudentSubjectArr(subject);
                }
                if(min == max) {
                    min = 0;
                    max = 4;
                }
                min ++;
            }

            if(mandatoryCount < 3 || choiceCount < 2) System.out.println("수강생 등록 실패ㅜㅜ! \n");
            else {
                studentStore.add(student);
                System.out.println(studentStore);
                System.out.println("수강생 등록 성공!\n");
                flag = false;
            }
        }
    }

내 코드는 필수과목과 선택과목의 수를 정확히 정해주는 기능이 없어서 사용되지 못했다.

역할 분담

자신이 맡을 역할을 회의하던 중에 정확히 어떤 기능을 만들어야 하는지 인지하는 것이 중요하다고 생각해서 내가 텍스트로 내용을 간단히 정리해 보았다

1. 수강생(Student) 클래스
고유 번호
이름
과목 목록
2.과목(Course) 클래스
고유 번호
과목명
과목 타입 (필수,선택)
3.점수(Grade) 클래스
과목 고유 번호
수강생 고유 번호
회차
점수
등급
필수 요구 사항
4.StudentManager (수강생 관리 클래스)
수강생 정보를 관리
새로운 수강생을 등록 (고유 번호, 이름, 과목 목록)
수강생 목록 조회 (고유 번호, 이름)
5.GradeManger (점수 관리 클래스)
클래스 점수 정보 관리
수강생의 과목별 점수 등록
수강생의 과목별 점수 수정
수강생의 과목별 점수 조회 (회차, 등급)
추가 요구 사항
수강생 추가: 상태 종류(Green, Red, Yellow)
수강생 정보 조회: 조회 필수 정보( 고유번호, 이름, 상태, 선택한 과목명)
수강생 정보 수정 :  수정 가능한 정보(이름,상태)
수강생 삭제: (점수 기록도 함께 삭제)
상태별 수강생 목록 조회: 조회 필수 정보 (고유 번호, 이름)
과목별 평균 등급 조회: 조회 필수 정보 (과목명, 평균등급)
특정 상태 수강생들의 필수 과목 평균 등급 조회: 조회 필수 정보(수강생 이름, 필수 과목 평균 등급)

그래서 이것을 참고해서 우리 팀원들에 역할을 크게 수강생 관리 클래스 파트와 점수 관리 클래스 파트로 나누어보았다.

노란색 부분을 필수 요구 사항 부분이다

수강생 목록 조회

수강생 관리 클래스 기능 중 하나인 수강생의 고유번호와 이름이 조회되는 기능을 만들어 보았다.


    // 수강생 목록 조회
    private static void inquireStudent() {
        System.out.println("\n수강생 목록을 조회합니다...");
        // 기능 구현
        for (Student student : studentStore) {
            System.out.println("ID: " + student.getStudentId() + " 이름: " + student.getStudentName());
        }
        System.out.println("\n수강생 목록 조회 성공!");
    }

for each문을 활용하여 등록한 수강생의 목록이 조회되도록 만들고 git hub 저장소 branch에 올렸다

git hub
https://github.com/taehyeokNam/studentManagement/tree/min

profile
안녕하세요

0개의 댓글