复习:学生记录
本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 35 课,共 110 课。
挑战
简单让我们构建一个学生成绩记录系统,将你在本章学到的所有封装概念结合起来。你将创建一个 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]
- 创建一名学生,id 为
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 在线编译器