学生成绩管理系统(用c语言实现)
1、问题描述设计一个简单的学生成绩管理系统,可录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。2、基本要求(1)输入各学生多门课程的成绩,并存储;(2)按各门课程成绩排序,并生成相应的文件输出;(3)计算每人的平均成绩,按平均成绩排序,并生成文件;(4)求出各门课程的平均成绩、最高分、最低分、不及格人数、60-69 分人数,70-79 分人数、80-89 分人数、90 分以上人数;(5)根据姓名或学号查询某人的各门课成绩,重名情况也能处理
解题思路:1. 数据结构选择:可以使用二维数组存储学生成绩。2. 信息输入与存储:录入学生多门课程成绩,存储在二维数组中。3. 排序与文件输出:按课程成绩排序,生成文件;按平均成绩排序,生成文件。4. 统计分析:计算并输出各课程的平均成绩、最高分、最低分及各分数段人数。5. 查询功能:按姓名或学号查询学生成绩,需处理重名情况。
#学生成绩管理系统(用c语言实现)#
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 小魏冬琅 2024-06-17 09:00关注
这个代码应该能实现你的要求,就是不知道版本环境是否适配。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENTS 100 #define MAX_SUBJECTS 10 #define NAME_LEN 50 // 学生结构体 typedef struct { char name[NAME_LEN]; int student_id; float scores[MAX_SUBJECTS]; float average; } Student; // 科目结构体 typedef struct { char name[NAME_LEN]; float scores[MAX_STUDENTS]; float average; float max_score; float min_score; int count_60_69; int count_70_79; int count_80_89; int count_90_above; int fail_count; } Subject; // 全局变量存储学生和课程信息 Student students[MAX_STUDENTS]; Subject subjects[MAX_SUBJECTS]; int student_count = 0; int subject_count = 0; // 录入课程信息 void input_subjects() { printf("请输入课程数量: "); scanf("%d", &subject_count); for (int i = 0; i < subject_count; i++) { printf("请输入课程名称: "); scanf("%s", subjects[i].name); subjects[i].max_score = 0; subjects[i].min_score = 100; subjects[i].count_60_69 = 0; subjects[i].count_70_79 = 0; subjects[i].count_80_89 = 0; subjects[i].count_90_above = 0; subjects[i].fail_count = 0; subjects[i].average = 0.0; } } // 录入学生成绩信息 void input_student_scores() { printf("请输入学生姓名: "); scanf("%s", students[student_count].name); printf("请输入学生学号: "); scanf("%d", &students[student_count].student_id); float total = 0.0; for (int j = 0; j < subject_count; j++) { printf("请输入%s成绩: ", subjects[j].name); scanf("%f", &students[student_count].scores[j]); // 更新学科成绩信息 subjects[j].scores[student_count] = students[student_count].scores[j]; // 更新课程平均分 subjects[j].average += students[student_count].scores[j] / student_count; // 更新课程最高分、最低分 if (students[student_count].scores[j] > subjects[j].max_score) { subjects[j].max_score = students[student_count].scores[j]; } if (students[student_count].scores[j] < subjects[j].min_score) { subjects[j].min_score = students[student_count].scores[j]; } // 统计各分数段人数 if (students[student_count].scores[j] >= 90) { subjects[j].count_90_above++; } else if (students[student_count].scores[j] >= 80) { subjects[j].count_80_89++; } else if (students[student_count].scores[j] >= 70) { subjects[j].count_70_79++; } else if (students[student_count].scores[j] >= 60) { subjects[j].count_60_69++; } else { subjects[j].fail_count++; } // 更新学生成绩总分 total += students[student_count].scores[j]; } // 计算并存储学生平均分 students[student_count].average = total / subject_count; student_count++; } // 按课程成绩排序 void sort_by_subject(int subject_index) { for (int i = 0; i < student_count - 1; ++i) { for (int j = 0; j < student_count - 1 - i; ++j) { if (students[j].scores[subject_index] < students[j + 1].scores[subject_index]) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } } // 按平均成绩排序 void sort_by_average() { for (int i = 0; i < student_count - 1; ++i) { for (int j = 0; j < student_count - 1 - i; ++j) { if (students[j].average < students[j + 1].average) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } } // 统计各科目的统计数据 void calculate_statistics() { for (int i = 0; i < subject_count; ++i) { subjects[i].average = 0.0; for (int j = 0; j < student_count; ++j) { subjects[i].average += subjects[i].scores[j]; } subjects[i].average /= student_count; } } // 导出成绩到文件 void export_scores(const char *filename, int by_subject) { FILE *fp = fopen(filename, "w"); if (fp == NULL) { printf("无法创建文件\n"); return; } if (by_subject) { for (int i = 0; i < subject_count; ++i) { fprintf(fp, "课程:%s\n", subjects[i].name); for (int j = 0; j < student_count; ++j) { fprintf(fp, "学生:%s,成绩:%.2f\n", students[j].name, students[j].scores[i]); } fprintf(fp, "\n"); } } else { for (int i = 0; i < student_count; ++i) { fprintf(fp, "学生:%s,平均成绩:%.2f\n", students[i].name, students[i].average); } } fclose(fp); } // 查询某个学生的成绩 void query_student() { char query[NAME_LEN]; printf("请输入要查询的学生姓名或学号:"); scanf("%s", query); for (int i = 0; i < student_count; ++i) { if (strcmp(students[i].name, query) == 0 || atoi(query) == students[i].student_id) { printf("学生:%s,学号:%d\n", students[i].name, students[i].student_id); for (int j = 0; j < subject_count; ++j) { printf("%s:%.2f\n", subjects[j].name, students[i].scores[j]); } return; } } printf("未找到该学生\n"); } int main() { int choice; // 录入课程信息 input_subjects(); // 主循环 while (1) { printf("\n1. 录入学生成绩\n"); printf("2. 按成绩排序并导出\n"); printf("3. 按平均成绩排序并导出\n"); printf("4. 统计各科目数据\n"); printf("5. 查询学生成绩\n"); printf("6. 退出\n"); printf("请选择操作: "); scanf("%d", &choice); switch (choice) { case 1: input_student_scores(); break; case 2: for (int i = 0; i < subject_count; ++i) { sort_by_subject(i); } export_scores("subject_scores.txt", 1); break; case 3: sort_by_average(); export_scores("average_scores.txt", 0); break; case 4: calculate_statistics(); for (int i = 0; i < subject_count; ++i) { printf("\n课程:%s\n", subjects[i].name); printf("平均成绩:%.2f\n", subjects[i].average); printf("最高成绩:%.2f\n", subjects[i].max_score); printf("最低成绩:%.2f\n", subjects[i].min_score); printf("不及格人数:%d\n", subjects[i].fail_count); printf("60-69分人数:%d\n", subjects[i].count_60_69); printf("70-79分人数:%d\n", subjects[i].count_70_79); printf("80-89分人数:%d\n", subjects[i].count_80_89); printf("90分以上人数:%d\n", subjects[i].count_90_above); } break; case 5: query_student(); break; case 6: exit(0); break; default: printf("无效输入,请重试\n"); break; } } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 plus模型贡献度为nan
- ¥25 使用cube ai 导入onnx模型时报错
- ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
- ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
- ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
- ¥15 使用华为ENSP软件模拟实现该实验拓扑
- ¥15 通过程序读取主板上报税口的数据
- ¥15 matlab修改为并行
- ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373
- ¥15 (关键词-运算放大器)