帮我写个学生管理系统代码,用c语言写,要用到单链表,实现的功能包含录入学生信息,显示学生信息,查询学生信息,修改学生信息,添加学生信息,删除学生信息,
时间: 2024-06-10 07:04:58 浏览: 88
好的,以下是学生管理系统代码,使用了单链表实现各种功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
typedef struct student {
char name[20]; // 学生姓名
int age; // 学生年龄
int id; // 学生学号
struct student *next; // 指向下一个学生节点的指针
} Student;
// 添加学生
void addStudent(Student **head) {
Student *newStudent = (Student *)malloc(sizeof(Student)); // 为新学生分配新内存空间
printf("请输入学生姓名:");
scanf("%s", newStudent->name);
printf("请输入学生年龄:");
scanf("%d", &newStudent->age);
printf("请输入学生学号:");
scanf("%d", &newStudent->id);
newStudent->next = NULL; // 将新学生的下一个节点指针设为空
// 如果链表为空,则将新学生节点设为头节点
if (*head == NULL) {
*head = newStudent;
return;
}
// 否则,遍历链表直到尾节点,然后将新学生节点添加到尾节点的指针处
Student *temp = *head;
while (temp->next != NULL)
temp = temp->next;
temp->next = newStudent;
printf("添加学生成功!\n");
}
// 显示学生
void showStudent(Student *head) {
printf("姓名\t年龄\t学号\n");
printf("------------------------\n");
while (head != NULL) {
printf("%s\t%d\t%d\n", head->name, head->age, head->id);
head = head->next;
}
}
// 查询学生
void queryStudent(Student *head) {
int id;
printf("请输入要查询的学生学号:");
scanf("%d", &id);
while (head != NULL) {
if (head->id == id) {
printf("姓名\t年龄\t学号\n");
printf("------------------------\n");
printf("%s\t%d\t%d\n", head->name, head->age, head->id);
return;
}
head = head->next;
}
printf("没有找到学号为 %d 的学生\n", id);
}
// 修改学生
void modifyStudent(Student *head) {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
while (head != NULL) {
if (head->id == id) {
printf("请输入新的学生姓名:");
scanf("%s", head->name);
printf("请输入新的学生年龄:");
scanf("%d", &head->age);
printf("修改学生信息成功!\n");
return;
}
head = head->next;
}
printf("没有找到学号为 %d 的学生\n", id);
}
// 删除学生
void deleteStudent(Student **head) {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
Student *deleteNode = NULL; // 指向要删除的节点的指针
Student *temp = *head; // 指向当前节点的指针
while (temp != NULL) {
if (temp->id == id) {
deleteNode = temp;
break;
}
// 设置指向下一个节点的指针
temp = temp->next;
}
// 如果找到了要删除的节点,则删除该节点并释放其内存
if (deleteNode) {
if (deleteNode == *head) {
*head = deleteNode->next;
} else {
temp = *head;
while (temp->next != deleteNode)
temp = temp->next;
temp->next = deleteNode->next;
}
printf("删除学生信息成功!\n");
free(deleteNode);
} else {
printf("没有找到学号为 %d 的学生\n", id);
}
}
int main() {
int choice;
Student *head = NULL; // 头节点指针
while (1) {
printf("\n*****欢迎进入学生管理系统*****\n");
printf("1.录入学生信息\n");
printf("2.显示学生信息\n");
printf("3.查询学生信息\n");
printf("4.修改学生信息\n");
printf("5.添加学生信息\n");
printf("6.删除学生信息\n");
printf("0.退出系统\n");
printf("请输入功能选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent(&head);
break;
case 2:
showStudent(head);
printf("\n");
break;
case 3:
queryStudent(head);
printf("\n");
break;
case 4:
modifyStudent(head);
break;
case 5:
addStudent(&head);
break;
case 6:
deleteStudent(&head);
break;
case 0:
printf("\n*****感谢使用学生管理系统,再见!*****\n");
return EXIT_SUCCESS;
default:
printf("非法选项,请输入正确的数字!\n");
}
}
return EXIT_SUCCESS;
}
```
以上便是实现学生管理系统代码,使用了单链表来存储学生信息,能够实现添加、显示、查询、修改、添加、删除学生信息的功能。希望这份代码能够帮到你!
阅读全文