📄 例2--图书管理--代码.cpp
字号:
/*
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 + -