期末大作业图书管理系统(c++)源代码

这篇具有很好参考价值的文章主要介绍了期末大作业图书管理系统(c++)源代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

功能展示
期末大作业图书管理系统(c++)源代码运行效果
主界面:期末大作业图书管理系统(c++)源代码
图书管理界面:
期末大作业图书管理系统(c++)源代码
读者管理界面:

期末大作业图书管理系统(c++)源代码
借还书管理界面:
期末大作业图书管理系统(c++)源代码文章来源地址https://www.toymoban.com/news/detail-508694.html

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<Windows.h>
#include<conio.h>
using namespace std;

#define BOOK_NUM 200
#define READER_NUM 100
#define LEN_BOOK sizeof(Book)
#define LEN_READER sizeof(Reader)

//图书结构体
typedef struct Book
{
	int Num;//图书编号
	char Name[15];//图书名称
	char Auther[15];//图书作者
	char Press[15];//图书出版社
	int Amount;//图书数量
}Book;
//读者结构体
typedef struct Reader
{
	int Num;//读者编号
	char Name[15];//读者姓名
	char Sex[4];//读者性别
	int Max;//读者最大可借阅数量
	int Amount;//读者当前可借阅的数量
	int BookId[20];//读者已经借阅的图书列表
}Reader;

//全局结构体记录所有图书信息和读者信息
 Book astBook[BOOK_NUM];
 Reader astReader[READER_NUM];

void Menu()
{
	system("cls");//清屏
	cout << "\t\t" << "*********** -图书管理主菜单- ***********" << endl << endl;
	cout << "\t\t" << "***********   1.图书管理     ***********" << endl;
	cout << "\t\t" << "***********   2.读者管理     ***********" << endl;
	cout << "\t\t" << "***********   3.借还书登记   ***********" << endl;
	cout << "\t\t" << "***********   0.退出系统     ***********" << endl << endl;
	cout << "\t\t" << "请选择项目:";
}
void ShowBookMenu()
{
	system("cls");//清屏
	cout << "\t\t" << "*********** -图书管理子菜单- ***********" << endl << endl;
	cout << "\t\t" << "***********   1.显示图书     ***********" << endl;
	cout << "\t\t" << "***********   2.添加图书     ***********" << endl;
	cout << "\t\t" << "***********   3.查找图书     ***********" << endl;
	cout << "\t\t" << "***********   4.删除图书     ***********" << endl;
	cout << "\t\t" << "***********   5.修改图书     ***********" << endl;
	cout << "\t\t" << "***********   0.返回主菜单   ***********" << endl << endl;
	cout << "\t\t" << "请选择项目:";
}
void ShowReaderMenu()
{
	system("cls");//清屏
	cout << "\t\t" << "*********** -读者管理子菜单- ***********" << endl << endl;
	cout << "\t\t" << "***********   1.显示读者     ***********" << endl;
	cout << "\t\t" << "***********   2.添加读者     ***********" << endl;
	cout << "\t\t" << "***********   3.查找读者     ***********" << endl;
	cout << "\t\t" << "***********   4.删除读者     ***********" << endl;
	cout << "\t\t" << "***********   5.修改读者     ***********" << endl;
	cout << "\t\t" << "***********   0.返回主菜单   ***********" << endl << endl;
	cout << "\t\t" << "请选择项目:";
}
void ShowBorrowReturnMenu()
{
	system("cls");//清屏
	cout << "\t\t" << "***********  -借还书子菜单-  ***********" << endl << endl;
	cout << "\t\t" << "***********   1.借书登记     ***********" << endl;
	cout << "\t\t" << "***********   2.还书登记     ***********" << endl;
	cout << "\t\t" << "***********   0.返回主菜单   ***********" << endl << endl;
	cout << "\t\t" << "请选择项目:";
}

//读文件到内存中,再内存中操作
int ReadBookFile(const char* pcMode)
{
	int BookRecond = 0;
	FILE* pfBook;//文件指针
	pfBook = fopen("G:\\book.txt", pcMode);
	if (pfBook == NULL)
	{
		return -1;
	}
	while (!feof(pfBook))//读文件末尾
	{
		if (fread(&astBook[BookRecond], LEN_BOOK, 1, pfBook))
		{
			BookRecond++;
		}
	}
	fclose(pfBook);
	return BookRecond;
}

//显示图书信息
void ShowBook()
{
	int BookRecord;//记录条数
	system("cls");
	BookRecord = ReadBookFile("rb");//读文件
	if (BookRecord == -1)
	{
		cout << "\t文件打开失败,请添加图书信息" << endl;

	}
	if (BookRecord == 0)
	{
		cout << "\t文件中没有图书信息" << endl;

	}
	else
	{
		cout << endl << "\t**********************************************************" << endl << endl << endl;
		cout << "\t\t" << "编号" << "\t书名" << "\t作者" << "\t出版社" << "\t库存" << endl;
		for (int i = 0; i < BookRecord; i++)
		{
			cout << "\t\t" << astBook[i].Num << "\t" << astBook[i].Name << "\t" << astBook[i].Auther << "\t" << astBook[i].Press << "\t" << astBook[i].Amount << endl;
			
		}
		cout << endl << endl << "\t**********************************************************" << endl;

	}
}


//添加图书信息
void AddBook()
{
	FILE* pfBook;
	int BookRecord;
	int	FlagExist;//图书编号存在标记
	char Flag;//记录y/n选项
	system("cls");
	BookRecord = ReadBookFile("ab+");//ab+追加方式打开或新建二进制文件
	if (BookRecord == -1)
	{
		cout << "\t文件打开失败" << endl;
		return;
	}
	else if (BookRecord == 0)
	{
		cout << "\t没有图书信息" << endl;
	}
	else
	{
		ShowBook();//如果图书记录不为0则显示所有图书
	}

	//循环录入图书信息
	cout << "\t是否输入信息(y/n)";
	cin >> Flag;
	cout << endl;
	if (Flag == 'n')
	{
		return;
	}
	pfBook = fopen("G:\\book.txt", "ab+");
	if (pfBook == NULL)
	{
		cout << "\t文件打开失败" << endl;
		return;
	}
	while (Flag == 'y')
	{
		//录入数据
		if (BookRecord >= BOOK_NUM)
		{
			cout << "\t录入已满" << endl;
			fclose(pfBook);
			return;
		}
		//图书编号不能重复
		cout << "\t请输入图书编号:";

		do {
			FlagExist = 0;
			cin >> astBook[BookRecord].Num;
			cout << endl;

			for (int i = 0; i < BookRecord; i++)//循环判断图书编号,直到编号不重复为止 
			{
				if (astBook[i].Num == astBook[BookRecord].Num)
				{
					FlagExist = 1;
					cout << "\t该图书编号已经存在,请重新输入编号:";
					break;
				}
			}
		} while (FlagExist == 1);
		
			cout << "\t请输入图书名称:";
			cin >> astBook[BookRecord].Name;
			cout << endl;

			cout << "\t请输入图书作者:";
			cin >> astBook[BookRecord].Auther;
			cout << endl;

			cout << "\t请输入图书出版社:";
			cin >> astBook[BookRecord].Press;
			cout << endl;

			cout << "\t请输入图书库存量:";
			cin >> astBook[BookRecord].Amount;
			cout << endl;
		
		
		//将新增的图书信息写入到文件中
		if (fwrite(&astBook[BookRecord], LEN_BOOK, 1, pfBook) != 1)
		{
			cout << "\t无法保存该信息" << endl;
			return;
		}
		else
		{
			cout << "\t" << astBook[BookRecord].Num << "号图书信息已经保存" << endl;
			BookRecord++;
		}

		cout << endl;
		cout << "\t是否继续输入信息(y/n):";
		cin >> Flag;
		cout << endl;
	}
	fclose(pfBook);
	if (Flag != 'y' && Flag != 'n')
	{
		cout << "\t输入错误,请退出重新输入" << endl;
	}
	else
	{
		cout << "\t成功添加图书" << endl;
	}

}

//查找图书信息
int SearchBook()
{
	int i;
	int BookRecord;
	int BookNum;//需要查找的ID
	int BookID = 0;//查找到的ID
	system("cls");
	BookRecord = ReadBookFile("rb");
	if (BookRecord == -1)
	{
		cout << "\t文件打开失败" << endl;
		cout << endl << "按任意键返回" << endl;
		_getch();
		return -2;//文件打开失败,返回-2
	}
	else if (BookRecord == 0)
	{
		cout << "\t没有图书记录" << endl;
		cout << endl << "按任意键返回" << endl;
		_getch();
		return -3;//文件打开失败,返回-3
	}

	//进行查找
	cout << "\t请输入图书编号:";
	cin >> BookNum;
	cout << endl;

	for (i = 0; i < BookRecord; i++)
	{
		if (BookNum == astBook[i].Num)
		{
			BookID = i;//找到后返回记录编号
			cout << "\t\t" << "编号" << "\t书名" << "\t作者" << "\t出版社" << "\t库存" << endl;
			cout << "\t\t" << astBook[i].Num << "\t" << astBook[i].Name << "\t" << astBook[i].Auther << "\t" << astBook[i].Press << "\t" << astBook[i].Amount << endl;
			break;
		}
	}
	if (i == BookRecord)
	{
		cout << "\t找不到" << BookNum << "号图书信息";
		BookID = -1;
	}
	return BookID;
}

//删除图书信息
void DeleteBook()
{
	FILE* pfbook;
	int BookID;
	int BookRecord;
	char Flag;

	system("cls");
	BookID = SearchBook();
	cout << endl;
	//文件打开失败
	if (BookID == -1)
	{
		return;
	}
	if (BookID == -3)
	{
		return;
	}

	BookRecord = ReadBookFile("rb");
	cout << "\t已经找到该图书,是否删除(y/n):";
	cin >> Flag;
	cout << endl;
	
	int index = astBook[BookID].Num;//删除的信息编号

	//把要删除的记录后的数组全部向前移动一位,然后再写入文件中
	if (Flag == 'n')
	{
		return;
	}
	else if (Flag == 'y')
	{
		for (int i = BookID; i < BookRecord - 1; i++)
		{
			astBook[i] = astBook[i + 1];
		}
		BookRecord--;
	}

	//写入文件
	if (Flag == 'y')
	{
		pfbook = fopen("G:\\book.txt", "wb");
		if (pfbook != NULL)
		{
			for (int i = 0; i < BookRecord; i++)
			{
				if (fwrite(&astBook[i], LEN_BOOK, 1, pfbook) != 1)
				{
					cout << "\t无法保存该信息" << endl;
					return;
				}
			}
			fclose(pfbook);
			cout << "\t" << index << "号图书信息已经成功删除" << endl;
		}
	}
	else
	{
		cout << "\t输入错误,请退出重新输入" << endl;
	}
}

//保存到文件中
void SaveBookFile(int BookID)
{
	FILE* pfbook;
	pfbook = fopen("G:\\book.txt", "rb+");
	if (pfbook != NULL)
	{
		fseek(pfbook, LEN_BOOK * BookID, SEEK_SET);
		if (fwrite(&astBook[BookID], LEN_BOOK, 1, pfbook) != 1)
		{
			cout << "\t无法保存该信息";
		}
	}
	fclose(pfbook);
}


//修改图书信息
void ModifyBook()
{
	int BookID, BookRecord;
	int FlagExist;//图书编号存在标记
	int item, Num;
	
	system("cls");
	BookID = SearchBook();
	cout << endl;
	//文件打开失败
	if (BookID == -1)
	{
		return;
	}
	if (BookID == -3)
	{
		return;
	}
	//找到该序号的图书,可以进行修改操作
	BookRecord = ReadBookFile("rb");

	//显示修改选项的子菜单
	cout << endl << "\t1.编号  " << "2.书名  " << "3.作者  " << "4.出版社  " << "5.图书库存量" << endl << endl;
	cout << "\t请输入需要修改的相应信息(输入相应数字):";
	cin >> item;
	if (item > 5 || item < 1)
	{
		cout << endl << "\t输入数字有误,请退出重新输入";
		return;
	}

	switch (item)
	{
	case 1:
		do {
			FlagExist = 0;
			cout << endl << "\t请输入修改后的图书编号:";
			cin >> Num;
			cout << endl;

			for (int i = 0; i < BookRecord; i++)
			{
				if (Num == astBook[i].Num && i != BookID)//数字和已有编号重复不行,更改的编号原来一样可以
				{
					FlagExist = 1;
					cout << "\t输入错误,该图书编号已经存在,请重新输入" << endl;
					break;
				}
			}
		} while (FlagExist == 1);

		astBook[BookID].Num = Num;
		break;
	case 2:
		cout << endl << "\t请输入修改后的图书名称:";
		cin >> astBook[BookID].Name;
		cout << endl;
		break;
	case 3:
		cout << endl << "\t请输入修改后的图书作者:";
		cin >> astBook[BookID].Auther;
		cout << endl;
		break;
	case 4:
		cout << endl << "\t请输入修改后的图书出版社:";
		cin >> astBook[BookID].Press;
		cout << endl;
		break;
	case 5:
		cout << endl << "\t请输入修改后的图书库存量:";
		cin >> astBook[BookID].Amount;
		cout << endl;
		break;
	}
	//保存到文件中
	SaveBookFile(BookID);
	cout << "\t图书信息修改成功";

}

//书籍管理系统
void MangaeBook()
{
	int item;
	ShowBookMenu();
	cin >> item;
	while (item)
	{
		switch (item)
		{
		case 1:
			ShowBook();//显示图书信息
			break;
		case 2:
			AddBook();//添加图书信息
			break;
		case 3:
			SearchBook();//查找图书信息
			break;
		case 4:
			DeleteBook();//删除图书信息
			break;
		case 5:
			ModifyBook();//修改图书信息
			break;
		default:
			cout << "\t\t" << "输入错误,请重新输入" << endl;
			Sleep(1500);
			break;
		}
		cout << endl << "按任意键返回" << endl;
		_getch();//从控件中获取字符而无需显示
		ShowBookMenu();
		cin >> item;
	}
}


int ReadReaderFile(const char*fopenMode)
{
	int ReaderRecord = 0;
	FILE* pfReader;
	pfReader = fopen("G:\\reader.txt", fopenMode);
	if (pfReader == NULL)
	{
		return -1;
	}
	while (!feof(pfReader))//feof读文件的末尾
	{
		if (fread(&astReader[ReaderRecord], LEN_READER, 1, pfReader))
		{
			ReaderRecord++;
		}
	}
	fclose(pfReader);
	return ReaderRecord;
}


//显示读者信息
void ShowReader()
{
	int ReaderRecord;//记录条数
	system("cls");
	ReaderRecord = ReadReaderFile("rb");//读文件
	if (ReaderRecord == -1)
	{
		cout << "\t文件打开失败,请添加读者信息" << endl;

	}
	if (ReaderRecord == 0)
	{
		cout << "\t文件中没有读者信息" << endl;

	}
	else
	{
		cout << endl << "\t*******************************************************************" << endl << endl << endl;
		cout << "\t\t" << "编号" << "\t姓名" << "\t性别" << "\t最大可借阅量" << "\t当前可借阅量"  << endl;
		for (int i = 0; i < ReaderRecord; i++)
		{
			cout << "\t\t" << astReader[i].Num << "\t" << astReader[i].Name << "\t" << astReader[i].Sex << "\t" << astReader[i].Max << "\t\t" << astReader[i].Amount << endl;

		}
		cout << endl << endl << "\t*******************************************************************" << endl;

	}
}

//添加读者信息
void AddReader()
{
	FILE* pfReader;
	int ReaderRecord;
	int	FlagExist;//读者编号存在标记
	char Flag;//记录y/n选项

	system("cls");
	ReaderRecord = ReadReaderFile("ab+");//ab+追加方式打开或新建二进制文件
	if (ReaderRecord == -1)
	{
		cout << "\t文件打开失败" << endl;
		return;
	}
	else if (ReaderRecord == 0)
	{
		cout << "\t没有读者信息" << endl;
	}
	else
	{
		ShowReader();//如果图书记录不为0则显示所有读者信息
	}

	//循环录入图书信息
	cout << "\t是否输入信息(y/n)";
	cin >> Flag;
	cout << endl;

	if (Flag == 'n')
	{
		return;
	}
	pfReader = fopen("G:\\reader.txt", "ab+");
	if (pfReader == NULL)
	{
		cout << "\t文件打开失败" << endl;
		return;
	}
	while (Flag == 'y')
	{
		//录入数据
		if (ReaderRecord >= READER_NUM)
		{
			cout << "\t录入已满" << endl;
			fclose(pfReader);
			return;
		}
		//图书编号不能重复
		cout << "\t请输入读者编号:";

		do {
			FlagExist = 0;
			cin >> astReader[ReaderRecord].Num;
			cout << endl;

			for (int i = 0; i < ReaderRecord; i++)//循环判断图书编号,直到编号不重复为止 
			{
				if (astReader[i].Num == astReader[ReaderRecord].Num)
				{
					FlagExist = 1;
					cout << "\t该读者编号已经存在,请重新输入编号:";
					break;
				}
			}
		} while (FlagExist == 1);

		cout << "\t请输入读者姓名:";
		cin >> astReader[ReaderRecord].Name;
		cout << endl;

		cout << "\t请输入读者性别(F/M):";
		cin >> astReader[ReaderRecord].Sex;
		cout << endl;
		while (astReader[ReaderRecord].Sex != 0)
		{
			
			if (strcmp(astReader[ReaderRecord].Sex, "F") == 0 || strcmp(astReader[ReaderRecord].Sex, "M") == 0)
			{
				break;
			}
			cout << "\t输入错误,只许输入'F'或'M',请重新输入";
			cin >> astReader[ReaderRecord].Sex;
			cout << endl;
		}

		cout << "\t请输入读者最大可借阅数量:";//todo可细化判断数量
		cin >> astReader[ReaderRecord].Max;
		cout << endl;

		cout << "\t请输入读者当前可借阅数量:";//两种一开始是相等的
		cin >> astReader[ReaderRecord].Amount;
		cout << endl;


		//将新增的读者信息写入到文件中
		if (fwrite(&astReader[ReaderRecord], LEN_READER, 1, pfReader) != 1)
		{
			cout << "\t无法保存该信息" << endl;
			return;
		}
		else
		{
			cout << "\t" << astReader[ReaderRecord].Num << "号读者信息已经保存" << endl;
			ReaderRecord++;
		}

		cout << endl;
		cout << "\t是否继续输入信息(y/n):";
		cin >> Flag;
		cout << endl;
	}
	fclose(pfReader);
	if (Flag != 'y' && Flag != 'n')
	{
		cout << "\t输入错误,请退出重新输入" << endl;
	}
	else
	{
		cout << "\t成功添加读者信息" << endl;
	}
}

//查找图读者信息
int SearchReader()
{
	int i;
	int ReaderRecord;
	int ReaderNum;//需要查找的ID
	int ReaderID = 0;//查找到的ID

	system("cls");
	ReaderRecord = ReadReaderFile("rb");
	if (ReaderRecord == -1)
	{
		cout << "\t文件打开失败" << endl;
		cout << endl << "按任意键返回" << endl;
		_getch();
		return -2;//文件打开失败,返回-2
	}
	else if (ReaderRecord == 0)
	{
		cout << "\t没有读者记录" << endl;
		cout << endl << "按任意键返回" << endl;
		_getch();
		return -3;//文件打开失败,返回-3
	}

	//进行查找
	cout << "\t请输入读者编号:";
	cin >> ReaderNum;
	cout << endl;

	for (i = 0; i < ReaderRecord; i++)
	{
		if (ReaderNum == astReader[i].Num)
		{
			ReaderID = i;//找到后返回记录编号
			cout << "\t\t" << "编号" << "\t姓名" << "\t性别" << "\t最大可借阅数量" << "\t当前可借阅的数量" << endl;
			cout << "\t\t" << astReader[i].Num << "\t" << astReader[i].Name << "\t" << astReader[i].Sex << "\t" << astReader[i].Max << "\t\t" << astReader[i].Amount << endl;
			break;
		}
	}
	if (i == ReaderRecord)
	{
		cout << "\t找不到" << ReaderNum << "号读者信息";
		ReaderID = -1;
	}
	return ReaderID;
}

//删除读者信息
void DeleteReader()
{
	FILE* pfReader;
	int ReaderID;
	int ReaderRecord;
	char Flag;

	system("cls");
	ReaderID = SearchReader();
	cout << endl;
	//文件打开失败
	if (ReaderID == -1)
	{
		return;
	}
	if (ReaderID == -3)
	{
		return;
	}

	ReaderRecord = ReadReaderFile("rb");
	cout << "\t已经找到该读者,是否删除(y/n):";
	cin >> Flag;
	cout << endl;

	int index = astReader[ReaderID].Num;//删除的信息编号

	//把要删除的记录后的数组全部向前移动一位,然后再写入文件中
	if (Flag == 'n')
	{
		return;
	}
	else if (Flag == 'y')
	{
		for (int i = ReaderID; i < ReaderRecord - 1; i++)
		{
			astReader[i] = astReader[i + 1];
		}
		ReaderRecord--;
	}

	//写入文件
	if (Flag == 'y')
	{
		pfReader = fopen("G:\\reader.txt", "wb");
		if (pfReader != NULL)
		{
			for (int i = 0; i < ReaderRecord; i++)
			{
				if (fwrite(&astReader[i], LEN_READER, 1, pfReader) != 1)
				{
					cout << "\t无法保存该信息" << endl;
					return;
				}
			}
			fclose(pfReader);
			cout << "\t" << index << "号图书信息已经成功删除" << endl;
		}
	}
	else
	{
		cout << "\t输入错误,请退出重新输入" << endl;
	}
}


//保存到文件中
void SaveReaderFile(int ReaderID)
{
	FILE* pfReader;
	pfReader = fopen("G:\\reader.txt", "rb+");
	if (pfReader != NULL)
	{
		fseek(pfReader, LEN_READER * ReaderID, SEEK_SET);
		if (fwrite(&astReader[ReaderID], LEN_READER, 1, pfReader) != 1)
		{
			cout << "\t无法保存该信息";
		}
	}
	fclose(pfReader);
}



//修改读者信息
void ModifyReader()
{
	int ReaderID, ReaderRecord;
	int item, Num, Max;
	int FlagExist;
	int Borrow;//已经借阅的书数目

	system("cls");
	ReaderID = SearchReader();
	cout << endl;
	if (ReaderID == -1)
	{
		return;
	}
	if (ReaderID == -3)
	{
		return;
	}

	//找到该序号读者后进行修改
	ReaderRecord = ReadReaderFile("rb");
	
	//显示修改选项的子菜单
	cout << endl << "\t\t" << "1.编号" << "\t2.姓名" << "\t3.性别" << "\t4.最大可借阅数量" << endl;
	cout << endl << "\t请输入需要修改的相应信息(输入相应数字):";
	cin >> item;
	if (item > 4 || item < 1)
	{
		cout << endl << "\t输入数字有误,请退出重新输入";
		return;
	}

	switch (item)
	{
	case 1:
		do {
			FlagExist = 0;
			cout << endl << "\t请输入修改后的读者编号:";
			cin >> Num;
			cout << endl;

			for (int i = 0; i < ReaderRecord; i++)
			{
				if (Num == astReader[i].Num && i != ReaderID)//数字和已有编号重复不行,更改的编号原来一样可以
				{
					FlagExist = 1;
					cout << "\t输入错误,该读者编号已经存在,请重新输入" << endl;
					break;
				}
			}
		} while (FlagExist == 1);

		astReader[ReaderID].Num = Num;
		break;
	case 2:
		cout << endl << "\t请输入修改后的读者名称:";
		cin >> astReader[ReaderID].Name;
		cout << endl;
		break;
	case 3:
		cout << endl << "\t请输入修改后的读者性别(F/M):";
		cin >> astReader[ReaderID].Sex;
		cout << endl;
		while (astReader[ReaderID].Sex != 0)
		{
			if (strcmp(astReader[ReaderID].Sex, "F") == 0 || strcmp(astReader[ReaderID].Sex, "M") == 0)
			{
				break;
			}
			cout << "\t输入错误,只许输入'F'或'M',请重新输入";
			cin >> astReader[ReaderID].Sex;
			cout << endl;
		}
		break;
	case 4:
		Borrow = astReader[ReaderID].Max - astReader[ReaderID].Amount;
		cout << endl << "\t请输入读者最大可借阅的数量(范围为20以内):";
		cin >> Max;
		cout << endl;

		while (Max != -1)//bug输入-1会退出
		{
			if (Max >= 0 && Max <= 20)
			{
				if (Borrow > Max)
				{
					cout << "\t请先还书!" << endl;
					return;
				}
				else
				{
					astReader[ReaderID].Max = Max;
					astReader[ReaderID].Amount = Max - Borrow;
					for (int i = Borrow; i < Max; i++)
					{
						astReader[ReaderID].BookId[i] = 0;
					}
					break;
				}
			}
			cout << "\t错误,读者最大可借阅的书的范围为20以内,请重新输入:";
			cin >> Max;
			cout << endl;
		}
		break;
	}
	//保存到文件中
	SaveReaderFile(ReaderID);
	cout << "\t读者信息修改成功";
}

//读者管理模块
//读者已借阅的数量=Max-Amount
void MangaeReader()
{
	int item;
	ShowReaderMenu();
	cin >> item;
	while (item) 
	{
		switch (item)
		{
		case 1:
			ShowReader();//显示读者信息
			break;
		case 2:
			AddReader();//添加读者信息
			break;
		case 3:
			SearchReader();//查找图读者信息
			break;
		case 4:
			DeleteReader();//删除读者信息
			break;
		case 5:
			ModifyReader();//修改读者信息
			break;
		default:
			cout << "\t\t" << "输入错误,请重新输入" << endl;
			Sleep(1500);
			break;
		}
		cout << endl << "按任意键返回" << endl;
		_getch();//从控件中获取字符而无需显示
		ShowReaderMenu();
		cin >> item;
	}
}

//借书模块
void BorrowBook()
{
	//读者是否可以借书
	int BookID,ReaderID;
	int Borrow;//读者当前借阅的书数

	system("cls");
	//输入要借书的读者编号,判断编号是否存在,如果再显示读者的借阅的图书信息
	ReaderID = SearchReader();
	cout << endl;
	if (ReaderID == -1)
	{
		return;
	}
	if (ReaderID == -3)
	{
		return;
	}
	

	Borrow = astReader[ReaderID].Max - astReader[ReaderID].Amount;
	if (Borrow == 0)
	{
		cout << "\t该读者没有借阅任何书" << endl;
	}
	else
	{
		cout << "\t该读者借阅的图书为:" << endl;
		for (int i = 0; i < Borrow; i++)
		{
			cout << "\t" << astReader[ReaderID].BookId[i] << endl;
		}
	}
	if (astReader[ReaderID].Amount == 0)
	{
		cout << "\t该读者可借阅书数目为0,不能继续借书" << endl;
	}
	

	//图书是否可借阅
	cout << "\t按任意键进入选择借阅图书环节:";
	_getch();
	BookID = SearchBook();
	if (BookID == -1)
	{
		return;
	}
	if (BookID == -3)
	{
		return;
	}
	if (astBook[BookID].Amount == 0)
	{
		cout << "\t该图书库存量为0,图书不可借阅" << endl;
	}

	//借书
	astReader[ReaderID].BookId[Borrow] = astBook[BookID].Num;
	//图书库存-1
	astBook[BookID].Amount--;
	//当前读者可借阅数量-1
	astReader[ReaderID].Amount--;

	SaveBookFile(BookID);
	SaveReaderFile(ReaderID);
	cout << "\t借书成功";
}

//还书模块
void ReturnBook()
{
	int BookID, ReaderID;
	int Borrow;//读者当前借阅的书数

	system("cls");
	//读者
	ReaderID = SearchReader();
	cout << endl;
	if (ReaderID == -1)
	{
		return;
	}
	if (ReaderID == -3)
	{
		return;
	}

	Borrow = astReader[ReaderID].Max - astReader[ReaderID].Amount;
	if (Borrow == 0)
	{
		cout << "\t该读者没有借阅任何书,无需归还" << endl;
	}
	else
	{
		cout << "\t该读者借阅的图书为:" << endl;
		for (int i = 0; i < Borrow; i++)
		{
			cout << "\t" << astReader[ReaderID].BookId[i] << endl;
		}
	}
	if (astReader[ReaderID].Amount == 0)
	{
		cout << "\t该读者可借阅书数目为0,不能继续借书" << endl;
	}


	//图书
	cout << "\t按任意键进入选择归还图书环节:";
	_getch();
	BookID = SearchBook();
	if (BookID == -1)
	{
		return;
	}
	if (BookID == -3)
	{
		return;
	}

	int i;
	for (i = 0; i < Borrow; i++)
	{
		if (astReader[ReaderID].BookId[i] == astBook[BookID].Num)
		{
			//还书
			for (int j = i; j < Borrow - 1; j++)
			{
				astReader[ReaderID].BookId[j] = astReader[ReaderID].BookId[j + 1];
			}
			astReader[ReaderID].BookId[Borrow - 1] = 0;//清除最后一个信息

			//图书库存+1
			astBook[BookID].Amount++;
			//读者可借阅数量+1
			astReader[ReaderID].Amount++;
			break;
		}
	}

	//如果借书列表里面没有这本书
	if (i == Borrow)
	{
		cout << "\t该读者没有借阅这本书,无需归还";
		return;
	}

	SaveBookFile(BookID);
	SaveReaderFile(ReaderID);
	cout << "\t还书成功";
	
}

//借还书模块
void BorrowReturnManger()
{
	ShowBorrowReturnMenu();
	int item;
	cin >> item;
	
	while (item)
	{
		switch (item)
		{
		case 1:
			BorrowBook();//借书模块
			break;
		case 2:
			ReturnBook();//还书模块
			break;
		default:
			cout << "\t\t" << "输入错误,请重新输入" << endl;
			Sleep(1500);
			break;
		}
		cout << endl << "按任意键返回" << endl;
		_getch();//从控件中获取字符而无需显示
		ShowBorrowReturnMenu();
		cin >> item;
	}
}

int main()
{
	Menu();
	int item;
	cin >> item;
	while (item)
	{
		switch (item)
		{
		case 1:
			MangaeBook();//图书管理模块
			break;
		case 2:
			MangaeReader();//读者管理模块
			break;
		case 3:
			BorrowReturnManger();//借还书模块
			break;
		default:
			cout << "\t\t" << "输入错误,请重新输入" << endl;
			Sleep(1500);
			break;
		}
		Menu();
		cin >> item;

	}
	return 0;
}

到了这里,关于期末大作业图书管理系统(c++)源代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android期末大作业:使用AndroidStudio开发图书管理系统APP(使用sqlite数据库)

    Android Studio开发项目图书管理系统项目视频展示: 点击进入图书管理系统项目视频 现在是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴求更是与日俱增。图书馆作为学生学习知识的

    2024年02月08日
    浏览(53)
  • PHP-MySQL图书管理系统(附源代码)

    本系统采用phpstudy开发平台,采用PHP和MySQL数据库进行开发,开发工具为HBuilder。phpStudy是一个PHP调试环境的程序集成最新的 Apache+PHP+MySQL+phpMyAdmin,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。(其他平台均可)@@@文末有获取方式 功能: 图书部分: 图书录入

    2024年02月11日
    浏览(41)
  • JavaWeb期末项目 图书馆管理系统

    1 项目基本信息 1.1 项目名称 图书馆管理系统 1.2 开发运行环境 Window 10 64位 JDK 1.8.0 Eclipse 4.8版本 MySql 5.5 Tomcat 9.0 2 项目需求分析 2.1 学生登录部分 (1)学生注册:在进入图书馆前必须要登录,如果没有学号则要注册,注册时系统会将用户填写的学号与数据库里面的数据对比,

    2024年02月10日
    浏览(46)
  • django的简易的图书管理系统jsp书店进销存源代码MySQL

    本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 django的简易的图书管理系统 系统有1权限:管理员 用所技术 python3.10 django mysql5.6 注册登录和书籍信息的增删

    2024年02月11日
    浏览(47)
  • MySQL数据库期末项目 图书馆管理系统

    1 项目需求分析 1.1 项目名称 图书馆管理系统 1.2 项目功能 在以前大多部分图书馆都是由人工直接管理,其中每天的业务和操作流程非常繁琐复杂,纸质版的登记信息耗费了大量的人力物力。因此图书馆管理系统应运而生,该系统采用智能化设计,在业务流程的实现方面更加

    2023年04月18日
    浏览(45)
  • 基于java的图书借阅管理系统设计与实现(源代码+数据库+部署文档+部署视频)

           图书管理系统 该系统对数据进行保存、修改、删除等管理。为用户提供了一个友好、简单快捷的运行操作平台。该统对数据进行保存、修改、删除等管理,为用户提供了一个友好、简单快捷的运行操作平台。本系统的各界面设计友好、流程正确、功能也较为完善,

    2024年02月03日
    浏览(53)
  • Android大作业:安卓开发图书管理系统APP

    Android Studio开发项目图书管理系统项目视频展示: 点击进入图书管理系统项目视频 现在是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴求更是与日俱增。图书馆作为学生学习知识的

    2024年02月07日
    浏览(60)
  • 【javaweb课设源码】图书管理系统SSM Mysql 期末课设

    本系统使用Javaweb技术制作,数据库为mysql 附带论文报告文档

    2024年02月09日
    浏览(38)
  • 期末考试还缺项目吗?黑马的图书借阅管理系统很香

    提示:黑马程序员的云借阅管理系统, 后端ssm框架, 前端jQuery, layui,模板引擎为thymeleaf。 有需要的小伙伴可以三连, 我会私聊你发源码。 提示:视频观看地址 bibi视频项目展示 提示:管理员全部功能, 用户部分功能 登录分为管理员登录, 普通用户登录, 不同身份登录拥有的权限

    2024年02月12日
    浏览(54)
  • 基于ssm+vue.js+uniapp小程序的图书管理系统附带文章和源代码部署视频讲解等

    🌞 博主介绍 :✌CSDN特邀作者、985计算机专业毕业、某互联网大厂高级全栈开发程序员、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序、前端、python等技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导、面试辅导、简

    2024年04月22日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包