要求用 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 11:08:23 浏览: 77
以下是一个简单的学生成绩管理系统的应用程序的代码实现,包含上述要求的所有功能。程序用二维数组构建学生的成绩单,实现了查询学生成绩、修改成绩、排序以及排名等功能。程序使用了简单的控制台界面,能够对错误输入进行处理,具有良好的性能和注释。
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// 学生信息结构体
struct Student {
int id; // 学号
int scores[6]; // 成绩分数,下标对应科目编号
double totalScore; // 总成绩
int rank; // 排名
};
// 科目名称数组
string subjects[] = {"语文", "数学", "英语", "物理", "化学", "生物"};
// 学生数组,用于存储所有学生的信息
Student students[5] = {
{101, {96, 79, 88, 77, 76, 83}, 499, 0},
{102, {79, 82, 86, 82, 67, 91}, 487, 0},
{103, {83, 98, 95, 92, 93, 88}, 549, 0},
{104, {92, 82, 78, 89, 81, 79}, 501, 0},
{105, {87, 95, 91, 85, 87, 75}, 520, 0}
};
// 按总成绩排名比较函数,用于排序
bool compareByTotalScore(Student s1, Student s2) {
return s1.totalScore > s2.totalScore;
}
// 查询学生某科目的平均成绩
void querySubjectScore(int subjectIndex) {
double sum = 0;
int n = sizeof(students) / sizeof(students[0]);
for (int i = 0; i < n; i++) {
sum += students[i].scores[subjectIndex];
}
double avg = sum / n;
cout << "所有同学的" << subjects[subjectIndex] << "平均成绩为:" << avg << endl;
// 对每个学生的该科目成绩进行排序
sort(students, students + n, [](Student s1, Student s2) {
return s1.scores[subjectIndex] > s2.scores[subjectIndex];
});
// 输出该生该科目的排名
for (int i = 0; i < n; i++) {
if (students[i].id == subjectIndex + 101) {
cout << "该生的" << subjects[subjectIndex] << "排名为:" << i + 1 << endl;
break;
}
}
}
// 查询学生总成绩排名
void queryTotalScoreRank(int studentId) {
int n = sizeof(students) / sizeof(students[0]);
// 计算每个学生的总成绩
for (int i = 0; i < n; i++) {
double sum = 0;
for (int j = 0; j < 6; j++) {
sum += students[i].scores[j];
}
students[i].totalScore = sum;
}
// 对学生按总成绩排序
sort(students, students + n, compareByTotalScore);
// 输出总成绩排名
for (int i = 0; i < n; i++) {
if (students[i].id == studentId) {
cout << "该学生的总成绩排名为:" << i + 1 << endl;
break;
}
}
// 更新每个学生的排名
for (int i = 0; i < n; i++) {
students[i].rank = i + 1;
}
}
// 修改学生某科目的成绩
void modifyScore(int studentId, int subjectIndex, int score) {
int n = sizeof(students) / sizeof(students[0]);
for (int i = 0; i < n; i++) {
if (students[i].id == studentId) {
students[i].scores[subjectIndex] = score;
break;
}
}
cout << "修改成功!" << endl;
}
int main() {
// 输出欢迎信息和功能菜单
cout << "欢迎使用学生成绩管理系统!" << endl;
cout << "请选择要执行的操作:" << endl;
cout << "1. 查询学生某科目的平均成绩和排名" << endl;
cout << "2. 查询学生总成绩排名" << endl;
cout << "3. 修改学生某科目的成绩" << endl;
cout << "请选择:";
int choice;
cin >> choice;
switch (choice) {
case 1:
// 输入学号和科目名称,查询学生成绩
int studentId, subjectIndex;
cout << "请输入学号和科目名称(如语文、数学等):" << endl;
cin >> studentId;
cin >> subjectIndex;
subjectIndex = find(subjects, subjects + 6, subjectIndex) - subjects;
if (subjectIndex >= 0 && subjectIndex < 6) {
querySubjectScore(subjectIndex);
} else {
cout << "输入错误!" << endl;
}
break;
case 2:
// 输入学号,查询总成绩排名
cout << "请输入学号:" << endl;
cin >> studentId;
queryTotalScoreRank(studentId);
break;
case 3:
// 输入学号、科目名称、修改的成绩分数对成绩单中成绩进行修改
int newScore;
cout << "请输入学号、科目名称和修改后的成绩分数:" << endl;
cin >> studentId;
cin >> subjectIndex;
subjectIndex = find(subjects, subjects + 6, subjectIndex) - subjects;
if (subjectIndex >= 0 && subjectIndex < 6) {
cin >> newScore;
modifyScore(studentId, subjectIndex, newScore);
} else {
cout << "输入错误!" << endl;
}
break;
default:
cout << "输入错误!" << endl;
break;
}
return 0;
}
```
阅读全文