我需要一段C++代码 ,实现功能(1)实现简单的菜单设计,如下所示: 1 添加学生信息 2 显示学生信息 3 查找学生信息 4 成绩计算 5 按总分降序输出 0 退出 (2)每个学生的信息至少包括姓名、学号、3门课程的成绩、班级等信息。 (3)“添加学生信息”:输入新的学生信息以后,系统将把相关信息存储到文件中。以班级为单位存放到不同的文件中。至少有3个班,每个班级至少10个学生。 (4)“显示学生信息”:系统将从文件中读取数据,按要求显示所有的学生信息。为使界面美观,可考虑用二维表格的形式输出。 (5)“查找学生信息”:可进一步设计,如按姓名查找或按学号查找,或者查找某门课程的最高/最低成绩、或者在所有学生中查找平均分最高/最低的学生信息等。 (6)“成绩计算”:可扩充,如计算每个学生的总分、平均分;计算每个班级每门课程的平均分。 (7)“按总分降序输出”:可扩展,按总分降序或升序。
时间: 2024-03-18 09:41:16 浏览: 69
好的,以下是一份基于C++的学生信息管理系统代码,可以实现上述功能要求:
```
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <vector>
using namespace std;
// 学生信息结构体
struct Student {
string name; // 姓名
string id; // 学号
int classNum; // 班级
int score[3]; // 3门课程的成绩
int totalScore; // 总分
float averageScore; // 平均分
// 构造函数
Student(string name="", string id="", int classNum=0, int score1=0, int score2=0, int score3=0) {
this->name = name;
this->id = id;
this->classNum = classNum;
this->score[0] = score1;
this->score[1] = score2;
this->score[2] = score3;
this->totalScore = score1 + score2 + score3;
this->averageScore = (float)totalScore / 3;
}
};
// 学生信息管理类
class StudentManager {
public:
vector<Student> students; // 学生信息数组
// 构造函数
StudentManager() {}
// 添加学生信息
void addStudent() {
string name, id;
int classNum, score1, score2, score3;
cout << "请输入学生姓名:";
cin >> name;
cout << "请输入学生学号:";
cin >> id;
cout << "请输入学生班级:";
cin >> classNum;
cout << "请输入学生三门课程的成绩:";
cin >> score1 >> score2 >> score3;
Student s(name, id, classNum, score1, score2, score3);
students.push_back(s);
saveToFile(s);
cout << "添加学生信息成功!" << endl;
}
// 显示所有学生信息
void showAllStudents() {
cout << setw(15) << "姓名" << setw(15) << "学号" << setw(15) << "班级"
<< setw(15) << "课程1成绩" << setw(15) << "课程2成绩" << setw(15) << "课程3成绩"
<< setw(15) << "总分" << setw(15) << "平均分" << endl;
for (int i = 0; i < students.size(); i++) {
Student s = students[i];
cout << setw(15) << s.name << setw(15) << s.id << setw(15) << s.classNum
<< setw(15) << s.score[0] << setw(15) << s.score[1] << setw(15) << s.score[2]
<< setw(15) << s.totalScore << setw(15) << s.averageScore << endl;
}
}
// 按姓名或学号查找学生
void searchStudent() {
string keyword;
cout << "请输入要查找的学生姓名或学号:";
cin >> keyword;
for (int i = 0; i < students.size(); i++) {
Student s = students[i];
if (s.name == keyword || s.id == keyword) {
cout << setw(15) << "姓名" << setw(15) << "学号" << setw(15) << "班级"
<< setw(15) << "课程1成绩" << setw(15) << "课程2成绩" << setw(15) << "课程3成绩"
<< setw(15) << "总分" << setw(15) << "平均分" << endl;
cout << setw(15) << s.name << setw(15) << s.id << setw(15) << s.classNum
<< setw(15) << s.score[0] << setw(15) << s.score[1] << setw(15) << s.score[2]
<< setw(15) << s.totalScore << setw(15) << s.averageScore << endl;
return;
}
}
cout << "未找到该学生信息!" << endl;
}
// 按总分降序排序并输出
void sortByTotalScore() {
sort(students.begin(), students.end(), [](Student a, Student b){ return a.totalScore > b.totalScore; });
cout << setw(15) << "姓名" << setw(15) << "学号" << setw(15) << "班级"
<< setw(15) << "课程1成绩" << setw(15) << "课程2成绩" << setw(15) << "课程3成绩"
<< setw(15) << "总分" << setw(15) << "平均分" << endl;
for (int i = 0; i < students.size(); i++) {
Student s = students[i];
cout << setw(15) << s.name << setw(15) << s.id << setw(15) << s.classNum
<< setw(15) << s.score[0] << setw(15) << s.score[1] << setw(15) << s.score[2]
<< setw(15) << s.totalScore << setw(15) << s.averageScore << endl;
}
}
private:
// 将学生信息保存到对应班级的文件中
void saveToFile(Student s) {
ofstream fout;
fout.open("class_" + to_string(s.classNum) + ".txt", ios::app);
fout << s.name << " " << s.id << " " << s.score[0] << " " << s.score[1] << " " << s.score[2] << endl;
fout.close();
}
};
int main() {
StudentManager sm; // 创建学生信息管理类实例
// 主菜单
while (true) {
cout << "1 添加学生信息" << endl;
cout << "2 显示学生信息" << endl;
cout << "3 查找学生信息" << endl;
cout << "4 成绩计算" << endl;
cout << "5 按总分降序输出" << endl;
cout << "0 退出" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
sm.addStudent();
break;
case 2:
sm.showAllStudents();
break;
case 3:
sm.searchStudent();
break;
case 4:
// TODO: 完成成绩计算功能
break;
case 5:
sm.sortByTotalScore();
break;
case 0:
return 0;
default:
cout << "无效的选项!" << endl;
break;
}
cout << endl;
}
return 0;
}
```
注意:由于每个班级的学生信息要保存到对应的文件中,所以在运行程序时,需要先手动创建class_1.txt、class_2.txt和class_3.txt三个文件。
阅读全文