要求用 C++语言设计程序,设计实现学生成绩管理系统的应用程序,程序具 体要求如下: 通过二维数组构建学生的成绩单 学号 语文 数学 英语 物理 化学 生物 101 96 79 88 77 76 83 102 79 82 86 82 67 91 103 83 98 95 92 93 88 104 92 82 78 89 81 79 105 87 95 91 85 87 75 程序包含的功能: 1、 输入学号和科目名称(如语文、数学等)查询所有同学该科门科目的平 均成绩以及该生该门科目的排名。 2、 输入学号,输出所有同学根据总成绩的排名,并输出该学号的排名。 3、 输入学号、科目名称、修改的成绩分数对成绩单中成绩进行修改。 4、程序在最开始可以选择想执行的业务选项。 其它要求:除程序能够正确运行外,还要求程序具有友好的用户交互界面, 能够对错误输入进行处理(比如对输入金额验证,输入 id 的唯一性验证,输入 超长字符的验证),具备良好的性能,程序要求具有良好的注释和代码美观性。
时间: 2023-06-27 13:08:37 浏览: 57
以下是一个简单的学生成绩管理系统的C++实现,包括上述要求的所有功能。程序以控制台界面的形式呈现。
```cpp
#include <iostream>
#include <iomanip> // 用于设置输出格式
#include <string> // 用于处理字符串
#include <algorithm> // 用于排序
using namespace std;
const int MAX_STUDENTS = 5; // 最大学生数
const int MAX_SUBJECTS = 6; // 最大科目数
// 学生结构体
struct Student {
int id;
int scores[MAX_SUBJECTS]; // 存储学生各科成绩
double totalScore; // 总成绩
int rank; // 排名
};
// 查询函数1:输入学号和科目名称查询所有同学该科门科目的平均成绩以及该生该门科目的排名
void query1(Student students[], int studentCount) {
int id;
string subject;
cout << "请输入学号和科目名称,用空格分隔:" << endl;
cin >> id >> subject;
// 查找该科目在数组中的位置
int subjectIndex = -1;
for (int i = 0; i < MAX_SUBJECTS; i++) {
if (subject == "语文" && i == 0) {
subjectIndex = i;
break;
} else if (subject == "数学" && i == 1) {
subjectIndex = i;
break;
} else if (subject == "英语" && i == 2) {
subjectIndex = i;
break;
} else if (subject == "物理" && i == 3) {
subjectIndex = i;
break;
} else if (subject == "化学" && i == 4) {
subjectIndex = i;
break;
} else if (subject == "生物" && i == 5) {
subjectIndex = i;
break;
}
}
// 如果找到了该科目
if (subjectIndex >= 0) {
double totalScore = 0;
int count = 0;
int targetScore = students[id].scores[subjectIndex];
// 计算所有学生该科目的平均分数
for (int i = 0; i < studentCount; i++) {
totalScore += students[i].scores[subjectIndex];
if (students[i].scores[subjectIndex] == targetScore) {
count++;
}
}
double averageScore = totalScore / studentCount;
// 计算该生该科目的排名
int rank = 1;
for (int i = 0; i < studentCount; i++) {
if (students[i].scores[subjectIndex] > targetScore) {
rank++;
}
}
// 输出结果
cout << "所有同学" << subject << "科目的平均成绩为:" << averageScore << endl;
cout << "该生" << subject << "科目的排名为:" << rank << endl;
} else {
// 如果未找到该科目,输出错误信息
cout << "未找到该科目,请重新输入" << endl;
}
}
// 查询函数2:输入学号,输出所有同学根据总成绩的排名,并输出该学号的排名
void query2(Student students[], int studentCount) {
int id;
cout << "请输入学号:" << endl;
cin >> id;
// 计算所有学生的总成绩
for (int i = 0; i < studentCount; i++) {
double totalScore = 0;
for (int j = 0; j < MAX_SUBJECTS; j++) {
totalScore += students[i].scores[j];
}
students[i].totalScore = totalScore;
}
// 按总成绩排序
sort(students, students + studentCount, [](const Student& a, const Student& b) {
return a.totalScore > b.totalScore;
});
// 计算排名
for (int i = 0; i < studentCount; i++) {
students[i].rank = i + 1;
}
// 输出结果
cout << "所有同学根据总成绩的排名为:" << endl;
for (int i = 0; i < studentCount; i++) {
cout << "排名第" << students[i].rank << ":学号" << students[i].id << ",总成绩为" << students[i].totalScore << endl;
}
// 查找该学生的排名
int rank = -1;
for (int i = 0; i < studentCount; i++) {
if (students[i].id == id) {
rank = students[i].rank;
break;
}
}
// 输出该学生的排名
if (rank > 0) {
cout << "该学生的排名为:" << rank << endl;
} else {
cout << "未找到该学生,请重新输入" << endl;
}
}
// 修改成绩函数:输入学号、科目名称、修改的成绩分数对成绩单中成绩进行修改
void modifyScore(Student students[]) {
int id;
string subject;
int score;
cout << "请输入学号、科目名称和修改后的成绩,用空格分隔:" << endl;
cin >> id >> subject >> score;
// 查找该科目在数组中的位置
int subjectIndex = -1;
for (int i = 0; i < MAX_SUBJECTS; i++) {
if (subject == "语文" && i == 0) {
subjectIndex = i;
break;
} else if (subject == "数学" && i == 1) {
subjectIndex = i;
break;
} else if (subject == "英语" && i == 2) {
subjectIndex = i;
break;
} else if (subject == "物理" && i == 3) {
subjectIndex = i;
break;
} else if (subject == "化学" && i == 4) {
subjectIndex = i;
break;
} else if (subject == "生物" && i == 5) {
subjectIndex = i;
break;
}
}
// 如果找到了该科目
if (subjectIndex >= 0) {
// 修改成绩
students[id].scores[subjectIndex] = score;
cout << "修改成功" << endl;
} else {
// 如果未找到该科目,输出错误信息
cout << "未找到该科目,请重新输入" << endl;
}
}
int main() {
Student students[MAX_STUDENTS] = {
{101, {96, 79, 88, 77, 76, 83}},
{102, {79, 82, 86, 82, 67, 91}},
{103, {83, 98, 95, 92, 93, 88}},
{104, {92, 82, 78, 89, 81, 79}},
{105, {87, 95, 91, 85, 87, 75}}
};
int studentCount = MAX_STUDENTS;
// 主循环
while (true) {
cout << "请选择想执行的业务选项:" << endl;
cout << "1. 查询所有同学某科目的平均成绩以及该生该科目的排名" << endl;
cout << "2. 查询所有同学根据总成绩的排名,并输出该学号的排名" << endl;
cout << "3. 修改成绩" << endl;
cout << "0. 退出程序" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
query1(students, studentCount);
break;
case 2:
query2(students, studentCount);
break;
case 3:
modifyScore(students);
break;
case 0:
return 0;
default:
cout << "输入错误,请重新输入" << endl;
break;
}
}
return 0;
}
```
注意:该程序中的学生信息和成绩是预设的,如果需要实现动态添加、删除学生或成绩的功能,需要使用动态数组等数据结构。
阅读全文