将上题给出的数据先写入链表,然后将链表中的数据写入另外的磁盘文件。
时间: 2023-09-26 17:15:18 浏览: 70
好的,根据您的要求,我可以给出以下代码实现:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct Date {
int year;
int month;
int day;
};
struct Student {
char id[12];
char name[20];
char gender[6];
int age;
struct Date admission_date;
int score1;
int score2;
struct Student *next; // 链表指针
};
int main() {
struct Student *head = NULL; // 链表头指针
struct Student *p, *q;
int i;
// 将数据写入链表
for (i = 0; i < 5; i++) {
p = (struct Student*)malloc(sizeof(struct Student)); // 动态分配内存
if (p == NULL) {
printf("内存分配失败!\n");
exit(1);
}
// 将数据写入链表节点
sprintf(p->id, "2020B20030%d", i + 1);
switch (i) {
case 0:
sprintf(p->name, "刘滨");
sprintf(p->gender, "男");
p->age = 18;
p->admission_date.year = 2020;
p->admission_date.month = 9;
p->admission_date.day = 20;
p->score1 = 70;
p->score2 = 85;
break;
case 1:
sprintf(p->name, "阚美娟");
sprintf(p->gender, "女");
p->age = 17;
p->admission_date.year = 2020;
p->admission_date.month = 9;
p->admission_date.day = 20;
p->score1 = 87;
p->score2 = 95;
break;
case 2:
sprintf(p->name, "胡大勇");
sprintf(p->gender, "男");
p->age = 17;
p->admission_date.year = 2020;
p->admission_date.month = 9;
p->admission_date.day = 20;
p->score1 = 70;
p->score2 = 85;
break;
case 3:
sprintf(p->name, "黎丽");
sprintf(p->gender, "女");
p->age = 18;
p->admission_date.year = 2020;
p->admission_date.month = 9;
p->admission_date.day = 20;
p->score1 = 68;
p->score2 = 88;
break;
case 4:
sprintf(p->name, "金鑫");
sprintf(p->gender, "男");
p->age = 19;
p->admission_date.year = 2019;
p->admission_date.month = 9;
p->admission_date.day = 1;
p->score1 = 90;
p->score2 = 85;
break;
}
p->next = NULL;
// 将节点插入链表
if (head == NULL) {
head = p;
} else {
q->next = p;
}
q = p;
}
// 将链表中的数据写入磁盘文件
FILE *fp;
fp = fopen("students.dat", "wb"); // 打开二进制文件
if (fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
p = head;
while (p != NULL) { // 遍历链表
fwrite(p, sizeof(struct Student), 1, fp); // 将节点写入文件
p = p->next;
}
fclose(fp); // 关闭文件
return 0;
}
```
以上代码中,我们使用了链表来存储学生数据,并通过动态内存分配来创建节点。接着,我们将链表中的数据写入磁盘文件。具体地,我们使用 `fopen()` 函数打开一个二进制文件,然后使用 `fwrite()` 函数将链表中的每个节点写入文件。最后,我们使用 `fclose()` 函数关闭文件。注意,在写入文件之前,我们需要先遍历链表,将节点的数据填充到 `struct Student` 结构体中。最终,我们得到了一个名为 `students.dat` 的二进制文件,其中包含了链表中的所有数据。