你写这个程序,脑中有没有一个清晰的映像,数据是怎么储存的、如何访问读写数据、为什么要设计成这样的数据结构,这些都清晰吗?

授人以渔,不授人以鱼。
程序代码:#include<stdio.h>
#include<stdlib.h>
#define SI 4 //最大书籍数量
typedef struct
{
char xing[20];
char ming[20];
}xing_ming;
xing_ming jie_zuo_zhe;
//声明书籍信息结构 包含姓名结构
typedef struct
{
char shu_ming[40];
xing_ming jie_zuo_zhe;
float jia_ge;
}book;
//输入书籍信息函数
void han_shu_ru(book *p)
{
puts("请输新入书籍名!");
gets(p->shu_ming);
puts("请输入作者的姓名!");
scanf("%s%s",p->jie_zuo_zhe.xing,p->jie_zuo_zhe.ming);
puts("请输入书籍的价格!");
scanf("%f",&p->jia_ge);
}
//书籍信息写入文件
void han_xie_ru(book *p)
{
FILE *fp;
if((fp=fopen("d:\shu_ji.txt","a+"))==NULL||fwrite(p,sizeof(book),1,fp)!=1)
puts("文件写入失败!");
return 1;
}
//输出书籍信息
void han_shu_chu(book *p)
{printf("书籍的名称:%10s 书籍的作者:%6s%6s 书籍的价格:%10g\n",
p->shu_ming,p->jie_zuo_zhe.xing,p->jie_zuo_zhe.ming,p->jia_ge);
}
int main(void)
{
book bop;
// p=(book *)malloc(sizeof(book)) ;
han_shu_ru(&bop);
han_shu_chu(&bop);
han_xie_ru(&bop);
return 0;
}这样可以给我解答吗? 写入问件的还是乱码?