学生成绩管理系统c语言用链表
时间: 2023-07-27 14:17:37 浏览: 99
好的,学生成绩管理系统可以用链表来实现。首先需要定义一个结构体来存储学生信息,包括学生姓名、学号、成绩等。然后可以用链表来存储这些学生信息,每个节点代表一个学生,节点中存储学生的信息。
以下是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
char name[20]; // 学生姓名
int id; // 学生学号
float score; // 学生成绩
struct student *next; // 指向下一个节点的指针
} Student;
// 初始化链表
Student *init() {
Student *head = (Student*)malloc(sizeof(Student)); // 创建头节点
head->next = NULL; // 头节点不存储数据
return head;
}
// 添加学生
void add(Student *head, char *name, int id, float score) {
Student *p = (Student*)malloc(sizeof(Student)); // 创建新节点
strcpy(p->name, name);
p->id = id;
p->score = score;
p->next = NULL;
Student *temp = head;
while (temp->next != NULL) {
temp = temp->next; // 找到链表尾部
}
temp->next = p; // 将新节点插入到尾部
}
// 删除学生
void del(Student *head, int id) {
Student *p = head->next;
Student *prev = head;
while (p != NULL) {
if (p->id == id) {
prev->next = p->next; // 将p的前一个节点指向p的下一个节点
free(p); // 释放p节点内存
printf("删除成功!\n");
return;
}
prev = p;
p = p->next;
}
printf("未找到该学生!\n");
}
// 修改学生成绩
void modify(Student *head, int id, float score) {
Student *p = head->next;
while (p != NULL) {
if (p->id == id) {
p->score = score;
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
// 查询学生成绩
void query(Student *head, int id) {
Student *p = head->next;
while (p != NULL) {
if (p->id == id) {
printf("姓名:%s 学号:%d 成绩:%.2f\n", p->name, p->id, p->score);
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
// 输出所有学生信息
void show(Student *head) {
Student *p = head->next;
while (p != NULL) {
printf("姓名:%s 学号:%d 成绩:%.2f\n", p->name, p->id, p->score);
p = p->next;
}
}
int main() {
Student *head = init();
add(head, "Tom", 1001, 90);
add(head, "Mary", 1002, 85);
add(head, "John", 1003, 95);
show(head);
del(head, 1002);
show(head);
modify(head, 1003, 98);
query(head, 1003);
return 0;
}
```
以上代码实现了学生成绩管理系统的基本功能,包括添加学生、删除学生、修改学生成绩、查询学生成绩和输出所有学生信息。通过链表的方式,可以方便地对学生信息进行增删改查操作。
阅读全文