图书管理系统

设计思路:

图书:(增删改查)显示

读者:(增删改查)显示

借书 还书 信息记录

主菜单 子菜单 各级菜单之间的相应对应

结构体设计进行封装:

图书信息:编号,名称,作者,出版社,库存···

读者信息:编号,姓名,性别,借阅量···

函数关系调用图:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<windows.h>
#include<conio.h>

#define BOOK_NUM 200
#define READER_NUM 100

#define BOOK_DATA astBook[i].iNum,astBook[i].acName,astBook[i].acAuthor,astBook[i].acPress,astBook[i].iAmount
#define LEN_BOOK sizeof(struct Book)

#define READER_DATA astReader[i].iNum,astReader[i].acName,astReader[i].acSex,astReader[i].iMax,astReader[i].iAmount
#define LEN_READER sizeof(struct Reader)

//两个结构体封装图书和读者的信息
struct Book
{
	int iNum;//图书编号
	char acName[15];//名称
	char acAuthor[15];//作者
	char acPress[15];//出版社
	int iAmount; //库存
};
struct Reader
{
	int iNum;//读者编号
	char acName[15];//姓名
	char acSex[4];//性别
	int iMax;//最大可借阅量
	int iAmount;//当前可借阅的数量
	int Bookid[10];//已经借阅的数量
};
//定义两个全局结构体数组来记录所有图书信息和所有读者信息
struct Book astBook[BOOK_NUM];
struct Reader astReader[READER_NUM];



//显示主菜单
void ShowMainMenu()
{
	printf("\n\n");
	printf("*********欢迎进入**********\n");
	printf("********图书管理系统*******\n");
	printf("*********主菜单************\n");
	printf("******1.图书管理***********\n");
	printf("******2.读者管理***********\n");
	printf("******3.借书还书登记*******\n");
	printf("******0.退出系统***********\n");
	printf("***************************\n");
	printf("\n");
	printf("请输入选择: \n");
}

//显示书籍管理的子菜单
void ShowBookMenu()
{
	system("cls");
	printf("\n\n");
	printf("*********欢迎进入**********\n");
	printf("*****图书馆管理系统********\n");
	printf("*********子菜单************\n");
	printf("****1.显示图书信息*********\n");
	printf("****2.新增图书信息*********\n");
	printf("****3.查找图书信息*********\n");
	printf("****4.删除图书信息*********\n");
	printf("****5.修改图书信息*********\n");
	printf("****0.返回主菜单***********\n");
	printf("***************************\n");

}


//文件操作,创建文件
int ReadBookFile(const char* pcMode)
{
	int iBookRecord = 0;
	FILE* pfBook;//文件指针
	pfBook = fopen("book.txt", pcMode);
	if (pfBook == NULL)
	{
		return -1;
	}
	while (!feof(pfBook))
	{
		if (fread(&astBook[iBookRecord], LEN_BOOK, 1, pfBook))
		{
			iBookRecord++;
		}
	}
	fclose(pfBook);
	return iBookRecord;
}


//打印图书信息
void ShowBook()
{
	int i, iBookRecord;//记录条数
	system("cls");
	iBookRecord = ReadBookFile("rb");//以只读的方式打开
	if (iBookRecord == -1)
	{
		printf("该文件打开失败,请先新增图书信息!\n");
	}
	if (iBookRecord == 0)
	{
		printf("文件中没有图书信息!\n");
	}
	else 
	{
		printf("\t***********************************************************\n");
		printf("\n\n");
		printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
		for (i = 0; i < iBookRecord; i++)
		{
			printf("\t%-6d%-16s%-10s%-20s%-4d\n", BOOK_DATA);
		}
		printf("\n\n");
		printf("\t************************************************************\n");
		printf("\n\n");

	}
}

//添加图书信息
void AddBook()
{
	FILE* pfBook;
	int iBookRecord, iFlagExist=0, i;
	char cFlag;
	system("cls");
	iBookRecord = ReadBookFile("ab+");//ad+追加方式打开或者新建二进制文件
	if (iBookRecord == -1)
	{
		printf("文件打开失败 \n");
		return;
	}
	else if (iBookRecord == 0)
	{
		printf("没有图书记录 \n");
	}
	else 
	{
		ShowBook();//如果图书记录不为0,则显示所有图书信息
	}
	//循环录入图书信息
	printf("请选择是否输入信息(y/n):");
	cFlag = getchar();
	if (cFlag == 'n')
	{
		return;
	}
	pfBook = fopen("book.txt", "ab+");
	if (pfBook == NULL)
	{
		printf("文件打开失败!\n");
		return;
	}
	while(cFlag=='y')
	{
		//录入数据
		if (iBookRecord >= BOOK_NUM)
		{
			printf("记录已满!\n");
			fclose(pfBook);
			return;
		}
		//图书编号不能重复
		printf("请输入图书编号:\n");
		do
		{
			iFlagExist = 0;
			scanf("%d", &astBook[iBookRecord].iNum);
			getchar();
			for (int i = 0; i < iBookRecord; i++)
			{
				if (astBook[i].iNum == astBook[iBookRecord].iNum)
				{
					iFlagExist = 1;
					printf("该图书编号已经存在,请重新输入! \n");
					break;
				}
			}
		}while (iFlagExist == 1);
			printf("请输入图书名称:\n");
			scanf("%s", astBook[iBookRecord].acName);
			getchar();
			printf("请输入图书作者:\n");
			scanf("%s", astBook[iBookRecord].acAuthor);
			getchar();
			printf("请输入图书出版社:\n");
			scanf("%s", astBook[iBookRecord].acPress);
			getchar();
			printf("请输入图书库存量:\n");
			scanf("%d", &astBook[iBookRecord].iAmount);
			getchar();	
		//将新增的图书信息写入到文件中
		if(fwrite(&astBook[iBookRecord],LEN_BOOK,1,pfBook)!=1)
		{
			printf("无法保存该信息! \n");
			return;
		}
		else
		{
			printf("%d号图书信息已经保存!\n", astBook[iBookRecord].iNum);
			iBookRecord++;
		}
		printf("继续输入信息吗?(y/n);");
		cFlag = getchar();
		getchar();
	}
	fclose(pfBook);
	printf("添加图书信息执行完毕!\n");
}	

//查找图书信息
int SearchBook()
{
	int iBookNum, iBookRecord, iBookid=0, i;
	//
	system("cls");
	iBookRecord = ReadBookFile("rb");
	if (iBookRecord == -1)
	{
		printf("文件打开失败! \n");
		printf("按任意键返回子菜单");
		_getch();
		return -2;//文件打开失败
	}
	else if (iBookRecord==0)
	{
		printf("没有图书记录! \n");
		printf("按任意键返回子菜单");
		_getch();
		return -3;//没有记录
	}
	//进入查找程序
	printf("请输入图书编号:");
	scanf("%d", &iBookNum);
	getchar();

	for (i = 0; i < iBookRecord; i++)
	{
		if (iBookNum == astBook[i].iNum)
		{
			iBookid = i;//找到记录,返回图书编号
			printf("%d号图书信息如下:\n", iBookNum);
			printf("\t**********************************************************\n");
			printf("\t%-6s%-16s%-10s%-20s%-4s\n", "编号", "书名", "作者", "出版社", "库存");
			printf("\t%-6d%-16s%-10s%-20s%-4d\n", BOOK_DATA);
			printf("\t**********************************************************\n");
			break;
		}
	}
	if (i == iBookRecord)
	{
		printf("找不到%d号图书信息\n", iBookNum);
		iBookid == -1;  //找不到记录,返回-1
	}
	return iBookid;

}

//删除图书信息
void DeleteBook()
{
	FILE* pfBook;
	int iBookid, iBookRecord, i;
	char cFlag;

	system("cls");
	iBookid = SearchBook();
	if (iBookid == -1)
	{
		return;
	}
	iBookRecord = ReadBookFile("rb");  //???
	printf("已经找到该图书,是否删除?(y/n)");
	cFlag = getchar();
	getchar();

	//删除之前需要保存删除之前的图书编号,因为删除之后的图书编号信息会被覆盖
	int index = astBook[iBookid].iNum;
	if (cFlag == 'n')
	{
		return;
	}
	else if(cFlag=='y')
	{
		for (int i = iBookid; i < iBookRecord - 1; i++)
		{
			astBook[i] = astBook[i + 1];//数组依次前移
		}
		iBookRecord--;
	}
	pfBook = fopen("book.txt", "wb");
	if(pfBook!=NULL)
	{
		for (i = 0; i < iBookRecord; i++)
		{
			if (fwrite(&astBook[i], LEN_BOOK, 1, pfBook) != 1)
			{
				printf("无法保存该信息! \n");
				return;
			}
		}
	}
	fclose(pfBook);
	printf("%d号图书信息已经删除!\n", index);
}

//显示修改选项的子菜单
void ShowModifyBookMenu()
{
	printf("\n\n\n");
	printf("|            1.编号               |\n");
	printf("|            2.书名               |\n");
	printf("|            3.作者               |\n");
	printf("|            4.出版社             |\n");
	printf("|            5.图书库存量         |\n");
	printf("|        输入需要修改的信息:     |\n");
}


//保存图书修改后的信息
void SaveBookFile(int iBookid) 
{
	FILE* pfBook;
	pfBook = fopen("book.txt", "rb+");
	if(pfBook!=NULL)
	{
		fseek(pfBook, LEN_BOOK * iBookid, SEEK_SET);
		if (fwrite(&astBook[iBookid], LEN_BOOK, 1, pfBook) != 1)
		{
			printf("无法保存该信息!\n");
		}
		fclose(pfBook);
	}
}

//修改图书信息
void ModifyBook()
{
	int iBookid, iBookRecord, iFlagExist, iltem, iNum, i;
	system("cls");
	iBookid = SearchBook();
	if (iBookid == -1)
	{
		return;
	}
	if(iBookid==-3)
	{
		return;
	}
	//找到该序号的图书  可以开始修改操作
	iBookRecord = ReadBookFile("rb");

	//显示修改选项的子菜单
	ShowModifyBookMenu();
	scanf("%d", &iltem);
	getchar();

	switch (iltem)
	{
		case 1:
			printf("输入图书的编号:\n");
			do
			{
				iFlagExist = 0;
				scanf("%d", &iNum);
				getchar();
				for (int i = 0; i < iBookRecord; i++)
				{
					if (iNum==astBook[i].iNum&&i!=iBookid)
					{
						iFlagExist = 1;
						printf("该图书编号已经存在,请重新输入:");
						break;
					}
				}
			} while (iFlagExist == 1);
			astBook[iBookid].iNum = iNum;
			break;
		case 2:
			printf("请输入图书名称:");
			scanf("%s", astBook[iBookid].acName);
			getchar();
			break;
		case 3:
			printf("请输入图书作者:");
			scanf("%s", astBook[iBookid].acAuthor);
			getchar();
			break;
		case 4:
			printf("请输入图书出版社:");
			scanf("%s", astBook[iBookid].acPress);
			getchar();
			break;
		case 5:
			printf("请输入图书库存量:");
			scanf("%d", &astBook[iBookid].iAmount);
			getchar();
			break;
	}
	SaveBookFile(iBookid);
	printf("图书信息修改成功!\n");
}


//图书管理模块
void ManageBook()
{
	int iltem;
	ShowBookMenu();//显示书籍管理的子菜单
	scanf("%d", &iltem);
	getchar();
	while (iltem)
	{
		switch (iltem)
		{
		case 1:
	ShowBook();//显示图书信息
			break;
		case 2:
	AddBook();//新增图书信息
			break;
		case 3:
	SearchBook();//查找图书信息
			break;
		case 4:
	DeleteBook();//删除图书信息
			break;
		case 5:
	ModifyBook();//修改图书信息
			break;
		default:
			printf("\t\t请输入正确的选择\n");
		}
		printf("请按任意键返回子菜单");
		_getch();//从控件中获取字符而无需回显
		ShowBookMenu();
		scanf("%d", &iltem);
		getchar();
	}
};


//显示读者管理的主菜单
void ShowReaderMenu()
{
	system("cls");
	printf("\n\n");
	printf("********欢迎进入***********\n");
	printf("*****图书馆管理系统********\n");
	printf("*********子菜单************\n");
	printf("****1.显示读者信息*********\n");
	printf("****2.新增读者信息*********\n");
	printf("****3.查找读者信息*********\n");
	printf("****4.删除读者信息*********\n");
	printf("****5.修改读者信息*********\n");
	printf("****0.返回主菜单***********\n");
	printf("***************************\n");
}

int ReadReaderFile(const char* fopenMode)
{
	int iReaderRecord = 0;
	FILE* pfReader;
	pfReader = fopen("reader.txt", fopenMode);
	if (pfReader == NULL)
	{
		return -1;
	}
	while (!feof(pfReader))
	{
		if (fread(&astReader[iReaderRecord], LEN_READER, 1, pfReader))
		{
			iReaderRecord++;

		}
	}
	fclose(pfReader);
	return iReaderRecord;
}


//显示读者信息
void ShowReader() 
{
	int i,iReaderRecord;
	system("cls");
	iReaderRecord = ReadReaderFile("rb");
	if (iReaderRecord == -1)
	{
		printf("文件打开失败,请先增加读者信息!\n");
	}
	if (iReaderRecord == 0)
	{
		printf("文件中没有读者信息!\n");
	}
	else
	{
		printf("\t*******************************************************************\n");
		printf("\n\n");
		printf("\t%-8s%-16s%-10s%-20s%-20s\n", "读者编号", "姓名", "性别", "最大可借阅量", "当前可借阅的数量");
		for (i = 0; i < iReaderRecord; i++)
		{
			printf("\t%-6d%-20s%-12s%-24d%-24d\n", READER_DATA);
		}
		printf("\n\n");
		printf("\t********************************************************************\n");
		printf("\n\n");

	}
}

//添加读者信息
void AddReader()
{
	FILE* pfReader;//文件指针
	int iReaderRecord, iFlagExist, i;
	char cFlag;
	system("cls");
	iReaderRecord = ReadReaderFile("ab+");//ad+追加方式打开或者新建二进制文件
	if (iReaderRecord == -1)
	{
		printf("文件打开失败!\n");
		return;
	}
	else if (iReaderRecord == 0)
	{
		printf("没有读者记录! \n");//如果读者记录不为0则调用ShowReader函数显示所有读者信息
	}
	else
	{
		ShowReader();//如果图书记录不为0,则显示所有图书信息
	}
	//循环录入读者信息
	printf("请选择是否输入信息(y/n):");
	cFlag = getchar();
	if (cFlag == 'n')
	{
		return;
	}
	pfReader = fopen("reader.txt", "ab+");
	if (pfReader == NULL)
	{
		printf("文件打开失败!\n");
		return;
	}
	while (cFlag == 'y')
	{
		//录入数据
		if (iReaderRecord >= READER_NUM)
		{
			printf("记录已满!\n");
			fclose(pfReader);
			return;
		}
		//读者编号不能重复
		printf("请输入读者编号: \n");
		do
		{
			iFlagExist = 0;
			scanf("%d", &astReader[iReaderRecord].iNum);
			getchar();
			for (int i = 0; i < iReaderRecord; i++)
			{
				if (astReader[i].iNum == astReader[iReaderRecord].iNum)
				{
					iFlagExist = 1;
					printf("该读者编号已经存在,请重新输入: \n");
					break;
				}
			}
		} while (iFlagExist == 1);
		//新增读者信息
		printf("请输入读者姓名:\n");
		scanf("%s", astReader[iReaderRecord].acName);
		getchar();
		printf("请输入读者性别:\n");//F M  //细节  //a 1
		scanf("%s",astReader[iReaderRecord].acSex);
		getchar();
		printf("请输入读者最大可借阅量:\n");//10 范围
		scanf("%d", &astReader[iReaderRecord].iMax);
		getchar();
		printf("请输入读者当前可借阅量:\n");//新增的读者 提示  两者必须相等
		//读者当前可借阅量=iMax-iAmount
		scanf("%d", &astReader[iReaderRecord].iAmount);
		getchar();
		//将新增的读者信息写入到文件中
		if (fwrite(&astReader[iReaderRecord], LEN_READER, 1, pfReader) != 1)
		{
			printf("无法保存该信息! \n");
			return;
		}
		else
		{
			printf("%d号读者信息已经保存!\n", astReader[iReaderRecord].iNum);
			iReaderRecord++;
		}
		printf("继续输入信息吗?(y/n):");
		cFlag = getchar();
		getchar();
	}
	fclose(pfReader);
	printf("添加读者信息执行完毕!\n");
}

//查找读者信息
int SearchReader()
{
	int iReaderNum, iReaderRecord, iReaderid=0, i;
	//
	system("cls");
	iReaderRecord = ReadReaderFile("rb");//以只读的形式打开
	if (iReaderRecord == -1)
	{
		printf("文件打开失败! \n");
		printf("按任意键返回子菜单");
		_getch();
		return -2;
	}
	else if (iReaderRecord == 0)
	{
		printf("没有读者记录! \n");
		printf("按任意键返回子菜单");
		_getch();
		return -3;
	}

	//进入查找程序
	printf("请输入读者编号:");
	scanf("%d", &iReaderNum);
	getchar();
	for (i = 0; i < iReaderRecord; i++)
	{
		if (iReaderNum == astReader[i].iNum)
		{
			iReaderid = i;//找到记录,返回读者编号
			printf("%d号读者信息如下:\n", iReaderNum);
			printf("\t**************************************************************\n");
			printf("\t%-6s%-16s%-10s%-20s%-20s\n", "编号", "姓名", "性别", "最大可借阅数量", "当前可借阅数量");
			printf("\t%-6d%-16s%-10s%-20d%-20d\n", READER_DATA);
			printf("\t**************************************************************\n");
			break;
		}
	}
	if (i == iReaderRecord)
	{
		printf("找不到%d号读者信息", iReaderNum);
		iReaderid == -1;  //找不到记录返回-1
	}
	return iReaderid;
}

//删除读者信息
void DeleteReader()
{
	FILE* pfReader;//文件指针
	int iReaderid, iReaderRecord, i;
	char cFlag;

	system("cls");
	iReaderid = SearchReader();
	if (iReaderid == -1)
	{
		return;
	}
	iReaderRecord = ReadReaderFile("rb");  //???
	printf("已经找到该读者,是否删除?(y/n)");
	cFlag = getchar();
	getchar();

	//删除之前需要保存删除之前的读者编号,因为删除之后的读者编号信息会被覆盖
	int index = astReader[iReaderid].iNum;

	if (cFlag == 'n')
	{
		return;
	}
	else if (cFlag == 'y')
	{
		for (int i = iReaderid; i < iReaderRecord - 1; i++)
		{
			astReader[i] = astReader[i + 1];//数组依次前移
		}
		iReaderRecord--;
	}
	pfReader = fopen("reader.txt", "wb");
	if (pfReader != NULL)
	{
		for (i = 0; i < iReaderRecord; i++)
		{
			if (fwrite(&astBook[i], LEN_READER, 1, pfReader) != 1)
			{
				printf("无法保存该信息! \n");
				return;
			}
		}
	fclose(pfReader);
	printf("%d号读者信息已经删除!\n", index);
	}
}

//修改读者信息子菜单
void ShowModifyReaderMenu()
{
	printf("\n\n\n");
	printf("|            1.编号               |\n");
	printf("|            2.姓名               |\n");
	printf("|            3.性别               |\n");
	printf("|            4.最大可借阅数量     |\n");
	printf("|        输入需要修改的信息:     |\n");
}

//保存修改后的读者信息
void SaveReaderFile(int iReaderid)
{
	FILE* pfReader;
	pfReader = fopen("reader.txt", "rb+");
	if (pfReader != NULL)
	{
		fseek(pfReader, LEN_READER * iReaderid, SEEK_SET);
		if (fwrite(&astReader[iReaderid], LEN_READER, 1, pfReader) != 1)
		{
			printf("无法保存该信息!\n");
		}
		fclose(pfReader);
	}
}

//修改读者信息
void ModifyReader()
{
	int iReaderid, iReaderRecord, iBorrow, iltem, iNum, iMax, iFlagExist,i;
	system("cls");
	iReaderid = SearchReader();
	if (iReaderid == -1)
	{
		return;
	}
	//找到该序号的读者,可以进行修改
	iReaderRecord = ReadReaderFile("rb");
	ShowModifyReaderMenu();//显示需要修改的信息的菜单
	scanf("%d", &iltem);
	getchar();
	switch (iltem)
	{
	case 1:
		printf("请输入读者编号:\n");
		do
		{
			iFlagExist = 0;
			scanf("%d", &iNum);
			getchar();
			for (int i = 0; i < iReaderRecord; i++)
			{
				if(iNum==astReader[i].iNum&&i!=iReaderid)
				{ 
				iFlagExist = 1;
				printf("该读者编号已经存在,请重新输入:");
				break;
				}
			}

		} while (iFlagExist == -1);
		astReader[iReaderid].iNum = iNum;
		break;
	case 2:
		printf("请输入读者姓名: \n");
		scanf("%s", astReader[iReaderid].acName);
		getchar();
		break;
	case 3:
		printf("请输入读者性别:F/M \n");
		while (scanf("%s", astReader[iReaderid].acSex) > 0)
		{
			getchar();
			if (strcmp(astReader[iReaderid].acSex, "F") == 0 || strcmp(astReader[iReaderid].acSex, "M") == 0)
			{
				break;
			}
			printf("只能输入'F'或者'M',请重新输入!\n");
		}
		break;
	case 4:
		//iBorrow表示已经借阅的数量
		iBorrow = astReader[iReaderid].iMax - astReader[iReaderid].iAmount;
		printf("请输入读者最大可借阅数量(范围为:5-10): \n");
		while (scanf("%d", &iMax) == 1)
		{
			getchar();
			if (iMax >= 5 && iMax <= 10)
			{
				if (iBorrow > iMax)
				{
					printf("读者已经借阅的数量超于最大,需还书后进行修改!\n");
					return;
				}
				else 
				{
					astReader[iReaderid].iMax = iMax;
					astReader[iReaderid].iAmount = iMax - iBorrow;
					for (i = iBorrow; i < iMax; i++)
					{
						astReader[iReaderid].Bookid[i] = 0;
					}
					break;
				}
			}
			printf("错误,读者最大可借阅的范围为5-10,请重新输入!\n");
		}
		break;
	}
	SaveReaderFile(iReaderid);
	printf("该读者信息修改成功! \n");


}

void ManageReader()//读者管理模块
{
	int rselect;
	ShowReaderMenu();//显示读者管理的主菜单
	scanf("%d", &rselect);
	getchar();

	while (rselect)
	{
		switch (rselect)
		{
		case 1:
			ShowReader();//显示读者信息
			break;
		case 2:
			AddReader();//新增读者信息
			break;
		case 3:
			SearchReader();//查找读者信息
			break;
		case 4:
			DeleteReader();//删除读者信息
			break;
		case 5:
			ModifyReader();//修改读者信息
			break;
		default:
			printf("\t\t请输入正确的数字 \n");
		}
		printf("请按任意键返回子菜单");
		_getch();//从控件中获取字符而无需回显
		ShowReaderMenu();
		scanf("%d", &rselect);
		getchar();
	}
}

void ShowBorrowRetuenMenu()
{
	system("cls");
	printf("\n\n");
	printf("*******欢迎进入*************\n");
	printf("*****借书还书子菜单*********\n");
	printf("*****1.借书*****************\n");
	printf("*****2.还书*****************\n");
	printf("*****0.返回主菜单***********\n");
	printf("*****请输入选择:***********\n");
	printf("****************************\n");
}


//借书系统
void BorrowBook()
{
	//读者是否可以借书
	system("cls");
	int iBookid, iReaderid, iBorrow, i;
	//输入要借书的读者编号,判断编号是否存在,如果在,显示读者已经借阅的图书信息
	iReaderid = SearchReader();
	if (iReaderid == -1)
	{
		return;
	}
	iBorrow = astReader[iReaderid].iMax - astReader[iReaderid].iAmount;
	if (iBorrow == 0)
	{
		printf("该读者目前没有借阅任何图书!");
	}
	else
	{
		printf("\t该读者当前所借图书为:");
		for (int i = 0; i < iBorrow; i++)
		{
			printf("%d\n", astReader[iReaderid].Bookid[i]);
		}
		printf("\n\n");
	}
	if (astReader[iReaderid].iAmount == 0)
	{
		printf("该读者可借阅图书的数量为0,不予借书!\n");
	}
	//图书是否可以借阅(图书编号,库存)
	printf("\n按任意键输入要借阅的图书信息\n");
	_getch();
	iBookid = SearchBook();
	if (iBookid == -1)
	{
		return;
	}
	if (astBook[iBookid].iAmount == 0)
	{
		printf("该图书的库存为0,不可借阅\n");
		return;
	}
	//借书
	astReader[iReaderid].Bookid[iBorrow] = astBook[iBookid].iNum;
	//图书的库存减1
	astBook[iBookid].iAmount--;
	//当前读者可借阅的数量减1
	astReader[iReaderid].iAmount--;
	//保存
	SaveBookFile(iBookid);
	SaveReaderFile(iReaderid);
	printf("借书成功!\n");

}


//还书系统
void ReturnBook()
{
	system("cls");
	int iBookid, iReaderid, iBorrow, i=0, j;
	//读者
	iReaderid = SearchReader();
	if (iReaderid == -1)
	{
		return;
	}
	iBorrow = astReader[iReaderid].iMax - astReader[iReaderid].iAmount;
	if (iBorrow == 0)
	{
		printf("该读者没有借阅任何图书,无需归还!\n");
		return;
	}
	else
	{
		printf("该读者借阅的图书为:\n");
		for(int i=0;i<iBorrow;i++)
		{
			printf("%d\n", astReader[iReaderid].Bookid[i]);
		}
	}
	printf("按任意键输入要归还的图书信息\n");
	_getch();
	// 图书在不在
	iBookid = SearchBook();
	if (iBookid == -1)
	{
		return;
	}
	//图书列表有没有该图书
	for (int i=0; i < iBorrow; i++)
	{
		if (astReader[iReaderid].Bookid[i] == astBook[iBookid].iNum)
		{
			for (j = i; j < iBorrow - 1; j++)
			{
				astReader[iReaderid].Bookid[j] = astReader[iReaderid].Bookid[j + 1];
			}
			astReader[iReaderid].Bookid[iBorrow - 1] = 0;
			//图书库存加1
			astBook[iBookid].iAmount++;
			//读者的可借阅数量加1
			astReader[iReaderid].iAmount++;
			break;
		}
	}
	if (i == iBorrow)
	{
		printf(" \n该读者没有借阅该图书,无需归还! \n");
		return;
	}

	SaveBookFile(iBookid);
	SaveReaderFile(iReaderid);
	printf("还书成功!\n");
	//还书
}

//借书还书模块
void BorrowReturnBook()
{
	ShowBorrowRetuenMenu();//借还书子菜单
	int iltem;
	scanf("%d", &iltem);
	getchar();
	while (iltem)
	{
		switch (iltem)
		{
		case 1:
			BorrowBook();//借书
			break;
			case 2:
			ReturnBook();//还书
				break;
			default:
			printf("输入错误,请输入正确的选项!\n");
		}
		printf("按任意键返回子菜单!\n");
		_getch();
		ShowBorrowRetuenMenu();
		scanf("%d", &iltem);
		getchar();
	}

}


int main()
{
	//显示主函数的模块
	ShowMainMenu();
	int iltem;
	scanf("%d", &iltem);
	while (iltem)
	{
		switch (iltem)
		{
		case 1:
			ManageBook();//图书管理模块
			break;
		case 2:
			ManageReader();//读者管理模块
			break;
		case 3:
			BorrowReturnBook();//借书还书模块
			break;
		default:
			printf("\t请输入正确的数字 \n \t 程序将于3s后跳转至主菜单");
			Sleep(3000);
		}
		ShowMainMenu();
		scanf("%d", &iltem);
		getchar();
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值