服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++实现学生信息管理系统(Map实现)

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

2022-12-15 14:14Charming Boy C/C++

这篇文章主要为大家详细介绍了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、代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
/*
    为了实现高效的学生管理系统,主要采用了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; 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_45895026/article/details/111614482

延伸 · 阅读

精彩推荐
  • C/C++c++中new的三种用法详细解析

    c++中new的三种用法详细解析

    以下的是对c++中new的三种使用方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助...

    C++教程网4982020-12-30
  • C/C++一起来学习C语言的字符串转换函数

    一起来学习C语言的字符串转换函数

    这篇文章主要为大家详细介绍了C语言的字符串转换函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够...

    嵌入式@hxydj5402022-09-27
  • C/C++MFC控件之CListCtrl的应用实例教程

    MFC控件之CListCtrl的应用实例教程

    这篇文章主要介绍了MFC控件中CListCtrl的应用方法,包括了针对表格的一些操作,是MFC中比较重要的一个控件类,需要的朋友可以参考下...

    C语言程序设计10492021-01-29
  • C/C++QT自定义之滑动开关

    QT自定义之滑动开关

    这篇文章主要为大家详细介绍了QT自定义之滑动开关效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    mario_z5332021-09-24
  • C/C++[c++]变量声明与定义的规则详解

    [c++]变量声明与定义的规则详解

    这篇文章主要介绍了[c++]变量声明与定义的规则详解,对于学习c++的朋友来说这是一个很细腻的文章,代码完整,需要的朋友可以参考下...

    TOMOCAT8472021-11-02
  • C/C++C++空类详解

    C++空类详解

    以下是对C++中的空类进行了详细的介绍,需要的朋友可以过来参考下...

    C++教程网9502020-12-26
  • C/C++实例分析一个简单的Win32程序

    实例分析一个简单的Win32程序

    这篇文章主要介绍了实例分析一个简单的Win32程序,对于Win32应用程序的原理、执行流程、实现方法主要环节都做了较为详细的分析,有助于读者深入理解Win...

    C语言程序设计6442021-01-31
  • C/C++Qt数据库应用之实现数据的导入与导出

    Qt数据库应用之实现数据的导入与导出

    QT中涉及到数据库相关的项目,几乎都需要将少量的信息数据导出到文件保存好,然后用户可以打开该表格进行编辑,编辑完成后保存,再重新导入到软件...

    feiyangqingyun8602022-08-14