挑战:成绩排序器
本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 63 课,共 65 课。
挑战
简单创建一个全面的学生成绩管理系统,用于处理映射中的学生数据、筛选通过考试的学生,并按字母顺序排列他们。这个挑战结合了映射遍历、条件筛选、列表操作和排序。
你会收到以下输入:
- 一个 JSON 字符串,表示学生姓名(键)和考试分数(值)的映射
JSON 字符串的格式如下:{"Alice": 85, "Bob": 45, "Charlie": 92, "Diana": 58, "Eve": 76, "Frank": 39, "Grace": 88}
你的任务是:
- 使用恰当的 Dart 方法,将 JSON 字符串解析为 Map
- 创建一个名为
passingStudents的空列表,用于存储通过考试的学生姓名 - 遍历映射,并将分数达到 60 或更高的学生姓名添加到
passingStudents列表中 - 使用
sort()方法,按字母顺序对passingStudents列表排序 - 按照指定格式打印参加考试的学生总人数:
Total students: X - 按照指定格式打印通过考试的学生人数:
Students who passed: X - 按照指定格式打印未通过考试的学生人数:
Students who failed: X - 按字母顺序打印通过考试的学生,每人占一行,并使用指定格式:
Passing student: [name] - 如果没有学生通过考试,则打印:
No students passed the exam
你的程序应展示如何正确遍历映射、使用条件逻辑根据 60 分的及格线筛选数据、操作列表以及进行排序。输出必须符合上面指定的格式,并按字母顺序列出通过考试的学生。
亲手试试
import 'dart:io';
import 'dart:convert';
void main() {
// 读取输入的 JSON 字符串
String? jsonString = stdin.readLineSync();
// 将 JSON 字符串解析为 Map
Map<String, dynamic> studentGrades = jsonDecode(jsonString!);
// 创建一个空列表,用于存储及格的学生
List<String> passingStudents = [];
// TODO:在下方编写你的代码
// 1. 遍历 Map,筛选出成绩达到 60 分或以上的学生
// 2. 将及格学生的姓名添加到 passingStudents 列表
// 3. 按字母顺序排列 passingStudents 列表
// 4. 计算并输出所需的统计结果
// 5. 按指定格式输出及格学生
// 输出结果(替换为你的实现)
print("Total students: ");
print("Students who passed: ");
print("Students who failed: ");
// 输出及格学生或 "No students passed the exam" 消息
}逻辑与流程控制中的所有课
自己练习: Dart 在线编译器