某班最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体 门数由键盘输入)。请使用模块化程序设计方法编程实现如下菜单驱动的学生成绩管理系统:(1)输入每个学生的学号、姓名和各科考试成绩;
时间: 2023-12-30 19:02:34 浏览: 106
好的,我会根据您的要求编写一个菜单驱动的学生成绩管理系统,实现输入每个学生的学号、姓名和各科考试成绩的功能。以下是完整的程序代码:
```c
#include <stdio.h>
#define MAX_STUDENT_NUM 30
#define MAX_COURSE_NUM 6
int student_num; // 学生人数
int course_num; // 课程数
struct Student {
int id; // 学号
char name[20]; // 姓名
int score[MAX_COURSE_NUM]; // 各科考试成绩
};
struct Student students[MAX_STUDENT_NUM]; // 定义一个学生数组
// 输入每个学生的学号、姓名和各科考试成绩
void input_scores() {
printf("请输入学生人数:");
scanf("%d", &student_num);
printf("请输入课程数:");
scanf("%d", &course_num);
for (int i = 0; i < student_num; i++) {
printf("请输入第%d个学生的学号、姓名和各科考试成绩:\n", i + 1);
scanf("%d%s", &students[i].id, students[i].name);
for (int j = 0; j < course_num; j++) {
scanf("%d", &students[i].score[j]);
}
}
printf("输入完成。\n");
}
// 显示菜单
void show_menu() {
printf("\n");
printf("学生成绩管理系统菜单\n");
printf("====================\n");
printf("1. 输入学生信息\n");
printf("2. 计算每门课程的总分和平均分\n");
printf("0. 退出程序\n");
}
// 计算每门课程的总分和平均分
void calc_course_score() {
int total_score[MAX_COURSE_NUM] = {0}; // 定义每门课程的总分数组
float avg_score[MAX_COURSE_NUM] = {0}; // 定义每门课程的平均分数组
for (int i = 0; i < student_num; i++) {
for (int j = 0; j < course_num; j++) {
total_score[j] += students[i].score[j];
}
}
for (int i = 0; i < course_num; i++) {
avg_score[i] = (float)total_score[i] / student_num;
printf("第%d门课程的总分为:%d,平均分为:%.2f\n", i + 1, total_score[i], avg_score[i]);
}
}
int main() {
int choice; // 用户选择的菜单选项
do {
show_menu(); // 显示菜单
printf("请选择菜单选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_scores(); // 输入每个学生的学号、姓名和各科考试成绩
break;
case 2:
calc_course_score(); // 计算每门课程的总分和平均分
break;
case 0:
printf("程序已退出。\n");
break;
default:
printf("错误的菜单选项,请重新选择。\n");
}
} while (choice != 0);
return 0;
}
```
运行程序后,程序会显示一个菜单,让用户选择需要进行的操作。选择菜单选项 1 可以输入每个学生的学号、姓名和各科考试成绩,选择菜单选项 2 可以计算每门课程的总分和平均分。用户可以选择菜单选项 0 退出程序。
阅读全文