C++程序设计:班级综合测评管理系统
功能要求
- 学生信息录入
- 课程成绩录入
- 计算课程平均分
- 德育分评定
- 体育分评定
- 综合测评计算
- 成绩排序
- 查询功能
- 数据保存与读取
需要每一个都有输出结果
- 数据保存与读取
功能概述
这段代码实现了一个功能较为全面的成绩管理系统。它能够完成学生信息的录入、课程成绩的录入、课程平均分的计算、德育分和体育分的评定、综合测评分的计算、成绩排序、学生信息查询以及数据的保存与读取等功能。通过菜单驱动的方式,用户可以根据自己的需求选择相应的操作,方便地管理和查询学生的成绩信息。
- 学生结构体:包含学生的基本信息和成绩。
- 功能函数:
inputStudentInfo
:录入学生基本信息。
inputScores
:录入学生成绩。
calculateAverageScores
:计算课程平均分。-evaluateMoralScores
和evaluatePhysicalScores
:分别评定德育分和体育分。
calculateComprehensiveScores
:计算综合测评分。
sortStudentsByScores
:按综合测评分排序。
queryStudentInfo
:查询学生信息。
saveDataToFile
和loadDataFromFile
:保存和加载数据。
displayStudents
:显示所有学生信息。
- 功能函数:
- 主函数:提供菜单驱动的交互界面,用户可以根据选项执行不同的功能。
使用方法
- 将代码保存为一个
.cpp
文件,例如GradeManagementSystem.cpp
。
- 将代码保存为一个
- 使用C++编译器(如g++)编译代码。
- 运行程序,根据菜单提示操作。
参考代码如下:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;
struct Student {
string name;
int id;
vector<int> scores; // 各科成绩
int moralScore; // 德育分
int physicalScore; // 体育分
double averageScore; // 平均分
double comprehensiveScore; // 综合测评分
};
void inputStudentInfo(vector<Student>& students) {
cout << "请输入学生信息(输入-1结束):" << endl;
while (true) {
Student student;
cout << "姓名:";
cin >> student.name;
if (student.name == "-1") break;
cout << "学号:";
cin >> student.id;
students.push_back(student);
}
}
void inputScores(vector<Student>& students) {
cout << "请输入学生成绩(输入-1结束):" << endl;
for (auto& student : students) {
cout << "学生:" << student.name << " (" << student.id << ")" << endl;
cout << "请输入课程成绩(用空格分隔,输入-1结束):";
int score;
while (true) {
cin >> score;
if (score == -1) break;
student.scores.push_back(score);
}
}
}
void calculateAverageScores(vector<Student>& students) {
for (auto& student : students) {
double sum = 0;
for (int score : student.scores) {
sum += score;
}
student.averageScore = student.scores.empty() ? 0 : sum / student.scores.size();
}
}
void evaluateMoralScores(vector<Student>& students) {
cout << "请输入学生德育分(输入-1结束):" << endl;
for (auto& student : students) {
cout << "学生:" << student.name << " (" << student.id << ")" << endl;
cout << "德育分:";
cin >> student.moralScore;
}
}
void evaluatePhysicalScores(vector<Student>& students) {
cout << "请输入学生体育分(输入-1结束):" << endl;
for (auto& student : students) {
cout << "学生:" << student.name << " (" << student.id << ")" << endl;
cout << "体育分:";
cin >> student.physicalScore;
}
}
void calculateComprehensiveScores(vector<Student>& students) {
for (auto& student : students) {
student.comprehensiveScore = 0.6 * student.averageScore + 0.2 * student.moralScore + 0.2 * student.physicalScore;
}
}
void sortStudentsByScores(vector<Student>& students) {
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.comprehensiveScore > b.comprehensiveScore;
});
}
void queryStudentInfo(const vector<Student>& students) {
cout << "请输入要查询的学生学号:";
int id;
cin >> id;
for (const auto& student : students) {
if (student.id == id) {
cout << "姓名:" << student.name << endl;
cout << "学号:" << student.id << endl;
cout << "平均分:" << fixed << setprecision(2) << student.averageScore << endl;
cout << "德育分:" << student.moralScore << endl;
cout << "体育分:" << student.physicalScore << endl;
cout << "综合测评分:" << fixed << setprecision(2) << student.comprehensiveScore << endl;
return;
}
}
cout << "未找到该学生信息!" << endl;
}
void saveDataToFile(const vector<Student>& students) {
ofstream outFile("students.txt");
if (!outFile) {
cout << "无法打开文件进行写入!" << endl;
return;
}
for (const auto& student : students) {
outFile << student.name << " " << student.id << " ";
for (int score : student.scores) {
outFile << score << " ";
}
outFile << student.moralScore << " " << student.physicalScore << " ";
outFile << fixed << setprecision(2) << student.averageScore << " ";
outFile << fixed << setprecision(2) << student.comprehensiveScore << endl;
}
outFile.close();
cout << "数据已保存到文件!" << endl;
}
void loadDataFromFile(vector<Student>& students) {
ifstream inFile("students.txt");
if (!inFile) {
cout << "无法打开文件进行读取!" << endl;
return;
}
students.clear();
string name;
int id;
while (inFile >> name >> id) {
Student student;
student.name = name;
student.id = id;
int score;
while (inFile >> score && score != -1) {
student.scores.push_back(score);
}
inFile.unget(); // 回退一个字符,以便读取德育分
inFile >> student.moralScore >> student.physicalScore;
inFile >> student.averageScore >> student.comprehensiveScore;
students.push_back(student);
}
inFile.close();
cout << "数据已从文件加载!" << endl;
}
void displayStudents(const vector<Student>& students) {
cout << "学生信息列表:" << endl;
for (const auto& student : students) {
cout << "姓名:" << student.name << " 学号:" << student.id << " 平均分:" << fixed << setprecision(2) << student.averageScore
<< " 德育分:" << student.moralScore << " 体育分:" << student.physicalScore
<< " 综合测评分:" << fixed << setprecision(2) << student.comprehensiveScore << endl;
}
}
int main() {
vector<Student> students;
int choice;
do {
cout << "\n1. 学生信息录入\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 << "11. 显示所有学生信息\n";
cout << "0. 退出\n";
cout << "请输入选项:";
cin >> choice;
switch (choice) {
case 1:
inputStudentInfo(students);
break;
case 2:
inputScores(students);
break;
case 3:
calculateAverageScores(students);
break;
case 4:
evaluateMoralScores(students);
break;
case 5:
evaluatePhysicalScores(students);
break;
case 6:
calculateComprehensiveScores(students);
break;
case 7:
sortStudentsByScores(students);
break;
case 8:
queryStudentInfo(students);
break;
case 9:
saveDataToFile(students);
break;
case 10:
loadDataFromFile(students);
break;
case 11:
displayStudents(students);
break;
case 0:
cout << "退出系统!" << endl;
break;
default:
cout << "无效选项,请重新输入!" << endl;
}
} while (choice != 0);
return 0;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容