用c语言写一个单链表的学籍管理系统
时间: 2023-11-06 19:05:43 浏览: 97
好的,下面是一个简单的单链表学籍管理系统的C语言代码:
```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* createList() {
Student *head = (Student*)malloc(sizeof(Student));
head->next = NULL;
return head;
}
// 插入一个新节点
void insertNode(Student *head, Student *node) {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
node->next = NULL;
}
// 根据学号查找节点
Student* findNode(Student *head, int id) {
Student *p = head->next;
while (p != NULL) {
if (p->id == id) {
return p;
}
p = p->next;
}
return NULL;
}
// 根据学号删除节点
void deleteNode(Student *head, int id) {
Student *p = head;
while (p->next != NULL) {
if (p->next->id == id) {
Student *q = p->next;
p->next = q->next;
free(q);
return;
}
p = p->next;
}
}
// 修改节点信息
void modifyNode(Student *node) {
printf("请输入学生姓名:");
scanf("%s", node->name);
printf("请输入学生学号:");
scanf("%d", &node->id);
printf("请输入学生成绩:");
scanf("%f", &node->score);
}
// 输出链表中所有节点信息
void printList(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 = createList(); // 创建一个空链表
char c = '0';
while (c != '5') {
printf("\n");
printf("1. 插入学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 显示学生信息\n");
printf("5. 退出程序\n");
printf("请选择操作:");
scanf(" %c", &c);
switch (c) {
case '1': {
Student *node = (Student*)malloc(sizeof(Student));
modifyNode(node);
insertNode(head, node);
printf("插入成功!\n");
break;
}
case '2': {
int id;
printf("请输入学生学号:");
scanf("%d", &id);
Student *node = findNode(head, id);
if (node != NULL) {
deleteNode(head, id);
printf("删除成功!\n");
} else {
printf("学号为%d的学生不存在!\n", id);
}
break;
}
case '3': {
int id;
printf("请输入学生学号:");
scanf("%d", &id);
Student *node = findNode(head, id);
if (node != NULL) {
modifyNode(node);
printf("修改成功!\n");
} else {
printf("学号为%d的学生不存在!\n", id);
}
break;
}
case '4': {
printList(head);
break;
}
case '5': {
printf("程序已退出!\n");
break;
}
default: {
printf("输入错误,请重新输入!\n");
break;
}
}
}
// 释放链表空间
Student *p = head;
while (p != NULL) {
Student *q = p->next;
free(p);
p = q;
}
return 0;
}
```
该程序实现了以下功能:
1. 插入学生信息
2. 删除学生信息
3. 修改学生信息
4. 显示学生信息
5. 退出程序
程序通过一个带有头结点的单链表来存储学生信息,每个节点包含学生的姓名、学号和成绩。用户可以通过菜单来选择不同的操作,比如插入、删除、修改和显示学生信息等。程序运行结束后会释放链表空间。
阅读全文