用c语言写学生成绩管理系统,要求包括学号,姓名,期末成绩,平时成绩,管理成绩信息,总分,平均分,最高最低分,及格率,学号姓名查找,成绩由高到低排序,各分数段人数显示
时间: 2023-06-24 10:03:04 浏览: 81
以下是一个简单的学生成绩管理系统的C语言实现,包括上述所有要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最大学生数
#define MAX_NAME_LEN 20 // 最大姓名长度
typedef struct {
char name[MAX_NAME_LEN]; // 姓名
int id; // 学号
float final_score; // 期末成绩
float daily_score; // 平时成绩
float total_score; // 总分
} Student;
int num_students = 0;
Student students[MAX_STUDENTS];
// 计算总分和平均分
void calculate_scores() {
float total_scores = 0;
for (int i = 0; i < num_students; i++) {
students[i].total_score = students[i].final_score + students[i].daily_score;
total_scores += students[i].total_score;
}
float average_score = total_scores / num_students;
printf("总分:%.2f 平均分:%.2f\n", total_scores, average_score);
}
// 计算最高分和最低分
void calculate_extremes() {
float max_score = students[0].total_score;
float min_score = students[0].total_score;
for (int i = 1; i < num_students; i++) {
if (students[i].total_score > max_score) {
max_score = students[i].total_score;
}
if (students[i].total_score < min_score) {
min_score = students[i].total_score;
}
}
printf("最高分:%.2f 最低分:%.2f\n", max_score, min_score);
}
// 计算及格率
void calculate_pass_rate() {
int num_pass = 0;
for (int i = 0; i < num_students; i++) {
if (students[i].total_score >= 60) {
num_pass++;
}
}
float pass_rate = (float)num_pass / num_students;
printf("及格率:%.2f%%\n", pass_rate * 100);
}
// 按总分从高到低排序
void sort_by_score() {
for (int i = 0; i < num_students; i++) {
for (int j = i + 1; j < num_students; j++) {
if (students[i].total_score < students[j].total_score) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
// 统计各分数段人数
void count_scores() {
int num_range1 = 0, num_range2 = 0, num_range3 = 0, num_range4 = 0, num_range5 = 0;
for (int i = 0; i < num_students; i++) {
float score = students[i].total_score;
if (score >= 90) {
num_range1++;
} else if (score >= 80) {
num_range2++;
} else if (score >= 70) {
num_range3++;
} else if (score >= 60) {
num_range4++;
} else {
num_range5++;
}
}
printf("90分以上: %d人\n", num_range1);
printf("80分~90分: %d人\n", num_range2);
printf("70分~80分: %d人\n", num_range3);
printf("60分~70分: %d人\n", num_range4);
printf("60分以下: %d人\n", num_range5);
}
// 添加学生信息
void add_student() {
if (num_students >= MAX_STUDENTS) {
printf("学生信息已满,无法添加!\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", students[num_students].name);
printf("请输入学生学号:");
scanf("%d", &students[num_students].id);
printf("请输入学生期末成绩:");
scanf("%f", &students[num_students].final_score);
printf("请输入学生平时成绩:");
scanf("%f", &students[num_students].daily_score);
num_students++;
printf("添加成功!\n");
}
// 显示学生信息
void show_students() {
printf("学生信息如下:\n");
printf("姓名\t学号\t期末成绩\t平时成绩\t总分\n");
for (int i = 0; i < num_students; i++) {
printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n", students[i].name, students[i].id, students[i].final_score, students[i].daily_score, students[i].total_score);
}
}
// 查找学生
void search_student() {
printf("请输入要查找的学生姓名:");
char name[MAX_NAME_LEN];
scanf("%s", name);
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("姓名\t学号\t期末成绩\t平时成绩\t总分\n");
printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n", students[i].name, students[i].id, students[i].final_score, students[i].daily_score, students[i].total_score);
return;
}
}
printf("未找到学生!\n");
}
int main() {
int choice;
while (1) {
printf("\n");
printf("1. 添加学生信息\n");
printf("2. 显示学生信息\n");
printf("3. 计算总分和平均分\n");
printf("4. 计算最高分和最低分\n");
printf("5. 计算及格率\n");
printf("6. 按总分从高到低排序\n");
printf("7. 统计各分数段人数\n");
printf("8. 查找学生信息\n");
printf("9. 退出程序\n");
printf("请选择操作(1-9):");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
show_students();
break;
case 3:
calculate_scores();
break;
case 4:
calculate_extremes();
break;
case 5:
calculate_pass_rate();
break;
case 6:
sort_by_score();
printf("排序成功!\n");
break;
case 7:
count_scores();
break;
case 8:
search_student();
break;
case 9:
exit(0);
default:
printf("无效的操作!\n");
break;
}
}
return 0;
}
```
注意,这只是一个简单的实现,仅供参考。实际上,一个学生成绩管理系统可能还需要考虑更多的功能和细节,比如对输入进行合法性检查、对学号进行唯一性检查、对数据进行持久化存储等等。