#include<stdio.h> 
#include<string.h> 
#include<conio.h> 
#include<stdlib.h> 
#include<ctype.h> 
#define STACK_INIT_SIZE 10 
#define OK 1 
#define TRUE 1 
#define FALSE 0 
#define ERROR 0

struct student /*定义学生类型,用于存放借出的书籍*/ 
{ 
int carnum; 
char lendbook[10]; 
}student[1000];

struct employ /*定义职工类型*/ 
{ 
int employnum; 
char employname[15]; 
int employage; 
char employsex[2]; 
char employleve[10]; 
long int employtage; 
}employ[50];

struct book /*定义书的类型*/ 
{ 
int booknum; 
char bookname[10]; 
char bookcreat[10]; 
int turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/ 
}book[1000];

struct car /*借书卡的数据类型*/ 
{ 
int carnum; 
char studentname[10]; 
int studentclass; 
}car[100];

huanbook() /*还书函数*/ 
{ 
FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/ 
int i,n; 
int carnum; 
char lendbook[10]; 
printf("请你输入你的卡号\n"); 
scanf("%d",&carnum); 
fp=fopen("car.txt","r"); /*读取卡号记录*/ 
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) /*判断卡号是否存在*/ 
{ 
   if(car[i].carnum==carnum) /*卡号存在,进入下一循环*/ 
   { 
    n=i; 
    fclose(fp); 
    printf("请输入你要还的书的名字\n"); 
    scanf("%s",lendbook); 
    fp=fopen("record.txt","r"); 
    for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) /*判断是否借阅了输入的书*/ 
    { 
     if(strcmp(student[i].lendbook,lendbook)==0) /*借阅了该书,进入下一循环,否则出错显示*/ 
     { 
      fclose(fp); 
      fp=fopen("record.txt","r"); 
      fp2=fopen("bookl.txt","w"); 
      for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) 
      { 
       if(strcmp(student[i].lendbook,lendbook)==0) 
       { 
        continue; /*删除还掉的书的借书记录*/ 
       } 
       fwrite(&student[i],sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/ 
      } 
      fclose(fp); 
      fclose(fp2); 
      fp=fopen("record.txt","w"); 
      fp2=fopen("bookl.txt","r"); 
      for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++) 
       { 
        fwrite(&student[i],sizeof(struct student),1,fp); /*将借书记录信息写回*/ 
       } 
      fclose(fp); 
      fclose(fp2); 
      fopen("bookl.txt","w"); /*清临时文件的记录*/ 
      fclose(fp2); 
      fp=fopen("book.txt","r"); 
      fp2=fopen("bookl.txt","w"); 
      for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/ 
      { 
       if(i==n) 
       { 
        book[i].turefalse=1; 
        fwrite(&book[i],sizeof(struct book),1,fp2); /*将还的书的原来状态设为无人借阅的*/ 
        continue; 
       } 
       fwrite(&book[i],sizeof(struct book),1,fp2); 
      } 
      fclose(fp); 
      fclose(fp2); 
      fp=fopen("book.txt","w"); 
      fp2=fopen("bookl.txt","r"); 
      for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) 
      { 
       fwrite(&book[i],sizeof(struct book),1,fp); /*将临时文件写回*/ 
      } 
      fclose(fp); 
      fclose(fp2); 
      fopen("bookl.txt","w"); /*清临时文件*/ 
      fclose(fp2); 
      printf("还书完毕,按任意键返回\n"); 
      getch(); 
      return 1; 
     } 
    } 
    printf("你没有借这样的书,任意键返回\n"); /*出错提示*/ 
    fclose(fp); 
    getch(); 
    return 0; 
   } 
} 
printf("系统没这样的卡,和管理员联系,按任意键返回\n"); /*出错提示*/ 
fclose(fp); 
getch(); 
}

findbook()
{ 
FILE *fp; 
char bookname[10]; 
int ture,i; 
fp=fopen("book.txt","r"); 
printf("请输入你要查找的书名\n"); 
scanf("%s",bookname); 
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) 
{ 
   if(strcmp(bookname,book[i].bookname)==0) 
   { 
    if(book[i].turefalse==1) 
    { 
     printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat); 
    } 
    else {printf("这本书已经有人借出\n");fclose(fp);return 0;} 
    fclose(fp); 
    return FALSE; 
   } 
} 
printf("没有你要查询的书籍\n"); 
fclose(fp); 
return FALSE; 
}

findbook1()
{ 
FILE *fp; 
char bookcreat[10]; 
int ture,i; 
fp=fopen("book.txt","r"); 
printf("请输入你要查找的作者名\n"); 
scanf("%s",bookcreat); 
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) 
{ 
   if(strcmp(bookcreat,book[i].bookcreat)==0) 
   { 
    if(book[i].turefalse==1) 
    { 
     printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat); 
    } 
    else {printf("这本书已经有人借出\n");fclose(fp);return 0;} 
    fclose(fp); 
    return FALSE; 
   } 
} 
printf("没有你要查询的书籍\n"); 
fclose(fp); 
return FALSE; 
}

lendcount() 
{ 
FILE *fp; 
int i,n=0; 
fp=fopen("record.txt","r"); 
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) 
{ 
   printf("卡号:%d 借出的书籍:%s \n",student[i].carnum,student[i].lendbook); 
   n=n+1; 
} 
fclose(fp); 
printf("目前共有%d本书借出\n",n); 
printf("按任意键\n"); 
getch();
return n; 
}

chabook() 
{ 
char ch5; 
do 
{ 
printf("---------------欢迎进入图书查询系统!--------------\n"); 
printf(" 1:<按书名查找>\n"); 
printf(" 2:<按作者查找>\n"); 
printf(" 0:<返回>\n"); 
printf("请输入0--2,其他输入非法!\n"); 
scanf("%s",&ch5); 
switch(ch5) 
   { 
    case '1':findbook();getch();break; 
    case '2':findbook1();getch();break; 
    case '0':break; 
    default:printf("无此操作\n");getch();break; 
   } 
}while(ch5!='0');
return FALSE; 
}

lendbook() 
{ 
FILE *fp,*fp2; 
int i,n; 
int carnum; 
printf("请你输入你的卡号\n"); 
scanf("%d",&carnum); 
fp=fopen("car.txt","r"); 
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) 
{ 
   if(car[i].carnum==carnum) 
   { 
    n=i; 
    fclose(fp); 
    printf("请输入你要借阅的书的名字\n"); 
    scanf("%s",student[n].lendbook); 
    fp=fopen("book.txt","r"); 
    for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) 
    { 
     if(strcmp(book[i].bookname,student[n].lendbook)==0) 
     { 
      if(book[i].turefalse==0) {printf("对不起,此书有人借出,请借其他书\n");fclose(fp);getch();return;} 
      else 
      fclose(fp); 
      fp=fopen("record.txt","a+"); 
      student[n].carnum=carnum; 
      fwrite(&student[n],sizeof(struct student),1,fp); 
      fclose(fp); 
      fp=fopen("book.txt","r"); 
      fp2=fopen("bookl.txt","w"); 
      for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) 
      { 
       if(strcmp(book[i].bookname,student[n].lendbook)==0) 
       { 
        book[i].turefalse=0; 
        fwrite(&book[i],sizeof(struct book),1,fp2); 
        continue; 
       } 
       fwrite(&book[i],sizeof(struct book),1,fp2); 
      } 
      fclose(fp); 
      fclose(fp2); 
      fp=fopen("book.txt","w"); 
      fp2=fopen("bookl.txt","r"); 
      for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) 
      { 
       fwrite(&book[i],sizeof(struct book),1,fp); 
      } 
      fclose(fp); 
      fclose(fp2); 
      fopen("bookl.txt","w"); 
      fclose(fp2); 
      printf("借书完毕,按任意键返回\n"); 
      getch(); 
      return; 
     } 
    } 
    printf("不存在这样的书,任意键返回\n"); 
    fclose(fp); 
    getch(); 
    return; 
   } 
} 
printf("你的卡号不存在,请申请新卡,按任意键返回\n"); 
fclose(fp); 
getch(); 
}

carcount() 
{ 
FILE *fp; 
int i,n=0; 
fp=fopen("car.txt","r"); 
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) 
{ 
   printf("第%d张卡<卡号:%d 姓名:%s 班级:%d>\n",i+1,car[i].carnum,car[i].studentname,car[i].studentclass); 
   n=n+1; 
} 
fclose(fp); 
printf("目前共有%d本书\n",n); 
printf("按任意键\n"); 
getch(); 
}

delcar() 
{ 
FILE *fp,*fp2; 
int i; 
int carnum; 
char choice; 
fp=fopen("car.txt","r"); 
fp2=fopen("bookl.txt","w"); 
printf("请输入你要删除的卡号\n"); 
printf("如果你输入的卡号存在,系统自动删除该信息!如果不存在,系统不做任何改动\n"); 
scanf("%d",&carnum); 
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) 
{ 
   if(car[i].carnum!=carnum) 
   { 
    fwrite(&car[i],sizeof(struct car),1,fp2); 
   } 
} 
fclose(fp); 
fclose(fp2); 
printf("是否真的要删除该卡?删除后该书籍的所有信息将无法恢复\n"); 
scanf("%s",&choice); 
if(choice=='y'||choice=='Y') 
{ 
   fp=fopen("car.txt","w"); 
   fp2=fopen("bookl.txt","r"); 
   for(i=0;fread(&car[i],sizeof(struct car),1,fp2)!=0;i++) 
   { 
    fwrite(&car[i],sizeof(struct car),1,fp); 
   } 
   fclose(fp); 
   fclose(fp2); 
   fp2=fopen("bookl.txt","w"); 
   fclose(fp2); 
   printf("按任意键返回\n"); 
   getch(); 
   return; 
} 
else 
{ 
   printf("按任意键返回\n"); 
   getch(); 
   return; 
} 
}

addcar() 
{ 
FILE *fp; 
int i=0; 
fp=fopen("car.txt","a+"); 
printf("请你输入卡号\n"); 
scanf("%d",&car[i].carnum); 
printf("请你输入学生姓名\n"); 
scanf("%s",car[i].studentname); 
printf("请你输入班级\n"); 
scanf("%d",&car[i].studentclass); 
fwrite(&car[i],sizeof(struct car),1,fp); 
fclose(fp); 
printf("输入完毕,任意键返回\n"); 
getch(); 
}