要求用 C++语言设计程序,设计实现学生成绩管理系统的应用程序,程序具 体要求如下:1、 输入学号和科目名称(如语文、数学等)查询所有同学该科门科目的平 均成绩以及该生该门科目的排名。 2、 输入学号,输出所有同学根据总成绩的排名,并输出该学号的排名。 3、 输入学号、科目名称、修改的成绩分数对成绩单中成绩进行修改。 4、程序在最开始可以选择想执行的业务选项。
时间: 2023-12-16 13:03:35 浏览: 70
好的,我可以帮您设计实现这个学生成绩管理系统的应用程序。
首先,我们需要设计数据结构来存储学生的成绩信息,可以使用一个结构体来表示每个学生和他们的成绩信息:
```cpp
struct Student {
string id; // 学号
string name; // 姓名
double scores[NUM_SUBJECTS]; // 成绩数组,包含 NUM_SUBJECTS 个科目的成绩
double total_score; // 总成绩
int rank; // 总成绩排名
int subject_rank[NUM_SUBJECTS]; // 每个科目的排名
};
```
其中,`NUM_SUBJECTS` 表示科目数量,可以在程序开始时预先定义好。
接下来,我们需要设计数据结构来存储所有学生的信息,可以使用一个动态数组来存储所有学生的结构体:
```cpp
vector<Student> students;
```
在程序运行时,我们需要从文件或数据库中读取学生信息并存储到这个数组中。
接下来,我们可以实现具体的功能:
1. 查询同学科目平均成绩和排名
```cpp
void query_subject_scores() {
string id, subject_name;
cout << "请输入学号和科目名称(以空格分隔):" << endl;
cin >> id >> subject_name;
int subject_index = get_subject_index(subject_name);
if (subject_index == -1) { // 没有这个科目
cout << "没有找到该科目!" << endl;
return;
}
double sum_scores = 0;
int count = 0;
for (int i = 0; i < students.size(); i++) {
if (students[i].scores[subject_index] >= 0) { // 有成绩
sum_scores += students[i].scores[subject_index];
count++;
}
}
double average_score = sum_scores / count;
// 计算学生排名
for (int i = 0; i < students.size(); i++) {
if (students[i].scores[subject_index] >= 0) { // 有成绩
students[i].subject_rank[subject_index] = 1;
for (int j = 0; j < students.size(); j++) {
if (students[j].scores[subject_index] >= 0 && students[j].total_score > students[i].total_score) {
students[i].subject_rank[subject_index]++;
}
}
} else { // 没有成绩
students[i].subject_rank[subject_index] = -1;
}
}
// 输出结果
cout << "该科目平均成绩为:" << average_score << endl;
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
cout << "该生排名为:" << students[i].subject_rank[subject_index] << endl;
break;
}
}
}
```
2. 查询同学总成绩排名
```cpp
void query_total_scores() {
string id;
cout << "请输入学号:" << endl;
cin >> id;
// 计算学生总成绩
for (int i = 0; i < students.size(); i++) {
double total_score = 0;
for (int j = 0; j < NUM_SUBJECTS; j++) {
if (students[i].scores[j] >= 0) { // 有成绩
total_score += students[i].scores[j];
}
}
students[i].total_score = total_score;
}
// 计算学生排名
for (int i = 0; i < students.size(); i++) {
students[i].rank = 1;
for (int j = 0; j < students.size(); j++) {
if (students[j].total_score > students[i].total_score) {
students[i].rank++;
}
}
}
// 输出结果
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
cout << "该生排名为:" << students[i].rank << endl;
break;
}
}
// 按总成绩排序输出所有学生
sort(students.begin(), students.end(), [](const Student& s1, const Student& s2) {
return s1.total_score > s2.total_score;
});
cout << "学号\t姓名\t总成绩\t排名" << endl;
for (int i = 0; i < students.size(); i++) {
cout << students[i].id << "\t" << students[i].name << "\t" << students[i].total_score << "\t" << students[i].rank << endl;
}
}
```
3. 修改成绩
```cpp
void modify_score() {
string id, subject_name;
double new_score;
cout << "请输入学号、科目名称和新的成绩(以空格分隔):" << endl;
cin >> id >> subject_name >> new_score;
int subject_index = get_subject_index(subject_name);
if (subject_index == -1) { // 没有这个科目
cout << "没有找到该科目!" << endl;
return;
}
// 修改成绩
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
students[i].scores[subject_index] = new_score;
break;
}
}
}
```
4. 程序入口
```cpp
void print_menu() {
cout << "请选择要执行的业务:" << endl;
cout << "1. 查询同学科目平均成绩和排名" << endl;
cout << "2. 查询同学总成绩排名" << endl;
cout << "3. 修改成绩" << endl;
cout << "4. 退出程序" << endl;
}
int main() {
// 初始化学生信息
while (true) {
print_menu();
int choice;
cin >> choice;
switch (choice) {
case 1:
query_subject_scores();
break;
case 2:
query_total_scores();
break;
case 3:
modify_score();
break;
case 4:
return 0;
default:
cout << "请选择正确的业务选项!" << endl;
break;
}
}
}
```
其中,`get_subject_index` 函数可以用来获取某个科目在成绩数组中的下标:
```cpp
int get_subject_index(const string& subject_name) {
for (int i = 0; i < NUM_SUBJECTS; i++) {
if (subject_name == SUBJECT_NAMES[i]) {
return i;
}
}
return -1; // 没有找到该科目
}
```
完整代码如下:
阅读全文