完成《学生成绩管理系统》设计,要求通过功能函数完成增、删、改、查模块的设计,具体实现8个功能。要求函数设计使用到结构体定义、结构体数组、指针并作为函数参数完成调用。
时间: 2024-03-21 16:40:55 浏览: 18
好的,我了解你的问题了。下面是一个简单的学生成绩管理系统的设计,实现了增、删、改、查等8个功能。
首先,我们定义一个学生结构体,包含学生姓名、学号、各科成绩等信息:
```c
typedef struct {
char name[20]; // 学生姓名
char id[10]; // 学生学号
float score[3]; // 三门课程成绩
} Student;
```
然后,我们定义一个学生数组,用于存储所有学生的信息:
```c
#define MAX_STUDENT_NUM 100 // 最大学生数目
Student students[MAX_STUDENT_NUM]; // 学生数组
int student_num = 0; // 当前学生数目
```
接下来,我们实现8个功能函数:
1. 添加学生信息
```c
void add_student() {
if (student_num >= MAX_STUDENT_NUM) {
printf("学生数目已满,无法添加新学生!\n");
return;
}
printf("请输入学生姓名、学号、三门课程成绩:\n");
scanf("%s %s %f %f %f", students[student_num].name, students[student_num].id, &students[student_num].score[0], &students[student_num].score[1], &students[student_num].score[2]);
student_num++;
printf("添加成功!\n");
}
```
2. 删除学生信息
```c
void delete_student() {
char id[10];
printf("请输入要删除的学生学号:\n");
scanf("%s", id);
int i;
for (i = 0; i < student_num; i++) {
if (strcmp(students[i].id, id) == 0) {
// 找到要删除的学生,将其后面的学生依次往前移动
int j;
for (j = i; j < student_num - 1; j++) {
students[j] = students[j+1];
}
student_num--;
printf("删除成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
```
3. 修改学生信息
```c
void modify_student() {
char id[10];
printf("请输入要修改的学生学号:\n");
scanf("%s", id);
int i;
for (i = 0; i < student_num; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入修改后的学生姓名、学号、三门课程成绩:\n");
scanf("%s %s %f %f %f", students[i].name, students[i].id, &students[i].score[0], &students[i].score[1], &students[i].score[2]);
printf("修改成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
```
4. 查询学生信息
```c
void query_student() {
char id[10];
printf("请输入要查询的学生学号:\n");
scanf("%s", id);
int i;
for (i = 0; i < student_num; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学生姓名:%s\n学生学号:%s\n三门课程成绩:%f %f %f\n", students[i].name, students[i].id, students[i].score[0], students[i].score[1], students[i].score[2]);
return;
}
}
printf("未找到该学生!\n");
}
```
5. 显示所有学生信息
```c
void show_all_students() {
if (student_num == 0) {
printf("学生信息为空!\n");
return;
}
int i;
for (i = 0; i < student_num; i++) {
printf("学生姓名:%s\n学生学号:%s\n三门课程成绩:%f %f %f\n", students[i].name, students[i].id, students[i].score[0], students[i].score[1], students[i].score[2]);
}
}
```
6. 显示平均成绩
```c
void show_average_score() {
if (student_num == 0) {
printf("学生信息为空!\n");
return;
}
float sum[3] = {0.0, 0.0, 0.0};
int i, j;
for (i = 0; i < student_num; i++) {
for (j = 0; j < 3; j++) {
sum[j] += students[i].score[j];
}
}
printf("三门课程的平均成绩分别为:%f %f %f\n", sum[0]/student_num, sum[1]/student_num, sum[2]/student_num);
}
```
7. 显示最高分
```c
void show_max_score() {
if (student_num == 0) {
printf("学生信息为空!\n");
return;
}
float max_score[3] = {-1.0, -1.0, -1.0};
int i, j;
for (i = 0; i < student_num; i++) {
for (j = 0; j < 3; j++) {
if (students[i].score[j] > max_score[j]) {
max_score[j] = students[i].score[j];
}
}
}
printf("三门课程的最高分分别为:%f %f %f\n", max_score[0], max_score[1], max_score[2]);
}
```
8. 显示最低分
```c
void show_min_score() {
if (student_num == 0) {
printf("学生信息为空!\n");
return;
}
float min_score[3] = {100.0, 100.0, 100.0};
int i, j;
for (i = 0; i < student_num; i++) {
for (j = 0; j < 3; j++) {
if (students[i].score[j] < min_score[j]) {
min_score[j] = students[i].score[j];
}
}
}
printf("三门课程的最低分分别为:%f %f %f\n", min_score[0], min_score[1], min_score[2]);
}
```
最后,我们可以在主函数中通过调用这些功能函数来完成学生成绩管理系统的操作:
```c
int main() {
int choice;
while (1) {
printf("\n请选择要进行的操作:\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("0. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
modify_student();
break;
case 4:
query_student();
break;
case 5:
show_all_students();
break;
case 6:
show_average_score();
break;
case 7:
show_max_score();
break;
case 8:
show_min_score();
break;
case 0:
return 0;
default:
printf("输入错误,请重新输入!\n");
}
}
}
```
这样,一个简单的学生成绩管理系统就完成了。其中使用了结构体定义、结构体数组、指针等技术,实现了增、删、改、查等8个功能。