用c 写学生成绩管理系统的链表
时间: 2023-05-31 21:07:04 浏览: 74
以下是一个简单的学生成绩管理系统的链表实现,包括添加、删除、修改和查询学生成绩。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生结构体
typedef struct student {
char name[20];
int id;
float score;
struct student *next;
} Student;
// 添加学生
void addStudent(Student **head) {
Student *new_student = (Student*)malloc(sizeof(Student));
printf("请输入学生姓名:");
scanf("%s", new_student->name);
printf("请输入学生学号:");
scanf("%d", &(new_student->id));
printf("请输入学生分数:");
scanf("%f", &(new_student->score));
new_student->next = *head;
*head = new_student;
}
// 删除学生
void deleteStudent(Student **head, int id) {
Student *current = *head;
Student *previous = NULL;
while (current != NULL) {
if (current->id == id) {
if (previous == NULL) {
*head = current->next;
} else {
previous->next = current->next;
}
free(current);
printf("删除成功!\n");
return;
}
previous = current;
current = current->next;
}
printf("没有找到该学生!\n");
}
// 修改学生信息
void modifyStudent(Student **head, int id) {
Student *current = *head;
while (current != NULL) {
if (current->id == id) {
printf("请输入修改后的学生姓名:");
scanf("%s", current->name);
printf("请输入修改后的学生分数:");
scanf("%f", &(current->score));
printf("修改成功!\n");
return;
}
current = current->next;
}
printf("没有找到该学生!\n");
}
// 查询学生信息
void queryStudent(Student *head, int id) {
Student *current = head;
while (current != NULL) {
if (current->id == id) {
printf("学生姓名:%s\n", current->name);
printf("学生学号:%d\n", current->id);
printf("学生分数:%.1f\n", current->score);
return;
}
current = current->next;
}
printf("没有找到该学生!\n");
}
// 打印所有学生信息
void printAllStudents(Student *head) {
Student *current = head;
while (current != NULL) {
printf("学生姓名:%s\n", current->name);
printf("学生学号:%d\n", current->id);
printf("学生分数:%.1f\n", current->score);
current = current->next;
}
}
int main() {
Student *head = NULL;
int choice = 0, id;
while (1) {
printf("\n=====================\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 修改学生信息\n");
printf("4. 查询学生信息\n");
printf("5. 打印所有学生信息\n");
printf("0. 退出程序\n");
printf("=====================\n");
printf("请输入操作序号:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent(&head);
break;
case 2:
printf("请输入要删除的学生学号:");
scanf("%d", &id);
deleteStudent(&head, id);
break;
case 3:
printf("请输入要修改的学生学号:");
scanf("%d", &id);
modifyStudent(&head, id);
break;
case 4:
printf("请输入要查询的学生学号:");
scanf("%d", &id);
queryStudent(head, id);
break;
case 5:
printAllStudents(head);
break;
case 0:
printf("程序已退出!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```