用结构体数组指针来写学生成绩管理系统
时间: 2023-08-13 14:41:50 浏览: 43
好的,我可以给您提供一个基本的代码框架,您可以在此基础上进行修改和完善:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 学生最大数量
// 学生结构体
typedef struct {
char name[20]; // 学生姓名
int id; // 学生学号
float score; // 学生成绩
} Student;
// 学生数组指针
Student* students[MAX_STUDENT_NUM];
int studentCount = 0; // 学生数量
// 添加学生
void addStudent(char* name, int id, float score) {
if (studentCount >= MAX_STUDENT_NUM) {
printf("已达到最大学生数量,无法添加\n");
return;
}
Student* s = (Student*)malloc(sizeof(Student));
strcpy(s->name, name);
s->id = id;
s->score = score;
students[studentCount++] = s;
printf("添加学生成功\n");
}
// 删除学生
void deleteStudent(int id) {
for (int i = 0; i < studentCount; i++) {
if (students[i]->id == id) {
free(students[i]);
for (int j = i + 1; j < studentCount; j++) {
students[j - 1] = students[j];
}
studentCount--;
printf("删除学生成功\n");
return;
}
}
printf("未找到该学生\n");
}
// 修改学生成绩
void modifyScore(int id, float score) {
for (int i = 0; i < studentCount; i++) {
if (students[i]->id == id) {
students[i]->score = score;
printf("修改成绩成功\n");
return;
}
}
printf("未找到该学生\n");
}
// 查询学生信息
void queryStudent(int id) {
for (int i = 0; i < studentCount; i++) {
if (students[i]->id == id) {
printf("姓名:%s\n", students[i]->name);
printf("学号:%d\n", students[i]->id);
printf("成绩:%.2f\n", students[i]->score);
return;
}
}
printf("未找到该学生\n");
}
// 输出所有学生信息
void printAllStudents() {
for (int i = 0; i < studentCount; i++) {
printf("姓名:%s\n", students[i]->name);
printf("学号:%d\n", students[i]->id);
printf("成绩:%.2f\n", students[i]->score);
}
}
int main() {
// 添加示例学生
addStudent("张三", 1001, 90);
addStudent("李四", 1002, 80);
addStudent("王五", 1003, 70);
// 测试功能
modifyScore(1002, 85);
queryStudent(1003);
deleteStudent(1001);
printAllStudents();
// 释放内存
for (int i = 0; i < studentCount; i++) {
free(students[i]);
}
return 0;
}
```
这个代码框架包括了学生结构体的定义、学生数组指针的声明、添加学生、删除学生、修改学生成绩、查询学生信息和输出所有学生信息等功能。您可以根据自己的需求进行修改和完善。