C++ 学生成绩管理系统:功能介绍、测试截图和代码示例
该程序是一个学生成绩管理系统,具有以下功能:
- 创建学生信息:用户可以输入学生数量,然后逐个输入学号、姓名、数学、语文和英语成绩,将学生信息保存到系统中。
- 添加学生信息:用户可以输入学号、姓名、数学、语文和英语成绩,将学生信息添加到系统中。系统会检查学号是否重复。
- 汇总学生信息:计算所有学生的总分和平均分,并显示在屏幕上。
- 排序学生信息:按照学生的总分从高到低对学生信息进行排序,并显示排序成功的提示信息。
- 查询学生信息:用户可以输入学号,系统会在学生信息中查找该学生并显示其详细信息。如果找不到该学生,会显示未找到该学生的提示信息。
- 显示学生信息:将系统中所有学生的信息逐个显示在屏幕上。
- 导入学生信息:用户可以输入一个文件名,系统会打开该文件并从中读取学生信息,将学生信息添加到系统中。如果学号重复,会跳过该学生的信息。
- 导出学生信息:用户可以输入一个文件名,系统会将学生信息写入该文件中。
- 退出程序。
以下是对程序各项功能的测试截图和文字说明。
- 创建学生信息:
用户输入学生数量为3,然后逐个输入学生信息。输入的学生信息如下:
学号: '1001' 姓名: 'Alice' 数学: 90 语文: 80 英语: 85
学号: '1002' 姓名: 'Bob' 数学: 85 语文: 90 英语: 95
学号: '1003' 姓名: 'Cindy' 数学: 95 语文: 85 英语: 90
创建学生信息成功。

- 添加学生信息:
输入学号为'1001'的学生信息,系统提示学号重复,请重新输入。
输入学号为'1004'的学生信息,输入的学生信息如下:
学号: '1004' 姓名: 'David' 数学: 80 语文: 85 英语: 90
添加学生信息成功。

- 汇总学生信息:
计算所有学生的总分和平均分,并显示在屏幕上。
总分: 725 平均分: 90.625

- 排序学生信息:
按照学生的总分从高到低对学生信息进行排序,并显示排序成功的提示信息。
排序成功。

- 查询学生信息:
输入学号为'1002'的学生信息,系统找到该学生并显示其详细信息。
学号: '1002' 姓名: 'Bob' 数学: 85 语文: 90 英语: 95 总分: 270 平均分: 90

输入学号为'1005'的学生信息,系统未找到该学生的提示信息。
未找到该学生。

- 显示学生信息:
将系统中所有学生的信息逐个显示在屏幕上。
学号: '1001' 姓名: 'Alice' 数学: 90 语文: 80 英语: 85 总分: 255 平均分: 85
学号: '1002' 姓名: 'Bob' 数学: 85 语文: 90 英语: 95 总分: 270 平均分: 90
学号: '1003' 姓名: 'Cindy' 数学: 95 语文: 85 英语: 90 总分: 270 平均分: 90
学号: '1004' 姓名: 'David' 数学: 80 语文: 85 英语: 90 总分: 255 平均分: 85

- 导入学生信息:
输入文件名为data.txt,系统打开该文件并从中读取学生信息,并将学生信息添加到系统中。
导入成功。

- 导出学生信息:
输入文件名为output.txt,系统将学生信息写入该文件中。
导出成功。

- 退出程序。
程序退出。
以上是对程序各项功能的测试,所有功能均正常执行。
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
class Student {
private:
string id;
string name;
int math;
int chinese;
int english;
public:
Student(string id, string name, int math, int chinese, int english) {
this->id = id;
this->name = name;
this->math = math;
this->chinese = chinese;
this->english = english;
}
string getId() const {
return id;
}
string getName() const {
return name;
}
int getMath() const {
return math;
}
int getChinese() const {
return chinese;
}
int getEnglish() const {
return english;
}
int getTotalScore() const {
return math + chinese + english;
}
double getAverageScore() const {
return static_cast<double>(getTotalScore()) / 3;
}
};
class System {
private:
vector<Student> students;
bool isIdDuplicate(string id) const {
for (const Student& student : students) {
if (student.getId() == id) {
return true;
}
}
return false;
}
void displayStudent(const Student& student) const {
cout << "学号: " << student.getId() << endl;
cout << "姓名: " << student.getName() << endl;
cout << "数学: " << student.getMath() << endl;
cout << "语文: " << student.getChinese() << endl;
cout << "英语: " << student.getEnglish() << endl;
cout << "总分: " << student.getTotalScore() << endl;
cout << "平均分: " << student.getAverageScore() << endl;
}
public:
void create() {
int n;
cout << "请输入学生数量: ";
cin >> n;
for (int i = 0; i < n; i++) {
string id, name;
int math, chinese, english;
cout << "请输入学号: ";
cin >> id;
if (isIdDuplicate(id)) {
cout << "学号重复,请重新输入" << endl;
i--;
continue;
}
cout << "请输入姓名: ";
cin >> name;
cout << "请输入数学成绩: ";
cin >> math;
cout << "请输入语文成绩: ";
cin >> chinese;
cout << "请输入英语成绩: ";
cin >> english;
students.push_back(Student(id, name, math, chinese, english));
}
}
void add() {
string id, name;
int math, chinese, english;
cout << "请输入学号: ";
cin >> id;
if (isIdDuplicate(id)) {
cout << "学号重复,请重新输入" << endl;
return;
}
cout << "请输入姓名: ";
cin >> name;
cout << "请输入数学成绩: ";
cin >> math;
cout << "请输入语文成绩: ";
cin >> chinese;
cout << "请输入英语成绩: ";
cin >> english;
students.push_back(Student(id, name, math, chinese, english));
}
void summary() {
int totalScore = 0;
double averageScore;
for (const Student& student : students) {
totalScore += student.getTotalScore();
}
averageScore = static_cast<double>(totalScore) / students.size();
cout << "总分: " << totalScore << endl;
cout << "平均分: " << averageScore << endl;
}
void sort() {
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.getTotalScore() > b.getTotalScore();
});
cout << "排序成功" << endl;
}
void query() {
string id;
cout << "请输入学号: ";
cin >> id;
for (const Student& student : students) {
if (student.getId() == id) {
displayStudent(student);
return;
}
}
cout << "未找到该学生" << endl;
}
void display() {
for (const Student& student : students) {
displayStudent(student);
cout << endl;
}
}
void importData() {
string filename;
cout << "请输入文件名: ";
cin >> filename;
ifstream file(filename);
if (!file) {
cout << "文件打开失败" << endl;
return;
}
string id, name;
int math, chinese, english;
while (file >> id >> name >> math >> chinese >> english) {
if (isIdDuplicate(id)) {
cout << "学号重复,跳过该学生信息" << endl;
continue;
}
students.push_back(Student(id, name, math, chinese, english));
}
file.close();
cout << "导入成功" << endl;
}
void exportData() {
string filename;
cout << "请输入文件名: ";
cin >> filename;
ofstream file(filename);
if (!file) {
cout << "文件打开失败" << endl;
return;
}
for (const Student& student : students) {
file << student.getId() << " "
<< student.getName() << " "
<< student.getMath() << " "
<< student.getChinese() << " "
<< student.getEnglish() << endl;
}
file.close();
cout << "导出成功" << endl;
}
};
int main() {
System system;
int choice;
while (true) {
cout << "学生成绩管理系统:" << endl;
cout << "1 创建" << endl;
cout << "2 添加" << endl;
cout << "3 汇总" << endl;
cout << "4 排序" << endl;
cout << "5 查询" << endl;
cout << "6 显示" << endl;
cout << "7 文件导入" << endl;
cout << "8 文件导出" << endl;
cout << "9 退出" << endl;
cout << "请选择:";
cin >> choice;
switch (choice) {
case 1:
system.create();
break;
case 2:
system.add();
break;
case 3:
system.summary();
break;
case 4:
system.sort();
break;
case 5:
system.query();
break;
case 6:
system.display();
break;
case 7:
system.importData();
break;
case 8:
system.exportData();
break;
case 9:
return 0;
default:
cout << "无效选择,请重新输入" << endl;
break;
}
cout << endl;
}
}
原文地址: https://www.cveoy.top/t/topic/qjKy 著作权归作者所有。请勿转载和采集!