요약 - 학생 기록
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 35번째.
챌린지
쉬움이 장에서 배운 모든 캡슐화 기술을 결합한 학생 기록 시스템을 구축해 봅시다. 학생 데이터가 적절하게 보호되고, 성적이 검증되며, 생성 후 특정 정보가 변경되지 않도록 유지되는 안전한 시스템을 만들 것입니다.
코드는 두 개의 파일로 구성됩니다:
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의 마스킹된 버전만 노출하고 있음에 유의하세요!
- 공개적으로 접근 가능하지만 생성 중에만 설정할 수 있는
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}
}
}