学生成绩管理系统 设计一个学生成绩管理程序,实现按班级完成对学生成绩信息的录入和修改,并用文件保存。实现按班级输出学生的成绩单;实现按学号和姓名进行查询,按平均成绩进行排序功能。C++
时间: 2024-03-14 09:42:46 浏览: 251
学生成绩管理 ,这是一个学生成绩管理的实例,有C++实现。
好的,以下是一个简单的 C++ 代码示例:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
// 学生类
class Student {
public:
Student(string id, string name, double grade) :
m_id(id), m_name(name), m_grade(grade) {}
string getId() const {
return m_id;
}
string getName() const {
return m_name;
}
double getGrade() const {
return m_grade;
}
void setGrade(double grade) {
m_grade = grade;
}
private:
string m_id; // 学号
string m_name; // 姓名
double m_grade; // 成绩
};
// 班级类
class Class {
public:
Class(string name) :
m_name(name) {}
string getName() const {
return m_name;
}
void addStudent(const Student& student) {
m_students.push_back(student);
}
vector<Student>& getStudents() {
return m_students;
}
private:
string m_name; // 班级名称
vector<Student> m_students; // 学生列表
};
// 成绩管理系统类
class GradeManager {
public:
void addStudent(const string& className, const Student& student) {
bool found = false;
for (auto& c : m_classes) {
if (c.getName() == className) {
c.addStudent(student);
found = true;
break;
}
}
if (!found) {
Class newClass(className);
newClass.addStudent(student);
m_classes.push_back(newClass);
}
}
void saveToFile(const string& filename) const {
ofstream outfile(filename);
if (outfile.is_open()) {
for (auto& c : m_classes) {
outfile << c.getName() << endl;
for (auto& s : c.getStudents()) {
outfile << s.getId() << " " << s.getName() << " " << s.getGrade() << endl;
}
}
outfile.close();
}
}
void loadFromFile(const string& filename) {
ifstream infile(filename);
if (infile.is_open()) {
string className;
while (getline(infile, className)) {
Class newClass(className);
string line;
while (getline(infile, line)) {
string id, name;
double grade;
istringstream iss(line);
iss >> id >> name >> grade;
Student newStudent(id, name, grade);
newClass.addStudent(newStudent);
}
m_classes.push_back(newClass);
}
infile.close();
}
}
void printClassGrades(const string& className) const {
for (auto& c : m_classes) {
if (c.getName() == className) {
cout << c.getName() << endl;
for (auto& s : c.getStudents()) {
cout << s.getId() << " " << s.getName() << " " << s.getGrade() << endl;
}
break;
}
}
}
void searchStudent(const string& keyword) const {
for (auto& c : m_classes) {
for (auto& s : c.getStudents()) {
if (s.getId() == keyword || s.getName() == keyword) {
cout << c.getName() << " " << s.getId() << " " << s.getName() << " " << s.getGrade() << endl;
}
}
}
}
void sortByAverageGrade() {
vector<pair<string, double>> classGrades;
for (auto& c : m_classes) {
double sum = 0.0;
for (auto& s : c.getStudents()) {
sum += s.getGrade();
}
double averageGrade = sum / c.getStudents().size();
classGrades.push_back(make_pair(c.getName(), averageGrade));
}
sort(classGrades.begin(), classGrades.end(), [](const pair<string, double>& a, const pair<string, double>& b) {
return a.second > b.second;
});
for (auto& cg : classGrades) {
cout << cg.first << " " << cg.second << endl;
}
}
private:
vector<Class> m_classes; // 班级列表
};
int main() {
// 使用示例
GradeManager gm;
// 添加学生信息
gm.addStudent("class1", Student("001", "张三", 80));
gm.addStudent("class1", Student("002", "李四", 90));
gm.addStudent("class2", Student("003", "王五", 70));
// 保存学生信息到文件
gm.saveToFile("grades.txt");
// 从文件中加载学生信息
gm.loadFromFile("grades.txt");
// 按班级输出学生成绩单
gm.printClassGrades("class1");
// 按学号和姓名查询学生信息
gm.searchStudent("001");
gm.searchStudent("李四");
// 按平均成绩进行排序
gm.sortByAverageGrade();
return 0;
}
```
需要注意的是,如果您使用的是 C++11 以前的版本,可能需要将 lambda 表达式改写成函数对象的形式。
阅读全文