您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C++中怎么使用Map實現學生信息管理系統”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++中怎么使用Map實現學生信息管理系統”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
實現一個學生信息管理系統,通過對學生信息類中的成員進行增、刪、改、查從而實現對數據的操作,除此之外,還可以顯示學生信息,按分數排序信息,并通過文件的讀入讀出實現學生信息的存儲和讀出。
子函數操作細節說明:
(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, 程序運行結束。
采用STL庫中的map容器進行信息存儲,便于查找和修改信息。
/* 為了實現高效的學生管理系統,主要采用了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實現學生信息管理系統”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。