📄 save.c
字号:
/*以下是链表保存函数。*/
#define filename "data.dat"
void Save(struct student *head){
FILE *fp;
char *ch="完",*End="结束";
struct student *p;
struct stdinfor *q;
fp=fopen(filename,"wb");
p=head;
q=p->stdhead;
do
{
fwrite(p,sizeof(struct student),1,fp);
do
{
fwrite(q,sizeof(struct stdinfor),1,fp);
q=q->stdp;
}while(q!=NULL);
fwrite(ch,2,1,fp);
p=p->stup;
q=p->stdhead;
}while(p!=NULL);
fwrite(End,5,1,fp);
fclose(fp);
}
/*以下是读取上面所保存的数据,并填写到链表中*/
int Feof(FILE *fp){ /*本函数判断DATA文件是否结束,是返回0。*/
char ch[5],*ch1="结束";
int i;
fread(ch,5,1,fp);
i=strcmp(ch,ch1);
fseek(fp,(long)(-5),SEEK_CUR);
return(i);
}
struct stdinfor *Smakechain1(FILE *fp){ /*本函数完成成绩链表的建立和成绩数据的读取,填充。*/
struct stdinfor *head,*fore,*back;
int i;
char ch[3],*ch1="完";
ch[2]='\0';
fore=(struct stdinfor *)malloc(sizeof(struct stdinfor));
head=fore;
back=fore;
fread(head,sizeof(struct stdinfor),1,fp);
fread(ch,2,1,fp);
while(strcmp(ch,ch1)!=0)
{
fseek(fp,(long)(-2),SEEK_CUR);
fore=(struct stdinfor *)malloc(sizeof(struct stdinfor));
fread(fore,sizeof(struct stdinfor),1,fp);
back->stdp=fore;
back=fore;
fread(ch,2,1,fp);
}
back->stdp=NULL;
return(head);
}
struct student * Smakechain(FILE *fp){ /*本函数完成成绩链表的建立和成绩数据的读取,填充。*/
struct student *head,*fore,*back;
struct stdinfor *head1;
int i;
fore=(struct student *)malloc(sizeof(struct student));
head=fore;
back=fore;
fread(head,sizeof(struct student),1,fp);
head->stdhead=Smakechain1(fp);
while(Feof(fp)!=0)
{
fore=(struct student *)malloc(sizeof(struct student));
back->stup=fore;
fread(fore,sizeof(struct student),1,fp);
head1=Smakechain1(fp);
fore->stdhead=head1;
back=fore;
}
back->stup=NULL;
return(head);
}
void Read(void){
FILE *fp;
fp=fopen(filename,"rb");
MainHead=Smakechain(fp);
HManageData();/*学生数据处理函数。*/
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -