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

📄 借书.cpp

📁 一个简单的图书馆管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#include "ctype.h"
#include "stdlib.h"
#include "time.h"
#include "windows.h"
#include "conio.h"
#define LEAP_YEAR(year) year%4==0&&year%100!=0||year%400==0
struct date
{ int year;
  int month;
  int day;
};
typedef struct owner
{ long int user_number;  //用户读者学号
  char user_name[20];  //姓名
  char user_currntbook_name[50];  //用户当前所借的图书书名
  long int user_currntbook_code;   //用户当前所借图书编号
  struct date user_senddate;  // 借书的日期
  char state[10];    // 是否借书状态
  struct owner *next;  
}users;
typedef struct book
{ long int book_code;
  char book_name[50];
  char state[10];
  long int book_currentuser_number;
  char book_currentuser_name[20];
  struct book *next;
}books;
users *load2();
books *load();
void bookadd();
void bookdelete();
void booksend();
void showbook();
void showbook2();
void showuser();
void showuser2();  
void useradd();   //用户添加
void index();
int days(int y,int m,int d);
int userborrow(long int number,long int bookcode,int flag,char bookname[50]);  
int borrowdays(users *p1);
struct tm *time();
int borrowdays(users *p1)  //计算借书天数
{ struct tm *t;
  int i,j,k,l,m,o;
  t=time();
  k=days(1900+t->tm_year,1+t->tm_mon,t->tm_mday);
  l=days(p1->user_senddate.year,p1->user_senddate.month,p1->user_senddate.day);
  
  m=(1900+t->tm_year)-p1->user_senddate.year;
  if(m==0)
  { o=k-l;
    return o;
  }
  if(m==1)
  { if(LEAP_YEAR(p1->user_senddate.year))
  { o=366-l+k;
    return o;
  }
  else
  {	o=365-l+k;
    return o;
  }
  }
  if(m>=2)
  { if(LEAP_YEAR(p1->user_senddate.year))
  { o=366-l+k;
	for(i=p1->user_senddate.year+1;i<=1900+t->tm_year-1;i++)
	{ if(LEAP_YEAR(i))
	     o+=366;
	  else
		  o+=365;
	}
	return o;
  }
    else
	{ o=365-l+k;
	  for(i=p1->user_senddate.year+1;i<=1900+t->tm_year-1;i++)
	  { if(LEAP_YEAR(i))
          o+=366;
	    else
			o+=365;
	  }
	  return o;
	}
  }
}
int days(int y,int m,int d)
{ int i,n=0,mt[]={31,28,31,30,31,31,30,31,30,31};
  if(LEAP_YEAR(y))
	  mt[2]=29;
  for(i=1;i<m;i++)
	  n+=mt[i];
  n+=d;
  return n;
}



struct tm *time() //获取系统时间
{ time_t timep;
  struct tm *p;
  time(&timep);
  p=gmtime(&timep);
  
  return p;
}
users *load2() //读出用户资料,并返回资料的链表头指针
{ users *p,*q,*h=NULL;
  FILE *fq;
  	  
  if((fq=fopen("userdocument","rb"))==NULL)
  { printf("can not ppen file\n");
	exit(1); }
	
	
    p=(users *)malloc(sizeof(users));
	
	if(!p)
	{ printf("内存溢出!!\n");
	  return h;
	  }
	
	h=p;//申请到空间,将它作为头指针
	
	while(!feof(fq))
	{ 
	  if(1!=fread(p,sizeof(users),1,fq))
	  
	  break;
	  
	  p->next=(users *)malloc(sizeof(users));
	  
	  if(!p->next)
	  { 
		printf("\n内存溢出!!\n");
	    return h;
	  }
	  
	  q=p;
	  p=p->next;//指针后移,新读入数据链到当前表尾
	}
	q->next=NULL;
	fclose(fq);
	if(!h)
	{ printf("无存储用户信息\n");
	  index();
	}
	return h;
    
}  
books *load()  //读出图书资料,并返回资料的链表头指针
{ books *p,*q,*h=NULL;
  FILE *fp;
	  if((fp=fopen("bookdocument","rb"))==NULL)
	  { printf("can not ppen file\n");
	    exit(1); }
	    
	 
	  p=(books *)malloc(sizeof(books));
	  if(!p)
	  { printf("内存溢出!!\n");
	    return h;
	  }
	  h=p;//申请到空间,将它作为头指针
	  while(!feof(fp))
	  { if(1!=fread(p,sizeof(books),1,fp))
	    break;
	  p->next=(books *)malloc(sizeof(books));
	  if(!p->next)
	  { printf("\n内存溢出!!\n");
	    return h;
	  }
	  q=p;
	  p=p->next;//指针后移,新读入数据链到当前表尾
	  }
	  q->next=NULL;
	  fclose(fp);
	  if(!h)
	  { printf("无存储图书信息\n");
	    index();
	  }
	  return(h);
}  
void bookadd()  //添加图书
{ FILE *fp;
  char state[10]={"in"},state2[10]={"none"};
  int i=0;
  books *p1;
  p1=(books *)malloc(sizeof(books));
  printf("输入图书编号");
  scanf("%d",&p1->book_code);
  printf("图书名:");
  scanf("%s",p1->book_name);
  strcpy(p1->state,state);
  p1->book_currentuser_number=0;
  strcpy(p1->book_currentuser_name,state2);
  p1->next=NULL;
  if((fp=fopen("bookdocument","ab"))==NULL)
  { printf("不能打开文件\n");
    exit(0);
  }
  fwrite(p1,sizeof(books),1,fp);
  fclose(fp);
  printf("添加成功\n");
 
  printf("继续添加请按1,其他返回\n");
  scanf("%d",&i);
  if(i==1)
	 bookadd();
  else
	  return;
}
void useradd()   //用户添加
{ FILE *fq;
  int i,j=0;
  char state[10]={"none"};
  users *p1;
  p1=(users *)malloc(sizeof(users));
  printf("请输入借书者学号:\n");
  scanf("%d",&p1->user_number);
  printf("请输入借书者姓名:\n");
  scanf("%s",p1->user_name);
  strcpy(p1->state,state);
  strcpy(p1->user_currntbook_name,state);
  p1->user_senddate.year=0;
  p1->user_senddate.month=0;
  p1->user_senddate.day=0;
  p1->user_currntbook_code=0;
  p1->next=NULL;
  if((fq=fopen("userdocument","ab"))==NULL) 
  { printf("不能打开文件\n");
    exit(0);
  }
  fwrite(p1,sizeof(users),1,fq);
  fclose(fq);
  printf("添加成功\n");
 
  printf("继续添加请按1,其他返回\n");
  scanf("%d",&j);
  if(j==1)
	 useradd();
  else
	  return;
}
  
void showbook() //显示书本基本信息
{ books *p1;
  p1=load();
  while(p1!=NULL)
  { printf("编号:%d\t书名:%s\t状态:%s\n", p1->book_code,p1->book_name,p1->state);
    p1=p1->next;
  }
}
void showuser() //显示用户基本信息
{ users *p1;
  p1=load2();
  while(p1!=NULL)
  { printf("学号:%d\t姓名:%s\t当前是否借书状态:%s\n", p1->user_number,p1->user_name,p1->state);
    p1=p1->next;
  }
}
void showbook2() //显示图书详细信息
{ FILE *fp;
  books *h;
  int i=0,k=0,l=0,flag=0;
  long int j;
  char n[50];
  if((fp=fopen("bookdocument","rb"))==NULL)
  { printf("不能打开文件\n");
    exit(0);
  }
  h=(books *)malloc(sizeof(books));
  printf("1--按图书编号查询   2--按图书名字查询:\n");
  scanf("%d",&i);
  if(i==1)
  { 
	printf("请输入要查询的图书编号:\n");
    scanf("%d",&j);
	while(!feof(fp))
  { fread(h,sizeof(books),1,fp);
    if(h->book_code==j)
	{ printf("查找结果:\n");
	  printf("编号:%d\t书名:%s\t状态:%s\n", h->book_code,h->book_name,h->state);
      printf("当前拥有此书的读者姓名(none表示当前没有此书用户):%s\t当前拥有此书的读者学号(0表示当前此书没有用户):%d\n",h->book_currentuser_name,h->book_currentuser_number);
	  flag=1;
	  printf("按1继续查找,其他返回\n");
      scanf("%d",&l);
      if(l==1)
	  { fclose(fp);
	    showbook2();
	  }
      else 
		  return;
	}
	else 
		h->next=(books *)malloc(sizeof(books));
  }
  
  }
  if(i==2)
  { printf("请输入要查询的书名:\n");
    scanf("%s",n);
    while(!feof(fp))
	{ fread(h,sizeof(books),1,fp);
	  if(!strcmp(h->book_name,n))
	  { printf("查找结果:\n");
	    printf("学号:%d\t姓名:%s\t状态:%s\n", h->book_code,h->book_name,h->state);
		printf("当前拥有此书的读者姓名(none表示当前没有此书用户):%s\t当前拥有此书的读者学号(0表示当前此书没有用户):%d\n",h->book_currentuser_name,h->book_currentuser_number);
		flag=1;
		printf("按1继续查找,其他返回\n");
        scanf("%d",&l);
        if(l==1)
		{ fclose(fp);
	      showbook2();
		}
         else 
		     return;
	  }
	  else
		  h->next=(books *)malloc(sizeof(books));
	}
  }
  if(flag==0)
  { printf("不存在这本图书,按1继续查询,其他返回\n");
    scanf("%d",&k);
    if(k==1)
	{ fclose(fp);
	  showbook2();
	}
    else 
	   return;
  }
}
void showuser2()   //显示用户详细信息
{ FILE *fq;
  users *h;
  int i=0,k=0,l=0,flag=0;
  long int j;
  char n[20];
  if((fq=fopen("userdocument","rb"))==NULL)
  { printf("不能打开文件\n");
    exit(0);
  }
  h=(users *)malloc(sizeof(users));
  printf("1--按读者学号查询   2--按读者姓名查询:\n");
  scanf("%d",&i);
  if(i==1)
  { 
	printf("请输入要查询的读者学号:\n");
    scanf("%d",&j);
	while(!feof(fq))
  { fread(h,sizeof(users),1,fq);
    if(h->user_number==j)
	{ printf("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
	  printf("查找结果:\n");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -