【深基17.例6】学籍管理

题目描述

您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 【洛谷 P5266】【深基17.例6】学籍管理 题解(映射+分支)_字符串 条):

  • 插入与修改,格式1 NAME SCORE:在系统中插入姓名为 NAME(由字母和数字组成不超过 20 个字符的字符串,区分大小写) ,分数为 【洛谷 P5266】【深基17.例6】学籍管理 题解(映射+分支)_字符串_02【洛谷 P5266】【深基17.例6】学籍管理 题解(映射+分支)_ci_03) 的学生。如果已经有同名的学生则更新这名学生的成绩为 SCORE。如果成功插入或者修改则输出OK
  • 查询,格式2 NAME:在系统中查询姓名为 NAME 的学生的成绩。如果没能找到这名学生则输出Not found,否则输出该生成绩。
  • 删除,格式3 NAME:在系统中删除姓名为 NAME 的学生信息。如果没能找到这名学生则输出Not found,否则输出Deleted successfully
  • 汇总,格式4:输出系统中学生数量。

输入格式

输出格式

样例 #1

样例输入 #1

5
1 lxl 10
2 lxl
3 lxl
2 lxl
4

样例输出 #1

OK
10
Deleted successfully
Not found
0

思路

使用一个 map<string, int> 类型的容器 m,用来存储学生的姓名和成绩。

在插入学生信息时,直接使用 map 的 [] 操作符将姓名和成绩插入即可。

在查询学生成绩时,使用 map 的 count 函数判断学生是否存在,如果存在则输出成绩,否则输出 Not found。

在删除学生信息时,同样使用 map 的 count 函数判断学生是否存在,如果存在则使用 map 的 erase 函数删除,否则输出 Not found。

在查询学生数量时,直接使用 map 的 size 函数获取 map 中元素数量即可。


AC代码

#include <iostream>
#include <map>
#define AUTHOR "HEX9CF"
using namespace std;

int main()
{
    int n;
    map<string, int> m;
    cin >> n;
    while (n--)
    {
        int op;
        string name;
        int score;
        cin >> op;
        switch (op)
        {
        case 1:
            cin >> name >> score;
            m[name] = score;
            cout << "OK" << endl;
            break;
        case 2:
            cin >> name;
            if (m.count(name))
            {
                cout << m[name] << endl;
            }
            else
            {
                cout << "Not found" << endl;
            }
            break;
        case 3:
            cin >> name;
            if (m.count(name))
            {
                m.erase(name);
                cout << "Deleted successfully" << endl;
            }
            else
            {
                cout << "Not found" << endl;
            }
            break;
        case 4:
            cout << m.size() << endl;
            break;
        }
    }
    return 0;
}