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

📄 book.c

📁 图书馆管理系统,可以对图书进行增加,修改,删除,查询等功能!
💻 C
字号:
#include "list.h"

void addbook() /* 新增图书*/
{ 
	FILE *fp; 
	int i=0; 
	char choice='y'; 
	fp=fopen("book.txt","a+"); 
	while(choice=='y'||choice=='Y') 
	{ 
		printf("请你输入第%d本书的序号\n",i+1); 
		scanf("%d",&book[i].booknum); 
		printf("请你输入书名\n"); 
		scanf("%s",book[i].bookname); 
		printf("请你输入书的作者\n"); 
		scanf("%s",book[i].bookcreat); 
		printf("请设为1或0,1代表书还没人借,0表示书已经借出,设其他值,程序运行时无法得出正常结果\n"); 
		printf("请你设定书的状态\n"); 
		scanf("%d",&book[i].turefalse); 
		fwrite(&book[i],sizeof(struct book),1,fp); 
		printf("是否要输入下本书'Y/N'\n"); 
		scanf("%s",&choice); 
	} 
	fclose(fp); 
} 

void bookcount() /* 图书统计*/
{ 
	FILE *fp; 
	int i,n=0; 
	fp=fopen("book.txt","r"); 
	for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) 
	{ 
		
		if(book[i].booknum!=0&&strlen(book[i].bookname)!=0&&strlen(book[i].bookcreat)!=0) 
		{ 
			printf("第%d本书<序号:%d 书名:%s 作者:%s 状态:%d>\n",i+1,book[i].booknum,book[i].bookname,book[i].bookcreat,book[i].turefalse); 
			n=n+1; 
		} 
	} 
	fclose(fp); 
	printf("目前共有%d本书\n",n); 
	printf("按任意键\n"); 
} 



void delbook() /* 删除图书*/
{ 
	FILE *fp,*fp2; 
	int i; 
	char bookname[10],choice; 
	fp=fopen("book.txt","r"); 
	fp2=fopen("bookl.txt","w"); //临时文件
	printf("请输入你要删除的书名\n"); 
	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) 
		{ //不是被删除图书 写入临时文件
			fwrite(&book[i],sizeof(struct book),1,fp2); 
		} 
	} 
	fclose(fp); 
	fclose(fp2); 
	printf("是否真的要删除该书籍?删除后该书籍的所有信息将无法恢复《Y/N》\n"); 
	scanf("%s",&choice); 
	if(choice=='y'||choice=='Y') 
	{ 
		fp=fopen("book.txt","w"); 
		fp2=fopen("bookl.txt","r"); 
		for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) 
		{//将临时文件 写入book文件
			fwrite(&book[i],sizeof(struct book),1,fp); 
		} 
		fclose(fp); 
		fclose(fp2); 
		fp2=fopen("bookl.txt","w");//清空临时文件 
		fclose(fp2); 
		printf("按任意键返回\n"); 
		getch(); 
		return; 
	} 
	else 
	{ 
		fp2=fopen("bookl.txt","w");//清空临时文件 
		fclose(fp2); 
		printf("按任意键返回\n"); 
		getch(); 
		return; 
	} 
} 


void findbook() /* 按书名查找图书*/
{ 
	FILE *fp; 
	char bookname[10]; 
	int 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",book[i].booknum,book[i].bookname,book[i].bookcreat); 
			} 
			else 
			{
				printf("这本书已经有人借出\n");
				fclose(fp);
				return;
			} 
			fclose(fp); 
			return; 
		} 
	} 
	printf("没有你要查询的书籍\n"); 
	fclose(fp); 
	return; 
} 

void findbook1() /* 按作者查找图书*/
{ 
	FILE *fp; 
	char bookcreat[10]; 
	int 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",book[i].booknum,book[i].bookname,book[i].bookcreat); 
			} 
			else 
			{
				printf("这本书已经有人借出\n");
				fclose(fp);
				return;
			} 
			fclose(fp); 
			return; 
		} 
	} 
	printf("没有你要查询的书籍\n"); 
	fclose(fp); 
	return; 
} 


void lendbook() /* 借阅图书*/
{ 
	FILE *fp,*fp2; /*定义两个文件指针,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"); //清空临时文件book1
					fclose(fp2); 
					printf("借书完毕,按任意键返回\n"); 
					getch(); 
					return; 
				} //end if 查找图书
			} //end for 
			printf("不存在这样的书,任意键返回\n"); 
			fclose(fp); 
			getch(); 
			return; 
		} //end if 查找卡号
	} //end for
	printf("你的卡号不存在,请申请新卡,按任意键返回\n"); 
	fclose(fp); 
	getch(); 
} 


void 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++) /*for循环判断卡号是否存在*/ 
	{ 
		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; 
				} 
			} 
			printf("你没有借这样的书,不要耍我,任意键返回\n"); /*出错提示*/ 
			fclose(fp); 
			getch(); 
			return; 
		} 
	} 
	printf("系统没这样的卡,和管理员联系,按任意键返回\n"); /*出错提示*/ 
	fclose(fp); 
	getch(); 
} 


void changebook() /* 修改图书信息*/
{ 
	FILE *fp,*fp2; 
	char bookname[10],choice; 
	int i; 
	fp=fopen("book.txt","r"); 
	fp2=fopen("bookl.txt","w"); 
	printf("请你输入要修改的书籍的书字\n"); 
	scanf("%s",bookname); 
	for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) 
	{ 
		
		if(strcmp(book[i].bookname,bookname)==0) 
		{ 
			printf("你所要修改的书的资料如下,请选择你要修改的内容\n"); 
			printf("序号:〈%d〉 书名:〈%s〉 作者:〈%s〉 \n",book[i].booknum,book[i].bookname,book[i].bookcreat); 
			printf("1:修改书的序号\n"); 
			printf("2:修改书名\n"); 
			printf("3:修改作者\n"); 
			printf("请输入1-3:"); 
			scanf("%s",&choice); 
			switch(choice) 
			{ 
			case '1': 
				{ 
					printf("请输入新的序号\n"); 
					scanf("%d",&book[i].booknum); 
					fwrite(&book[i],sizeof(struct book),1,fp2); 
				}break; 
			case '2': 
				{ 
					printf("请输入新的书名\n"); 
					scanf("%s",book[i].bookname); 
					fwrite(&book[i],sizeof(struct book),1,fp2); 
				}break; 
			case '3': 
				{ 
					printf("请输入新的作者\n"); 
					scanf("%s",book[i].bookcreat); 
					fwrite(&book[i],sizeof(struct book),1,fp2); 
				}break; 
			default:printf("没有这样的操作");break; 
			} 
			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); 
	fp2=fopen("bookl.txt","w"); 
	fclose(fp2); 
	printf("按任意键返回\n"); 
	getchar(); 
	return; 
} 


void 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(); 
} 

⌨️ 快捷键说明

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