用C语言实现一个简单的学生信息管理系统,该系统的功能有: 1、利用单链表建立学生基本信息表 2、浏览每个学生的信息 3、根据学号查询某个学生的基本信息 4、添加学生信息到单链表中 5、删除一个学生的信息
时间: 2024-06-03 17:07:28 浏览: 164
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
char sex[5]; // 性别
struct student *next; // 指向下一个学生的指针
} Student;
// 全局变量,指向链表头节点
Student *head = NULL;
// 函数声明
void add_student();
void delete_student();
void display_all_students();
void display_one_student(int id);
int main() {
int choice, id;
while (1) {
printf("请选择要执行的操作:\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 查看所有学生信息\n");
printf("4. 根据学号查看学生信息\n");
printf("5. 退出程序\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
display_all_students();
break;
case 4:
printf("请输入要查询的学生的学号:");
scanf("%d", &id);
display_one_student(id);
break;
case 5:
exit(0);
default:
printf("输入无效,请重新选择!\n");
}
}
return 0;
}
// 添加学生信息
void add_student() {
int id, age;
char name[20], sex[5];
printf("请输入学生的学号:");
scanf("%d", &id);
printf("请输入学生的姓名:");
scanf("%s", name);
printf("请输入学生的年龄:");
scanf("%d", &age);
printf("请输入学生的性别:");
scanf("%s", sex);
// 创建新的学生节点
Student *new_student = (Student *) malloc(sizeof(Student));
new_student->id = id;
strcpy(new_student->name, name);
new_student->age = age;
strcpy(new_student->sex, sex);
new_student->next = NULL;
// 如果链表为空,将新节点作为头节点
if (head == NULL) {
head = new_student;
} else {
// 找到链表尾部,将新节点加入链表
Student *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_student;
}
printf("学生信息添加成功!\n");
}
// 删除学生信息
void delete_student() {
int id;
printf("请输入要删除的学生的学号:");
scanf("%d", &id);
// 如果链表为空,无法删除
if (head == NULL) {
printf("该学生不存在!\n");
} else {
// 如果要删除的是头节点,直接将头节点指向下一个节点
if (head->id == id) {
Student *temp = head;
head = head->next;
free(temp);
printf("学生信息删除成功!\n");
} else {
// 找到要删除的节点前一个节点,将其next指针指向要删除的节点的下一个节点
Student *current = head;
while (current->next != NULL && current->next->id != id) {
current = current->next;
}
if (current->next == NULL) {
printf("该学生不存在!\n");
} else {
Student *temp = current->next;
current->next = current->next->next;
free(temp);
printf("学生信息删除成功!\n");
}
}
}
}
// 查看所有学生信息
void display_all_students() {
// 如果链表为空,无法显示
if (head == NULL) {
printf("没有学生信息!\n");
} else {
printf("学号\t姓名\t年龄\t性别\n");
Student *current = head;
while (current != NULL) {
printf("%d\t%s\t%d\t%s\n", current->id, current->name, current->age, current->sex);
current = current->next;
}
}
}
// 根据学号查看学生信息
void display_one_student(int id) {
// 如果链表为空,无法查看
if (head == NULL) {
printf("该学生不存在!\n");
} else {
Student *current = head;
while (current != NULL && current->id != id) {
current = current->next;
}
if (current == NULL) {
printf("该学生不存在!\n");
} else {
printf("学号\t姓名\t年龄\t性别\n");
printf("%d\t%s\t%d\t%s\n", current->id, current->name, current->age, current->sex);
}
}
}
阅读全文