当前位置:首页 > 开发教程 > C语言 >

C++实现学生信息管理系统(Map实现)

时间:2022-06-05 12:29 来源:未知 作者:人一定要靠自己 收藏

这篇文章主要为大家详细介绍了C++实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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%-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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持源码搜藏网。


下一篇:没有了

C语言阅读排行

最新文章