用c语言单链表写一个学籍管理系统
时间: 2023-11-12 21:03:44 浏览: 85
好的,以下是一个简单的学籍管理系统的单链表实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
char name[20];
char id[10];
int age;
struct student *next; // 指向下一个节点的指针
} Student;
// 创建链表
Student *createList() {
Student *head = (Student*)malloc(sizeof(Student)); // 创建头节点
head->next = NULL;
return head;
}
// 添加学生
void addStudent(Student *head) {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
Student *newNode = (Student*)malloc(sizeof(Student));
printf("请输入学生信息:\n");
printf("姓名:");
scanf("%s", newNode->name);
printf("学号:");
scanf("%s", newNode->id);
printf("年龄:");
scanf("%d", &(newNode->age));
newNode->next = NULL;
p->next = newNode;
printf("已成功添加学生!\n");
}
// 删除学生
void deleteStudent(Student *head, char *id) {
Student *p = head->next;
Student *pre = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
pre->next = p->next;
free(p);
printf("已成功删除学生!\n");
return;
}
pre = p;
p = p->next;
}
printf("没有找到该学生!\n");
}
// 修改学生信息
void modifyStudent(Student *head, char *id) {
Student *p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("请输入修改后的信息:\n");
printf("姓名:");
scanf("%s", p->name);
printf("学号:");
scanf("%s", p->id);
printf("年龄:");
scanf("%d", &(p->age));
printf("已成功修改学生信息!\n");
return;
}
p = p->next;
}
printf("没有找到该学生!\n");
}
// 查找学生信息
void findStudent(Student *head, char *id) {
Student *p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("姓名:%s\n", p->name);
printf("学号:%s\n", p->id);
printf("年龄:%d\n", p->age);
return;
}
p = p->next;
}
printf("没有找到该学生!\n");
}
// 输出所有学生信息
void printAll(Student *head) {
Student *p = head->next;
if (p == NULL) {
printf("没有学生信息!\n");
return;
}
printf("所有学生信息如下:\n");
while (p != NULL) {
printf("姓名:%s\n", p->name);
printf("学号:%s\n", p->id);
printf("年龄:%d\n", p->age);
printf("\n");
p = p->next;
}
}
// 主函数
int main() {
Student *head = createList();
int choice;
char id[10];
while (1) {
printf("请选择操作:\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 修改学生信息\n");
printf("4. 查找学生信息\n");
printf("5. 输出所有学生信息\n");
printf("6. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent(head);
break;
case 2:
printf("请输入要删除学生的学号:");
scanf("%s", id);
deleteStudent(head, id);
break;
case 3:
printf("请输入要修改学生的学号:");
scanf("%s", id);
modifyStudent(head, id);
break;
case 4:
printf("请输入要查找学生的学号:");
scanf("%s", id);
findStudent(head, id);
break;
case 5:
printAll(head);
break;
case 6:
printf("程序已退出!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
以上代码实现了以下功能:
1. 创建链表
2. 添加学生
3. 删除学生
4. 修改学生信息
5. 查找学生信息
6. 输出所有学生信息
你可以根据需要对其进行修改和扩展。
阅读全文