用 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的唯一性验证,输入 超长字符的验证) 具备良好的性能, 程序要求具有良好的注释和代码美观性。
时间: 2024-02-06 13:13:10 浏览: 49
好的,下面是完整的实现代码,包括了对输入的验证和错误处理,以及注释和代码美观性的要求。
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int numStudents = 5; // 学生数量
const int numSubjects = 7; // 科目数量
int studentIds[numStudents] = {101, 102, 103, 104, 105}; // 学生学号
string studentNames[numStudents] = {"张三", "李四", "王五", "赵六", "孙七"}; // 学生姓名
string subjects[numSubjects] = {"", "语文", "数学", "英语", "物理", "化学", "生物"}; // 科目名称
double grades[numStudents][numSubjects] = {
{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}
}; // 成绩单
// 验证学号是否存在
bool isValidId(int id) {
for (int i = 0; i < numStudents; i++) {
if (id == studentIds[i]) {
return true;
}
}
return false;
}
// 验证科目名称是否存在
bool isValidSubject(string subject) {
for (int i = 1; i < numSubjects; i++) {
if (subject == subjects[i]) {
return true;
}
}
return false;
}
// 获取科目在数组中的索引
int getSubjectIndex(string subject) {
for (int i = 1; i < numSubjects; i++) {
if (subject == subjects[i]) {
return i;
}
}
return -1;
}
// 获取学生在数组中的索引
int getStudentIndex(int stuId) {
for (int i = 0; i < numStudents; i++) {
if (stuId == studentIds[i]) {
return i;
}
}
return -1;
}
// 查找某个学生在某门课程中的排名以及该科目的平均成绩
void findSubjectRank() {
int stuId;
string subject;
cout << "请输入学号和科目名称:" << endl;
cin >> stuId >> subject;
if (!isValidId(stuId)) {
cout << "学号不存在" << endl;
return;
}
if (!isValidSubject(subject)) {
cout << "科目名称不存在" << endl;
return;
}
int subjectIdx = getSubjectIndex(subject); // 获取科目在数组中的索引
double totalScore = 0;
int rank = 1;
double scores[numStudents];
// 计算每个学生的该科目成绩
for (int i = 0; i < numStudents; i++) {
scores[i] = grades[i][subjectIdx];
totalScore += scores[i];
}
double avgScore = totalScore / numStudents; // 计算平均成绩
// 对成绩进行排序,并找到该生在该科目中的排名
sort(scores, scores + numStudents);
for (int i = numStudents - 1; i >= 0; i--) {
if (stuId == studentIds[i]) {
cout << "学生 " << studentNames[i] << " 在科目 " << subject << " 中的排名是:" << rank << endl;
break;
}
rank++;
}
cout << "科目 " << subject << " 的平均成绩是:" << avgScore << endl;
}
// 查找某个学生在总成绩中的排名以及所有学生的总成绩排名
void findTotalRank() {
int stuId;
cout << "请输入学号:" << endl;
cin >> stuId;
if (!isValidId(stuId)) {
cout << "学号不存在" << endl;
return;
}
double totalScores[numStudents];
// 计算每个学生的总成绩
for (int i = 0; i < numStudents; i++) {
double totalScore = 0;
for (int j = 1; j < numSubjects; j++) {
totalScore += grades[i][j];
}
totalScores[i] = totalScore;
}
// 对总成绩进行排序,并找到该生在总成绩中的排名
sort(totalScores, totalScores + numStudents);
int rank = 1;
for (int i = numStudents - 1; i >= 0; i--) {
if (stuId == studentIds[i]) {
cout << "学生 " << studentNames[i] << " 在总成绩中的排名是:" << rank << endl;
break;
}
rank++;
}
cout << "所有学生的总成绩排名:" << endl;
for (int i = numStudents - 1; i >= 0; i--) {
cout << "排名 " << rank << ": 学生 " << studentNames[i] << ",总成绩为 " << totalScores[i] << endl;
rank++;
}
}
// 修改某个学生在某门课程中的成绩
void modifyGrade() {
int stuId;
string subject;
double newScore;
cout << "请输入学号、科目名称和修改后的成绩:" << endl;
cin >> stuId >> subject >> newScore;
if (!isValidId(stuId)) {
cout << "学号不存在" << endl;
return;
}
if (!isValidSubject(subject)) {
cout << "科目名称不存在" << endl;
return;
}
int subjectIdx = getSubjectIndex(subject); // 获取科目在数组中的索引
int stuIdx = getStudentIndex(stuId); // 获取学生在数组中的索引
if (stuIdx == -1) {
cout << "学号不存在" << endl;
return;
}
if (subjectIdx == -1) {
cout << "科目名称不存在" << endl;
return;
}
grades[stuIdx][subjectIdx] = newScore; // 修改成
阅读全文