用c语言写出对一个有N个学生的班级,每个学生有3门课程,分别为语文,数学,语言。该系统实现对班级成绩的录入、显示、删除等操作的管理。功能要求: (1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 (2)本系统显示这样的菜单: 系统功能选项: a、 数据导入及显示 b、新记录输入 c、 删除记录 1)显示每门课程成绩最高的学生的基本信息 2)显示每门课程的平均成绩 3)显示超过某门课程平均成绩的学生人数 g、 退出系统 注意:需保证学号唯一性 (该题目用数组完成)
时间: 2024-03-18 22:39:58 浏览: 19
好的,我可以帮您完成这个任务。以下是C语言代码实现,供您参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
// 学生结构体
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
float score[3]; // 三门课程成绩
} Student;
// 学生数组
Student students[MAX_STUDENT_NUM];
int studentCount = 0; // 学生数量
// 显示菜单
void showMenu() {
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 showData() {
int i, j;
printf("\n学号\t姓名\t语文\t数学\t英语\n");
for (i = 0; i < studentCount; i++) {
printf("%s\t%s", students[i].id, students[i].name);
for (j = 0; j < 3; j++) {
printf("\t%.1f", students[i].score[j]);
}
printf("\n");
}
}
// 新记录输入
void addData() {
printf("\n请输入学号:");
char id[20];
scanf("%s", id);
int i;
for (i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学号已存在!\n");
return;
}
}
strcpy(students[studentCount].id, id);
printf("请输入姓名:");
scanf("%s", students[studentCount].name);
printf("请输入语文成绩:");
scanf("%f", &students[studentCount].score[0]);
printf("请输入数学成绩:");
scanf("%f", &students[studentCount].score[1]);
printf("请输入英语成绩:");
scanf("%f", &students[studentCount].score[2]);
studentCount++;
printf("添加成功!\n");
}
// 删除记录
void deleteData() {
printf("\n请输入要删除学生的学号:");
char id[20];
scanf("%s", id);
int i, j;
for (i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
for (j = i; j < studentCount - 1; j++) {
students[j] = students[j + 1];
}
studentCount--;
printf("删除成功!\n");
return;
}
}
printf("学号不存在!\n");
}
// 显示每门课程成绩最高的学生的基本信息
void showMaxScore() {
int i, j;
for (i = 0; i < 3; i++) {
float maxScore = 0;
int maxIndex = -1;
for (j = 0; j < studentCount; j++) {
if (students[j].score[i] > maxScore) {
maxScore = students[j].score[i];
maxIndex = j;
}
}
printf("\n%s成绩最高的学生:\n", i == 0 ? "语文" : (i == 1 ? "数学" : "英语"));
printf("学号:%s\n姓名:%s\n成绩:%.1f\n", students[maxIndex].id, students[maxIndex].name, maxScore);
}
}
// 显示每门课程的平均成绩
void showAvgScore() {
int i, j;
float sum[3] = {0};
for (i = 0; i < studentCount; i++) {
for (j = 0; j < 3; j++) {
sum[j] += students[i].score[j];
}
}
printf("\n语文平均成绩:%.1f\n数学平均成绩:%.1f\n英语平均成绩:%.1f\n", sum[0] / studentCount, sum[1] / studentCount, sum[2] / studentCount);
}
// 显示超过某门课程平均成绩的学生人数
void showAboveAvgCount() {
int course;
printf("\n请输入课程编号:1-语文,2-数学,3-英语:");
scanf("%d", &course);
if (course < 1 || course > 3) {
printf("无效的课程编号!\n");
return;
}
float avgScore = 0;
int i;
for (i = 0; i < studentCount; i++) {
avgScore += students[i].score[course - 1];
}
avgScore /= studentCount;
int count = 0;
for (i = 0; i < studentCount; i++) {
if (students[i].score[course - 1] > avgScore) {
count++;
}
}
printf("\n超过%s平均成绩的学生人数:%d\n", course == 1 ? "语文" : (course == 2 ? "数学" : "英语"), count);
}
int main() {
char option;
do {
showMenu();
printf("\n请输入选项:");
scanf("%s", &option);
switch (option) {
case 'a': // 数据导入及显示
showData();
break;
case 'b': // 新记录输入
addData();
break;
case 'c': // 删除记录
deleteData();
break;
case '1': // 显示每门课程成绩最高的学生的基本信息
showMaxScore();
break;
case '2': // 显示每门课程的平均成绩
showAvgScore();
break;
case '3': // 显示超过某门课程平均成绩的学生人数
showAboveAvgCount();
break;
case 'g': // 退出系统
printf("\n谢谢使用!\n");
break;
default:
printf("\n无效的选项!\n");
break;
}
} while (option != 'g');
return 0;
}
```
这个程序可以实现您所需要的功能,同时保证学号的唯一性。