c/c++开发分享C++实现学生信息管理系统(Map实现)实例为大家分享了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; }
以上就是c/c++开发分享C++实现学生信息管理系统(Map实现)的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。
需要了解更多c/c++开发分享C++实现学生信息管理系统(Map实现),都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/1238118.html