首頁 > 軟體

C++實現學生資訊管理系統(Map實現)

2022-06-05 14:00:43

本文範例為大家分享了C++實現學生資訊管理系統的具體程式碼,供大家參考,具體內容如下

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%-15lfn", 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%-15sn","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%-15sn","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 << "*歡迎使用學生資訊管理系統*nn";
        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; 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com