Menu
CoddyTech

挑战:成绩排序器

本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 63 课,共 65 课。

challenge icon

挑战

简单

创建一个全面的学生成绩管理系统,用于处理映射中的学生数据、筛选通过考试的学生,并按字母顺序排列他们。这个挑战结合了映射遍历、条件筛选、列表操作和排序。

你会收到以下输入:

  • 一个 JSON 字符串,表示学生姓名(键)和考试分数(值)的映射

JSON 字符串的格式如下:{"Alice": 85, "Bob": 45, "Charlie": 92, "Diana": 58, "Eve": 76, "Frank": 39, "Grace": 88}

你的任务是:

  1. 使用恰当的 Dart 方法,将 JSON 字符串解析为 Map
  2. 创建一个名为 passingStudents 的空列表,用于存储通过考试的学生姓名
  3. 遍历映射,并将分数达到 60 或更高的学生姓名添加到 passingStudents 列表中
  4. 使用 sort() 方法,按字母顺序对 passingStudents 列表排序
  5. 按照指定格式打印参加考试的学生总人数:Total students: X
  6. 按照指定格式打印通过考试的学生人数:Students who passed: X
  7. 按照指定格式打印未通过考试的学生人数:Students who failed: X
  8. 按字母顺序打印通过考试的学生,每人占一行,并使用指定格式:Passing student: [name]
  9. 如果没有学生通过考试,则打印: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 在线编译器