PINTIA - 7-4 得分处理 (10 分)

本文介绍了一个C++程序,用于处理学生分数数据。程序能读取不同格式的输入,包括学生信息和分数,然后按要求输出排序后的学生数据和课程平均分。在实现过程中,使用了数据结构如map和set来存储和处理数据,需要注意输入输出的格式要求和特殊情况的处理。
摘要由CSDN通过智能技术生成

7-4 得分处理 (10 分)

一、题干

编写程序来处理学生分数数据。
程序的输入包含以下两种格式之一的文本行:
学生的姓名和学生ID,分别为<student id>, <name>
为一门课程的一名学生评分,为<student id>, <course name>, <marks>
两种格式的示例是:

3190101234, Zhang San
3190101111, Linear Algebra, 89.5

逗号用作每个字段的分隔符,并且永远不会出现在任何字段中。请注意,人名和课程名称有多个词。为了使您的代码更容易,可以将分数视为double
最初不知道学生的人数和课程的数量。开头的行数也不知道。不同格式的行不按顺序显示。一名学生可能不会每门课程都被录取。

您的程序应读入每一行并以.csv格式打印出摘要表。
输出的第一行是表头,包括如下字段:
student id, name, <course name 1>, <course name 2>, ..., average
课程名称是按字母顺序阅读的所有课程。每个逗号后应有一个空格
然后,输出的每一行都是一个学生的数据,按其学生ID的升序排列,并带有每个课程的分数,例如:
3190101234, Zhang San, 85.0, , 89.5, , , 87.3
对于尚未注册的课程,请在逗号前留一个空白,并且不应计入平均值。平均值有一位小数。每个逗号后应有一个空格。
输出的最后一行是每个课程的平均分数的摘要行,例如:
, , 76.2, 87.4, , , 76.8
输出的所有数字(包括平均值)都保留一位小数

输入格式

如上文所述。

输出格式

如上文所述。标准输出是由gcc编译的程序生成的,第一个小数点后一位是“ gcc方式”。

样本输入

3180111435, Operating System, 34.5
3180111430, Linear Algebra, 80
3180111435, Jessie Zhao
3180111430, Zhiwen Yang
3180111430, Computer Architecture, 46.5
3180111434, Linear Algebra, 61.5
3180111434, Anna Teng

样本输出

student id, name, Computer Architecture, Linear Algebra, Operating System, average
3180111430, Zhiwen Yang, 46.5, 80.0, , 63.2
3180111434, Anna Teng, , 61.5, , 61.5
3180111435, Jessie Zhao, , , 34.5, 34.5
, , 46.5, 70.8, 34.5, 50.6
二、注意
  1. 数据分为 name,student_id,course,marks这四部分,个人认为其他数据与name的关系不大。
  2. 对于数据结构的选择,set适合存储课程名,避免重复。map用来存student_id -- name。对于student_id -- courses -- marks更像是一个树状,一个student_id对应多个course,而且每个course都对有一个marks,所以map<x, map<x,x>>这种结构比较合适,但逻辑挺复杂的,尤其是遍历的时候。
  3. 对于输入与输出,可以重点理解题干中的关键字,有几种情况是我第一次做的时候没考虑进去的。
  4. 输出每个数据都必须有一位小数;只有学号和姓名也需要输出;输入的成绩有可能为0;
三、代码
#include <iostream>
#include <string>
#include <map>
#include <set>
#include <iomanip>
using namespace std;

int main()
{
   
    string str_id, str_info;	// str_info : student_id后的字符串
    string str;
    map<string, map<string, double>> id_course;	// id -> course -&
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值