欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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),通過對學(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Qt實(shí)現(xiàn)蘋果狀態(tài)切換按鈕

    Qt實(shí)現(xiàn)蘋果狀態(tài)切換按鈕

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)蘋果狀態(tài)切換按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 解析C++ 浮點(diǎn)數(shù)的格式化輸出

    解析C++ 浮點(diǎn)數(shù)的格式化輸出

    本篇文章是對C++中浮點(diǎn)數(shù)的格式化輸出進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方案

    Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方

    這篇文章主要介紹了Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方案,需要的朋友可以參考下
    2014-10-10
  • C語言實(shí)現(xiàn)簡單的推箱子游戲

    C語言實(shí)現(xiàn)簡單的推箱子游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單的推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言詳細(xì)解析有符號數(shù)與無符號數(shù)的表示

    C語言詳細(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-04
  • 基于C語言實(shí)現(xiàn)的掃雷游戲代碼

    基于C語言實(shí)現(xiàn)的掃雷游戲代碼

    這篇文章主要介紹了基于C語言實(shí)現(xiàn)的掃雷游戲代碼,對于學(xué)習(xí)游戲開發(fā)的朋友有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • c++ 如何合并兩個(gè)有序鏈表

    c++ 如何合并兩個(gè)有序鏈表

    這篇文章主要介紹了c++ 如何合并兩個(gè)有序鏈表,幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2020-08-08
  • Visual?Studio?2022編譯C++20代碼

    Visual?Studio?2022編譯C++20代碼

    本文主要介紹了Visual?Studio?2022編譯C++20代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • c++野指針的原理以及避免方法

    c++野指針的原理以及避免方法

    這篇文章主要介紹了c++野指針的原理以及避免方法,幫助大家更好的學(xué)習(xí)和理解c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言中結(jié)構(gòu)體和共用體實(shí)例教程

    C語言中結(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

最新評論