用c语言写学生成绩管理系统要包括学号,姓名,期末成绩,平时成绩,总分,最高最低分,平均分,及格率,学号姓名查找,成绩由高到低排序,各分数段人数显示,修改学生信息,显示全部学生信息
时间: 2024-05-13 16:17:28 浏览: 8
以下是一份简单的学生成绩管理系统的C语言代码,包含了您要求的所有功能:
```C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
// 定义学生结构体
typedef struct {
char id[10];
char name[20];
float final_score;
float daily_score;
float total_score;
} Student;
// 定义全局变量
Student students[MAX_STUDENTS];
int student_count = 0;
// 函数声明
void add_student();
void find_student();
void modify_student();
void show_all_students();
void sort_students();
void show_score_distribution();
float max_score();
float min_score();
float avg_score();
float pass_rate();
int main() {
int choice = 0;
while (1) {
printf("\n1. 添加学生\n");
printf("2. 查找学生\n");
printf("3. 修改学生信息\n");
printf("4. 显示全部学生信息\n");
printf("5. 按成绩排序\n");
printf("6. 显示分数段人数\n");
printf("7. 退出\n");
printf("\n请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
find_student();
break;
case 3:
modify_student();
break;
case 4:
show_all_students();
break;
case 5:
sort_students();
break;
case 6:
show_score_distribution();
break;
case 7:
exit(0);
default:
printf("无效选项,请重新输入。\n");
}
}
return 0;
}
// 添加学生
void add_student() {
if (student_count == MAX_STUDENTS) {
printf("已达到最大学生数量,无法添加。\n");
return;
}
Student s;
printf("\n请输入学生信息:\n");
printf("学号:");
scanf("%s", s.id);
printf("姓名:");
scanf("%s", s.name);
printf("期末成绩:");
scanf("%f", &s.final_score);
printf("平时成绩:");
scanf("%f", &s.daily_score);
s.total_score = s.final_score + s.daily_score;
students[student_count++] = s;
printf("学生信息添加成功!\n");
}
// 查找学生
void find_student() {
char id[10];
printf("\n请输入要查找的学生学号:");
scanf("%s", id);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("\n学号:%s\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("期末成绩:%.2f\n", students[i].final_score);
printf("平时成绩:%.2f\n", students[i].daily_score);
printf("总分:%.2f\n", students[i].total_score);
return;
}
}
printf("未找到该学生。\n");
}
// 修改学生信息
void modify_student() {
char id[10];
printf("\n请输入要修改的学生学号:");
scanf("%s", id);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("\n请输入学生信息:\n");
printf("学号:%s\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("期末成绩:");
scanf("%f", &students[i].final_score);
printf("平时成绩:");
scanf("%f", &students[i].daily_score);
students[i].total_score = students[i].final_score + students[i].daily_score;
printf("学生信息修改成功!\n");
return;
}
}
printf("未找到该学生。\n");
}
// 显示全部学生信息
void show_all_students() {
printf("\n学号\t姓名\t期末成绩\t平时成绩\t总分\n");
for (int i = 0; i < student_count; i++) {
printf("%s\t%s\t%.2f\t\t%.2f\t\t%.2f\n", students[i].id, students[i].name, students[i].final_score, students[i].daily_score, students[i].total_score);
}
printf("\n最高分:%.2f\n", max_score());
printf("最低分:%.2f\n", min_score());
printf("平均分:%.2f\n", avg_score());
printf("及格率:%.2f%%\n", pass_rate() * 100);
}
// 按成绩排序
void sort_students() {
for (int i = 0; i < student_count - 1; i++) {
for (int j = i + 1; j < student_count; j++) {
if (students[i].total_score < students[j].total_score) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("\n学号\t姓名\t期末成绩\t平时成绩\t总分\n");
for (int i = 0; i < student_count; i++) {
printf("%s\t%s\t%.2f\t\t%.2f\t\t%.2f\n", students[i].id, students[i].name, students[i].final_score, students[i].daily_score, students[i].total_score);
}
}
// 显示分数段人数
void show_score_distribution() {
int a_count = 0, b_count = 0, c_count = 0, d_count = 0, e_count = 0;
for (int i = 0; i < student_count; i++) {
if (students[i].total_score >= 90) {
a_count++;
} else if (students[i].total_score >= 80) {
b_count++;
} else if (students[i].total_score >= 70) {
c_count++;
} else if (students[i].total_score >= 60) {
d_count++;
} else {
e_count++;
}
}
printf("\n90分以上:%d人\n", a_count);
printf("80-89分:%d人\n", b_count);
printf("70-79分:%d人\n", c_count);
printf("60-69分:%d人\n", d_count);
printf("60分以下:%d人\n", e_count);
}
// 计算最高分
float max_score() {
float max = students[0].total_score;
for (int i = 1; i < student_count; i++) {
if (students[i].total_score > max) {
max = students[i].total_score;
}
}
return max;
}
// 计算最低分
float min_score() {
float min = students[0].total_score;
for (int i = 1; i < student_count; i++) {
if (students[i].total_score < min) {
min = students[i].total_score;
}
}
return min;
}
// 计算平均分
float avg_score() {
float sum = 0;
for (int i = 0; i < student_count; i++) {
sum += students[i].total_score;
}
return sum / student_count;
}
// 计算及格率
float pass_rate() {
int pass_count = 0;
for (int i = 0; i < student_count; i++) {
if (students[i].total_score >= 60) {
pass_count++;
}
}
return (float) pass_count / student_count;
}
```
使用方法:
- 运行程序后,选择菜单中的选项进行操作。
- 添加学生:输入学生信息,包括学号、姓名、期末成绩和平时成绩,总分会自动计算。
- 查找学生:输入要查找的学生学号,如果存在,则输出学生信息。
- 修改学生信息:输入要修改的学生学号,如果存在,则输入新的学生信息,包括期末成绩和平时成绩,总分会自动计算。
- 显示全部学生信息:按表格形式输出所有学生的学号、姓名、期末成绩、平时成绩和总分,同时显示最高分、最低分、平均分和及格率。
- 按成绩排序:按总分由高到低排序,并按表格形式输出所有学生的学号、姓名、期末成绩、平时成绩和总分。
- 显示分数段人数:按分数段统计学生人数,并输出每个分数段的人数。