图书管理系统

这个程序实现了图书管理、读者管理和借还书管理的完整流程。包括读取和保存图书及读者信息,查找、增添、删除和修改数据,以及借书和还书功能。系统通过结构体存储数据,文件操作进行数据持久化,并提供了友好的用户交互界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


#define BOOK_NUM 10
#define READER_NUM 10
#define BOOK_DATA All_Book[i].book_id,All_Book[i].book_name,All_Book[i].book_author,All_Book[i].book_press,All_Book[i].amount
#define READER_DATA All_Reader[i].reader_id,All_Reader[i].reader_name,All_Reader[i].reader_sex,All_Reader[i].max_usebook,All_Reader[i].now_usebook

//**********函数定义************
//主菜单
void ShowMainMeun();
//图书管理模块子菜单
void ShowBookMenu();
//读者管理模块子菜单
void ShowReaderMenu();
//借还书管理模块子菜单
void ShowIObookMenu();
//********************************

//图书信息结构体
struct Book
{
	int book_id;//图书序列号
	char book_name[50];//书名
	char book_author[25];//作者
	char book_press[30];//出版社
	int amount;//库存量
};

//读者信息结构体
struct Reader
{
	int reader_id;//读书卡卡号
	char reader_name[25];//读者姓名
	char reader_sex[10];//读者性别
	int max_usebook;//最大可借图书量
	int now_usebook;//当前可借图书量
	int Bookid[10];//已借阅的图书列表
};

struct Book All_Book[BOOK_NUM];//记录所有图书信息
struct Reader All_Reader[READER_NUM];//记录所有读者信息

//文件操作
int ReadBookFile(const char* pcMode)
{
	int iBookRecord = 0;
	FILE* pfBook;//文件指针
	fopen_s(&pfBook, "book.txt", pcMode);
	if (pfBook == NULL)
	{
		return -1;
	}
	while (!feof(pfBook))
	{
		if (fread(&All_Book[iBookRecord], sizeof(struct Book), 1, pfBook))//把文件读到内存里
		{
			iBookRecord++;//记录图书信息条数
		}
	}
	fclose(pfBook);
	return iBookRecord;
}

//书籍查找
int Find_Book_Mode(int x)
{
	int find_id = -1;
	int iBookRecord;//记录条数
	system("cls");
	iBookRecord = ReadBookFile("rb");//以只读方式打开
	if (iBookRecord == -1)
	{
		printf("该文件打开失败,请新增图书信息。\n");
		return -1;
	}
	if (iBookRecord == 0)
	{
		printf("文件中没有图书信息。\n");
		return -2;
	}
	else
	{
		int key = 0;
		printf("\t----------------------------------------------------\n");

		if (x == 1)
		{
			int Book_id;
			printf("确认输入目标书籍编号:");
			scanf_s("%d", &Book_id);
			getchar();
			for (int i = 0; i < iBookRecord; i++)
			{
				if (All_Book[i].book_id == Book_id)
				{
					key = 1;
					find_id = i;
					printf("已找到此图书信息。\n");
					printf("\t%-8s%-15s%-10s%-12s%-10s\n", "编号", "书名", "作者", "出版社", "库存量");
					printf("\t%-8d%-15s%-10s%-12s%3d本\n", BOOK_DATA);
					break;
				}
			}
		}
		else if (x == 2)
		{
			char Book_name[50];
			printf("输入要查询的书籍名称:");
			scanf_s("%s", Book_name, 50);
			getchar();
			for (int i = 0; i < iBookRecord; i++)
			{
				if (strcmp(Book_name, All_Book[i].book_name) == 0)
				{
					key = 1;
					find_id = i;
					printf("已找到此图书信息。\n");
					printf("\t%-8s%-15s%-10s%-12s%-10s\n", "编号", "书名", "作者", "出版社", "库存量");
					printf("\t%-8d%-15s%-10s%-12s%3d本\n", BOOK_DATA);
					break;
				}
			}

		}
		else if (x == 3)
		{
			char Book_author[20];
			printf("输入要查询的书籍作者:");
			scanf_s("%s", Book_author, 20);
			getchar();
			for (int i = 0; i < iBookRecord; i++)
			{
				if (strcmp(Book_author, All_Book[i].book_author) == 0)
				{
					key = 1;
					find_id = i;
					printf("已找到此图书信息。\n");
					printf("\t%-8s%-15s%-10s%-12s%-10s\n", "编号", "书名", "作者", "出版社", "库存量");
					printf("\t%-8d%-15s%-10s%-12s%3d本\n", BOOK_DATA);
					break;
				}
			}

		}
		else if (x == 4)
		{
			char Book_press[30];
			printf("输入要查询的书籍出版社:");
			scanf_s("%s", Book_press, 30);
			getchar();
			for (int i = 0; i < iBookRecord; i++)
			{
				if (strcmp(Book_press, All_Book[i].book_press) == 0)
				{
					key = 1;
					find_id = i;
					printf("已找到此图书信息。\n");
					printf("\t%-8s%-15s%-10s%-12s%-10s\n", "编号", "书名", "作者", "出版社", "库存量");
					printf("\t%-8d%-15s%-10s%-12s%3d本\n", BOOK_DATA);
					break;
				}
			}

		}

		if (key == 0)
		{
			printf("\t  未查询到此图书信息! -_-##\n");
		}
		printf("\t----------------------------------------------------\n\n");
	}
	printf("\t------------------查找图书子菜单--------------------\n");
	printf("\t\t   1.按书籍编号查找\n");
	printf("\t\t   2.按书籍名称查找\n");
	printf("\t\t   3.按书籍作者查找\n");
	printf("\t\t   4.按书籍出版社查找\n");
	printf("\t\t   0.返回上一级菜单\n");
	printf("\t----------------------------------------------------\n");
	return find_id;

}

//显示所有图书信息
void Show_AllBook()
{
	int i;
	int iBookRecord;//记录条数
	system("cls");
	iBookRecord = ReadBookFile("rb");//以只读方式打开
	if (iBookRecord == -1)
	{
		printf("该文件打开失败,请新增图书信息。\n");

	}
	if (iBookRecord == 0)
	{
		printf("文件中没有图书信息。\n");

	}
	else
	{
		printf("\t------------------------------------------------------------\n");
		printf("\t%-8s%-15s%-10s%-20s%-10s\n", "编号", "书名", "作者", "出版社", "库存量");
		for (i = 0; i < iBookRecord; i++)
		{
			printf("\t%-8d%-15s%-10s%-20s%3d本\n", BOOK_DATA);
		}
		printf("\t-----------------------------------------------------------\n\n");
	}

	printf("\t----------------------子菜单------------------------\n");
	printf("\t\t   1.显示所有图书信息\n");
	printf("\t\t   2.增添图书信息\n");
	printf("\t\t   3.查找图书信息\n");
	printf("\t\t   4.删除图书信息\n");
	printf("\t\t   5.修改图书信息\n");
	printf("\t\t   0.返回上一级菜单\n");
	printf("\t----------------------------------------------------\n");
}

//增添图书信息
void Add_NewBook()
{
	FILE* pfBook;
	int i;
	int iBookRecord;
	int iFlagExist;
	char cFlag;
	system("cls");
	iBookRecord = ReadBookFile("ab+");//追加或新建方式打开二进制文件
	if (iBookRecord == -1)
	{
		printf("文件打开失败!\n");
		return;
	}
	else if (iBookRecord == 0)
	{
		printf("没有图书信息!\n");
	}
	else
	{
		Show_AllBook();
	}

	//循环录入图书信息
	printf("请选择是否录入信息(y/n)?\n");
	cFlag = getchar();
	getchar();
	if (cFlag == 'n')
	{
		return;
	}
	fopen_s(&pfBook, "book.txt", "ab+");
	if (pfBook == NULL)
	{
		printf("文件打开失败!\n");
		return;
	}
	if (cFlag == 'y')
	{
		while (cFlag == 'y')
		{
			//录入数据
			if (iBookRecord >= BOOK_NUM)
			{
				printf("记录已满!\n");
				fclose(pfBook);
				return;
			}

			printf("请输入图书编号!\n");
			//图书编号不能重复
			do
			{
				iFlagExist = 0;
				scanf_s("%d", &All_Book[iBookRecord].book_id);
				getchar();

				for (i = 0; i < iBookRecord; i++)
				{
					if (All_Book[i].book_id == All_Book[iBookRecord].book_id)
					{
						iFlagExist = 1;
						printf("图书编号重复!\n");
						break;
					}
				}

			} while (iFlagExist == 1);

			printf("请输入图书名称:\n");
			scanf_s("%s", All_Book[iBookRecord].book_name, 50);
			getchar();
			printf("请输入图书作者:\n");
			scanf_s("%s", All_Book[iBookRecord].book_author, 20);
			getchar();
			printf("请输入图书出版社:\n");
			scanf_s("%s", All_Book[iBookRecord].book_press, 30);
			getchar();
			printf("请输入图书库存量:\n");
			scanf_s("%d", &All_Book[iBookRecord].amount);
			getchar();
			//将新增的图书信息写入到文件中
			if (fwrite(&All_Book[iBookRecord], sizeof(struct Book), 1, pfBook) != 1)
			{
				printf("无法保存该信息!\n");
				return;
			}
			else
			{
				printf("%d号图书已经保存!\n", All_Book[iBookRecord].book_id);
				iBookRecord++;
			}
			printf("是否继续录入信息(y/n)?\n");
			cFlag = getchar();
			getchar();
		}
	}
	fclose(pfBook);
	printf("图书信息已添加完毕!\n");
	system("cls");
	Show_AllBook();
}

//查找图书信息
void Find_Book()
{
	system("cls");
	printf("\t------------------查找图书子菜单--------------------\n");
	printf("\t\t   1.按书籍编号查找\n");
	printf("\t\t   2.按书籍名称查找\n");
	printf("\t\t   3.按书籍作者查找\n");
	printf("\t\t   4.按书籍出版社查找\n");
	printf("\t\t   0.返回上一级菜单\n");
	printf("\t----------------------------------------------------\n");

	int number;
	do
	{
		printf("等待输入:");
		scanf_s("%d", &number);
		getchar();
		switch (number)
		{
		case 0:
			ShowBookMenu();//返回上一级菜单
			break;
		case 1:
		case 2:
		case 3:
		case 4:
			Find_Book_Mode(number);
			break;
		default:
			printf("▲请输入合法选项!\n");
		}
	} while (number);
}

//删除图书信息
void Delete_Book()
{
	system("cls");
	Show_AllBook();//展示所有图书信息
	char cFlag;
	int iBookrecord;
	int Delete;
	int Deleteindex;
	FILE* pfBook;

	printf("输入要删除的图书编号:\n");
	scanf_s("%d", &Delete);
	getchar();
	Deleteindex = Find_Book_Mode(1);
	if (Deleteindex == -1)
	{
		return;
	}

	iBookrecord = ReadBookFile("rb");//<?>每次都要重复这一步
	printf("确认是否删除此信息(y/n)\n");
	cFlag = getchar();
	getchar();

	if (cFlag == 'n')
	{
		return;
	}
	if (cFlag == 'y')
	{
		for (int i = Deleteindex; i < iBookrecord - 1; i++)
		{
			All_Book[i] = All_Book[i + 1];
		}
	}

	fopen_s(&pfBook, "book.txt", "wb");
	if (pfBook != NULL)
	{
		for (int i = 0; i < iBookrecord - 1; i++)
		{
			if (fwrite(&All_Book[i], sizeof(struct Book), 1, pfBook) != 1)
			{
				printf("无法保存该信息。\n");
				return;
			}
		}
		fclose(pfBook);
		printf("编号为%d的数据已删除\n", Delete);
	}
	Show_AllBook();//展示所有图书信息
}

//修改图书信息
void Alter_Book()
{
	system("cls");
	Show_AllBook();//展示所有图书信息
	char cFlag;
	int iBookrecord;
	int Delete;
	int Deleteindex;
	FILE* pfBook;

	printf("输入要修改的图书编号:\n");
	scanf_s("%d", &Delete);
	getchar();
	Deleteindex = Find_Book_Mode(1);
	if (Deleteindex == -1)
	{
		return;
	}

	iBookrecord = ReadBookFile("rb");//<?>每次都要重复这一步
	printf("确认是否修改此信息(y/n)\n");
	cFlag = getchar();
	getchar();

	if (cFlag == 'n')
	{
		return;
	}
	if (cFlag == 'y')
	{
		printf("请输入图书名称:\n");
		scanf_s("%s", All_Book[Deleteindex].book_name, 50);
		getchar();
		printf("请输入图书作者:\n");
		scanf_s("%s", All_Book[Deleteindex].book_author, 20);
		getchar();
		printf("请输入图书出版社:\n");
		scanf_s("%s", All_Book[Deleteindex].book_press, 30);
		getchar();
		printf("请输入图书库存量:\n");
		scanf_s("%d", &All_Book[Deleteindex].amount);
		getchar();

	}

	fopen_s(&pfBook, "book.txt", "wb");
	if (pfBook != NULL)
	{
		for (int i = 0; i < iBookrecord; i++)
		{
			if (fwrite(&All_Book[i], sizeof(struct Book), 1, pfBook) != 1)
			{
				printf("无法保存该信息。\n");
				return;
			}
		}
		fclose(pfBook);
		printf("修改成功。\n");
	}
	Show_AllBook();//展示所有图书信息
}

//************************************************************//<分割线>

//文件操作
int ReadReaderFile(const char* pcMode)
{
	int iReaderRecord = 0;
	FILE* pfReader;//文件指针
	fopen_s(&pfReader, "reader.txt", pcMode);
	if (pfReader == NULL)
	{
		return -1;
	}
	while (!feof(pfReader))
	{
		if (fread(&All_Reader[iReaderRecord], sizeof(struct Reader), 1, pfReader))//把文件读到内存里
		{
			iReaderRecord++;//记录图书信息条数
		}
	}
	fclose(pfReader);
	return iReaderRecord;
}

//显示所有读者信息
void Show_AllReader()
{
	int i;
	int iReaderRecord;//记录条数
	system("cls");
	iReaderRecord = ReadReaderFile("rb");//以只读方式打开
	if (iReaderRecord == -1)
	{
		printf("该文件打开失败,请新增读者信息。\n");
	}
	if (iReaderRecord == 0)
	{
		printf("文件中没有读者信息。\n");
	}
	else
	{
		printf("\t------------------------------------------------------------\n");
		printf("\t%-10s%-10s%-10s%-20s%-20s\n", "卡号", "姓名", "性别", "最大可借图书数量", "当前可借图书数量");
		for (i = 0; i < iReaderRecord; i++)
		{
			printf("\t%-10d%-10s%-10s%-20d%-20d\n", READER_DATA);
		}
		printf("\t-----------------------------------------------------------\n\n");
	}

	printf("\t----------------------子菜单------------------------\n");
	printf("\t\t   1.显示所有读者信息\n");
	printf("\t\t   2.增添读者信息\n");
	printf("\t\t   3.查找读者信息\n");
	printf("\t\t   4.删除读者信息\n");
	printf("\t\t   5.修改读者信息\n");
	printf("\t\t   0.返回上一级菜单\n");
	printf("\t----------------------------------------------------\n");
}

//读者查找
int Find_Reader_Mode(int x)
{
	int find_id = -1;
	int iReaderRecord;//记录条数
	system("cls");
	iReaderRecord = ReadReaderFile("rb");//以只读方式打开
	if (iReaderRecord == -1)
	{
		printf("该文件打开失败,请新增读者信息。\n");
		return -1;
	}
	if (iReaderRecord == 0)
	{
		printf("文件中没有读者信息。\n");
		return -2;
	}
	else
	{
		int key = 0;
		printf("\t----------------------------------------------------\n");

		if (x == 1)
		{
			int Reader_id;
			printf("输入目标读者卡号:");
			scanf_s("%d", &Reader_id);
			getchar();
			for (int i = 0; i < iReaderRecord; i++)
			{
				if (All_Reader[i].reader_id == Reader_id)
				{
					key = 1;
					find_id = i;
					printf("已找到此读者信息。\n");
					printf("\t%-10s%-10s%-10s%-20s%-20s\n", "卡号", "姓名", "性别", "最大可借图书数量", "当前可借图书数量");
					printf("\t%-10d%-10s%-10s%-20d%-20d\n", READER_DATA);
					break;
				}
			}
		}
		else if (x == 2)
		{
			char Reader_name[25];
			printf("输入目标读者姓名:");
			scanf_s("%s", Reader_name, 25);
			getchar();
			for (int i = 0; i < iReaderRecord; i++)
			{
				if (strcmp(Reader_name, All_Reader[i].reader_name) == 0)
				{
					key = 1;
					find_id = i;
					printf("已找到此读者信息。\n");
					printf("\t%-10s%-10s%-10s%-20s%-20s\n", "卡号", "姓名", "性别", "最大可借图书数量", "当前可借图书数量");
					printf("\t%-10d%-10s%-10s%-20d%-20d\n", READER_DATA);
					break;
				}
			}

		}

		if (key == 0)
		{
			printf("\t  未查询到此读者信息! -_-##\n");
		}
		printf("\t----------------------------------------------------\n\n");
	}
	printf("\t------------------查找图书子菜单--------------------\n");
	printf("\t\t   1.按读者卡号查找\n");
	printf("\t\t   2.按读者姓名查找\n");
	printf("\t\t   0.返回上一级菜单\n");
	printf("\t----------------------------------------------------\n");
	return find_id;

}

//增添读者信息
int Add_NewReader()
{
	FILE* pfReader;
	int i;
	int iReaderRecord;
	int iFlagExist;
	char cFlag;
	system("cls");
	iReaderRecord = ReadReaderFile("ab+");//追加或新建方式打开二进制文件
	if (iReaderRecord == -1)
	{
		printf("文件打开失败!\n");
		return 0;
	}
	else if (iReaderRecord == 0)
	{
		printf("没有读者信息!\n");
	}
	else
	{
		Show_AllReader();
	}

	//循环录入读者信息
	printf("请选择是否录入信息(y/n)?\n");
	cFlag = getchar();
	getchar();
	if (cFlag == 'n')
	{
		return 0;
	}
	fopen_s(&pfReader, "reader.txt", "ab+");
	if (pfReader == NULL)
	{
		printf("文件打开失败!\n");
		return 0;
	}
	if (cFlag == 'y')
	{
		while (cFlag == 'y')
		{
			//录入数据
			if (iReaderRecord >= READER_NUM)
			{
				printf("记录已满!\n");
				fclose(pfReader);
				return 0;
			}

			printf("请输入读者卡号!\n");
			//读者卡号不能重复
			do
			{
				iFlagExist = 0;
				scanf_s("%d", &All_Reader[iReaderRecord].reader_id);
				getchar();
				for (i = 0; i < iReaderRecord; i++)
				{
					if (All_Reader[i].reader_id == All_Reader[iReaderRecord].reader_id)
					{
						iFlagExist = 1;
						printf("读者卡号重复!\n");
						break;
					}
				}
			} while (iFlagExist == 1);

			printf("请输入读者姓名:\n");
			scanf_s("%s", All_Reader[iReaderRecord].reader_name, 20);
			getchar();
			printf("请输入读者性别:\n");
			scanf_s("%s", All_Reader[iReaderRecord].reader_sex, 10);
			getchar();

			All_Reader[iReaderRecord].max_usebook = 100;//默认值

			//将新增的读者信息写入到文件中
			if (fwrite(&All_Reader[iReaderRecord], sizeof(struct Reader), 1, pfReader) != 1)
			{
				printf("无法保存该信息!\n");
				return 0;
			}
			else
			{
				printf("%d号读者已经保存!\n", All_Reader[iReaderRecord].reader_id);
				iReaderRecord++;
			}
			printf("是否继续录入信息(y/n)?\n");
			cFlag = getchar();
			getchar();
		}
	}
	fclose(pfReader);
	printf("读者信息已添加完毕!\n");
	system("cls");
	Show_AllReader();
	return 1;
}

//查找读者信息
void Find_Reader()
{
	system("cls");
	printf("\t------------------查找读者子菜单-------------------\n");
	printf("\t\t   1.按读者卡号查找\n");
	printf("\t\t   2.按读者姓名查找\n");
	printf("\t\t   0.返回上一级菜单\n");
	printf("\t----------------------------------------------------\n");

	int number;
	do
	{
		printf("等待输入:");
		scanf_s("%d", &number);
		getchar();
		switch (number)
		{
		case 0:
			ShowReaderMenu();//返回上一级菜单
			break;
		case 1:
		case 2:
			Find_Reader_Mode(number);
			break;
		default:
			printf("▲请输入合法选项!\n");
		}
	} while (number);
}

//删除读者信息
void Delete_Reader()
{
	system("cls");
	Show_AllReader();//展示所有读者信息
	char cFlag;
	int iReaderrecord;
	int Delete;
	int Deleteindex;
	FILE* pfReader;

	printf("输入要删除的读者的卡号:\n");
	scanf_s("%d", &Delete);
	getchar();
	printf("请确认卡号。\n");
	Deleteindex = Find_Reader_Mode(1);
	if (Deleteindex == -1)
	{
		return;
	}

	iReaderrecord = ReadReaderFile("rb");//<?>每次都要重复这一步
	printf("确认是否删除此信息(y/n)\n");
	cFlag = getchar();
	getchar();

	if (cFlag == 'n')
	{
		return;
	}
	if (cFlag == 'y')
	{
		for (int i = Deleteindex; i < iReaderrecord - 1; i++)
		{
			All_Reader[i] = All_Reader[i + 1];
		}
	}

	fopen_s(&pfReader, "reader.txt", "wb");
	if (pfReader != NULL)
	{
		for (int i = 0; i < iReaderrecord - 1; i++)
		{
			if (fwrite(&All_Reader[i], sizeof(struct Reader), 1, pfReader) != 1)
			{
				printf("无法保存该信息。\n");
				return;
			}
		}
		fclose(pfReader);
		printf("编号为%d的数据已删除\n", Delete);
	}
	Show_AllReader();//展示所有读者信息
}

//修改读者信息
void Alter_Reader()
{
	system("cls");
	Show_AllReader();//展示所有读者信息
	char cFlag;

	int Delete;
	int Deleteindex;
	FILE* pfReader;

	printf("输入要修改的读者卡号:\n");
	scanf_s("%d", &Delete);
	getchar();
	printf("请确认卡号。\n");
	Deleteindex = Find_Reader_Mode(1);
	if (Deleteindex == -1)
	{
		return;
	}

	int iReaderrecord = ReadReaderFile("rb");//<?>每次都要重复这一步
	printf("确认是否修改此信息(y/n)\n");
	cFlag = getchar();
	getchar();

	if (cFlag == 'n')
	{
		return;
	}
	if (cFlag == 'y')
	{
		printf("请输入读者姓名:\n");
		scanf_s("%s", All_Reader[Deleteindex].reader_name, 25);
		getchar();
		printf("请输入读者性别:\n");
		scanf_s("%s", All_Reader[Deleteindex].reader_sex, 10);
		getchar();

	}

	fopen_s(&pfReader, "reader.txt", "wb");
	if (pfReader != NULL)
	{
		for (int i = 0; i < iReaderrecord; i++)
		{
			if (fwrite(&All_Reader[i], sizeof(struct Reader), 1, pfReader) != 1)
			{
				printf("无法保存该信息。\n");
				return;
			}
		}
		fclose(pfReader);
		printf("修改成功。\n");
	}
	Show_AllReader();//展示所有读者信息
}

//************************************************************//<分割线>

//借书登记
void BorrowBook()
{
	//找到读者信息
	//判断读者是否可以借书:已借图书不超过最大值
	int Reader_id = -1;
	int iReaderrecord = ReadReaderFile("rb");
	int mode;
	printf("按卡号查询请按1,按姓名查询请按2。\n :");
	scanf_s("%d", &mode);
	getchar();
	for (int i = 0; i < iReaderrecord; i++)
	{
		if (All_Reader[i].reader_id == mode)
		{
			Reader_id = i;
			break;
		}
	}
	if (Reader_id == -1) {
		if (Add_NewReader() == 0)
			return;
		Reader_id = iReaderrecord++;
	}

	//打印读者借阅的书籍列表
	for (int i = 0; i < All_Reader[Reader_id].now_usebook; i++)
	{
		printf("%d\n", All_Reader[Reader_id].Bookid[i]);
	}
	//判断目标书籍是否可借
	if (All_Reader[Reader_id].now_usebook < All_Reader[Reader_id].max_usebook)
	{
		int iBookRecord = ReadBookFile("rb");//以只读方式打开


		int Book_id;
		printf("确认输入目标书籍编号:");
		scanf_s("%d", &Book_id);
		getchar();
		int i;
		for (i = 0; i < iBookRecord; i++)
		{
			if (All_Book[i].book_id == Book_id)
			{
				break;
			}
		}

		if (i < iBookRecord && All_Book[i].amount>0)
		{
			All_Book[i].amount--;

			All_Reader[Reader_id].Bookid[All_Reader[Reader_id].now_usebook] = Book_id;
			All_Reader[Reader_id].now_usebook++;

			printf("jieshucehnggong。\n");
			printf("\t%-8s%-15s%-10s%-12s%-10s\n", "编号", "书名", "作者", "出版社", "库存量");
			printf("\t%-8d%-15s%-10s%-12s%3d本\n", BOOK_DATA);

			FILE* pfReader, * pfBook;
			fopen_s(&pfReader, "reader.txt", "wb");
			if (pfReader != NULL)
			{
				for (int i = 0; i < iReaderrecord; i++)
				{
					if (fwrite(&All_Reader[i], sizeof(struct Reader), 1, pfReader) != 1)
					{
						printf("无法保存该信息。\n");
						return;
					}
				}
				fclose(pfReader);
			}
			fopen_s(&pfBook, "book.txt", "wb");
			if (pfBook != NULL)
			{
				for (int i = 0; i < iBookRecord; i++)
				{
					if (fwrite(&All_Book[i], sizeof(struct Book), 1, pfBook) != 1)
					{
						printf("无法保存该信息。\n");
						return;
					}
				}
				fclose(pfBook);
				printf("保存成功。\n");
			}
		}
		else
		{
			printf("没有库存\n");
		}
	}
	else
	{
		printf("借阅已达上限!\n");
	}
}

//还书登记
void ReturnBook()
{
	//找到读者信息判断读者是否可以借书
	int Reader_id = -1;
	int iReaderrecord = ReadReaderFile("rb");
	int mode;
	printf("按卡号查询请按1,按姓名查询请按2。\n :");
	scanf_s("%d", &mode);
	getchar();
	for (int i = 0; i < iReaderrecord; i++)
	{
		if (All_Reader[i].reader_id == mode)
		{
			Reader_id = i;
			break;
		}
	}
	if (Reader_id == -1) {
		if (Add_NewReader() == 0)
			return;
		Reader_id = iReaderrecord++;
	}
	//打印读者借阅的书籍列表
	for (int i = 0; i < All_Reader[Reader_id].now_usebook; i++)
	{
		printf("%d\n", All_Reader[Reader_id].Bookid[i]);
	}

	int iBookRecord = ReadBookFile("rb");//以只读方式打开
	int Book_id;
	printf("确认输入目标书籍编号:");
	scanf_s("%d", &Book_id);
	getchar();
	int i;
	for (i = 0; i < iBookRecord; i++)
	{
		if (All_Book[i].book_id == Book_id)
		{
			break;
		}
	}

	All_Book[i].amount++;
	for (i = 0; i < All_Reader[Reader_id].now_usebook; i++) {
		if (All_Reader[Reader_id].Bookid[i] == Book_id)
			break;
	}

	for (; i < All_Reader[Reader_id].now_usebook; i++)
	{
		All_Reader[Reader_id].Bookid[i] = All_Reader[Reader_id].Bookid[i + 1];
	}
	All_Reader[Reader_id].now_usebook--;

	FILE* pfReader, * pfBook;
	fopen_s(&pfReader, "reader.txt", "wb");
	if (pfReader != NULL)
	{
		for (i = 0; i < iReaderrecord; i++) {
			if (fwrite(&All_Reader[i], sizeof(struct Reader), 1, pfReader) != 1)
			{
				printf("无法保存该信息。\n");
				return;
			}
		}
		fclose(pfReader);
	}
	fopen_s(&pfBook, "book.txt", "wb");
	if (pfBook != NULL)
	{
		for (i = 0; i < iBookRecord; i++)
		{
			if (fwrite(&All_Book[i], sizeof(struct Book), 1, pfBook) != 1)
			{
				printf("无法保存该信息。\n");
				return;
			}
		}
		fclose(pfBook);
		printf("保存成功。\n");
	}
}

//************************************************************//<分割线>

//主菜单
void ShowMainMeun()
{
	system("cls");
	printf("\t\t-------图书管理系统--------\n");
	printf("\t\t   1.图书管理\n");
	printf("\t\t   2.读者管理\n");
	printf("\t\t   3.借/还书管理\n");
	printf("\t\t   0.退出系统\n");
	printf("\t\t---------------------------\n");

	int number;
	do
	{
		printf("等待输入:");
		scanf_s("%d", &number);
		getchar();

		switch (number)
		{
		case 0:
			printf("退出系统.....");
			exit(0);
		case 1:
			ShowBookMenu();
			break;
		case 2:
			ShowReaderMenu();
			break;
		case 3:
			ShowIObookMenu();
			break;
		default:
			printf("▲请输入合法选项!\n");
		}
	} while (number);
}

//图书管理模块子菜单
void ShowBookMenu()
{
	system("cls");
	printf("\t----------------------子菜单------------------------\n");
	printf("\t\t   1.显示所有图书信息\n");
	printf("\t\t   2.增添图书信息\n");
	printf("\t\t   3.查找图书信息\n");
	printf("\t\t   4.删除图书信息\n");
	printf("\t\t   5.修改图书信息\n");
	printf("\t\t   0.返回上一级菜单\n");
	printf("\t----------------------------------------------------\n");

	int number;
	do
	{
		printf("等待输入:");
		scanf_s("%d", &number);
		getchar();
		switch (number)
		{
		case 0:
			ShowMainMeun();//返回上一级菜单
			break;
		case 1:
			Show_AllBook();//显示所有图书信息
			break;
		case 2:
			Add_NewBook();//增添图书信息
			break;
		case 3:
			Find_Book();//查找图书信息
			break;
		case 4:
			Delete_Book();//删除图书信息
			break;
		case 5:
			Alter_Book();//修改图书信息
			break;
		default:
			printf("▲请输入合法选项!\n");
		}
	} while (number);
}

//读者管理模块子菜单
void ShowReaderMenu()
{
	system("cls");
	printf("\t----------------------子菜单------------------------\n");
	printf("\t\t   1.显示所有读者信息\n");
	printf("\t\t   2.增添读者信息\n");
	printf("\t\t   3.查找读者信息\n");
	printf("\t\t   4.删除读者信息\n");
	printf("\t\t   5.修改读者信息\n");
	printf("\t\t   0.返回上一级菜单\n");
	printf("\t----------------------------------------------------\n");

	int number;
	do
	{
		printf("等待输入:");
		scanf_s("%d", &number);
		getchar();
		switch (number)
		{
		case 0:
			ShowMainMeun();//返回上一级菜单
			break;
		case 1:
			Show_AllReader();//显示所有读者信息
			break;
		case 2:
			Add_NewReader();//增添读者信息
			break;
		case 3:
			Find_Reader();//查找读者信息
			break;
		case 4:
			Delete_Reader();//删除读者信息
			break;
		case 5:
			Alter_Reader();//修改读者信息
			break;
		default:
			printf("▲请输入合法选项!\n");
		}
	} while (number);
}

//借还书管理模块子菜单
void ShowIObookMenu()
{
	system("cls");
	printf("\t-----------------借还书子菜单----------------------\n");
	printf("\t                1.借书登记\n");
	printf("\t                2.还书登记\n");
	printf("\t              0.返回上一级菜单\n");
	printf("\t---------------------------------------------------\n");
	int number;
	do
	{
		printf("等待输入:");
		scanf_s("%d", &number);
		getchar();
		switch (number)
		{
		case 0:
			ShowMainMeun();//返回上一级菜单
			break;
		case 1:
			BorrowBook();//借书登记
			break;
		case 2:
			ReturnBook();//还书登记
			break;
		default:
			printf("▲请输入合法选项!\n");
		}
	} while (number);
}

int main()
{
	ShowMainMeun();//主菜单

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值