请结合数据结构实现简单的学生信息管理,包括学生姓名,学号后四位,年龄,性别,三门课成绩,录入学生信息时能够不按照任何顺序进行录入,能够支持后续任意时刻的信息录入。 成绩的录入要求能够按照学号顺序进行批量录入,并在录入时打印学生信息。要求按照链式结构实现。用c语言回答
时间: 2024-11-10 10:14:54 浏览: 9
学生信息管理系统,实现学生信息包括:学号、姓名、性别、年龄、班级等信息。
5星 · 资源好评率100%
在C语言中,我们可以使用链表数据结构来实现这样的学生信息管理系统,因为链表可以动态地添加和删除元素,不需要预先确定存储位置,非常适合需要频繁插入和查找的情况。这里是一个简单的链表结构设计:
首先,我们创建一个`Student`结构体,包含学生的个人信息:
```c
typedef struct {
char name[50]; // 学生姓名
int id; // 学号后四位
int age; // 年龄
char gender[10]; // 性别
float score[3]; // 三门课成绩
} Student;
```
然后,我们创建一个`StudentNode`节点,用于链表操作:
```c
typedef struct Node {
Student info; // 学生信息
struct Node* next; // 指向下一个节点的指针
} StudentNode;
```
接着,我们需要一个链表头指针和辅助函数:
```c
StudentNode* head = NULL; // 链表头指针
// 添加学生信息到链表尾部
void addStudent(StudentNode** head, const Student* student) {
StudentNode* newNode = (StudentNode*)malloc(sizeof(StudentNode));
newNode->info = *student;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
StudentNode* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
// 批量录入成绩,按学号排序
void batchAddScores(StudentNode* head, const Student* students, int numStudents) {
for (int i = 0; i < numStudents; ++i) {
addStudent(&head, &students[i]);
printf("已录入学生 %s 的成绩:\n", students[i].name);
}
sortStudentsByID(head);
}
// 按学号升序排序链表
void sortStudentsByID(StudentNode* head) {
if (head == NULL || head->next == NULL) return;
StudentNode* current = head;
while (current->next != NULL) {
if (current->id > current->next->id) {
StudentNode temp = *current;
*current = *current->next;
*current->next = temp;
}
current = current->next;
}
}
```
现在,你可以像下面这样使用这个结构:
```c
// 示例数据
Student sample[] = {{"张三", 1234, 20, "男", {85, 90, 92}}, {"李四", 5678, 21, "女", {88, 93, 89}}};
// 初始化链表
for (int i = 0; i < sizeof(sample)/sizeof(sample[0]); ++i) {
addStudent(&head, &sample[i]);
}
// 批量录入并显示成绩
batchAddScores(head, sample, sizeof(sample)/sizeof(sample[0]));
```
阅读全文