Menu
Coddy logo textTech

Итоги — Записи студентов

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 35 из 70.

challenge icon

Задание

Легко

Давайте создадим систему учета студентов, которая объединит все техники инкапсуляции, изученные вами в этой главе. Вы создадите безопасную систему, в которой данные студентов надежно защищены, оценки проходят валидацию, а определенная информация остается неизменной после создания.

Вы организуете свой код в двух файлах:

  • Student.cs: Создайте класс Student в пространстве имен Records, который демонстрирует правильную инкапсуляцию. У вашего студента должны быть:
    • Поле readonly с именем Name (string), которое общедоступно, но может быть установлено только во время создания объекта.
    • Приватное поле readonly для идентификатора студента (string) — оно никогда не должно быть доступно напрямую извне.
    • Приватный список для хранения оценок (целых чисел).
    • Публичное свойство только для чтения Average, которое вычисляет и возвращает среднее значение всех оценок или 0, если оценок нет.
    • Публичный метод AddGrade(int grade), который принимает только оценки от 0 до 100 (включительно) — некорректные оценки должны молча игнорироваться.
    • Публичный метод GetGradeCount(), который возвращает количество записанных валидных оценок.
    • Публичный метод GetStudentInfo(), который возвращает строку в формате "{Name} (ID: {last 4 characters of student ID})" — обратите внимание, что вы предоставляете только маскированную версию 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: Создайте объект Student с name и studentId

        // TODO: Добавьте все три оценки, используя метод AddGrade

        // TODO: Выведите результат в требуемом формате:
        // {результат GetStudentInfo()}
        // Записано оценок: {GetGradeCount()}
        // Средний балл: {Average}
    }
}

Все уроки раздела Объектно-ориентированное программирование