C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(Map實(shí)現(xiàn))
本文實(shí)例為大家分享了C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
1、 作品的功能描述:
實(shí)現(xiàn)一個(gè)學(xué)生信息管理系統(tǒng),通過對學(xué)生信息類中的成員進(jìn)行增、刪、改、查從而實(shí)現(xiàn)對數(shù)據(jù)的操作,除此之外,還可以顯示學(xué)生信息,按分?jǐn)?shù)排序信息,并通過文件的讀入讀出實(shí)現(xiàn)學(xué)生信息的存儲和讀出。
子函數(shù)操作細(xì)節(jié)說明:
(1) 插入學(xué)生信息
通過map容器中的insert()函數(shù)進(jìn)行學(xué)生信息的插入,使用二元組作為參數(shù),first為學(xué)生姓名索引,second為學(xué)生個(gè)人信息類
(2) 刪除學(xué)生信息
使用map中的erase()函數(shù)對學(xué)生信息進(jìn)行刪除,如果學(xué)生存在于map中,刪除成功。
(3) 修改學(xué)生信息
通過map的key值調(diào)用value中的set函數(shù),并調(diào)用information類中打印學(xué)生信息的函數(shù)將學(xué)生信息顯示在程序執(zhí)行窗口中。
(4) 查找學(xué)生信息
通過map中的find()函數(shù)查找該信息是否存在。
(5) 列表顯示學(xué)生信息
自定義一個(gè)for循環(huán),對map進(jìn)行遍歷,輸出map中的每個(gè)成員。
(6) 按分?jǐn)?shù)排序信息
自定義一個(gè)按照數(shù)學(xué)成績由高到低,將map中的每個(gè)成員存入到vector這個(gè)動(dòng)態(tài)數(shù)組中,然后調(diào)用sort()函數(shù)按照自定義的比較順序?qū)W(xué)生信息進(jìn)行排序。
(7) 清空數(shù)據(jù)
調(diào)用map中的clear()函數(shù),清空map容器;
(8) 學(xué)生信息存盤
將學(xué)生信息寫入文件
(9) 讀出信息存盤
讀入之前寫入文件的學(xué)生信息
(10) 關(guān)閉系統(tǒng)
調(diào)用程序后,函數(shù)返回return 0, 程序運(yùn)行結(jié)束。
2、 功能實(shí)現(xiàn)原理:
采用STL庫中的map容器進(jìn)行信息存儲,便于查找和修改信息。
3、代碼:
/* ?? ?為了實(shí)現(xiàn)高效的學(xué)生管理系統(tǒng),主要采用了STL庫中的 map容器來進(jìn)行信息存儲。 ?? ? ?? ?面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)---實(shí)訓(xùn)課程序設(shè)計(jì)? */ #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{ //個(gè)人信息類? ?? ?private: ?? ??? ?string name; //姓名? ?? ??? ?string id; ? //學(xué)號 ? ?? ??? ?string sex;//性別 ?? ??? ?string classname; //課程名 ?? ??? ?string classnumber;//課程號 ?? ??? ?double score; //課程分?jǐn)?shù)? ?? ?public: ?? ??? ?information() {}; //無參構(gòu)造函數(shù)? ?? ??? ?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) {}; //構(gòu)造函數(shù) ?? ? ?? ??? ? ?? ??? ?void printinf() { ?? ??? ??? ?//將字符串對象轉(zhuǎn)化為字符數(shù)組格式化輸出 ?? ??? ??? ?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: ?? ?//創(chuàng)建學(xué)生列表 以姓名作為鍵 ? information作為值 ? 構(gòu)成一組鍵值對進(jìn)行存儲。? ?? ??? ?map<string, information> List; ?? ?public: ?? ??? ?void append(); ?? ??? ?// 添加 ?? ??? ?void delet(); ??? ??? ?// 刪除 ?? ??? ?void change(); ?? ??? ?// 修改 ?? ??? ?void search(); ?? ??? ?// 查找 ?? ??? ?void Sort(); // 排序 ?? ??? ?void printList(); ?? ?// 顯示列表 ?? ??? ?void clear(); ?? ??? ?// 清空數(shù)據(jù) ?? ??? ?void save(); ?? ??? ?// 保存數(shù)據(jù) ?? ??? ?void read(); ?? ??? ?// 讀取信息 ?? ??? ?void close(); ?? ??? ?// 關(guān)閉信息 }; 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() << " " << ?"學(xué)號 ? ? ?" << x.getid() << " " << ?"學(xué)生性別 ? ? ?" << x.getsex() << " ?" << "課程名 ? ? ?" << x.getclassname() << "課程號 ? ? ?"<< x.getclassnumber() << "分?jǐn)?shù) ? ? ?" << x.getscore() << endl; ?? ?} } void Do::append(){ ?? ?string str, str1, str2, str3, str4; ?? ?double str5; ?? ?cout << "請輸入學(xué)生姓名: "; ?? ?cin >> str;?? ? ?? ?cout << "請輸入學(xué)生學(xué)號:"; ?? ?cin >> str1; ?? ?cout << "請輸入學(xué)生性別:"; ?? ?cin >> str2; ?? ?cout << "請輸入課程名: "; ?? ?cin >> str3; ?? ?cout << "請輸入課程號:"; ?? ?cin >> str4; ?? ?cout << "請輸入分?jǐn)?shù):"; ?? ?cin >> str5; ?? ? ?? ?information people = information(str, str1, str2, str3, str4, str5); ?? ?List.insert(pair<string, information>(str, people)); //利用insert進(jìn)行插入 ?? ?cout << "添加成功\n";? }? void Do::delet(){ ?? ?string str; ?? ?cout << "請輸入要?jiǎng)h除的同學(xué)的姓名:"; ?? ?cin >> str; ?? ?List.erase(str) ? printf("刪除成功\n") : printf ("刪除失敗,未找到該同學(xué)\n");? } void Do::change(){ ?? ?string str0, str, str1, str2, str3, str4; ?? ?double str5; ?? ?cout<<"請輸入要修改的學(xué)生姓名:\n"; ?? ?cin>>str0; ?? ?cout<<"請輸入修改后的學(xué)生信息:\n"; ?? ?cout<<"姓名:"; ?? ?cin>>str; ?? ?cout<<"學(xué)號:"; ?? ?cin>>str1; ?? ?cout<<"性別: "; ?? ?cin>>str2; ?? ?cout<<"課程名: "; ?? ?cin >> str3; ?? ?cout << "課程號: "; ?? ?cin >> str4; ?? ?cout << "分?jǐn)?shù): "; ?? ?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<<"修改后該學(xué)生信息為: \n"; ?? ?printf("%-15s%-15s%-15s%-15s\n","name","id","math","chinese"); ?? ?List[str0].printinf();? } void Do::search(){ ?? ?string str; ?? ?cout << "請輸入要查找的學(xué)生姓名: "; ?? ?cin >> str; ?? ?if(List.find(str) != List.end()){ ?? ??? ?cout << "該學(xué)生信息為:\n"; ?? ??? ?List[str].printinf();? ?? ?} ?? ?else cout << "該學(xué)生不在列表中!\n"; } void Do::printList()? { ?? ?if(List.size() <= 0) ?? ?{ ?? ? ?? ?cout << "當(dāng)前列表內(nèi)無任何學(xué)生,請讀取文件內(nèi)信息或添加聯(lián)系人!\n"; ?? ? ?? ?return ; ?? ?} ?? ?cout << "學(xué)生列表:\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<<"當(dāng)前信息內(nèi)無學(xué)生信息, 存盤失??!\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; // 標(biāo)志是否成功讀取文件 ?? ?cout<<"文件內(nèi)容:\n";? ?? ?cout<<"---------------------------------------------------------\n"; ?? ?while(cin>>name>>id>>sex>>classname>>classnumber>>score) { ?? ??? ?List.insert(pair<string, information>(name,information(name,id,sex,classname, classnumber, score))); // 將文件中的學(xué)生存儲到學(xué)生列表中? ?? ??? ?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<<"程序已關(guān)閉\n"; } int main() { ?? ?Do arr;//創(chuàng)建學(xué)生類對象命名為arr ?? ? ?? ?while(1) ?? ?{ ?? ??? ?color(4);//紅色 ?? ??? ?cout << "*歡迎使用學(xué)生信息管理系統(tǒng)*\n\n"; ?? ??? ?color(3);//紅色 ?? ??? ? ?? ??? ?cout<<"?? ??? ??? ??? ??? ? —————學(xué)生信息管理系統(tǒng)—————\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 1.?? ??? ?插入學(xué)生信息 ? ?? ? ? ?|\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 2.?? ??? ?刪除學(xué)生信息 ? ? ? ?|\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 3.?? ??? ?修改學(xué)生信息 ? ? ? ?|\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 4.?? ??? ?查詢學(xué)生信息 ? ? ? ?|\n";?? ? ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 5.?? ??? ?列表顯示學(xué)生信息 ? ?|\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 6.?? ??? ?按分?jǐn)?shù)排序信息?? ? ? ?|\n"; ? ? ? ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 7.?? ??? ?清空數(shù)據(jù) ? ? ? ?? ? ? ?|\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 8.?? ??? ?學(xué)生信息存盤 ? ? ? ?|\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 9.?? ??? ?讀出存盤信息 ? ? ? ?|\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ?| 10.?? ??? ?關(guān)閉系統(tǒng) ? ? ? ? ? ?|\n"; ?? ??? ?cout<<"?? ??? ??? ??? ??? ? ——————————————————\n"; ?? ??? ?color(7);? ?? ??? ?cout<<"請輸入您要使用的功能的對應(yīng)序號(數(shù)字鍵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<<"輸入錯(cuò)誤!請重新輸入!\n"; ?? ??? ??? ??? ?break; ?? ??? ?}?? ? ?? ?}? ?? ?system("pause"); ?? ?return 0;? }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C++實(shí)現(xiàn)簡單職工信息管理系統(tǒng)
- C++學(xué)生信息管理系統(tǒng)
- C++實(shí)現(xiàn)簡單的信息管理系統(tǒng)
- C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- C++實(shí)現(xiàn)景區(qū)信息管理系統(tǒng)
- linux下C/C++學(xué)生信息管理系統(tǒng)
- C++使用文件實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- C++實(shí)現(xiàn)學(xué)生考勤信息管理系統(tǒng)
- C++實(shí)現(xiàn)高校人員信息管理系統(tǒng)
- C++利用鏈表實(shí)現(xiàn)圖書信息管理系統(tǒng)
相關(guān)文章
Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方
這篇文章主要介紹了Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方案,需要的朋友可以參考下2014-10-10C語言詳細(xì)解析有符號數(shù)與無符號數(shù)的表示
我們知道,在C語言中存在無符號數(shù)和有符號數(shù),但是對于計(jì)算機(jī)而言,其本身并不區(qū)別有符號數(shù)和無符號數(shù),因?yàn)樵谟?jì)算機(jī)里面都是O或者1,但是在我們的實(shí)際使用中有時(shí)候需要使用有符號數(shù)來表示一個(gè)整數(shù),因此我們規(guī)定,當(dāng)最高位為1的時(shí),表示為負(fù)數(shù),最高位為0時(shí),表示為正數(shù)2022-04-04C語言中結(jié)構(gòu)體和共用體實(shí)例教程
這篇文章主要給大家介紹了關(guān)于C語言中結(jié)構(gòu)體和共用體的相關(guān)資料,結(jié)構(gòu)體是一種自定義的復(fù)合數(shù)據(jù)類型,共用體也叫聯(lián)合體,使幾個(gè)不同類型的變量共占一段內(nèi)存(相互覆蓋),需要的朋友可以參考下2021-06-06