Menu
Coddy logo textTech

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

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

challenge icon

Задание

Легко

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

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

  • student.dart: Определите класс Student, который управляет академическими записями с использованием надлежащей инкапсуляции:
    • final String id — идентификатор студента не должен меняться после создания
    • Публичное поле String name — имена могут обновляться
    • Приватный список List<int> _grades — необработанный список оценок должен быть защищен
    • Конструктор, который принимает id, name и начальный список оценок
    • Геттер gradeCount, который возвращает количество записанных оценок
    • Вычисляемый геттер average, который вычисляет и возвращает среднее значение всех оценок в виде double (возвращает 0.0, если оценок нет)
    • Вычисляемый геттер letterGrade, который возвращает букву на основе среднего балла: 'A' для 90+, 'B' для 80-89, 'C' для 70-79, 'D' для 60-69 и 'F' для оценок ниже 60
    • Метод addGrade(int grade), который принимает только оценки от 0 до 100 (включительно). Если оценка валидна, добавьте её и выведите Grade [grade] added for [name]. Если невалидна, выведите Invalid grade: [grade]
    • Метод getHighestGrade(), который возвращает самую высокую оценку или 0, если оценок нет
    • Метод displayRecord(), который показывает академическую сводку студента
  • main.dart: Импортируйте ваш класс студента и продемонстрируйте инкапсуляцию в действии:
    • Создайте студента с id 'STU001', именем 'Emma' и начальными оценками [85, 92, 78]
    • Вызовите displayRecord()
    • Добавьте оценку 95
    • Попробуйте добавить невалидную оценку 150
    • Добавьте оценку 88
    • Вызовите displayRecord()
    • Выведите Highest grade: [highest]

Метод displayRecord() должен выводить данные в следующем формате:

===== Student Record =====
ID: [id]
Name: [name]
Grades Recorded: [gradeCount]
Average: [average]
Letter Grade: [letterGrade]

Ожидаемый вывод:

===== Student Record =====
ID: STU001
Name: Emma
Grades Recorded: 3
Average: 85.0
Letter Grade: B
Grade 95 added for Emma
Invalid grade: 150
Grade 88 added for Emma
===== Student Record =====
ID: STU001
Name: Emma
Grades Recorded: 5
Average: 87.6
Letter Grade: B
Highest grade: 95

Попробуйте сами

import 'student.dart';

void main() {
  // TODO: Создайте студента с id 'STU001', именем 'Emma' и начальными оценками [85, 92, 78]
  
  // TODO: Вызовите displayRecord()
  
  // TODO: Добавьте оценку 95
  
  // TODO: Попробуйте добавить недопустимую оценку 150
  
  // TODO: Добавьте оценку 88
  
  // TODO: Вызовите displayRecord()
  
  // TODO: Выведите "Highest grade: [highest]"
}

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