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