用c++实现一个学生成绩管理系统 基本要求: 定义学生(student)类,其中至少包括姓名、性别、学号、班级和四门功课的成绩。 功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入学生信息,并以txt格式保存到文件中; 3、计算每个学生的总分与平均分的功能,而且能够分别按照学生的每一科的功课成绩和总分的成绩排序。 4、能根据学号修改学生信息; 5、能根据学号删除学生信息; 6、查询功能: 1)能够根据学号查询学生信息; 2)能够根据姓名、班级查询学生信息; 3)统计学生成绩,按照班级和科目计算平均分。 7、所有的增加、修改、删除能同步到txt文件;也从txt文件读取数据到程序。
时间: 2024-01-06 10:03:50 浏览: 79
好的,下面是一个简单的学生成绩管理系统的 C++ 实现。
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
// 定义学生类
class Student {
public:
string name;
string gender;
string id;
string cls;
double score[4];
double total_score;
double avg_score;
};
// 学生信息管理类
class StudentManager {
public:
// 构造函数,从文件中读取数据
StudentManager() {
ifstream ifs("students.txt");
if (ifs.is_open()) {
while (!ifs.eof()) {
Student s;
ifs >> s.name >> s.gender >> s.id >> s.cls >> s.score[0] >> s.score[1] >> s.score[2] >> s.score[3];
if (!s.name.empty()) {
students.push_back(s);
}
}
ifs.close();
}
}
// 添加学生信息
void AddStudent() {
Student s;
cout << "请输入学生姓名:";
cin >> s.name;
cout << "请输入学生性别:";
cin >> s.gender;
cout << "请输入学生学号:";
cin >> s.id;
cout << "请输入学生班级:";
cin >> s.cls;
cout << "请输入学生四门功课的成绩:";
cin >> s.score[0] >> s.score[1] >> s.score[2] >> s.score[3];
students.push_back(s);
SaveData();
}
// 根据学号修改学生信息
void ModifyStudent() {
string id;
cout << "请输入要修改的学生学号:";
cin >> id;
for (auto& s : students) {
if (s.id == id) {
cout << "请输入修改后的学生姓名:";
cin >> s.name;
cout << "请输入修改后的学生性别:";
cin >> s.gender;
cout << "请输入修改后的学生班级:";
cin >> s.cls;
cout << "请输入修改后的学生四门功课的成绩:";
cin >> s.score[0] >> s.score[1] >> s.score[2] >> s.score[3];
SaveData();
cout << "修改成功!" << endl;
return;
}
}
cout << "找不到该学生!" << endl;
}
// 根据学号删除学生信息
void RemoveStudent() {
string id;
cout << "请输入要删除的学生学号:";
cin >> id;
for (auto it = students.begin(); it != students.end(); ++it) {
if (it->id == id) {
students.erase(it);
SaveData();
cout << "删除成功!" << endl;
return;
}
}
cout << "找不到该学生!" << endl;
}
// 根据学号查询学生信息
void SearchById() {
string id;
cout << "请输入要查询的学生学号:";
cin >> id;
for (auto& s : students) {
if (s.id == id) {
PrintStudent(s);
return;
}
}
cout << "找不到该学生!" << endl;
}
// 根据姓名、班级查询学生信息
void SearchByNameOrCls() {
string query;
cout << "请输入要查询的姓名或班级:";
cin >> query;
bool found = false;
for (auto& s : students) {
if (s.name.find(query) != string::npos || s.cls.find(query) != string::npos) {
PrintStudent(s);
found = true;
}
}
if (!found) {
cout << "找不到该学生!" << endl;
}
}
// 统计学生成绩,按照班级和科目计算平均分
void Statistic() {
double total_score[4] = {0.0};
int count[4] = {0};
vector<string> classes;
for (auto& s : students) {
s.total_score = 0.0;
for (int i = 0; i < 4; ++i) {
s.total_score += s.score[i];
total_score[i] += s.score[i];
++count[i];
}
classes.push_back(s.cls);
}
sort(classes.begin(), classes.end());
classes.erase(unique(classes.begin(), classes.end()), classes.end());
cout << "所有学生平均分:" << endl;
for (int i = 0; i < 4; ++i) {
cout << "科目" << i + 1 << "平均分:" << total_score[i] / count[i] << endl;
}
for (auto& cls : classes) {
cout << cls << "班平均分:" << endl;
for (int i = 0; i < 4; ++i) {
double total_score = 0.0;
int count = 0;
for (auto& s : students) {
if (s.cls == cls) {
total_score += s.score[i];
++count;
}
}
cout << "科目" << i + 1 << "平均分:" << total_score / count << endl;
}
}
}
// 显示菜单
void ShowMenu() {
cout << "请选择功能:" << endl;
cout << "1. 添加学生信息" << endl;
cout << "2. 修改学生信息" << endl;
cout << "3. 删除学生信息" << endl;
cout << "4. 根据学号查询学生信息" << endl;
cout << "5. 根据姓名、班级查询学生信息" << endl;
cout << "6. 统计学生成绩" << endl;
cout << "7. 退出" << endl;
}
// 运行程序
void Run() {
while (true) {
ShowMenu();
int choice;
cin >> choice;
switch (choice) {
case 1:
AddStudent();
break;
case 2:
ModifyStudent();
break;
case 3:
RemoveStudent();
break;
case 4:
SearchById();
break;
case 5:
SearchByNameOrCls();
break;
case 6:
Statistic();
break;
case 7:
return;
default:
cout << "输入有误,请重新输入!" << endl;
break;
}
}
}
private:
vector<Student> students;
// 保存数据到文件
void SaveData() {
ofstream ofs("students.txt");
for (auto& s : students) {
ofs << s.name << " " << s.gender << " " << s.id << " " << s.cls << " "
<< s.score[0] << " " << s.score[1] << " " << s.score[2] << " " << s.score[3] << endl;
}
ofs.close();
}
// 输出学生信息
void PrintStudent(const Student& s) {
cout << "姓名:" << s.name << endl;
cout << "性别:" << s.gender << endl;
cout << "学号:" << s.id << endl;
cout << "班级:" << s.cls << endl;
cout << "四门功课的成绩:";
for (int i = 0; i < 4; ++i) {
cout << s.score[i] << " ";
}
cout << endl;
cout << "总分:" << s.total_score << endl;
cout << "平均分:" << s.total_score / 4 << endl;
}
};
int main() {
StudentManager manager;
manager.Run();
return 0;
}
```
这个程序使用了类和 STL 容器,实现了基本的学生成绩管理功能。你可以根据自己的需要对其进行修改和扩展。
阅读全文