利用链表实现一个简单的学生信息管理系统(要求使用C语言): (1)学生信息包括学号、姓名,性别、年龄、电话号码、所学专业、班级等; (2)系统的主要功能包括:学生信息的创建、输出学生信息、查询学生信息、增加学生信息、删除学生信息。
时间: 2024-10-27 16:14:29 浏览: 35
为了利用链表实现一个简单的C语言学生信息管理系统,我们可以定义一个结构体`Student`来存储学生的各个属性,并创建一个链表节点`Node`来表示单个学生记录。以下是基本的设计思路:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int id; // 学号
char name[50]; // 姓名
char gender[10]; // 性别
int age; // 年龄
char phone[20]; // 电话号码
char major[50]; // 所学专业
char class[50]; // 班级
struct Node* next; // 指向下一个节点的指针
} StudentNode;
// 功能函数声明
void createStudent(StudentNode** head);
void displayStudent(StudentNode* head);
bool searchStudent(StudentNode* head, int id);
void addStudent(StudentNode** head, StudentNode* newNode);
void deleteStudent(StudentNode** head, int id);
int main() {
StudentNode* head = NULL;
while (1) { // 主循环处理用户操作
printf("\n1. 创建学生\n2. 显示所有学生\n3. 查询学生\n4. 添加学生\n5. 删除学生\n6. 退出\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
createStudent(&head);
break;
case 2:
displayStudent(head);
break;
case 3:
int searchId;
printf("请输入学生学号:");
scanf("%d", &searchId);
if (searchStudent(head, searchId)) {
printf("找到学生信息...\n");
// 输出学生详细信息
} else {
printf("未找到学生。\n");
}
break;
case 4:
addStudent(&head, head); // 示例代码,实际添加需要判断头结点是否为空
break;
case 5:
int deleteId;
printf("请输入要删除的学生学号:");
scanf("%d", &deleteId);
deleteStudent(&head, deleteId);
break;
case 6:
exit(0); // 结束程序
break;
default:
printf("无效选择,请重新输入。\n");
}
}
return 0;
}
// 实现函数...
```
接下来你需要实现以下函数:
1. `createStudent`: 创建新的学生节点并插入链表头部。
2. `displayStudent`: 遍历链表并打印每个学生的详细信息。
3. `searchStudent`: 遍历链表查找指定学号的学生。
4. `addStudent`: 向链表尾部添加新学生节点。
5. `deleteStudent`: 根据学号从链表中移除学生。
注意,在实际应用中,上述示例代码仅作简化的演示,因为链表遍历和操作(如添加、删除)需要额外的逻辑判断和错误处理。此外,为了避免内存泄漏,记得在不再需要节点时释放它们。下面是部分关键函数的简化实现:
```c
void createStudent(StudentNode** head) {
StudentNode* newNode = (StudentNode*)malloc(sizeof(StudentNode));
// ... 获取用户输入并初始化newNode属性
newNode->next = *head;
*head = newNode;
}
void displayStudent(StudentNode* head) {
while (head != NULL) {
printf("学号:%d, 姓名:%s, ...", head->id, head->name);
head = head->next;
}
}
bool searchStudent(StudentNode* head, int id) {
StudentNode* current = head;
while (current != NULL) {
if (current->id == id) {
return true;
}
current = current->next;
}
return false;
}
```
阅读全文