Menu
CoddyTech

复习:学生记录

本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 35 课,共 110 课。

challenge icon

挑战

简单

让我们构建一个学生成绩记录系统,将你在本章学到的所有封装概念结合起来。你将创建一个 Student 类,妥善保护敏感的学业数据,同时通过 getter、setter 和计算属性提供受控访问。

你将把代码分成两个文件:

  • student.dart:定义一个 Student 类,通过适当的封装管理学业记录:
    • final String id:创建后,学生 ID 不应再改变
    • 公开的 String name:姓名可以更新
    • 私有的 List<int> _grades:原始成绩列表应受到保护
    • 一个接收 id、name 和初始成绩列表的构造函数
    • 一个 getter gradeCount,用于返回已记录的成绩数量
    • 一个计算 getter average,用于计算并返回所有成绩的平均值,类型为 double(如果没有成绩,则返回 0.0)
    • 一个计算 getter letterGrade,根据平均分返回等级:90 及以上返回 'A',80-89 返回 'B',70-79 返回 'C',60-69 返回 'D',低于 60 返回 'F'
    • 一个方法 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',name 为 'Emma',初始成绩为 [85, 92, 78]
  
  // TODO: 调用 displayRecord()
  
  // TODO: 添加成绩 95
  
  // TODO: 尝试添加无效成绩 150
  
  // TODO: 添加成绩 88
  
  // TODO: 调用 displayRecord()
  
  // TODO: 打印 "Highest grade: [highest]"
}

面向对象编程中的所有课

自己练习: Dart 在线编译器