栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

图书信息管理系统(c语言)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图书信息管理系统(c语言)

C语言图书管理系统
    • 一、项目背景
    • 二、设计目的
    • 三、项目功能需求
      • 1、图书方面的功能需求
      • 2、读者方面的功能需求
    • 四、系统的功能结构图
    • 五、功能模块介绍
      • 1、图书管理模块
      • 2、读者管理模块
      • 3、借书还书登记模块
    • 六、详细设计
      • 1、主函数
      • 2、图书管理模块
      • 3、读者管理模块
      • 4、借还书登记模块
    • 七、代码
    • 八、项目总结

一、项目背景

图书馆管理系统,能够实现图书馆的常规业务,包括读者信息维护、图书信息维护和借书还书信息维护。

二、设计目的
  • 如何设计主菜单和子菜单,以及各级菜单的响应与返回操作
  • 如何合理设计不同的结构体对系统中多个实体进行封装
  • 如何合理设计多个结构体数组管理不同实体对应的数据
  • 如何对复杂的函数过程进行拆分,用多个子函数进行封装
  • 进一步熟悉文件读取相关操作
三、项目功能需求 1、图书方面的功能需求
  • 新增图书信息
  • 删除图书信息
  • 修改图书信息
  • 查找图书信息
  • 显示所有图书信息
2、读者方面的功能需求
  • 新增读者信息
  • 删除读者信息
  • 修改读者信息
  • 查找读者信息
  • 显示所有的读者信息
  • 借书登记
  • 还书登记
四、系统的功能结构图

五、功能模块介绍 1、图书管理模块

包括5个子模块,分别是新增图书信息模块、删除图书信息模块、修改图书信息模块、查找图书信息模块和显示图书信息模块

2、读者管理模块

包括5个子模块,分别是新增读者信息模块、删除读者信息模块、修改读者信息模块、查找读者信息模块和显示读者信息模块

3、借书还书登记模块

包括2个子模块,分别是借书登记模块和还书登记模块

六、详细设计 1、主函数

主函数首先调用ShowMainMenu函数绘制主界面,提供三个选项供用户选择,分别可以进入图书管理、读者管理、借还书登记三个子系统。

2、图书管理模块

功能设计

  • 图书管理子系统实现图书管理功能。
  • 输入选项1-5分别对应显示图书信息、增加图书信息、查找图书信息、删除图书信息和修改图书信息五大功能。
  • 输入0可以返回主菜单。
3、读者管理模块

功能设计

  • 读者管理子系统实现读者管理功能。
  • 输入选项1-5分别对应显示读者信息、增加读者信息、查找读者信息、删除读者信息和修改读者信息五大功能。
  • 输入0可以返回主菜单。
4、借还书登记模块

功能设计

  • 实现对读者借书以及还书的信息进行登记的功能。
  • 借书登记功能包括:输入读者编号,可以看到该读者的信息,输入要借的图书编号,满足条件,则可以实现借书操作。
  • 还书登记功能包括:输入读者编号,可以看到该读者的信息。输入图书编号,满足条件,则可以实现归还操作。
七、代码
#include 
#include      
#include   
#include    

#define LEN_BOOK sizeof(struct Book)
#define LEN_READER sizeof(struct Reader)
#define BOOK_DATA astBook[i].iNum,astBook[i].acName,astBook[i].acAuthor,astBook[i].acPress,astBook[i].iAmount
#define READER_DATA astReader[i].iNum,astReader[i].acName,astReader[i].acSex,astReader[i].iAmount,astReader[i].iMax,astReader[i].aiBookId
#define BOOK_NUM 200
#define READER_NUM 100

int SearchBook();
int SearchReader();


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 aiBookId[10];
};

struct Book astBook[BOOK_NUM];
struct Reader astReader[READER_NUM];

void ShowMainMenu()
{
	system("cls");
	printf("nnnnn");
	printf("t|----------------------欢迎进入---------------------------|n");
	printf("t|                   图书馆管理系统                        |n");
	printf("t|                       主菜单                            |n");
	printf("t|                   1、图书管理                           |n");
	printf("t|                   2、读者管理                           |n");
	printf("t|                   3、借/还书登记                        |n");
	printf("t|                   0、退出系统                           |n");
	printf("t|---------------------------------------------------------|n");
	printf("n");
	printf("tt请选择(0-3):");
}

void ShowBookMenu()
{
	system("cls");
	printf("nnnnn");
	printf("t|----------------------欢迎进入---------------------------|n");
	printf("t|                    图书管理系统                         |n");
	printf("t|                       子菜单                            |n");
	printf("t|                  1、显示图书信息                        |n");
	printf("t|                  2、新增图书信息                        |n");
	printf("t|                  3、图书信息查询                        |n");
	printf("t|                  4、图书信息删除                        |n");
	printf("t|                  5、图书信息修改                        |n");
	printf("t|                  0、返回主菜单                          |n");
	printf("t|---------------------------------------------------------|n");
	printf("n");
	printf("tt请选择(0-5):");
}

void ShowReaderMenu()
{
	system("cls");
	printf("nnnnn");
	printf("t|----------------------欢迎进入---------------------------|n");
	printf("t|                    读者管理系统                         |n");
	printf("t|                       子菜单                            |n");
	printf("t|                  1、显示读者信息                        |n");
	printf("t|                  2、新增读者信息                        |n");
	printf("t|                  3、读者信息查询                        |n");
	printf("t|                  4、读者信息删除                        |n");
	printf("t|                  5、读者信息修改                        |n");
	printf("t|                  0、返回主菜单                          |n");
	printf("t|---------------------------------------------------------|n");
	printf("n");
	printf("tt请选择(0-5):");
}

void ShowBorrowReturnMenu()
{
	system("cls");
	printf("nnnnn");
	printf("t|----------------------欢迎进入---------------------------|n");
	printf("t|                    借/还书登记                          |n");
	printf("t|                       子菜单                            |n");
	printf("t|                    1、借书登记                          |n");
	printf("t|                    2、还书登记                          |n");
	printf("t|                   0、返回主菜单                         |n");
	printf("t|---------------------------------------------------------|n");
	printf("n");
	printf("tt请选择(0-2):");
}

void ShowModifyBookMenu()
{
	printf("n");
	printf("t|                  1、编号                        |n");
	printf("t|                  2、书名                        |n");
	printf("t|                  3、作者                        |n");
	printf("t|                  4、出版社                      |n");
	printf("t|                  5、库存                        |n");
	printf("n");
	printf("请输入所要修改的信息(键入相应的数字:1-5 ):");

}

void ShowModifyReaderMenu()
{
	printf("n");
	printf("t|                  1、编号                        |n");
	printf("t|                  2、名字                        |n");
	printf("t|                  3、性别                        |n");
	printf("t|                  4、最大可借书数                |n");
	printf("n");
	printf("请输入所要修改的信息(键入相应的数字:1-4 )n");
}


int ReadBookFile(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;
}

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

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 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 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("该读者目前没有借任何书n");
	else
	{
		printf("t该读者当前所借图书为:");
		for (i = 0; i < iBorrow; i++)
			printf("%d ", astReader[iReaderId].aiBookId[i]);
		printf("nn");
	}

	
	if (astReader[iReaderId].iAmount == 0)
	{
		printf("该读者可借书量为零,不能继续借书!n");
		return;
	}

	
	printf("n按任意键输入要借阅的图书信息n");
	getch();

	iBookId = SearchBook();
	if (iBookId == -1)
		return;
	if (astBook[iBookId].iAmount == 0)
	{
		printf("该图书库存量为零!图书不可借n");
		return;
	}	
	astReader[iReaderId].aiBookId[iBorrow] = astBook[iBookId].iNum;
	astBook[iBookId].iAmount--;     
	astReader[iReaderId].iAmount--; 

	SaveBookFile(iBookId);	     
	SaveReaderFile(iReaderId);   

	printf("借书成功!n");
}

void ReturnBook()
{
	int iBookId, iReaderId, iBorrow,i,j;

	system("cls");
	iReaderId = SearchReader();
	if (iReaderId == -1)
		return;
	iBorrow = astReader[iReaderId].iMax - astReader[iReaderId].iAmount;

	if (iBorrow == 0)
	{
		printf("t该读者没有借任何书,无需归还n");
		return;
	}
	else
	{
		printf("t该读者当前所借图书为:");
		for (i = 0; i < iBorrow; i++)
			printf("%d ", astReader[iReaderId].aiBookId[i]);
		printf("nn");
	}

	printf("按任意键输入要归还的图书信息n");
	getch();

	iBookId = SearchBook();
	if (iBookId == -1)
		return;
	for (i = 0; i < iBorrow; i++)
		if (astReader[iReaderId].aiBookId[i] == astBook[iBookId].iNum)
		{
			for (j = i; j < iBorrow - 1; j++)
				astReader[iReaderId].aiBookId[j] = astReader[iReaderId].aiBookId[j + 1];
			astReader[iReaderId].aiBookId[iBorrow] = 0;
			
			astBook[iBookId].iAmount++;      
			astReader[iReaderId].iAmount++;  
			break;
		}

	if (i == iBorrow)
	{
		printf("该读者没有借这本书,无需归还n");
		return;
	}
	
	SaveBookFile(iBookId);      
	SaveReaderFile(iReaderId);	

	printf("还书成功!n");
}




void ShowBook()
{
	int i, iBookRecord;
	
	system("cls");

	iBookRecord = ReadBookFile("rb");
	if (iBookRecord == -1)
		printf("文件打开失败!请先新增加图书信息!n");
	else if (iBookRecord == 0)
		printf("文件中没有图书信息!n");
	else
	{
		printf("t|---------------------------------------------------------|n");
		printf("t  %-6s%-16s%-10s%-20s%-4sn","编号","书名","作者","出版社","库存");
		for (i = 0; i < iBookRecord; i++)
			printf("t  %-6d%-16s%-10s%-20s%-4dn", BOOK_DATA);
		printf("t|---------------------------------------------------------|n");
	}
}

void AddBook()
{
	FILE *pfBook;
	int iBookRecord, iFlagExist, i;
	char cFlag;
	
	system("cls");

	iBookRecord = ReadBookFile("ab+");  
	if (iBookRecord == -1)
	{
		printf("文件打开失败!n");
		return;
	}
	else if (iBookRecord == 0)
		printf("没有图书记录!n");
	else
		ShowBook();

	
	printf("请选择是否键入信息(y/n):");
	cFlag = getchar();
	getchar();
	if (cFlag == 'n')
		return;
	
	pfBook = fopen("book.txt", "ab+");
	if (pfBook == NULL)
	{
		printf("文件打开失败!n");
		return;
	}

	while (cFlag == 'y')
	{
		if (iBookRecord >= BOOK_NUM)
		{
			printf("记录已满!");
			fclose(pfBook);
			return;
		}

		printf("请输入图书编号:");
		do{
			iFlagExist = 0;
			scanf("%d", &astBook[iBookRecord].iNum);
			getchar();
			for (i = 0; i < iBookRecord; i++)
			{
				if (astBook[i].iNum == astBook[iBookRecord].iNum)
				{
					iFlagExist = 1;
					printf("该图书编号已存在,请重新输入:");
					break;
				}
			}
		} while (iFlagExist == 1);	

		
		printf("请输入图书名称:");
		gets(astBook[iBookRecord].acName);
		printf("请输入图书作者:");
		gets(astBook[iBookRecord].acAuthor);
		printf("请输入图书出版社:");
		gets(astBook[iBookRecord].acPress);
		printf("请输入图书库存量:");
		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");
}


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

	if (cFlag == 'n')
		return;
	else if (cFlag == 'y')
	{
		for (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", astBook[iBookId].iNum);
	}
}

void ModifyBook()
{
	int iBookId, iBookRecord, iFlagExist, iItem, iNum, i;
	
	system("cls");
	
	iBookId = SearchBook();  

	if (iBookId == -1) 
		return;

	
	iBookRecord = ReadBookFile("rb");
	ShowModifyBookMenu();   

	scanf("%d", &iItem);
	getchar();
	switch (iItem)
	{
	case 1:
		printf("请输入图书编号:");
		do{
			iFlagExist = 0;
			scanf("%d", &iNum);
			getchar();
			for (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("请输入图书名称:");
		gets(astBook[iBookId].acName);
		break;
	case 3:
		printf("请输入图书作者:");
		gets(astBook[iBookId].acAuthor);
		break;
	case 4:
		printf("请输入图书出版社:");
		gets(astBook[iBookId].acPress);
		break;
	case 5:
		printf("请输入图书库存量:");
		scanf("%d", &astBook[iBookId].iAmount);
		getchar();
		break;
	}
    
	SaveBookFile(iBookId);
	printf("图书信息修改成功!n");
}

int SearchBook()
{
	int iBookNum, iBookRecord, iBookId, 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%-4sn", "编号", "书名", "作者", "出版社", "库存");
			printf("t  %-6d%-16s%-10s%-20s%-4dn", BOOK_DATA);
			printf("t|---------------------------------------------------------|n");
			break;
		}
	}
	if (i == iBookRecord)
	{
		printf("找不到%d号图书信息!n", iBookNum);
		iBookId = -1;
	}
	return iBookId;
}


void ShowReader()
{
	int i, iReaderRecord;
	system("cls");

	iReaderRecord = ReadReaderFile("rb");
	if (iReaderRecord == -1)
		printf("文件打开失败!请先添加读者信息!n");
	else if (iReaderRecord == 0)
		printf("文件中没有读者信息n");
	else
	{
		printf("t|---------------------------------------------------------|n");
		printf("t  %-8s%-12s%-6s%-16s%-16sn","编号","姓名","性别","当前可借书数量","最大可借书数量");
		for (i = 0; i < iReaderRecord; i++)
			printf("t  %-8d%-12s%-6s%-16d%-16dn", READER_DATA);
		printf("t|---------------------------------------------------------|n");
	}

}



void AddReader()
{
	FILE *pfReader;
	int iFlagExist,iReaderRecord, i;
	char cFlag;

	system("cls");

	iReaderRecord = ReadReaderFile("ab+"); 
	if (iReaderRecord == -1)
	{
		printf("文件打开失败!n");
		return;
	}
	else if (iReaderRecord == 0)
		printf("没有读者记录!n");
	else
		ShowReader();

	
	printf("请选择是否键入信息(y/n):");
	cFlag = getchar();
	getchar();
	if (cFlag == 'n')
		return;

	pfReader = fopen("reader.txt", "ab+");
	if (pfReader == NULL)
	{
		printf("文件打开失败!n");
		return;
	}

	while (cFlag == 'y')
	{
		if (iReaderRecord >= READER_NUM)
		{
			printf("记录已满!");
			fclose(pfReader);
			return;
		}
		printf("请输入读者编号:");
		do
		{
			iFlagExist = 0;
			scanf("%d", &astReader[iReaderRecord].iNum);
			getchar();

			for (i = 0; i < iReaderRecord; i++)
			{
				if (astReader[i].iNum == astReader[iReaderRecord].iNum)
				{
					iFlagExist = 1;
					printf("该读者编号已存在!请重新输入:");
				}
			}
		} while (iFlagExist == 1);

		printf("请输入读者姓名:");
		gets(astReader[iReaderRecord].acName);
		printf("请输入读者性别:F/M:");
		while (gets(astReader[iReaderRecord].acSex) != NULL)
		{
			if (strcmp(astReader[iReaderRecord].acSex, "F") == 0 || strcmp(astReader[iReaderRecord].acSex, "M") == 0)
				break;
			printf("错误,只能输入'F'或者'M',请重新输入n");
		}
		printf("请输入读者最大可借书数:(范围为5-10):");
		while (scanf("%d", &astReader[iReaderRecord].iMax) == 1)
		{
			getchar();
			if (astReader[iReaderRecord].iMax >= 5 && astReader[iReaderRecord].iMax <= 10)
				break;
			printf("错误,读者最大借阅数范围为5-10,请重新输入n");
		}
		astReader[iReaderRecord].iAmount = astReader[iReaderRecord].iMax;

		for (i = 0; i < astReader[iReaderRecord].iMax; i++)//数组初始化为0,表示该读者一本书也没有借;
			astReader[iReaderRecord].aiBookId[i] = 0;


		if (fwrite(&astReader[iReaderRecord], LEN_READER, 1, pfReader) != 1)
		{
			printf("无法保存该信息!n");
		}
		else
		{
			printf("%d号读者信息已保存!n", astReader[iReaderRecord].iNum);
			iReaderRecord++;
		}
		printf("继续输入信息吗(y/n)");
		cFlag = getchar();
		getchar();
	}
	fclose(pfReader);
	printf("添加读者执行完毕!n");
}

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

	if (cFlag == 'n')
		return;
	else if (cFlag == 'y')
	{
		for (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(&astReader[i], LEN_READER, 1, pfReader) != 1)
			{
				printf("无法保存该信息!n");
				return;
			}
		}
		fclose(pfReader);
		printf("%d号读者信息已删除!n", astReader[iReaderId].iNum);
	}
}

void ModifyReader()
{
	int iReaderId,iReaderRecord,iBorrow,iItem,iNum,iMax,iFlagExist,i;

	system("cls");
	iReaderId = SearchReader();
	if (iReaderId == -1)
		return;

	
	iReaderRecord = ReadReaderFile("rb");
	ShowModifyReaderMenu();
	scanf("%d", &iItem);
	getchar();

	switch (iItem)
	{
	case 1:
		printf("请输入读者编号:");
		do{
			iFlagExist = 0;
			scanf("%d", &iNum);
			getchar();
			for (i = 0; i < iReaderRecord; i++)
			if (iNum == astReader[i].iNum && i != iReaderId)
				{
					iFlagExist = 1;
					printf("错误,该读者编号已存在,请重新输入:n");
					break;
				}
		} while (iFlagExist == 1);
		astReader[iReaderId].iNum = iNum;
		break;
	case 2:
		printf("请输入读者名字:");
		gets(astReader[iReaderId].acName);
		break;
	case 3:
		printf("请输入读者性别:F/M:");
		while (gets(astReader[iReaderId].acSex) != NULL)
		{
			if (strcmp(astReader[iReaderId].acSex, "F") == 0 || strcmp(astReader[iReaderId].acSex, "M") == 0)
				break;
			printf("错误,只能输入'F'或者'M',请重新输入n");
		}
		break;
	case 4:
		iBorrow = astReader[iReaderId].iMax - astReader[iReaderId].iAmount;
		printf("请输入读者最大可借书数:(范围为5-10):");
		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].aiBookId[i] = 0;
					break;
				}
			}
			printf("错误,读者最大借阅数范围为5-10,请重新输入n");
		}
		break;
	}

	SaveReaderFile(iReaderId);
	printf("读者信息修改成功!n");
}

int SearchReader()
{
	int iReaderNum,iReaderRecord, iReaderId, i;
	system("cls");

	iReaderRecord = ReadReaderFile("rb");
	if (iReaderRecord == -1)
	{
		printf("文件打开失败!n");
		return -2; 
	}
	else if (iReaderRecord == 0)
	{
		printf("没有读者记录!n");
		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  %-8s%-12s%-6s%-16s%-16sn", "编号", "姓名", "性别", "当前可借书数量", "最大可借书数量");
			printf("t  %-8d%-12s%-6s%-16d%-16dn", READER_DATA);
			printf("t|---------------------------------------------------------|n");
			printf("n");
			break;
		}
	}
	if (i == iReaderRecord)
	{
		printf("找不到%d号读者信息!n", iReaderNum);
		iReaderId = -1;
	}
	return iReaderId;
}

void ManageBook()
{
	int iItem;

	ShowBookMenu();	
	scanf("%d", &iItem);
	getchar();
	
	while (iItem)
	{
		switch (iItem)
		{
		case 1:
			ShowBook();
			break;
		case 2:
			AddBook();
			break;
		case 3:
			SearchBook();
			break;
		case 4:
			DeleteBook();
			break;
		case 5:
			ModifyBook();
			break;
		default:
			printf("tt请输入正确的数字!ntt");
		}
		printf("| 按任意键返回子菜单 |");
		getch();   

		ShowBookMenu();
		scanf("%d", &iItem);
		getchar();
	}
}

void ManageReader()
{
	int iItem = 0;
	ShowReaderMenu();

	scanf("%d", &iItem);
	getchar();

	while (iItem)
	{
		switch (iItem)
		{
		case 1:
			ShowReader();
			break;
		case 2:
			AddReader();
			break;
		case 3:
			SearchReader();
			break;
		case 4:
			DeleteReader();
			break;
		case 5:
			ModifyReader();
			break;
		default:
			printf("tt请输入正确的数字!ntt");
		}

		printf("| 按任意键返回子菜单 |");
		getch();   
		ShowReaderMenu();
		scanf("%d", &iItem);
		getchar();
	}
}

void BorrowReturnManage()
{
	int iItem = 0;
	ShowBorrowReturnMenu();

	scanf("%d", &iItem);
	getchar();

	while (iItem)
	{
		switch (iItem)
		{
		case 1:
			BorrowBook();
			break;
		case 2:
			ReturnBook();
			break;
		default:
			printf("tt请输入正确的数字!ntt");
		}
		printf("| 按任意键返回子菜单 |");
		getch();
		ShowBorrowReturnMenu();
		scanf("%d", &iItem);
		getchar();
	}
}

int main()
{
	int iItem;
	ShowMainMenu();
	scanf("%d", &iItem);
	getchar();
	while (iItem)
	{
		switch (iItem)
		{
		case 1:
			ManageBook();
			break;
		case 2:
			ManageReader();
			break;
		case 3:
			BorrowReturnManage();
			break;
		default:
			printf("tt请输入正确的数字!ntt程序将于3秒后跳转到主菜单");
			Sleep(3000);
		}
		ShowMainMenu();
		scanf("%d", &iItem);
		getchar();
	}
	return 0;
}
derMenu();
		scanf("%d", &iItem);
		getchar();
	}
}

void BorrowReturnManage()
{
	int iItem = 0;
	ShowBorrowReturnMenu();

	scanf("%d", &iItem);
	getchar();

	while (iItem)
	{
		switch (iItem)
		{
		case 1:
			BorrowBook();
			break;
		case 2:
			ReturnBook();
			break;
		default:
			printf("tt请输入正确的数字!ntt");
		}
		printf("| 按任意键返回子菜单 |");
		getch();
		ShowBorrowReturnMenu();
		scanf("%d", &iItem);
		getchar();
	}
}

int main()
{
	int iItem;
	ShowMainMenu();
	scanf("%d", &iItem);
	getchar();
	while (iItem)
	{
		switch (iItem)
		{
		case 1:
			ManageBook();
			break;
		case 2:
			ManageReader();
			break;
		case 3:
			BorrowReturnManage();
			break;
		default:
			printf("tt请输入正确的数字!ntt程序将于3秒后跳转到主菜单");
			Sleep(3000);
		}
		ShowMainMenu();
		scanf("%d", &iItem);
		getchar();
	}
	return 0;
}
八、项目总结

图书馆管理系统实现了对图书信息和读者信息的增、删、改、查管理功能,并且实现了借书登记和还书登记功能。

通过项目,学习到如下内容。

  • 如何显示主功能菜单和响应用户输入
  • 如何使用结构体数组记录信息
  • 如何利用文件操作保存结果
  • 如何进行函数封装使代码结构更清晰
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号