📄 借书.cpp
字号:
printf("学号:%d\t姓名:%s\t当前是否借书状态:%s\t当前没有归还的书本编号(0表示当前未借有图书):%d\t当前没有归还的书本名字(none表示当前未借有图书):%s\n", h->user_number,h->user_name,h->state,h->user_currntbook_code,h->user_currntbook_name);
printf("借书日期%d年%d月%d日(0年0月0日表示当前未借有图书)\n",h->user_senddate.year,h->user_senddate.month,h->user_senddate.day);
printf("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
flag=1;
fclose(fq);
printf("按1继续查找,其他返回\n");
scanf("%d",&l);
if(l==1)
showuser2();
else
return;
}
else
h->next=(users *)malloc(sizeof(users));
}
}
if(i==2)
{ printf("请输入要查询的读者姓名:\n");
scanf("%s",n);
while(!feof(fq))
{ fread(h,sizeof(users),1,fq);
if(!strcmp(h->user_name,n))
{
printf("查找结果:\n");
printf("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
printf("查找结果:\n");
printf("学号:%d\t姓名:%s\t状态:%s\t当前没有归还的书本编号(0表示当前未借有图书):%d\t当前没有归还的书本名字(none表示当前未借有图书):%s\n", h->user_number,h->user_name,h->state,h->user_currntbook_code,h->user_currntbook_name);
printf("借书日期%d年%d月%d日\n",h->user_senddate.year,h->user_senddate.month,h->user_senddate.day);
printf("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
fclose(fq);
flag=1;
printf("按1继续查找,其他返回\n");
scanf("%d",&l);
if(l==1)
showuser2();
else
return;
}
else
h->next=(users *)malloc(sizeof(users));
}
}
if(flag==0)
{ printf("不存在这个读者,按1继续查询,其他返回\n");
scanf("%d",&k);
if(k==1)
{ fclose(fq);
showuser2();
}
else
return;
}
}
void bookdelete() //图书删除
{ int j=0,k=0;
long int i;
FILE *fp;
books *head,*pt,*ps,*h;
printf("请输入要删除的图书编号:\n");
scanf("%d",&i);
head=(books *)malloc(sizeof(books));
head->next=load(); //让head成为头节点,该头节点没有有效信息
for(ps=head;ps->next!=NULL&&ps->next->book_code!=i;ps=ps->next);
if(ps->next==NULL)
{ printf("不存在这本图书,按1继续删除,其他返回\n");
scanf("%d",&j);
if(j==1)
bookdelete();
else
return;
}
else
{ pt=ps->next;
ps->next=ps->next->next;
free(pt);
}
h=head->next; //让h指向头节点的下一个节点,也就是指向第一个有效节点
head->next=NULL; //让head与链表分开
free(head); // 删除head
if((fp=fopen("bookdocument","wb"))==NULL)
{ printf("不能打开文件\n");
exit(0);
}
while(h!=NULL)
{ fwrite(h,sizeof(books),1,fp);
h=h->next;
}
fclose(fp);
printf("已经删除图书信息\n");
k=0;
printf("按1继续删除,其他返回\n");
scanf("%d",&k);
if(k==1)
bookdelete();
else
return;
}
//-----------------------------------------------------------
//该函数供booksend()和bookreturn()调用,在借书时记录下借书用户信息和借书时间
//在还书时计算是否超期
int userborrow(long int number,long int bookcode,int flag,char bookname[50])
{ int i=0,j=0,k=0,l;
char state[10]={"yes"},state2[10]={"none"};
FILE *fq;
users *head,*pt,*ps,*h,*h2;
struct tm *t;
head=(users *)malloc(sizeof(users));
head->next=load2();
h=head;
t=time();
for(ps=head;ps->next!=NULL&&ps->next->user_number!=number;ps=ps->next);
if(ps->next==NULL)
return(0);
else if(flag==1)
{
pt=ps->next;
strcpy(pt->state,state);
pt->user_currntbook_code=bookcode;
strcpy(pt->user_currntbook_name,bookname);
pt->user_senddate.year=1900+t->tm_year;
pt->user_senddate.month=1+t->tm_mon;
pt->user_senddate.day=t->tm_mday;
printf("=======借书的日期为:%d-%d-%d=======\n",(1900+t->tm_year), (1+t->tm_mon),t->tm_mday);
}
else if(flag==2)
{ pt=ps->next;
strcpy(pt->state,state2);
pt->user_currntbook_code=0;
strcpy(pt->user_currntbook_name,state2);
printf("=======借书的日期为:%d年-%d月-%d日=======\n",pt->user_senddate.year, pt->user_senddate.month,pt->user_senddate.day);
printf("=======还书的日期为:%d年-%d月-%d日=======\n",(1900+t->tm_year), (1+t->tm_mon),t->tm_mday);
l=borrowdays(pt);
if(l>30)
printf("该书还书超过期限%d天\n",l-30);
else
printf("该书未超期限\n");
}
if((fq=fopen("userdocument","wb"))==NULL)
{ printf("不能打开文件\n");
exit(0);
}
while(h->next!=NULL)
{
fwrite(h->next,sizeof(users),1,fq);
h=h->next;
}
fclose(fq);
return(1);
}
void booksend() //借书
{ int j=0,k=0,b;
long int i,number;
char s,state[10]={"out"},name[20],bookname[50];
FILE *fp;
books *head,*pt,*ps,*h,*h2;
printf("请输入要借的图书编号:\n");
scanf("%d",&i);
printf("请输入要借的图书名:\n");
scanf("%s",bookname);
printf("请输入借书用户的学号:\n");
scanf("%d",&number);
printf("请输入借书用户的姓名:\n");
scanf("%s",name);
head=(books *)malloc(sizeof(books));
head->next=load();
h=head;
for(ps=head;ps->next!=NULL&&ps->next->book_code!=i;ps=ps->next);
if(ps->next==NULL)
{
printf("不存在这本图书,按1继续借书,其他返回\n");
scanf("%d",&j);
if(j==1)
booksend();
else
return;
}
else
{
pt=ps->next;
strcpy(pt->state,state);
pt->book_currentuser_number=number;
strcpy(pt->book_currentuser_name,name);
}
if((fp=fopen("bookdocument","wb"))==NULL)
{
printf("不能打开文件\n");
exit(0);
}
while(h->next!=NULL)
{
fwrite(h->next,sizeof(books),1,fp);
h=h->next;
}
fclose(fp);
b=userborrow(number,i,1,bookname);
if(b==1)
{
printf("借出成功,按1继续,其他返回\n");
scanf("%d",&k);
if(k==1)
booksend();
else
return;
}
else
{ printf("借出失败,按1继续,其他返回\n");
if(k==1)
booksend();
else
return;
}
}
void bookreturn() //还书
{ int j=0,k=0,b;
char s,state[10]={"in"},bookname[50],name[20];
long int i,number;
FILE *fp;
books *head,*pt,*ps,*h,*h2;
printf("请输入要还的图书编号:\n");
scanf("%d",&i);
printf("请输入要还的图书名:\n");
scanf("%s",bookname);
printf("请输入还书用户的学号:\n");
scanf("%d",&number);
printf("请输入还书用户的姓名:\n");
scanf("%s",name);
head=(books *)malloc(sizeof(books));
head->next=load();
h=head;
for(ps=head;ps->next!=NULL&&ps->next->book_code!=i;ps=ps->next);
if(ps->next==NULL)
{ printf("不存在这本图书,按1继续还书,其他返回\n");
scanf("%d",&j);
if(j==1)
bookreturn();
else
return;
}
else
{ pt=ps->next;
strcpy(pt->state,state);
}
if((fp=fopen("bookdocument","wb"))==NULL)
{ printf("不能打开文件\n");
exit(0);
}
while(h->next!=NULL)
{ fwrite(h->next,sizeof(books),1,fp);
h=h->next;
}
fclose(fp);
b=userborrow(number,i,2,bookname);
if(b==1)
{ printf("还书成功,按1继续,其他返回\n");
scanf("%d",&k);
if(k==1)
bookreturn();
else
return;
}
}
void showpassuser() //显示超期用户
{ users *p;
char s[10]={"yes"};
int flag=0;
p=load2();
while(p!=NULL&&strcmp(s,p->state)==0&&borrowdays(p)>30)
{ flag=1;
printf("姓名%s\t学号%d\t当前所借图书%s\t超期%d",p->user_name,p->user_number,p->user_currntbook_name,borrowdays(p)-30);
p=p->next;
}
if(flag==0)
{ printf("无超期用户\n");
return;
}
}
void index() //界面
{ struct tm *t;
int i,j;
t=time();
printf(" **********************************************************\n");
printf(" **************欢迎使用图书管理系统(VER1.0)****************\n");
printf(" * 今天是%d年%d月%d日 *\n",1900+t->tm_year,1+t->tm_mon,t->tm_mday);
printf(" * 1-图书添加 2-用户添加 *\n");
printf(" * 3-图书一览 4-用户一览 *\n");
printf(" * 5-查询图书详细资料 6-查询用户详细资料 *\n");
printf(" * 7-删除图书 8-查询超期用户 *\n");
printf(" * 9-借书 10-还书 *\n");
printf(" * 11-退出 *\n");
printf(" **********************************************************\n");
printf(" **********************************************************\n");
printf("请输入1-11选择:\n");
scanf("%d",&i);
if(i==1)
bookadd();
else if(i==2)
useradd();
else if(i==3)
showbook();
else if(i==4)
showuser();
else if(i==5)
showbook2();
else if(i==6)
showuser2();
else if(i==7)
bookdelete();
else if(i==8)
showpassuser();
else if(i==9)
booksend();
else if(i==10)
bookreturn();
else if(i==11)
return;
else
{ printf("输入错误\n");
system("cls");
index();
}
printf("按0返回主菜单\n");
scanf("%d",&j);
switch(j)
{ case 0:
system("cls");
index();
break;
default:
printf("输入错误,重新输入:");
}
}
void main(void)
{ index();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -