/*
lib.txt的格式为
书的id categoryid\n
书的状态 借书人的id\n
书的名字\n
*/
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>//定义bool类型
#include<string.h>
typedef struct book book;
struct book{
int bid;//书的id
int cid;//category id 所属的书的类别id
char bname[30];
int state;//书的state 0 已借出 1代表还未借出
int stdid;//借书人id 如果未借出 则此项为0
};
//booklist
book lib[100];
int len=0;
//书的类别五类 你可以选择多添加几个类别
int category[5]={0};
void init_lib()//讲lib.txt存储的图书馆信息读入内存
{
FILE *fin=fopen("lib.txt","r");
if(!fin)
{
printf("openfile error!\n");
exit(1);
}
len=0;
while(!feof(fin))
{
fscanf(fin,"%d %d",&lib[len].bid,&lib[len].cid);
fscanf(fin,"%d %d",&lib[len].state,&lib[len].stdid);
fgetc(fin);
fgets(lib[len].bname,28,fin);
lib[len].bname[strlen(lib[len].bname)-1]='\0';//去除\n
category[lib[len].cid]++;
len++;
}
fclose(fin);
}
void libprint()//输出图书信息
{
int i;
for(i=0;i<len;i++)
{
printf("书名:%s\n编号:%d \n书目前的所属人(0代表图书馆):%d \n同类别图书共有:%d\n",lib[i].bname,lib[i].bid,lib[i].stdid,category[lib[i].cid]);
printf("-------------------------------------------------------------------------\n");
//printf("%d %d\n%d %d\n%s",lib[i].bid,lib[i].cid,lib[i].state,lib[i].stdid,lib[i].bname);
}
}
bool borrowbook(int bookid,int stdid)//借书
{
int i;
for(i=0;i<len;i++)
{
if(bookid==lib[i].bid&&lib[i].state==1)
{
lib[i].state=0;
category[lib[i].cid]--;
lib[i].stdid=stdid;
return 1;
}else
return 0;
}
return 0;
}
bool returnbook(int bookid,int stdid)//还书
{
int i=0;
for(i=0;i<len;i++)
{
if(bookid==lib[i].bid&&lib[i].state==0&&lib[i].stdid==stdid)
{
lib[i].state=1;
lib[i].stdid=0;
category[lib[i].cid]++;
return 1;
}
}
return 0;
}
void savelib()//将内存的数据写入lib.txt存储起来
{
FILE *fout=fopen("lib.txt","w");
if(!fout)
{
printf("写入失败!\n");
exit(0);
}
int i;
for(i=0;i<len;i++)
{
fprintf(fout,"%d %d\n%d %d\n%s\n",lib[i].bid,lib[i].cid,lib[i].state,lib[i].stdid,lib[i].bname);
}
fclose(fout);
printf("成功写入数据库文件!\n");
}
int main(void)
{
int choice,stdid,bookid;
init_lib();//数据读入内存
while(1)
{
choice=0;
printf("图书馆管理系统\n");
printf("---------------\n");
printf("1-将每本书信息输出\n");
printf("2-借书 \n");
printf("3-还书 \n");
printf("4-save \n");
printf("5-exit without save\n");
printf("---------------------------\n");
scanf("%d",&choice);
printf("---------------------------\n");
if(choice<1||choice>5)
{
printf("检查你的输入!(1,2,3,4,5)\n");
continue;
}
if(choice==1)
libprint();
if(choice==2)
{
printf("输入你要借的书的id和你的studentid(以空格分隔):\n");
scanf("%d %d",&bookid,&stdid);
if(borrowbook(bookid,stdid))
printf("成功借出!\n");
else
printf("借出错误\n");
}
if(choice==3)
{
printf("输入你要还的书的id和你的studentid(以空格分隔):\n");
scanf("%d %d",&bookid,&stdid);
if(returnbook(bookid,stdid))
printf("成功还书\n");
else
printf("还书错误\n");
}
if(choice==4)
{
savelib();
}
if(choice==5)
exit(0);
}
return 0;
}
新建一个lib.txt文件 将下面内容保存,放在同一目录下 作为数据库文件
1001 1
1 0
c primier
1003 1
1 0
c primier
1002 2
1 0
c++ primie
0 0
0 0