用C语言实现一个学生信息管理系统,学生基本信息包括学号、姓名、三门课成绩以及个人平均成绩,有不超过70个学生的数据,要求能够建立学生基本信息(结构体数组)、按学号查询学生基本信息、计算学生个人平均成绩、按学生某一门课程或平均成绩高低进行排序、修改某个学生某门课程成绩、输出所有学生信息功能。
时间: 2023-08-16 18:08:36 浏览: 120
学生信息管理系统,实现学生信息包括:学号、姓名、性别、年龄、班级等信息。
5星 · 资源好评率100%
好的,这是一个比较复杂的问题,需要编写较多的代码。这里我简单列举一下实现这个学生信息管理系统的基本步骤:
1. 定义结构体
首先,我们需要定义一个结构体来存放每个学生的基本信息,包括学号、姓名、三门课成绩以及个人平均成绩。可以定义如下的结构体:
```
typedef struct {
int id; // 学号
char name[20]; // 姓名
float score1; // 第一门课成绩
float score2; // 第二门课成绩
float score3; // 第三门课成绩
float avg_score; // 个人平均成绩
} Student;
```
2. 建立学生基本信息(结构体数组)
接下来,我们需要定义一个结构体数组来存放多个学生的基本信息。可以定义如下:
```
Student students[70]; // 最多存放70个学生的信息
int num_students; // 学生数量
```
3. 添加学生信息
我们需要编写一个函数来添加学生信息,该函数需要接收用户输入的学生信息,并将其存储到结构体数组中。可以定义如下:
```
void add_student() {
// 获取用户输入的学生信息
Student student;
printf("请输入学生的学号:");
scanf("%d", &student.id);
printf("请输入学生的姓名:");
scanf("%s", student.name);
printf("请输入学生的第一门课成绩:");
scanf("%f", &student.score1);
printf("请输入学生的第二门课成绩:");
scanf("%f", &student.score2);
printf("请输入学生的第三门课成绩:");
scanf("%f", &student.score3);
// 计算个人平均成绩
student.avg_score = (student.score1 + student.score2 + student.score3) / 3;
// 将学生信息存储到结构体数组中
students[num_students] = student;
num_students++;
}
```
4. 按学号查询学生基本信息
我们需要编写一个函数来按学号查询学生的基本信息,并输出该学生信息。可以定义如下:
```
void search_student_by_id(int id) {
int i;
for (i = 0; i < num_students; i++) {
if (students[i].id == id) {
printf("学号:%d\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("第一门课成绩:%f\n", students[i].score1);
printf("第二门课成绩:%f\n", students[i].score2);
printf("第三门课成绩:%f\n", students[i].score3);
printf("个人平均成绩:%f\n", students[i].avg_score);
return;
}
}
printf("未找到学号为%d的学生\n", id);
}
```
5. 计算学生个人平均成绩
我们需要编写一个函数来计算每个学生的个人平均成绩,并更新结构体数组中的数据。可以定义如下:
```
void calc_avg_score() {
int i;
for (i = 0; i < num_students; i++) {
students[i].avg_score = (students[i].score1 + students[i].score2 + students[i].score3) / 3;
}
}
```
6. 按学生某一门课程或平均成绩高低进行排序
我们需要编写一个函数来按学生某一门课程或平均成绩高低进行排序,并输出排序后的学生信息。可以定义如下:
```
void sort_students(int key) {
int i, j;
Student temp;
for (i = 0; i < num_students - 1; i++) {
for (j = i + 1; j < num_students; j++) {
if (key == 1) {
if (students[i].score1 < students[j].score1) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
} else if (key == 2) {
if (students[i].score2 < students[j].score2) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
} else if (key == 3) {
if (students[i].score3 < students[j].score3) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
} else if (key == 4) {
if (students[i].avg_score < students[j].avg_score) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
// 输出排序后的学生信息
for (i = 0; i < num_students; i++) {
printf("学号:%d\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("第一门课成绩:%f\n", students[i].score1);
printf("第二门课成绩:%f\n", students[i].score2);
printf("第三门课成绩:%f\n", students[i].score3);
printf("个人平均成绩:%f\n", students[i].avg_score);
}
}
```
7. 修改某个学生某门课程成绩
我们需要编写一个函数来修改某个学生某门课程的成绩,并更新结构体数组中的数据。可以定义如下:
```
void modify_score(int id, int course, float score) {
int i;
for (i = 0; i < num_students; i++) {
if (students[i].id == id) {
if (course == 1) {
students[i].score1 = score;
} else if (course == 2) {
students[i].score2 = score;
} else if (course == 3) {
students[i].score3 = score;
}
students[i].avg_score = (students[i].score1 + students[i].score2 + students[i].score3) / 3;
return;
}
}
printf("未找到学号为%d的学生\n", id);
}
```
8. 输出所有学生信息
最后,我们需要编写一个函数来输出所有学生的基本信息。可以定义如下:
```
void print_all_students() {
int i;
for (i = 0; i < num_students; i++) {
printf("学号:%d\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("第一门课成绩:%f\n", students[i].score1);
printf("第二门课成绩:%f\n", students[i].score2);
printf("第三门课成绩:%f\n", students[i].score3);
printf("个人平均成绩:%f\n", students[i].avg_score);
}
}
```
以上就是一个简单的学生信息管理系统的实现,你可以根据需要进行修改和完善。
阅读全文