温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中怎么使用Map实现学生信息管理系统

发布时间:2022-06-06 09:38:57 来源:亿速云 阅读:128 作者:iii 栏目:开发技术

本文小编为大家详细介绍“C++中怎么使用Map实现学生信息管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中怎么使用Map实现学生信息管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1、 作品的功能描述:

实现一个学生信息管理系统,通过对学生信息类中的成员进行增、删、改、查从而实现对数据的操作,除此之外,还可以显示学生信息,按分数排序信息,并通过文件的读入读出实现学生信息的存储和读出。

子函数操作细节说明:

(1) 插入学生信息
通过map容器中的insert()函数进行学生信息的插入,使用二元组作为参数,first为学生姓名索引,second为学生个人信息类

(2) 删除学生信息
使用map中的erase()函数对学生信息进行删除,如果学生存在于map中,删除成功。

(3) 修改学生信息
通过map的key值调用value中的set函数,并调用information类中打印学生信息的函数将学生信息显示在程序执行窗口中。

(4) 查找学生信息
通过map中的find()函数查找该信息是否存在。

(5) 列表显示学生信息
自定义一个for循环,对map进行遍历,输出map中的每个成员。

(6) 按分数排序信息
自定义一个按照数学成绩由高到低,将map中的每个成员存入到vector这个动态数组中,然后调用sort()函数按照自定义的比较顺序对学生信息进行排序。

(7) 清空数据
调用map中的clear()函数,清空map容器;

(8) 学生信息存盘
将学生信息写入文件

(9) 读出信息存盘
读入之前写入文件的学生信息

(10) 关闭系统
调用程序后,函数返回return 0, 程序运行结束。

2、 功能实现原理:

采用STL库中的map容器进行信息存储,便于查找和修改信息。

3、代码:

/*
    为了实现高效的学生管理系统,主要采用了STL库中的 map容器来进行信息存储。
    
    面向对象程序设计课程设计---实训课程序设计 
*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map> 
#include <string>
#include <vector>
#include <cstdio> 
#include <windows.h>
using namespace std;

void color(int a)
{
// 更改命令行窗口的颜色
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}

class information{ //个人信息类 
    private:
        string name; //姓名 
        string id;   //学号  
        string sex;//性别
        string classname; //课程名
        string classnumber;//课程号
        double score; //课程分数 
    public:
        information() {}; //无参构造函数 
        information(string s, string s1, string s2, string s3, string s4, double s5) : name(s), id(s1), sex(s2), classname(s3), classnumber(s4), score(s5) {}; //构造函数     
        
        void printinf() {
            //将字符串对象转化为字符数组格式化输出
            printf("%-15s%-15s%-15s%-15s%-15s%-15lf\n", name.c_str(), id.c_str(), sex.c_str(), classname.c_str(), classnumber.c_str(), score);
        }
        //get() set()方法 
        string getname() const{return name;}
        string getid() const{return id;}
        string getsex() const{return sex;}
        string getclassname() const{return classname;}
        string getclassnumber() const{return classnumber;}
        double getscore() const {return score;}
        
        void setname(string str) {name = str;}
        void setid(string str) {id = str;}
        void setsex(string str) {sex = str;}
        void setclassname(string str) {classname = str;}
        void setclassnumber(string str) {classnumber = str;}
        void setscore(double str) {score = str;}
        
};

int cmp(information a, information b)
{
    return a.getscore() > b.getscore();
}


//操作类 
class Do{
    private:
    //创建学生列表 以姓名作为键   information作为值   构成一组键值对进行存储。 
        map<string, information> List;
    public:
        void append();         // 添加
        void delet();          // 删除
        void change();         // 修改
        void search();         // 查找
        void Sort(); // 排序
        void printList();     // 显示列表
        void clear();         // 清空数据
        void save();         // 保存数据
        void read();         // 读取信息
        void close();         // 关闭信息
};

void Do :: Sort()
{
    vector<information> vec;
    for (auto x : List)
    {
        vec.push_back(x.second);
    }

    sort(vec.begin(), vec.end(), cmp);

    for (auto x : vec)
    {
        cout << "姓名      " << x.getname() << " " <<  "学号      " << x.getid() << " " <<  "学生性别      " << x.getsex() << "  " << "课程名      " << x.getclassname() << "课程号      "<< x.getclassnumber() << "分数      " << x.getscore() << endl;
    }

}

void Do::append(){
    string str, str1, str2, str3, str4;
    double str5;
    cout << "请输入学生姓名: ";
    cin >> str;    
    cout << "请输入学生学号:";
    cin >> str1;
    cout << "请输入学生性别:";
    cin >> str2;
    cout << "请输入课程名: ";
    cin >> str3;
    cout << "请输入课程号:";
    cin >> str4;
    cout << "请输入分数:";
    cin >> str5;
    
    information people = information(str, str1, str2, str3, str4, str5);
    List.insert(pair<string, information>(str, people)); //利用insert进行插入
    cout << "添加成功\n"; 
} 

void Do::delet(){
    string str;
    cout << "请输入要删除的同学的姓名:";
    cin >> str;
    List.erase(str) ? printf("删除成功\n") : printf ("删除失败,未找到该同学\n"); 
}

void Do::change(){
    string str0, str, str1, str2, str3, str4;
    double str5;
    cout<<"请输入要修改的学生姓名:\n";
    cin>>str0;
    cout<<"请输入修改后的学生信息:\n";
    cout<<"姓名:";
    cin>>str;
    cout<<"学号:";
    cin>>str1;
    cout<<"性别: ";
    cin>>str2;
    cout<<"课程名: ";
    cin >> str3;
    cout << "课程号: ";
    cin >> str4;
    cout << "分数: ";
    cin >> str5;
    
    List[str0].setname(str);
    List[str0].setid(str1);
    List[str0].setsex(str2);
    List[str0].setclassname(str3);
    List[str0].setclassnumber(str4);
    List[str0].setscore(str5);    
    cout<<"修改后该学生信息为: \n";
    printf("%-15s%-15s%-15s%-15s\n","name","id","math","chinese");
    List[str0].printinf(); 
}

void Do::search(){
    string str;
    cout << "请输入要查找的学生姓名: ";
    cin >> str;
    if(List.find(str) != List.end()){
        cout << "该学生信息为:\n";
        List[str].printinf(); 
    }
    else cout << "该学生不在列表中!\n";
}

void Do::printList() 
{
    if(List.size() <= 0)
    {
         cout << "当前列表内无任何学生,请读取文件内信息或添加联系人!\n";
         return ;
    }
    cout << "学生列表:\n";
    cout<<"---------------------------------------------------------\n";
    printf("%-15s%-15s%-15s%-15s%-15s%-15s\n","name","id","sex","classname", "classnumber", "score");
    for(map<string, information>::iterator it = List.begin(); it!=List.end(); it++) {
        it->second.printinf();
    }
    cout<<"---------------------------------------------------------\n";
}

void Do::clear(){
    List.clear();
    cout << "清空完成!\n";
}

void Do::save(){
    if(this->List.size() > 0){ 
        char fname[50];
        cout<<"请输入文件名:\n";
        cin>>fname; 
        freopen(fname, "w", stdout); //输出重定向到Contacts.txt
        for(map<string, information>::iterator it = List.begin(); it != List.end(); it++) {
            it->second.printinf(); //输出到文件中 
        }
        freopen("CON","w",stdout); //  输出重定向到控制台 
        cout<<"保存完毕\n";
    }
    else
        cout<<"当前信息内无学生信息, 存盘失败!\n"; 
}

void Do::read()
{
    char fname[50];
    cout<<"请输入读取文件名:\n";
    cin>>fname; 
    freopen(fname, "r", stdin); // 输入重定向到Contacts.txt" 
    string name, id, sex, classname, classnumber;
    double score; 
    int flag = 0; // 标志是否成功读取文件
    cout<<"文件内容:\n"; 
    cout<<"---------------------------------------------------------\n";
    while(cin>>name>>id>>sex>>classname>>classnumber>>score) {
        List.insert(pair<string, information>(name,information(name,id,sex,classname, classnumber, score))); // 将文件中的学生存储到学生列表中 
        cout<<name<<" "<<id<<" "<<sex<<" "<<classname << " " << classnumber << " " << score <<endl;
        flag = 1; 
    }    
    cout<<"---------------------------------------------------------\n";
    flag ? cout<<"读取完毕\n" : cout<<"文件为空,读取失败!\n"; 
    freopen("CON","r",stdin);  // 输入重定向到控制台 
}
void Do::close() {
    cout<<"程序已关闭\n";
}

int main()
{
    Do arr;//创建学生类对象命名为arr
    
    while(1)
    {
        color(4);//红色
        cout << "*欢迎使用学生信息管理系统*\n\n";
        color(3);//红色
        
        cout<<"                     —————学生信息管理系统—————\n";
        cout<<"                    | 1.        插入学生信息           |\n";
        cout<<"                    | 2.        删除学生信息        |\n";
        cout<<"                    | 3.        修改学生信息        |\n";
        cout<<"                    | 4.        查询学生信息        |\n";    
        cout<<"                    | 5.        列表显示学生信息    |\n";
        cout<<"                    | 6.        按分数排序信息        |\n";      
        cout<<"                    | 7.        清空数据               |\n";
        cout<<"                    | 8.        学生信息存盘        |\n";
        cout<<"                    | 9.        读出存盘信息        |\n";
        cout<<"                    | 10.        关闭系统            |\n";
        cout<<"                     ——————————————————\n";
        color(7); 
        cout<<"请输入您要使用的功能的对应序号(数字键1~9):\n";
        int n;
        cin.clear();
        cin>>n;
        switch(n) {//功能选择 
            case 1:
                arr.append();
                break;
            case 2:
                arr.delet();
                break;
            case 3:
                arr.change();
                break;
            case 4:
                arr.search();
                break;
            case 5:
                arr.printList();
                break;
            case 6:
                arr.Sort();
                break;    
            case 7:
                arr.clear();
                break;
            case 8:
                arr.save();
                break;
            case 9:
                arr.read();
                break;
            case 10:
                arr.close();
                return 0;
                break;
            default:
                cout<<"输入错误!请重新输入!\n";
                break;
        }    
    } 
    system("pause");
    return 0; 
}

读到这里,这篇“C++中怎么使用Map实现学生信息管理系统”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI