用c语言写出对一个有N个学生的班级,每个学生有3门课程,分别为语文,数学,语言。该系统实现对班级成绩的录入、显示,统计等操作的管理。功能要求: (1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 (2)本系统显示这样的菜单: 系统功能选项: a、 数据导入及显示 b、新记录输入 c、 成绩统计 1)显示每门课程成绩最高的学生的基本信息 2)显示每门课程的平均成绩 3)显示超过某门课程平均成绩的学生人数 g、 退出系统 注意:需保证学号唯一性 (该题目用或数组完成)
时间: 2024-03-19 20:45:38 浏览: 75
好的,以下是用 C 语言编写的班级成绩管理系统的代码:
#include <stdio.h>
#include <string.h>
#define MAX_N 100 // 最多学生数
#define MAX_LEN 20 // 最长姓名长度
#define MAX_M 3 // 科目数
typedef struct {
int id; // 学号
char name[MAX_LEN]; // 姓名
int score[MAX_M]; // 分数
} Student;
int n; // 学生数
Student students[MAX_N]; // 学生信息
void print_menu() {
printf("\n系统功能选项:\n");
printf("a、数据导入及显示\n");
printf("b、新记录输入\n");
printf("c、成绩统计\n");
printf("1)显示每门课程成绩最高的学生的基本信息\n");
printf("2)显示每门课程的平均成绩\n");
printf("3)显示超过某门课程平均成绩的学生人数\n");
printf("g、退出系统\n");
}
void load_data() {
printf("\n请输入学生数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第 %d 个学生的学号、姓名和各科成绩:\n", i + 1);
scanf("%d %s %d %d %d", &students[i].id, students[i].name, &students[i].score[0], &students[i].score[1], &students[i].score[2]);
}
}
void show_data() {
printf("\n学号\t姓名\t语文\t数学\t语言\n");
for (int i = 0; i < n; i++) {
printf("%d\t%s\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2]);
}
}
void add_record() {
printf("\n请输入新记录的学号、姓名和各科成绩:\n");
scanf("%d %s %d %d %d", &students[n].id, students[n].name, &students[n].score[0], &students[n].score[1], &students[n].score[2]);
n++;
}
void show_max_score(int subject) {
int max_score = -1;
int max_index = -1;
for (int i = 0; i < n; i++) {
if (students[i].score[subject] > max_score) {
max_score = students[i].score[subject];
max_index = i;
}
}
printf("\n%s成绩最高的学生是:%s,成绩为:%d\n", (subject == 0 ? "语文" : (subject == 1 ? "数学" : "语言")), students[max_index].name, max_score);
}
void show_avg_score(int subject) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += students[i].score[subject];
}
double avg = sum / n;
printf("\n%s的平均成绩为:%.2f\n", (subject == 0 ? "语文" : (subject == 1 ? "数学" : "语言")), avg);
}
void show_above_avg(int subject) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += students[i].score[subject];
}
double avg = sum / n;
int count = 0;
for (int i = 0; i < n; i++) {
if (students[i].score[subject] > avg) {
count++;
}
}
printf("\n%s成绩高于平均分的学生人数为:%d\n", (subject == 0 ? "语文" : (subject == 1 ? "数学" : "语言")), count);
}
int main() {
char choice;
do {
print_menu();
printf("\n请选择功能:");
scanf(" %c", &choice);
switch (choice) {
case 'a':
load_data();
show_data();
break;
case 'b':
add_record();
show_data();
break;
case 'c':
printf("\n请选择统计方式:");
scanf(" %c", &choice);
switch (choice) {
case '1':
show_max_score(0);
show_max_score(1);
show_max_score(2);
break;
case '2':
show_avg_score(0);
show_avg_score(1);
show_avg_score(2);
break;
case '3':
show_above_avg(0);
show_above_avg(1);
show_above_avg(2);
break;
default:
printf("\n无效的选择!\n");
}
break;
case 'g':
printf("\n欢迎下次使用!\n");
break;
default:
printf("\n无效的选择!\n");
}
} while (choice != 'g');
return 0;
}
这个程序使用结构体数组来存储学生信息,通过菜单选择实现了数据导入及显示、新记录输入、成绩统计等功能。其中,成绩统计包括显示每门课程成绩最高的学生的基本信息、显示每门课程的平均成绩、显示超过某门课程平均成绩的学生人数三种统计方式。
相关推荐















