Menu
Coddy logo textTech

요약 - 학생 기록

Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 35번째.

challenge icon

챌린지

쉬움

이 장에서 배운 모든 캡슐화 기술을 결합한 학생 기록 시스템을 구축해 봅시다. 학생 데이터가 적절하게 보호되고, 성적이 검증되며, 생성 후 특정 정보가 변경되지 않도록 유지되는 안전한 시스템을 만들 것입니다.

코드는 두 개의 파일로 구성됩니다:

  • Student.cs: Records 네임스페이스에 적절한 캡슐화를 보여주는 Student 클래스를 생성합니다. 학생 클래스는 다음을 포함해야 합니다:
    • 공개적으로 접근 가능하지만 생성 중에만 설정할 수 있는 readonly 필드 Name (string)
    • 학생 ID(string)를 위한 프라이빗 readonly 필드 - 외부에서 직접 접근할 수 없어야 합니다.
    • 성적(정수)을 저장하기 위한 프라이빗 리스트
    • 모든 성적의 평균을 계산하여 반환하거나, 성적이 없는 경우 0을 반환하는 공개 읽기 전용 속성 Average
    • 0에서 100 사이(포함)의 성적만 허용하는 공개 메서드 AddGrade(int grade) - 유효하지 않은 성적은 자동으로 무시되어야 합니다.
    • 기록된 유효한 성적의 개수를 반환하는 공개 메서드 GetGradeCount()
    • "{Name} (ID: {last 4 characters of student ID})" 형식의 문자열을 반환하는 공개 메서드 GetStudentInfo() - ID의 마스킹된 버전만 노출하고 있음에 유의하세요!
    생성자는 이름과 학생 ID를 순서대로 받아야 합니다.
  • Program.cs: 메인 파일에서 학생을 생성하고 여러 성적을 추가하여 캡슐화가 어떻게 작동하는지 보여줍니다. 유효한 성적은 수락되고, 유효하지 않은 성적은 거부되며, 평균이 올바르게 계산되는지 확인합니다.

다섯 개의 입력을 받게 됩니다:

  • 학생 이름
  • 학생 ID (최소 4자 이상)
  • 추가할 첫 번째 성적 (정수)
  • 추가할 두 번째 성적 (정수, -5 또는 150과 같이 유효하지 않을 수 있음)
  • 추가할 세 번째 성적 (정수)

출력은 다음 형식으로 인쇄하십시오:

{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}

예를 들어, 입력값이 Emma Wilson, STU12345, 85, 150, 90인 경우 출력은 다음과 같아야 합니다:

Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5

유효하지 않은 성적인 150이 자동으로 거부되어 두 개의 성적만 기록된 방식에 주목하세요. 학생 ID는 보호됩니다. 외부 코드는 전체 ID를 볼 수 없으며, GetStudentInfo()를 통한 마스킹된 버전만 볼 수 있습니다. 이름은 읽을 수 있지만 변경할 수는 없습니다. 이것이 바로 견고하고 잘 보호된 클래스를 만들기 위해 함께 작동하는 캡슐화입니다!

직접 해보기

using System;
using Records;

class Program
{
    public static void Main(string[] args)
    {
        // 입력 읽기
        string name = Console.ReadLine();
        string studentId = Console.ReadLine();
        int grade1 = Convert.ToInt32(Console.ReadLine());
        int grade2 = Convert.ToInt32(Console.ReadLine());
        int grade3 = Convert.ToInt32(Console.ReadLine());

        // TODO: name과 studentId를 사용하여 Student 객체 생성

        // TODO: AddGrade 메서드를 사용하여 세 개의 성적 모두 추가

        // TODO: 요구되는 형식으로 출력물 인쇄:
        // {GetStudentInfo() 결과}
        // 기록된 성적: {GetGradeCount()}
        // 평균: {Average}
    }
}

객체 지향 프로그래밍의 모든 레슨