问题:想要在限制读者借书的数量。开始是想要在读者文本检测到读者存入的信息已经超过两本就不存入读者的信息,借书就失败。但是不会实现。以下只是代码的一部分,但是应该足够了。
```c
void lendbook()//借书函数
{
FILE *fp,*fp3;
struct book *head=NULL;
struct book *p,*p1,*p2;
int i,loop,k,n=0,flag=0,s=0;
int jnum=0;
int many=0;
float tprice=0;
char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tpos[20]={'\0'},tshuhao[20]={'\0'},
ttname[20]={'\0'},mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
char hit=0;
system("cls");
if((fp=fopen("library.txt","r"))==NULL)
{
system("cls");
printf("\n 图书馆无库存!按任意键退出!");
getch();
exit(0);
}
else
{
printf("\n请输入借阅书名:\n请输入:");
scanf("%s",zname);
k=sumbook();//统计图书馆文件个数
for (i=0;i<k;i++)//先将图书信息建立链表,更改库存
{
fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tpos,&many,&tprice);
n++;
if(n==1)
{
p1=p2=(struct book*)malloc(LEN);
head=p1;
}
else
{
p2->next=p1;
p2=p1;
p1=(struct book*)malloc(LEN);
}
strcpy(p1->num,tshuhao);//复制书号
strcpy(p1->nam,tname);//复制书名
strcpy(p1->aut,tauthor);//复制作者
strcpy(p1->pub,tchuban);//复制出版社
strcpy(p1->pos,tpos);//复制位置
p1->many=many;//复制现存量
p1->price=tprice;//复制单价
}
if(n==0)
head=NULL;
else
{
p2->next=p1;
p1->next=NULL;
fclose(fp);
}
}
p=head;
for (;p!=NULL;)
{
if(!(strcmp(p->nam,zname)))//判断要借书的是否存在,标记等于1,存在库存减一
{
flag=1;
loop=p->many;
(p->many)--;
}
p=p->next;
}
if(flag&&(loop>0))//存在被借的图书且现存量大于0,把库存量变化后的链表存入文件
{
fp=fopen("library.txt","w");
fclose(fp);
fp=fopen("library.txt","a");
p=head;
for(;p!=NULL;)
{
fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->num,p->nam,p->aut,p->pub,p->pos ,p->many,p->price);
p=p->next;
}
free(p);
fclose(fp);
if ((fp3=fopen("reader.txt","r"))==NULL)//建读者文件夹存入借书信息
{
fp3=fopen("reader.txt","w");//打开只读文件
fclose(fp3);
}
fp3=fopen("reader.txt","a");
printf("\n请按以下格式输入读者信息:\n 证号 姓名 借书日期 借书书名\n请输入:");//录入读者信息
scanf("%d %s %s %s",&jnum,mingzi,riqi,zname);
fprintf(fp3,"\n%-8d%-23s%-18s%-10s\n",jnum,mingzi,riqi,zname);
fclose(fp3);
printf("借书成功!请两个月内归还!!!按任意键返回\n");
getch();//返回
lendmain();//调用借阅系统
}
else
{
if(flag!=0)
printf("此书已被借完!按任意键返回!");//否则输出此书已被借完
else
printf("查找无此书!按任意键返回");
}
getch();//返回
lendmain();//调用借阅系统
}
```