使用c语言做一个学生信息管理系统,要求可以添加或删除学生信息、修改学生信息、遍历学生信息、退出系统
时间: 2023-08-12 20:07:19 浏览: 109
好的,下面是一个简单的学生信息管理系统的C语言实现代码,可以实现添加、删除、修改和遍历学生信息的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
char name[20]; // 学生姓名
char id[10]; // 学生学号
int age; // 学生年龄
char gender[10]; // 学生性别
} Student;
// 定义链表结构体
typedef struct node {
Student stu; // 学生信息
struct node *next; // 指向下一个节点的指针
} Node;
// 添加学生信息
void addStudent(Node **head) {
Node *p = (Node*)malloc(sizeof(Node));
printf("请输入学生姓名:");
scanf("%s", p->stu.name);
printf("请输入学生学号:");
scanf("%s", p->stu.id);
printf("请输入学生年龄:");
scanf("%d", &p->stu.age);
printf("请输入学生性别:");
scanf("%s", p->stu.gender);
p->next = *head;
*head = p;
printf("添加学生信息成功!\n");
}
// 删除学生信息
void deleteStudent(Node **head, char *id) {
Node *p = *head;
Node *q = NULL;
while (p != NULL && strcmp(p->stu.id, id) != 0) {
q = p;
p = p->next;
}
if (p == NULL) {
printf("查无此人!\n");
return;
} else if (q == NULL) {
*head = p->next;
} else {
q->next = p->next;
}
free(p);
printf("删除学生信息成功!\n");
}
// 修改学生信息
void modifyStudent(Node *head, char *id) {
Node *p = head;
while (p != NULL && strcmp(p->stu.id, id) != 0) {
p = p->next;
}
if (p == NULL) {
printf("查无此人!\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", p->stu.name);
printf("请输入学生年龄:");
scanf("%d", &p->stu.age);
printf("请输入学生性别:");
scanf("%s", p->stu.gender);
printf("修改学生信息成功!\n");
}
// 遍历学生信息
void traverseStudent(Node *head) {
if (head == NULL) {
printf("学生信息为空!\n");
return;
}
printf("姓名\t学号\t年龄\t性别\n");
Node *p = head;
while (p != NULL) {
printf("%s\t%s\t%d\t%s\n", p->stu.name, p->stu.id, p->stu.age, p->stu.gender);
p = p->next;
}
}
// 释放链表内存
void releaseList(Node *head) {
Node *p = head;
while (p != NULL) {
Node *q = p;
p = p->next;
free(q);
}
}
int main() {
Node *head = NULL;
int choice;
char id[10];
while (1) {
printf("请选择要进行的操作:\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 遍历学生信息\n");
printf("5. 退出系统\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:
traverseStudent(head);
break;
case 5:
releaseList(head);
printf("退出系统!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
在这个程序中,我们使用了链表来存储学生信息,每个节点包含一个学生结构体和一个指向下一个节点的指针。通过链表,我们可以动态地添加和删除学生信息,也可以遍历链表输出所有学生信息。同时,我们使用了函数来实现不同的功能,使程序更加清晰和易于维护。
阅读全文