본문 바로가기

JAVA/국비 공부

3월 18일 수업 3

package day0318;
// 학생 관리 프로그램을 인덱스가 아니아 학생번호 기준으로 하여 

// 관리 되는 프로그램을 만드시오.

// 중복 학생인지 아닌지는 번호로만 판단하도록 합니다.

import util.ScannerUtil;
import java.util.ArrayList;
import java.util.Scanner;

import day0316.Student;

public class GradeBook01 {

    private static ArrayList<Student> list = new ArrayList<>();

    private static final int SCORE_MIN = 0;
    private static final int SCORE_MAX = 100;
    private static Scanner scanner = new Scanner(System.in);
    private static int currentId = 1;

    public static void main(String[] args) {
        showMenu();
    }

    private static void showMenu() {

        while (true) {
            System.out.println("============================");
            System.out.println("         비트고등학교         ");
            System.out.println("      성적 관리 프로그램      ");
            System.out.println("============================");
            String message = new String("1. 입력\n2. 목록보기\n3. 종료");
            int userChoice = ScannerUtil.nextInt(scanner, message);

            if (userChoice == 1) {
                // 입력 메소드 실행
                insert();

            } else if (userChoice == 2) {
                // 목록 보기 메소드 실행
                printAll();

            } else if (userChoice == 3) {
                // 종료 실행
                System.out.println("사용해주셔서 감사합니다.");
                break;
            }
        }
    }

    // 입력을 담당하는 메소드
    private static void insert() {

        // 리스트에 추가할 Student 객체 생성
        Student s = new Student();

        // 객체에 정보 입력
        s.setId(currentId++);

        String message = new String("학생의 이름를 입력해 주세요");
        s.setName(ScannerUtil.nextLine(scanner, message));

        message = new String("학생의 국어점수를 입력해 주세요");
        s.setKorean(ScannerUtil.nextInt(scanner, message, SCORE_MIN, SCORE_MAX));

        message = new String("학생의 영어 점수를 입력해 주세요");
        s.setEnglish(ScannerUtil.nextInt(scanner, message, SCORE_MIN, SCORE_MAX));

        message = new String("학생의 수학 점수를 입력해 주세요");
        s.setMath(ScannerUtil.nextInt(scanner, message, SCORE_MIN, SCORE_MAX));

        // 정보가 입력된 객체를 우리의 list에 추가해준다.
        list.add(s);
    }

    private static void printAll() {
        // 목록을 쭉 출력하고 사용자에게 개별 보기할 값을 입력 받거나
        // 아니면 뒤로가기를 할 수 있도록 안내한다.

        // 만약 list의 size가 0이면 " 아직 입력된 학생 정보가 존재하지 않습니다 "가 출력이 되고
        // 그 외에는 개별 보기 후에 다시 여기에 오더라도 다시 목록을 볼 수 있도록 무한루프를 해준다.

        while (true) {

            if (list.size() == 0) {
                System.out.println();
                System.out.println("아직 입력된 학생의 정보가 존재하지 않습니다.");
                System.out.println();
                break;
            }
            System.out.println();
            for (int i = 0; i < list.size(); i++) {
                System.out.printf("%d. %s \n", list.get(i).getId(), list.get(i).getName());
            }
            String message = new String("개별 보기할 학생의 번호를 선택해주세요. 뒤로가기는 0을 입력해주세요");
            int userChoice = ScannerUtil.nextInt(scanner, message);

            Student s = new Student();
            s.setId(userChoice);

            while (!(userChoice == 0 || list.contains(s))) {
                System.out.println("해당 학생 번호는 유효하지 않습니다.");
                userChoice = ScannerUtil.nextInt(scanner, message);
            }

            if (userChoice == 0) {
                System.out.println();
                System.out.println("메뉴로 돌아갑니다.");
                System.out.println();
                break;
            } else {

                printOne(userChoice);
            }
        }
    }

    private static int findIndex(int id) {
        Student s = new Student();
        s.setId(id);

        return list.indexOf(s);

    }

    private static void printOne(int id) {

        int index = findIndex(id);

        if (index == -1) {
            System.out.println();
            System.out.println("해당 학생번호는 존재하지 않는 번호입니다.");
            System.out.println();
        } else {
            list.get(index).showInfo();
            String message = new String("1. 수정 2. 삭제 3. 뒤로가기");
            int userChoice = ScannerUtil.nextInt(scanner, message, 1, 3);
            if (userChoice == 1) {
                update(id);
                printOne(id);
            } else if (userChoice == 2) {
                delete(id);
            }
        }
    }

    // 수정 메소드 실행
    private static void update(int id) {
        int index = findIndex(id);

        if (index == 1) {
            System.out.println();
            System.out.println("해당 학생번호는 유효하지 않은 번호입니다.");
            System.out.println();
        } else {
            String message = new String("학생의 국어점수를 입력해 주세요");
            list.get(index).setKorean(ScannerUtil.nextInt(scanner, message, SCORE_MIN, SCORE_MAX));

            message = new String("학생의 영어 점수를 입력해 주세요");
            list.get(index).setEnglish(ScannerUtil.nextInt(scanner, message, SCORE_MIN, SCORE_MAX));

            message = new String("학생의 수학 점수를 입력해 주세요");
            list.get(index).setMath(ScannerUtil.nextInt(scanner, message, SCORE_MIN, SCORE_MAX));

        }
    }

    // 삭제 메소드 실행
    private static void delete(int id) {

        int index = findIndex(id);

        if (index == 1) {
            System.out.println();
            System.out.println("해당 학생번호는 유효하지 않은 번호입니다.");
            System.out.println();

        } else {
            String message = new String("정말로 삭제하시겠습니까? 삭제하실려면 Y 혹은 y를 입력해주세요.");
            String yesNo = new String(ScannerUtil.nextLine(scanner, message));

            if (yesNo.equalsIgnoreCase("Y")) {

                list.remove(index);

            } else {
                printOne(id);
            }
        }
    }
}

'JAVA > 국비 공부' 카테고리의 다른 글

3월18일 수업 5  (0) 2021.03.18
3월 18일 수업 4  (0) 2021.03.18
3월 18일 수업 2  (0) 2021.03.18
3월18일 수업 1  (0) 2021.03.18
3월18일 수업  (0) 2021.03.18