最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(Map實(shí)現(xiàn))

 更新時(shí)間:2022年06月05日 09:04:21   作者:Charming Boy  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

1、 作品的功能描述:

實(shí)現(xiàn)一個(gè)學(xué)生信息管理系統(tǒng),通過(guò)對(duì)學(xué)生信息類中的成員進(jìn)行增、刪、改、查從而實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作,除此之外,還可以顯示學(xué)生信息,按分?jǐn)?shù)排序信息,并通過(guò)文件的讀入讀出實(shí)現(xiàn)學(xué)生信息的存儲(chǔ)和讀出。

子函數(shù)操作細(xì)節(jié)說(shuō)明:

(1) 插入學(xué)生信息
通過(guò)map容器中的insert()函數(shù)進(jìn)行學(xué)生信息的插入,使用二元組作為參數(shù),first為學(xué)生姓名索引,second為學(xué)生個(gè)人信息類

(2) 刪除學(xué)生信息
使用map中的erase()函數(shù)對(duì)學(xué)生信息進(jìn)行刪除,如果學(xué)生存在于map中,刪除成功。

(3) 修改學(xué)生信息
通過(guò)map的key值調(diào)用value中的set函數(shù),并調(diào)用information類中打印學(xué)生信息的函數(shù)將學(xué)生信息顯示在程序執(zhí)行窗口中。

(4) 查找學(xué)生信息
通過(guò)map中的find()函數(shù)查找該信息是否存在。

(5) 列表顯示學(xué)生信息
自定義一個(gè)for循環(huán),對(duì)map進(jìn)行遍歷,輸出map中的每個(gè)成員。

(6) 按分?jǐn)?shù)排序信息
自定義一個(gè)按照數(shù)學(xué)成績(jī)由高到低,將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庫(kù)中的map容器進(jìn)行信息存儲(chǔ),便于查找和修改信息。

3、代碼:

/*
?? ?為了實(shí)現(xiàn)高效的學(xué)生管理系統(tǒng),主要采用了STL庫(kù)中的 map容器來(lái)進(jìn)行信息存儲(chǔ)。
?? ?
?? ?面向?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é)號(hào) ?
?? ??? ?string sex;//性別
?? ??? ?string classname; //課程名
?? ??? ?string classnumber;//課程號(hào)
?? ??? ?double score; //課程分?jǐn)?shù)?
?? ?public:
?? ??? ?information() {}; //無(wú)參構(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() {
?? ??? ??? ?//將字符串對(duì)象轉(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)成一組鍵值對(duì)進(jìn)行存儲(chǔ)。?
?? ??? ?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é)號(hào) ? ? ?" << x.getid() << " " << ?"學(xué)生性別 ? ? ?" << x.getsex() << " ?" << "課程名 ? ? ?" << x.getclassname() << "課程號(hào) ? ? ?"<< x.getclassnumber() << "分?jǐn)?shù) ? ? ?" << x.getscore() << endl;
?? ?}

}

void Do::append(){
?? ?string str, str1, str2, str3, str4;
?? ?double str5;
?? ?cout << "請(qǐng)輸入學(xué)生姓名: ";
?? ?cin >> str;?? ?
?? ?cout << "請(qǐng)輸入學(xué)生學(xué)號(hào):";
?? ?cin >> str1;
?? ?cout << "請(qǐng)輸入學(xué)生性別:";
?? ?cin >> str2;
?? ?cout << "請(qǐng)輸入課程名: ";
?? ?cin >> str3;
?? ?cout << "請(qǐng)輸入課程號(hào):";
?? ?cin >> str4;
?? ?cout << "請(qǐng)輸入分?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 << "請(qǐng)輸入要?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<<"請(qǐng)輸入要修改的學(xué)生姓名:\n";
?? ?cin>>str0;
?? ?cout<<"請(qǐng)輸入修改后的學(xué)生信息:\n";
?? ?cout<<"姓名:";
?? ?cin>>str;
?? ?cout<<"學(xué)號(hào):";
?? ?cin>>str1;
?? ?cout<<"性別: ";
?? ?cin>>str2;
?? ?cout<<"課程名: ";
?? ?cin >> str3;
?? ?cout << "課程號(hào): ";
?? ?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 << "請(qǐng)輸入要查找的學(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)無(wú)任何學(xué)生,請(qǐng)讀取文件內(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<<"請(qǐng)輸入文件名:\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); // ?輸出重定向到控制臺(tái)?
?? ??? ?cout<<"保存完畢\n";
?? ?}
?? ?else
?? ??? ?cout<<"當(dāng)前信息內(nèi)無(wú)學(xué)生信息, 存盤失??!\n";?
}

void Do::read()
{
?? ?char fname[50];
?? ?cout<<"請(qǐng)輸入讀取文件名:\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é)生存儲(chǔ)到學(xué)生列表中?
?? ??? ?cout<<name<<" "<<id<<" "<<sex<<" "<<classname << " " << classnumber << " " << score <<endl;
?? ??? ?flag = 1;?
?? ?}?? ?
?? ?cout<<"---------------------------------------------------------\n";
?? ?flag ? cout<<"讀取完畢\n" : cout<<"文件為空,讀取失敗!\n";?
?? ?freopen("CON","r",stdin); ?// 輸入重定向到控制臺(tái)?
}
void Do::close() {
?? ?cout<<"程序已關(guān)閉\n";
}

int main()
{
?? ?Do arr;//創(chuàng)建學(xué)生類對(duì)象命名為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<<"請(qǐng)輸入您要使用的功能的對(duì)應(yīng)序號(hào)(數(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ò)誤!請(qǐng)重新輸入!\n";
?? ??? ??? ??? ?break;
?? ??? ?}?? ?
?? ?}?
?? ?system("pause");
?? ?return 0;?
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c++ vector造成的內(nèi)存泄漏問(wèn)題

    c++ vector造成的內(nèi)存泄漏問(wèn)題

    這篇文章主要介紹了c++ vector造成的內(nèi)存泄漏問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言超詳細(xì)解析函數(shù)棧幀

    C語(yǔ)言超詳細(xì)解析函數(shù)棧幀

    在C語(yǔ)言中,每一個(gè)正在運(yùn)行的函數(shù)都有一個(gè)棧幀與其對(duì)應(yīng),棧幀中存儲(chǔ)的是該函數(shù)的返回地址和局部變量。從邏輯上講,棧幀就是一個(gè)函數(shù)執(zhí)行的環(huán)境:函數(shù)參數(shù)、函數(shù)的局部變量、函數(shù)執(zhí)行完后返回到哪里等等
    2022-03-03
  • C++中的幾種排序算法

    C++中的幾種排序算法

    這篇文章主要介紹了C++中的幾種排序算法,需要的朋友可以參考下
    2014-02-02
  • 如何基于C語(yǔ)言socket編程實(shí)現(xiàn)TCP通信

    如何基于C語(yǔ)言socket編程實(shí)現(xiàn)TCP通信

    本文介紹了如何基于C語(yǔ)言socket編程實(shí)現(xiàn)TCP通信,下面小編來(lái)簡(jiǎn)單介紹下
    2019-05-05
  • 淺析C語(yǔ)言中的內(nèi)存布局

    淺析C語(yǔ)言中的內(nèi)存布局

    以下是對(duì)C語(yǔ)言中的內(nèi)存布局進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • C++中繼承與組合的區(qū)別詳細(xì)解析

    C++中繼承與組合的區(qū)別詳細(xì)解析

    C++的“繼承”特性可以提高程序的可復(fù)用性。正因?yàn)椤袄^承”太有用、太容易用,才要防止亂用“繼承”
    2013-09-09
  • c++ 中vector 常見用法

    c++ 中vector 常見用法

    這篇文章主要給大家分享的是c++ 中vector 常見用法,,vector有兩個(gè)參數(shù),一個(gè)是size,表示當(dāng)前vector容器內(nèi)存儲(chǔ)的元素個(gè)數(shù),一個(gè)是capacity,表示當(dāng)前vector在內(nèi)存中申請(qǐng)的這片區(qū)域所能容納的元素個(gè)數(shù),下面來(lái)看看文章的詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • C語(yǔ)言之關(guān)于二維數(shù)組在函數(shù)中的調(diào)用問(wèn)題

    C語(yǔ)言之關(guān)于二維數(shù)組在函數(shù)中的調(diào)用問(wèn)題

    這篇文章主要介紹了C語(yǔ)言之關(guān)于二維數(shù)組在函數(shù)中的調(diào)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Qt服務(wù)應(yīng)用操作之JSON文件操作方法

    Qt服務(wù)應(yīng)用操作之JSON文件操作方法

    在Qt框架中,處理JSON數(shù)據(jù)包括解析、生成、保存和讀取文件等操作,本文詳細(xì)介紹了這些操作的關(guān)鍵類和方法,如QJsonDocument、QJsonObject、QJsonArray等,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Qt串口通信開發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法

    Qt串口通信開發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法

    這篇文章主要介紹了Qt串口通信開發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法,需要的朋友可以參考下
    2020-03-03

最新評(píng)論

高要市| 渝北区| 天台县| 威信县| 慈利县| 乳山市| 华容县| 天气| 石渠县| 高陵县| 苏尼特左旗| 鄂托克前旗| 陕西省| 万荣县| 屯留县| 东丰县| 应城市| 益阳市| 专栏| 靖江市| 桃源县| 江山市| 阜城县| 扶沟县| 玉屏| 岢岚县| 慈利县| 景德镇市| 建昌县| 台安县| 永仁县| 宁强县| 镇赉县| 渝中区| 广丰县| 开阳县| 北安市| 天津市| 文昌市| 阿克陶县| 宝清县|