关于c++的一道问题

img

img


根据代码,写出STL应用在学生管理系统上,记得写解析,通俗易懂点

STL容器增删改查?
参考:

#include <iostream>
#include <map>
#include <vector>
using namespace std;
class CStudent
{
private:
    int nID;//学号
    string strName;//学生姓名
    map<int, double> mapScores; //各科成绩,<课程号,成绩>
public:
    CStudent(int _nID, string _strName)
    {
        nID = _nID;
        strName = _strName;
    }
    void setID(int _nID)
    {
        nID = _nID;
    }
    int getID()
    {
        return nID;
    }
    void setName(string _name)
    {
        strName = _name;
    }
    string getName()
    {
        return strName;
    }
    map<int, double> getScores()
    {
        return mapScores;
    }
    void insertScore(int cno, double score)  // Add a course score
    {
        map<int, double>::iterator it = mapScores.find(cno);
        if (it != mapScores.end())
        {
            mapScores.erase(it);
        }
        mapScores.insert(pair<int, double>(cno, score));
    }
    void eraseScore(int cno)     // Delete a course score
    {
        map<int, double>::iterator it = mapScores.find(cno);
        if (it != mapScores.end())
        {
            mapScores.erase(it);
        }
    }
    void display()     // Output student nID, strName, and all course scores 
    {
        cout << nID << "\t" << strName << "\t";
        map<int, double>::iterator it = mapScores.begin();
        for (; it != mapScores.end(); it++)
            cout << it->first << ":" << it->second << " ";
        cout << endl;
    }

};


//新增
void addStudent(vector<CStudent>& vStus)
{
    int id;
    string name;
    cout << "请输入学生学号:";
    cin >> id;
    cout << "请输入学生姓名:";
    cin >> name;
    CStudent s(id, name);
    int cno, n;
    double score;
    cout << "请输入该学生成绩个数:";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cout << "请输入第" << i + 1 << "门课程的课程号及成绩:";
        cin >> cno >> score;
        s.insertScore(cno, score);
    }
    cout << "插入成功!" << endl;
    vStus.push_back(s);
}

//删除
void deleteStudent(vector<CStudent>& vStus)
{
    int id;
    cout << "请输入需要删除的学生的学号:";
    cin >> id;
    vector<CStudent>::iterator it = vStus.begin();
    for (; it != vStus.end(); it++)
    {
        if (id == (*it).getID())
        {
            vStus.erase(it);
            cout << "成功删除该学生信息!" << endl;
            return;
        }
    }
    cout << "未找到该学生信息!" << endl;
}


//改
void modStudent(vector<CStudent>& vStus)
{
    int id;
    string name;
    int cno;
    double score;
    char ch;
    cout << "请输入要修改信息的学生学号:";
    cin >> id;
    cin.get(); //吸收回车符
    vector<CStudent>::iterator it = vStus.begin();
    for( ; it != vStus.end(); it++)
    {
        if (id == (*it).getID())
        {
            cout << "是否修改姓名(Y/N)?";
            ch = cin.get();
            if (ch == 'y' || ch == 'Y')
            {
                cout << "请输入新姓名:";
                cin >> name;
                (*it).setName(name);
                cin.get();
            }
            cout << "是否修改成绩(Y/N)?";
            ch = cin.get();
            if (ch == 'y' || ch == 'Y')
            {
                cout << "请输入要修改的成绩个数:";
                int n;
                cin >> n;
                for (int k = 0; k < n; k++)
                {
                    cout << "请输入要修改的课程号及成绩:";
                    cin >> cno >> score;
                    (*it).insertScore(cno, score); //如果已经存在,则修改,否则直接插入
                }
                cin.get(); //吸收回车符
            }
            cout << "修改成功!" << endl;
            return;
        }
        
    }
    cout << "未找到该学生信息!" << endl;
}

//查
void searchStudent(vector<CStudent> vStus)
{
    int nId;
    cout << "请输入要查找的学生学号:";
    cin >> nId;
    vector<CStudent>::iterator it = vStus.begin();
    for (; it != vStus.end(); it++)
    {
        if (nId == (*it).getID())
        {
            (*it).display();
            return;
        }
    }
    cout << "未找到该学生信息!" << endl;
}

//显示全部
void showAllStudents(vector<CStudent> vStus)
{
    vector<CStudent>::iterator it = vStus.begin();
    for (; it != vStus.end(); it++)
        (*it).display();
}


int main()
{
    int op;
    vector<CStudent> vStus;
    while (1)
    {
        system("cls"); //清屏
        cout << "1.新增学生信息" << endl;
        cout << "2.删除学生信息" << endl;
        cout << "3.修改学生信息" << endl;
        cout << "4.查找学生信息" << endl;
        cout << "5.显示所有学生信息" << endl;
        cout << "0.退出" << endl;
        cout << "请选择:";
        cin >> op;
        switch (op)
        {
        case 0:
            return 0;
        case 1:
            addStudent(vStus);
            break;
        case 2:
            deleteStudent(vStus);
            break;
        case 3:
            modStudent(vStus);
            break;
        case 4:
            searchStudent(vStus);
            break;
        case 5:
            showAllStudents(vStus);
            break;
        default:
            break;
        }
        system("pause");
    }
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632