풀스택 백엔드 2026.04.28

syyu21b·2026년 4월 29일

풀스택 - 백엔드

목록 보기
10/49
post-thumbnail

[SECTION09-00. 종합 테스트 문제]

문제 목표

지금까지 배운 배열, 반복문, 조건문, 클래스를 활용하여 콘솔 기반 학생 관리 프로그램을 만들어 보세요.

이 실습을 통해 “학생 정보처럼 여러 개의 값을 하나로 묶어 관리할 때 왜 클래스가 필요한지” 를 이해하는 것이 목표입니다.


문제 설명

다음과 같은 기능을 가진 학생 관리 프로그램을 작성하세요.

  • 학생은 최대 3명까지 등록 가능
  • 학생 정보는 이름, 나이, 점수
  • 프로그램은 사용자가 종료를 선택하기 전까지 계속 실행

메뉴 구성

프로그램 실행 시 아래 메뉴가 반복적으로 출력되어야 합니다.

===== 명령어 목록 =====
1. 학생 등록
2. 학생 목록
3. 학생 검색
4. 학생 수정
5. 학생 삭제
0. 종료

기능 요구 사항

1️⃣ 학생 등록

  • 학생 정보를 입력받아 배열에 저장
  • 최대 인원(3명)을 초과하면 등록 불가 메시지 출력
  • 등록 성공 시 현재 등록된 학생 수 출력

2️⃣ 학생 목록

  • 등록된 모든 학생 정보를 출력
  • 출력 형식 예시
1번) 이름: 홍길동 / 나이: 20 / 점수: 90
  • 등록된 학생이 없으면 안내 메시지 출력

3️⃣ 학생 검색

  • 학생 번호(1번부터 시작)를 입력받아 해당 학생 정보 출력
  • 존재하지 않는 번호 입력 시 오류 메시지 출력

4️⃣ 학생 수정

  • 학생 번호를 입력받아 정보 수정
  • 이름은 엔터 입력 시 기존 값 유지
  • 나이, 점수는 1 입력 시 기존 값 유지
  • 수정 완료 메시지 출력

5️⃣ 학생 삭제

  • 학생 번호를 입력받아 삭제
  • 삭제 후 배열의 빈 공간이 생기지 않도록 앞으로 당김 처리
  • 삭제 완료 메시지 출력

0️⃣ 종료

  • 프로그램 종료 후 실행 중단

사용해야 할 학습 요소

  • 클래스와 객체 (Student)
  • 객체 배열 (Student[])
  • 반복문 (while, for)
  • 조건문 (if, switch)
  • 입력 처리 (Scanner)
  • 배열 인덱스

정답

import java.util.Scanner;

public class Exam01 {

public static void main(String[] args) {

    Scanner scn = new Scanner(System.in);

    final int MAX_STUDENT_COUNT = 3;

    Student[] students = new Student[MAX_STUDENT_COUNT];
    students[0] = new Student("유신영", 27, 100);
    students[1] = new Student("유프로", 28, 92);
    students[2] = new Student("유영신", 29, 88);

    // 학생 수 관리를 위한 변수
    int count = 3;

    while(true) {
        System.out.println("\n=== 명령어 목록 ===");
        System.out.println("1. 학생 등록");
        System.out.println("2. 학생 목록");
        System.out.println("3. 학생 검색");
        System.out.println("4. 학생 수정");
        System.out.println("5. 학생 삭제");
        System.out.println("0. 종료\n");
        System.out.print("명령어:");
        int cmd = scn.nextInt();
        scn.nextLine(); // 버퍼 방지

        switch (cmd) {
            case 1:
                if (count == 3) {
                    System.out.println("학생을 더 이상 등록할 수 없습니다.");
                    continue;
                }
                System.out.println("학생 등록입니다.");

                // 학생 정보를 입력받아야 함
                System.out.print("학생 이름:");
                String name = scn.nextLine();

                System.out.print("학생 나이:");
                int age = scn.nextInt();

                System.out.print("학생 점수:");
                int score = scn.nextInt();


                students[count] = new Student(name, age, score);
                count++;

                break;
            case 2:
                System.out.println("학생 목록입니다.");

                for (int i = 0; i < MAX_STUDENT_COUNT; i++) {
                    if (students[i] == null) {
                        continue;
                    }
                    System.out.printf("%d번) 이름: %s\n",
                            i + 1,
                            students[i].getName());

                }

                break;
            case 3:
                System.out.println("학생 검색입니다.");

                System.out.print("검색할 학생 번호: ");

                // 1번 학생 검색 -> 0번째 인덱스
                int searchNum = scn.nextInt(); // 검색할 학생 번호
                int searchIndex = searchNum - 1; // 검색할 학생 인덱스

                // 0보다 작은 숫자가 들어왔을 때와 등록된 학생 수보다 높은 숫자가 들어 왔을 때
                // 되돌려 보낸다
                // count가 2라는 건 학생이 두 명 등록되어 있다는 건데
                if(searchIndex < 0 || searchIndex > count - 1) {
                    System.out.println("해당 학생은 존재하지 않습니다.");
                    continue;
                }

                Student searchStudent = students[searchIndex];

                System.out.printf("%d번) 이름: %s / 나이: %d살 / 점수: %d점\n",
                        searchNum,
                        searchStudent.getName(),
                        searchStudent.getAge(),
                        searchStudent.getScore());

                break;
            case 4:
                System.out.println("학생 수정입니다.");

                System.out.print("수정할 학생 번호: ");
                int modifyNum = scn.nextInt();
                scn.nextLine();
                int modifyIndex = modifyNum - 1;

                if(modifyIndex < 0 || modifyIndex > count - 1) {
                    System.out.println("해당 학생은 존재하지 않습니다.");
                    continue;
                }

                System.out.print("수정할 학생 이름:");
                String modifyName = scn.nextLine();

                System.out.print("수정할 학생 나이:");
                int modifyAge = scn.nextInt();

                System.out.print("수정할 학생 점수:");
                int modifyScore = scn.nextInt();

                students[modifyIndex] = new Student(modifyName, modifyAge, modifyScore);

                System.out.println("\n" + modifyNum + "번 학생 정보 수정이 완료되었습니다.\n");
                break;
            case 5:
                System.out.println("학생 삭제입니다.");

                System.out.print("삭제할 학생 번호: ");
                int delNum = scn.nextInt(); // 3
                scn.nextLine();
                int delIndex = delNum - 1; // 2

                if(delIndex < 0 || delIndex > count - 1) {
                    System.out.println("해당 학생은 존재하지 않습니다.");
                    continue;
                }

                for (int i = delIndex; i < count; i++) {
                    if (i == MAX_STUDENT_COUNT - 1) {
                        students[i] = null;
                        continue;
                    }
                    students[i] = students[i + 1];
                }
                System.out.println("\n" + delNum + "번 학생 정보가 삭제되었습니다.\n");

                break;
            case 0:
                System.out.println("프로그램을 종료합니다.");
                return;
            default:
                System.out.println("해당 명령어는 존재하지 않습니다.");
        }
    }


} 
}

public class Student {
private String name;
private int age;
private int score;

public Student(String name, int age, int score) {
    this.name = name;
    this.age = age;
    this.score = score;
}

public String getName() {
    return name;
}

public int getAge() {
    return age;
}

public int getScore() {
    return score;
}
}

0개의 댓글