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、代码:
#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;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341