C语言订餐系统(指针版)的读取函数该如何修改?

为什么我读文件并输出一直是空白的。不管用fscanf还是用fwrite都一直读取失败,尽管文件里的数据都没有问题。
图片说明

------------------------------源代码-------------------------------------------------
#include
#include
#include
typedef struct guest
{
int number;
char name[10];
int sum;
char time[5];
struct guest *next;
}GuestLink,*Pointer;

GuestLink stu[10];
int i,j,k;
void Insert(Pointer *Head);
void Search(Pointer Head);
void Update(Pointer Head);
void Delete(Pointer *Head);
void Show(Pointer Head);
void Sort(Pointer Head);
void Save(Pointer Head);
void Put(Pointer Head);

int main()
{
Pointer Head=NULL;
int i;
do{
printf("\n");
printf("1----插入\n");
printf("2----查询\n");
printf("3----修改\n");
printf("4----删除\n");
printf("5----显示\n");
printf("6----保存\n");
printf("7----读取\n");
printf("8----退出\n");
printf("\n\n");
printf("请输入指令:");
scanf("%d",&i);
switch(i)
{
case 1:Insert(&Head);
break;
case 2:Search(Head);
break;
case 3:Update(Head);
break;
case 4:Delete(&Head);
break;
case 5:Show(Head);
break;
case 6:Save(Head);
break;
case 7:Put(Head);
break;
case 8:
break;
default:printf("选择错误!请重新选择!");
break;
}
}while(i!=8);
return 0;
}

void Insert(Pointer *Head)
{
int in_number;
Pointer p,q,r;
printf("请输入编号:\n");
scanf("%d",&in_number);
p=q=*Head;
while(p!=NULL)
{
if(p->number==in_number)
{
printf("已经有相同编号:");
return;
}
else
{
q=p;p=p->next;
}
}
r=(Pointer)malloc(sizeof(GuestLink));
r->next=NULL;
if(r==NULL)
{
printf("分配空间失败");
return;
}
if(q==NULL)
*Head=r;
else
{q->next=r;}
r->number=in_number;
printf("请输入姓名:\n");
scanf("%s",r->name);
printf("请输入人数:\n");
scanf("%d",&r->sum);
printf("请输入时间:\n");
scanf("%s",r->time);
}

void Search(Pointer Head)
{
int flag=1;
int number;
Pointer p;
printf("请输入要查询的编号:");
scanf("%d",&number);
p=Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{ printf("编号\t姓名\t人数\t时间\n");
printf("%d\t",p->number);
printf("%s\t",p->name);
printf("%d\t",p->sum);
printf("%s\t\n",p->time);
flag=0;
}
else
p=p->next;
}
if(flag)
printf("没有查询到!");
}

void Update(Pointer Head)
{
int flag=1;
int number;
Pointer p;
printf("请输入要修改的编号:");
scanf("%d",&number);
p=Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{
printf("请输入人数:");
scanf("%d",&p->sum);
printf("请输入用餐时间:");
scanf("%s",p->time);
flag=0;
}
else
p=p->next;
}
if(flag)
printf("没有找到要修改的记录!");
}

void Delete(Pointer *Head)
{
int flag=1;
int number;
Pointer p,q;
printf("请输入要删除的数据编号:");
scanf("%d",&number);
p=q=*Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{
if(p==*Head)
{
*Head=p->next;
free(p);
}
else
{q->next=p->next;free(p);}
flag=0;
}
else
{q=p;p=p->next;}
}
if(flag)
printf("没有找到可以删除的数据!!");
}

void Show(Pointer Head)
{
Pointer p;
p=Head;
printf("编号\t姓名\t人数\t用餐时间\n");
while(p!=NULL)
{
printf("%d\t",p->number);
printf("%s\t",p->name);
printf("%d\t",p->sum);
printf("%s\t\n",p->time);
p=p->next;
}
}

void Save(Pointer Head)
{
FILE *fp;
Pointer p;
p=Head;
if((fp=fopen("文件.din","wb"))==NULL)
{printf("打开文件失败!");
exit(1);}
p=Head;
while(p!=NULL)
{
fprintf(fp,"%d %s %d %s\n",p->number,p->name,p->sum,p->time);
p=p->next;
}
fclose(fp);
}

void Put(Pointer Head)
{
FILE *fp;
Pointer p;
p=Head;
if((fp=fopen("文件.din","r"))==NULL)
{printf("打开文件失败!\n");
exit(1);}
printf("编号\t姓名\t人数\t用餐时间\n");
while(p!=NULL)
{
fscanf(fp,"%d %s %d %s\n",p->number,p->name,p->sum,p->time);
printf("%d\t%s\t%d\t%s\t\n",p->number,p->name,p->sum,p->time);
p=p->next;
}
fclose(fp);
}

文件.din,改为.txt,