,运行借阅功能后,程序会直接退出且bookslist文件里的信息会消失
void zjiemianjieyue(sys_edit*editBox)
{
initEditBox(editBox,500,350,200,30);
jiemianjieyue();
const int buffSize = 100;
char str[100]="";
int a=0,b;
int i;
int x=0;
for (; is_run();delay_fps(10))
{
bool calculate = false;
while (kbmsg())
{
key_msg msg = getkey();
if ((msg.key == key_enter) && (msg.msg == key_msg_up))
{
calculate = true;
}
}
if (calculate)
{
editBox->gettext(buffSize,str);
strcpy(bookk,str);
cleardevice();
editBox->settext("");
a=Borrowedbooks(editBox);
if(a)
{
cleardevice();
editBox->settext("");
zjiemiancgfh(editBox);
}
else
{
cleardevice();
editBox->settext("");
zjiemiansbfh(editBox);
}
}
}
}
void jiemianjieyue()//借阅界面
{
setcaption("图书借阅!");
setbkcolor(EGERGB(0x54, 0xFC, 0xFC));//更改背景颜色
setcolor(BLACK); //文字的颜色
setbkmode(TRANSPARENT); //设置文字背景色为透明
setfont(50, 0, "楷体"); //设置文字大小和字体
xyprintf(300, 30, "图书借阅");//输出文字(x,y)
setlinestyle(2,NULL,1,NULL);//(线型(0为实线),线宽)
setwritemode(R2_BLACK, NULL);
setfont(30, 0, "黑体");
outtextxy(500, 200, "请输入您要借阅的图书编号");//单行输出文字 (x1,y1)
}
int Borrowedbooks(sys_edit*editBox)//借书函数
{
FILE *fp,*fp3;
BookInfo *head=NULL;
BookInfo *p,*p1,*p2;
fp=fopen("F:\\c语言课设\\bookslist.txt","r");
int i,loop,k,h,n=0,flag=0,s=0;
int br=0;
float bprice=0;
char bnum[10]={'\0'},bname[10]={'\0'},bauthor[10]={'\0'},bclassfy[10]={'\0'},Publicationdate[10]={'\0'},Publisher[10]={'\0'};
k=tjzs();//统计图书馆文件个数
fscanf(fp,"%s%s%s%s%s%s%f%d\n",bnum,bname,bauthor,bclassfy,Publisher,Publicationdate,&bprice,&br);
p1=p2=(BookInfo*)malloc(sizeof(BookInfo));
head=p1;
strcpy(p1->bnum,bnum);//复制书号
strcpy(p1->bname,bname);//复制书名
strcpy(p1->bauthor,bauthor);//复制作者
strcpy(p1->bclassfy,bclassfy);//复制出版社
strcpy(p1->Publisher,Publisher);
strcpy(p1->Publicationdate,Publicationdate);
p1->br=br;//复制书的状态
p1->bprice=bprice;//复制单价
for (i=1;i<k;i++)//先将图书信息建立链表,更改库存
{
fscanf(fp,"%s%s%s%s%s%s%f%d\n",bnum,bname,bauthor,bclassfy,Publisher,Publicationdate,&bprice,&br);
//p2->next=p1;
//p2=p1;
p2=(BookInfo*)malloc(sizeof(BookInfo));
strcpy(p2->bnum,bnum);//复制书号
strcpy(p2->bname,bname);//复制书名
strcpy(p2->bauthor,bauthor);//复制作者
strcpy(p2->bclassfy,bclassfy);//复制出版社
strcpy(p2->Publisher,Publisher);
strcpy(p2->Publicationdate,Publicationdate);
p2->br=br;//复制书的状态
p2->bprice=bprice;//复制单价
//p2->next=p1;
p2->next=NULL;
p1->next = p2;
p1 = p2;
}
fclose(fp);
p=head;
for (;p!=NULL;)
{
if(!(strcmp(p->bnum,bookk))&&p->br>=1)//判断要借书的是否存在,标记等于1,存在库存减一
{
flag=1;
p->br=p->br-1;
break;//你的文件中,图书编号是唯一的吗,如果是唯一的,这里直接break就可以了
}
p=p->next;
}
if(flag)//把状态变化后的链表存入文件
{
fp=fopen("F:\\c语言课设\\bookslist.txt","w");//a是追加,w是重写,直接用重写就可以。
p=head;
for(;p !=NULL;)
{
fprintf(fp,"%-10s %-10s %-10s %-10s %-10s %-10s %.2f %d\n",p->bnum,p->bname,p->bauthor,p->bclassfy,p->Publisher,p->Publicationdate,p->bprice,p->br);
p=p->next;
}
//free(p);
fclose(fp);
//释放空间
while(head)
{
p = head->next;
free(head);
head = p;
}
head = 0;
p = 0;
//建读者文件夹存入借书信息
fp3=fopen("F:\\c语言课设\\Notreturned.txt","a");
fprintf(fp3,"%-10s %-10s %-10s %d借\n",st.name,st.password,bookk,date);
fclose(fp3);
return 1;
}
else
{
return 0;
}
}
运行借阅功能后,程序会直接退出且bookslist文件里的信息会消失
程序可以正常完成借阅功能
部分代码不能调试,建议调试,根据提示解决,是不是非法访问?