要求用 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 17:08:31 浏览: 47
以下是一个简单的学生成绩管理系统的C++程序示例:
```c++
#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
const int MAX_STUDENT = 100;
const int MAX_SUBJECT = 6;
struct Student {
int id;
int scores[MAX_SUBJECT];
double total;
double avg;
int rank;
};
void inputScores(Student students[], int n) {
for (int i = 0; i < n; i++) {
cout << "请输入第" << i+1 << "个学生的学号和成绩(语文 数学 英语 物理 化学 生物):" << endl;
cin >> students[i].id;
for (int j = 0; j < MAX_SUBJECT; j++) {
cin >> students[i].scores[j];
students[i].total += students[i].scores[j];
}
students[i].avg = students[i].total / MAX_SUBJECT;
}
}
void printScores(Student students[], int n) {
cout << "学号\t\t语文\t数学\t英语\t物理\t化学\t生物\t总分\t平均分" << endl;
for (int i = 0; i < n; i++) {
cout << setw(4) << students[i].id << "\t";
for (int j = 0; j < MAX_SUBJECT; j++) {
cout << setw(4) << students[i].scores[j] << "\t";
}
cout << setw(4) << students[i].total << "\t";
cout << setw(4) << students[i].avg << endl;
}
}
void sortByTotal(Student students[], int n) {
for (int i = 0; i < n; i++) {
students[i].rank = 1;
for (int j = 0; j < n; j++) {
if (students[j].total > students[i].total) {
students[i].rank++;
}
}
}
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
if (students[i].total < students[j].total) {
swap(students[i], students[j]);
}
}
}
}
void sortBySubject(Student students[], int n, int subject) {
for (int i = 0; i < n; i++) {
students[i].rank = 1;
for (int j = 0; j < n; j++) {
if (students[j].scores[subject] > students[i].scores[subject]) {
students[i].rank++;
}
}
}
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
if (students[i].scores[subject] < students[j].scores[subject]) {
swap(students[i], students[j]);
}
}
}
}
void modifyScore(Student students[], int n, int id, int subject, int score) {
for (int i = 0; i < n; i++) {
if (students[i].id == id) {
students[i].total -= students[i].scores[subject];
students[i].scores[subject] = score;
students[i].total += score;
students[i].avg = students[i].total / MAX_SUBJECT;
break;
}
}
}
int main() {
Student students[MAX_STUDENT];
int n;
cout << "请输入学生人数:" << endl;
cin >> n;
inputScores(students, n);
int choice;
do {
cout << "请选择操作:" << endl;
cout << "1. 查询同学科目平均成绩和排名" << endl;
cout << "2. 查询同学总分排名" << endl;
cout << "3. 修改成绩" << endl;
cout << "0. 退出程序" << endl;
cin >> choice;
switch (choice) {
case 1: {
int id, subject;
cout << "请输入学号和科目编号(0-语文,1-数学,2-英语,3-物理,4-化学,5-生物):" << endl;
cin >> id >> subject;
sortBySubject(students, n, subject);
for (int i = 0; i < n; i++) {
if (students[i].id == id) {
cout << "该同学的排名为:" << students[i].rank << endl;
cout << "该科目平均成绩为:" << students[i].scores[subject] << endl;
break;
}
}
break;
}
case 2: {
int id;
cout << "请输入学号:" << endl;
cin >> id;
sortByTotal(students, n);
for (int i = 0; i < n; i++) {
if (students[i].id == id) {
cout << "该同学的排名为:" << students[i].rank << endl;
break;
}
}
break;
}
case 3: {
int id, subject, score;
cout << "请输入学号、科目编号和修改后的成绩:" << endl;
cin >> id >> subject >> score;
modifyScore(students, n, id, subject, score);
break;
}
case 0:
break;
default:
cout << "无效操作,请重新选择" << endl;
break;
}
} while (choice != 0);
return 0;
}
```
该程序使用了结构体来存储每个学生的信息,并通过二维数组来存储所有学生的成绩。程序实现了输入学生成绩、查询同学科目平均成绩和排名、查询同学总分排名、修改成绩等功能,并提供了友好的用户交互界面。注意,该程序没有进行输入验证和错误处理,需要根据实际情况进行完善。