⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 借书.cpp

📁 一个简单的图书馆管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	  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 + -