要求用 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-01-24 13:17:59 浏览: 37
下面是C++代码实现学生成绩管理系统的应用程序,满足上述要求:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int MAX_STU_NUM = 5; // 学生人数
const int MAX_SUB_NUM = 6; // 科目数
// 学生成绩结构体,包括学号和各科成绩
struct Student {
string id; // 学号
int scores[MAX_SUB_NUM]; // 各科成绩
double total_score; // 总成绩
int rank; // 排名
};
// 二维数组表示学生成绩单
Student scores[MAX_STU_NUM] = {
{"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}
};
// 计算总成绩和排名
void calc_scores() {
for (int i = 0; i < MAX_STU_NUM; i++) {
int total = 0;
for (int j = 0; j < MAX_SUB_NUM; j++) {
total += scores[i].scores[j];
}
scores[i].total_score = total;
}
sort(scores, scores + MAX_STU_NUM, [](const Student& s1, const Student& s2) {
return s1.total_score > s2.total_score;
});
for (int i = 0; i < MAX_STU_NUM; i++) {
scores[i].rank = i + 1;
}
}
// 根据学号和科目名查询平均成绩和排名
void query_by_id_and_sub() {
string id, sub;
cout << "请输入学号和科目名(用空格分隔):";
cin >> id >> sub;
double sum = 0.0;
int count = 0;
for (int i = 0; i < MAX_STU_NUM; i++) {
if (scores[i].id == id) {
sum += scores[i].scores[sub[0] - '0' - 1];
count++;
}
}
if (count == 0) {
cout << "该学号不存在!" << endl;
return;
}
double avg = sum / count;
cout << "平均成绩:" << avg << endl;
for (int i = 0; i < MAX_STU_NUM; i++) {
if (scores[i].id == id) {
if (scores[i].scores[sub[0] - '0' - 1] == avg) {
cout << "该生排名:" << scores[i].rank << endl;
break;
}
}
}
}
// 根据学号查询总成绩排名
void query_by_id() {
string id;
cout << "请输入学号:";
cin >> id;
for (int i = 0; i < MAX_STU_NUM; i++) {
if (scores[i].id == id) {
cout << "该生排名:" << scores[i].rank << endl;
break;
}
}
}
// 修改成绩
void modify_score() {
string id, sub;
int score;
cout << "请输入学号、科目名和修改的成绩(用空格分隔):";
cin >> id >> sub >> score;
for (int i = 0; i < MAX_STU_NUM; i++) {
if (scores[i].id == id) {
scores[i].scores[sub[0] - '0' - 1] = score;
calc_scores(); // 重新计算总成绩和排名
cout << "修改成功!" << endl;
return;
}
}
cout << "该学号不存在!" << endl;
}
// 显示菜单
void show_menu() {
cout << "请选择业务:" << endl;
cout << "1. 查询学号和科目名的平均成绩和排名" << endl;
cout << "2. 查询学号的总成绩排名" << endl;
cout << "3. 修改成绩" << endl;
cout << "4. 退出程序" << endl;
}
int main() {
calc_scores(); // 计算总成绩和排名
show_menu(); // 显示菜单
int choice;
while (true) {
cout << "请选择业务编号:";
cin >> choice;
switch (choice) {
case 1:
query_by_id_and_sub();
break;
case 2:
query_by_id();
break;
case 3:
modify_score();
break;
case 4:
return 0;
default:
cout << "无效的业务编号!" << endl;
break;
}
}
return 0;
}
```
运行程序后,可以选择要执行的业务:
```
请选择业务:
1. 查询学号和科目名的平均成绩和排名
2. 查询学号的总成绩排名
3. 修改成绩
4. 退出程序
请选择业务编号:
```
选择不同的业务,程序会提示输入相应信息,然后输出结果。例如,查询学号为101,科目为语文的平均成绩和排名:
```
请输入学号和科目名(用空格分隔):101 1
平均成绩:96
该生排名:1
请选择业务编号:
```
如果输入的学号或科目不存在,则会提示错误信息。修改成绩后,程序会重新计算总成绩和排名。
阅读全文