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

📄 例2--图书管理--代码.cpp

📁 图书馆管理系统的实现
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*
Last update time:2004/5/17 22:12
*/

#include "cstdio"
#include "stdlib.h"
#include "string.h"

struct Book
{
	int   iID;
	char  csISBN[50];
	char  csName[50];
	char  csAuthor[50];
	char  csPublisher[50];
	char  csPubTime[50];
	int   iPage;
	char  csClassify[50];
	int   iNowAll;
	char  csStore[50];
	int   iAll;
	char  csInTime[50];
	float fPrice;
};

struct BorrowBook
{
	int iBookID;
	char csBorrowTime[50];
};

struct Reader
{
	int  iID;
	char csName[50];
	char csClass[50];
	int iBookCount;
	BorrowBook  bbBook[6];
};

struct BookNode
{
	Book bBook;
	BookNode *bnNext;
};
struct ReaderNode
{
	Reader rReader;
	ReaderNode *rnNext;
};

/* 函数声明 */
BookNode * BookFind(BookNode *);
ReaderNode * ReaderFind(ReaderNode *,BookNode *);

/* 功能选择 */
int ChooseFunction(void)
{
	int iTemp=0;
	char cChoose;
	for(;iTemp==0;)
	{
		printf("   请选择:");
		for(;;)
		{
			cChoose=getchar();
			if((cChoose<'0'||cChoose>'9')&&cChoose!='\n')
			{
				printf("   请输入正确的选择!\n");
				while(getchar()!='\n'){}
				iTemp=0;
				break;
			}
			else if(cChoose=='\n'&&iTemp==0)
			{
				printf("   请输入正确的选择!\n");
				break;
			}
			else if(cChoose=='\n'&&iTemp!=0)
			{
				break;
			}
			else
			{
				iTemp=iTemp*10+(cChoose-48);
			}
		}
	}
	return iTemp;
}

/* 输入数字(整型) */
int InputNumber(void)
{
	int iTemp=0;
	int iSign=0;
	char cChoose;
	for(;;)
	{
		cChoose=getchar();
		if((cChoose<'0'||cChoose>'9')&&cChoose!='\n')
		{
			printf("   请输入正确的信息!\n");
			printf("   请重新输入:"); 
			while(getchar()!='\n'){}
			iSign=0;
			iTemp=0;
		}
		else if(cChoose=='\n'&&iSign==0)
		{
			printf("   请输入正确的信息!\n");
			printf("   请重新输入:");
		}
		else if(cChoose=='\n'&&iSign==1)
		{
			if(iTemp<=32767)
			{
				break;
			}
			else
			{
				printf("   请输入正确的信息!\n");
				printf("   请重新输入:");
				iSign=0;
				iTemp=0;
			}
		}
		else
		{
			iTemp=iTemp*10+(cChoose-48);
			iSign=1;
		}
	}
	return iTemp;
}

/* 输入字符串(小于50字节) */
void InputString(char * csInput)
{
	int iSign=1;
	int iCounter;
	char cTemp;
	char csTemp[50];
	for(;iSign==1;)
	{
		for(iCounter=0;iCounter<49&&(cTemp=getchar())!='\n';++iCounter)
		{
			csTemp[iCounter]=cTemp;
		}
		csTemp[iCounter]='\0';
		iSign=0;
		if(cTemp!='\n')
		{
			printf("   超出指定长度!\n");
			printf("   请重新输入:");
			while(getchar()!='\n'){}
			iSign=1;
		}
	}
	strcpy(csInput,csTemp);
}

/* 打印图书属性 */
void PrintBook(BookNode * bnCurr)
{
	if(bnCurr==NULL)
	{
		printf("   无图书信息!\n");
	}
	else
	{
		printf("   图书编号:%d\n",bnCurr->bBook.iID);
		printf("   ISBN:%s\n",bnCurr->bBook.csISBN);
		printf("   书名:%s\n",bnCurr->bBook.csName);
		printf("   作者:%s\n",bnCurr->bBook.csAuthor);
		printf("   出版社:%s\n",bnCurr->bBook.csPublisher);
		printf("   出版时间:%s\n",bnCurr->bBook.csPubTime);
		printf("   页数:%d\n",bnCurr->bBook.iPage);
		printf("   类别:%s\n",bnCurr->bBook.csClassify);
		printf("   现存数量:%d\n",bnCurr->bBook.iNowAll);
		printf("   存放位置:%s\n",bnCurr->bBook.csStore);
		printf("   图书总数:%d\n",bnCurr->bBook.iAll);
		printf("   入馆时间:%s\n",bnCurr->bBook.csInTime);
		printf("   图书价:%.1f¥\n",bnCurr->bBook.fPrice);
	}
}

/* 打印读者属性 */
void PrintReader(ReaderNode * rnCurr,BookNode * bnFirst)
{
	int iTemp=0;
	int iCounter=rnCurr->rReader.iBookCount;
	BookNode *bnCurr;
	printf("   用户编号:%d\n",rnCurr->rReader.iID);
	printf("   姓名:%s\n",rnCurr->rReader.csName);
	printf("   班级(单位):%s\n",rnCurr->rReader.csClass);
	printf("   ****** 借书信息 ******\n");
	if(iCounter==0)
	{
		printf("   该用户无借书信息!\n");
	}
	else
	{
		for(;iCounter>0;)
		{
			for(bnCurr=bnFirst->bnNext;bnCurr->bBook.iID!=rnCurr->rReader.bbBook[iTemp].iBookID;bnCurr=bnCurr->bnNext){}
			PrintBook(bnCurr);
			printf("   借书日期:%s\n",rnCurr->rReader.bbBook->csBorrowTime);
			printf("   ---------------------------\n");
			bnCurr=bnCurr->bnNext;
			--iCounter;
			++iTemp;
		}
		printf("   借书总数:%d\n",rnCurr->rReader.iBookCount);
		printf("   ---------------------------\n");
	}
}

/* 载入图书文件 */
BookNode *BookLoad(void)
{
	BookNode *bnFirst;
	bnFirst=(BookNode *)malloc(sizeof(BookNode));
	if(!bnFirst)
	{
		printf("   内存资源枯竭!\n");
		system("PAUSE");
		exit(0);
	}
	FILE *fpBook;
	if((fpBook=fopen("book","rb"))==NULL)
	{
		printf("文件book读写错误!");
		system("PAUSE");
		exit(0);
	}
	bnFirst->bnNext=NULL;
	for(BookNode *bnCurr,*bnPrev;!feof(fpBook);bnPrev=bnCurr)
	{
		bnCurr=(BookNode *)malloc(sizeof(BookNode));
		if(!bnCurr)
		{
			printf("   内存资源枯竭!\n");
			system("PAUSE");
			exit(0);
		}
		if((fread(bnCurr,sizeof(BookNode),1,fpBook))!=1)
			break;

		bnCurr->bnNext=NULL;

		if(bnFirst->bnNext==NULL)
		{
			bnFirst->bnNext=bnCurr;
		}
		else
		{
			bnPrev->bnNext=bnCurr;
		}
	}
	fclose(fpBook);
	return bnFirst;
}

/* 保存图书文件 */
void BookSave(BookNode * bnFirst)
{
	FILE *fpBook;
	BookNode *bnCurr=bnFirst->bnNext;
	if((fpBook=fopen("book","wb"))==NULL)
	{
		printf("文件book读写错误!");
		system("PAUSE");
		exit(0);
	}
	for(;bnCurr!=NULL;bnCurr=bnCurr->bnNext)
	{
		if(fwrite(bnCurr,sizeof(BookNode),1,fpBook)!=1)
			break;
	}
	fclose(fpBook);
}

/* 卸载图书信息 */
void BookUnLoad(BookNode * bnFirst)
{
	BookNode *bnNext,*bnCurr;
	for(bnCurr=bnFirst;bnCurr!=NULL;bnCurr=bnNext)
	{
		bnNext=bnCurr->bnNext;
		free(bnCurr);
	}
}

/* 载入读者信息文件 */
ReaderNode *ReaderLoad(void)
{
	ReaderNode* rnFirst;
	rnFirst=(ReaderNode *)malloc(sizeof(ReaderNode));
	if(!rnFirst)
	{
		printf("   内存资源枯竭!\n");
		system("PAUSE");
		exit(0);
	}
	FILE *fpReader;
	if((fpReader=fopen("reader","rb"))==NULL)
	{
		printf("文件reader读写错误!");
		system("PAUSE");
		exit(0);
	}

	rnFirst->rnNext=NULL;
	for(ReaderNode *rnCurr,*rnPrev;!feof(fpReader);rnPrev=rnCurr)
	{
		rnCurr=(ReaderNode *)malloc(sizeof(ReaderNode));
		if(!rnCurr)
		{
			printf("   内存资源枯竭!\n");
			getchar();
			exit(0);
		}
		if((fread(rnCurr,sizeof(ReaderNode),1,fpReader))!=1)
			break;
		rnCurr->rnNext=NULL;
		if(rnFirst->rnNext==NULL)
		{
			rnFirst->rnNext=rnCurr;
		}
		else
		{
			rnPrev->rnNext=rnCurr;
		}
	}
	fclose(fpReader);
	return rnFirst;
}

/* 保存读者文件 */
void ReaderSave(ReaderNode * rnFirst)
{
	FILE *fpReader;
	ReaderNode *rnCurr=rnFirst->rnNext;
	if((fpReader=fopen("reader","wb"))==NULL)
	{
		printf("文件reader读写错误!");
		system("PAUSE");
		exit(0);
	}
	for(;rnCurr!=NULL;rnCurr=rnCurr->rnNext)
	{
		if(fwrite(rnCurr,sizeof(ReaderNode),1,fpReader)!=1)
			break;
	}
	fclose(fpReader);
}

/* 卸载读者信息 */
void ReaderUnLoad(ReaderNode * rnFirst)
{
	ReaderNode *rnNext,*rnCurr;
	for(rnCurr=rnFirst;rnCurr!=NULL;rnCurr=rnNext)
	{
		rnNext=rnCurr->rnNext;
		free(rnCurr);
	}
}

//////////////////////////////////////////
//借书
//////////////////////////////////////////
void BookBorrow(BookNode * bnFirst,ReaderNode * rnFirst)
{
	BookNode *bnBorrow=NULL;
	ReaderNode *rnBorrow;
	printf("   ****** 选择图书 ******\n");
	bnBorrow=BookFind(bnFirst);
	if(bnBorrow==NULL)
	{
		printf("   图书未被选定!\n");
		printf("   图书外借操作被取消!\n");
		return;
	}
	if(bnBorrow->bBook.iNowAll==0)
	{
		printf("   该书不供外借!\n");
		printf("   图书外借操作被取消!\n");
		return;
	}
	printf("   ****** 选择读者 ******\n");
	rnBorrow=ReaderFind(rnFirst,bnFirst);
	if(rnBorrow==NULL)
	{
		printf("   读者未被选定!\n");
		printf("   图书外借操作被取消!\n");
		return;
	}
	if(rnBorrow->rReader.iBookCount==6)
	{
		printf("   该用户已经借书6本!\n");
		printf("   图书外借操作被取消!\n");
		return;
	}
	char cChoose;
	printf("   是否出借此书?\n");
	printf("   是(y)\\否(n):");
	scanf("%c",&cChoose);

	if(cChoose=='y')
	{
		getchar();
		printf("   请输入出借时间:");
		InputString(rnBorrow->rReader.bbBook[rnBorrow->rReader.iBookCount].csBorrowTime);
		rnBorrow->rReader.bbBook[rnBorrow->rReader.iBookCount].iBookID=bnBorrow->bBook.iID;
		++rnBorrow->rReader.iBookCount;
		--bnBorrow->bBook.iNowAll;
		printf("   图书外借成功!\n");
	}
	else
	{
		printf("   你取消了图书外借操作!\n");
		if(cChoose=='\n')
		{
			return;
		}
		while(getchar()!='\n'){}
	}
}

//////////////////////////////////////////
//还书
//////////////////////////////////////////
void BookReturn(BookNode * bnFirst,ReaderNode * rnFirst)
{
	BookNode *bnReturn=NULL;
	ReaderNode *rnReturn=NULL;
	printf("   ****** 选择图书 ******\n");
	bnReturn=BookFind(bnFirst);
	if(bnReturn==NULL)
	{
		printf("   图书未被选定!\n");
		printf("   还书操作被取消!\n");
		return;
	}
	if(bnReturn->bBook.iAll==0)
	{
		printf("   该书没有被系统储存!\n");
		printf("   还书操作被取消!\n");
		return;
	}

	printf("   ****** 选择读者 ******\n");
	rnReturn=ReaderFind(rnFirst,bnFirst);
	if(rnReturn==NULL)
	{
		printf("   读者未被选定!\n");
		printf("   还书操作被取消!\n");

⌨️ 快捷键说明

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