?? reader.h
字號:
#include "Book.h"
const int MRN=104;
static int RN=1;//靜態讀者編號
const int MBor=5;//每次最大借閱量
const int MDes=5;//最多預定圖書數目
class Book;
class Reader
{
private:
//讀者存儲結構
Book B;
int bAdd;//臨時保存讀者選定圖書的物理地址
int eb;//記錄書庫是否為空
int rNum[MRN];
char rName[MRN][20];
int brNum[MRN][MBor]; //當前借閱圖書編號,初始值為-1
int deNum[MRN][MDes]; //記錄當前預借圖書書號 初始值為-1
int rtop;
int Irtop;
//讀者用戶名索引結構,便于讀者快速登陸
char IrName[MRN][20];
int IrAdd[MRN];
public:
Reader();//讀者構造函數(讀取書庫與讀者文件)
~Reader();
int IsEmpty();
int CheckR(int bnum,int rn);//還書核實返回-1錯誤 返回i可以還書 返回-2該讀者還未借書
int CheckD(int bnum,int rn);//取消預借核實返回-1錯誤 返回i可以取消 返回-2該讀者還未預借
void ReadReader();//讀取讀者信息
//********************************管理員對讀者操作函數**********************************
void CleanReader(); //清空讀者信息
//***********************************讀者自身操作函數***********************************
void ViewReader(int num);//讀者查看自身信息(這里num為主函數中記錄的讀者物理地址)
int AddReader(char rname[]);//添加讀者(讀者注冊)返回新建讀者編
int Login(char rname[]); //讀者登陸函數,返回值為讀者編號
//************************************讀者對圖書操作函數*********************************
int BorBooks(int rn);//借書函數
int DestineBooks(int rn);//預借圖書
int ReturnBooks(int bnum,int rn);//還書函數
int DesRBooks(int bnum,int rn);//取消預借
//圖書檢索函數
int FindName(char bname[]); //書名
int FindWriter(char bwriter[]);//作者
};
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////Reader.cpp
Reader::Reader()
{
int i;
//初始化
rtop =-1;
Irtop =-1;
bAdd=-1;
for(i=0; i<MRN; i++)
{
rNum[i]=-1;
rName[i][0]='\0';
IrAdd[i]=-1;
IrName[i][0] ='\0';
for(int j=0; j<MBor; j++)
{
brNum[i][j] =-1;
deNum[i][j] =-1;
}
}
}
void Reader::ReadReader()
{
int i,j,k;
B.ReadBook();//調用讀取圖書文件函數
//讀者結構讀取
i=0;
ifstream rfile("Reader.txt",ios::in);
rfile >>rtop >>RN;
while(!rfile.eof())
{
rfile >>rNum[i] >>rName[i] ;
for(j=0; j<MBor; j++)
rfile >>brNum[i][j];
i++;
}
rfile.close();
//讀者索引讀取
ifstream irfile("IndexReader.txt",ios::in);
while(!irfile.eof())
{
irfile >>k;
irfile >>IrName[k];
irfile >>IrAdd[k];
}
irfile.close();
}
//檢查空
int Reader::IsEmpty()
{
if(rtop!=-1)
return 1;
else
return 0;
}
int Reader::CheckR(int bnum,int rn)
{
int temp=0;//記錄當前讀者所借圖書數量
for(int i=0;i<MBor;i++)
{
if(brNum[rn][i]!=-1)
temp++;
}
if(temp!=0)
{
for(int i=0; i<MBor; i++)
{
if(brNum[rn][i] ==bnum)
{
return i;
}
}
return -1;
}
else return -2;
}
int Reader::CheckD(int bnum,int rn)
{
int temp=0;//記錄當前讀者所借圖書數量
for(int i=0;i<MDes;i++)
{
if(deNum[rn][i]!=-1)
temp++;
}
if(temp!=0)
{
for(int i=0; i<MDes; i++)
{
if(deNum[rn][i] ==bnum)
{
return i;
}
}
return -1;
}
else return -2;
}
Reader::~Reader()
{
int i,j;
//讀者結構保存
ofstream rfout("Reader.txt",ios::out);
rfout <<rtop <<" " <<RN <<" ";
for ( i=0; i<=rtop; i++)
{
rfout <<rNum[i] <<" "
<<rName[i] <<" ";
for(j=0; j<MBor; j++)
rfout <<brNum[i][j] <<" ";
}
rfout.close();
//讀者索引保存
ofstream irfout("IndexReader.txt",ios::out);
for ( i=0; i<MRN; i++)
{
if(IrName[i][0]!='\0')
{
irfout <<i <<" "
<<IrName[i] <<" "
<<IrAdd[i] <<" ";
}
}
irfout.close();
B.~Book();
}
//*************************************************************************管理員操作函數
//清空讀者信息
void Reader::CleanReader()
{
RN=1;
rtop =-1;
Irtop =-1;
for(int i=0; i<MRN; i++)
{
IrAdd[i]=-1;
IrName[i][0] ='\0';
for(int j=0; j<MBor; j++)
{
brNum[i][j] =-1;
}
}
}
//************************************************************************讀者自身操作函數
//讀者查看自身信息
void Reader::ViewReader(int num)
{
int j;
if(rNum[num]!=-1)
{
cout<<"編號:"<<rNum[num]<<"\t"
<<"用戶名:"<<rName[num]<<"\t"<<endl;
cout<<"以下為您已借閱的圖書信息~~~\n"
<<"序號"<<"\t"
<<"書名"<<"\t\t"
<<"作者"<<"\t\t"
<<"剩余量"<<"\t"
<<"總量"<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
for( j=0;j<MBor;j++)
{
if(brNum[num][j]!=-1) //讀者借書編號初始值為-1
B.ViewOne(brNum[num][j]);
}
cout<<endl;
cout<<"********************************************************************"<<endl;
cout<<endl;
cout<<"以下為您已預借的圖書信息~~~\n"
<<"序號"<<"\t"
<<"書名"<<"\t"
<<"作者"<<"\t"
<<"剩余量"<<"\t"
<<"總量"<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
for( j=0;j<MDes;j++)
{
if(deNum[num][j]!=-1) //讀者借書編號初始值為-1
B.ViewOne(deNum[num][j]);
}
}
else
cout<<"不存在指定編號的讀者信息"<<endl;
}
//讀者登陸函數
int Reader::Login(char rname[]) //-1無該讀者 其他_為該讀者編號
{
int h=4*(rname[0] -'a');
while(IrName[h][0]!= '\0')
{
if(strcmp(IrName[h],rname) ==0)
{
return IrAdd[h];
}
h++;
if(h>103) h=h-104;
}
return -1;
}
//讀者注冊
int Reader::AddReader(char rname[])
{
rtop++;
strcpy(rName[rtop],rname);
//系統分配讀者號
rNum[rtop] =RN++;
//建立讀者姓名散列
int h=B.H(rname);
while(IrName[h][0]!='\0')
{
h++;
if(h>103) h=h-104;
}
strcpy(IrName[h],rname);
IrAdd[h] =rtop;
return rNum[rtop];
}
//***********************************************************************讀者檢索圖書函數
int Reader::FindName(char bname[])//返回-1則不進行其他操作,其他為要進行操作的圖書物理地址
{
eb=B.IsEmpty();
if(eb==1)
{
B.FiEmpty();
bAdd=B.FindName(bname,1);
return bAdd;
}
else
{
cout<<"書庫為空"<<endl;
return -1;
}
}
int Reader::FindWriter(char bwriter[])//返回-1則不進行其他操作,其他為要進行操作的圖書物理地址
{
eb=B.IsEmpty();
if(eb==1)
{
B.FiEmpty();
bAdd=B.FindWriter(bwriter,1);
return bAdd;
}
else
{
cout<<"書庫為空"<<endl;
return -1;
}
}
//*********************************************************************************借還書操作
//借書
int Reader::BorBooks(int rn) //返回1為借閱成功 0為借閱量滿 -1為此類書無庫存
{
int temp;
for(int j=0; j<MBor; j++)
{
if(brNum[rn][j]==-1)
{
temp=B.BorBook(bAdd);
if(temp!=0)
{
brNum[rn][j]=temp; //讀者rn 借書編號添加
return 1;
}
else
return -1;
}
}
return 0;
}
//預借
int Reader::DestineBooks(int rn) //返回1為預借閱成功 0為預借閱量滿 -1為此類書無庫存
{
int temp;
for(int j=0; j<MDes; j++)
{
if(deNum[rn][j]==-1)
{
temp=B.DesBook(bAdd);
if(temp!=0)
{
deNum[rn][j]=temp; //讀者rn 借書編號添加
return 1;
}
else
return -1;
}
}
return 0;
}
//還書
int Reader::ReturnBooks(int bnum,int rn)//返回-1操作錯誤 -2當前借書量為空,返回1還書成功
{
int n=CheckR(bnum,rn);
if(n==-1)
return -1;
else if(n==-2)
return -2;
else
{
brNum[rn][n]=-1;
B.ReturnBook(bnum);
return 1;
}
}
//取消預定
int Reader::DesRBooks(int bnum,int rn)//返回-1操作錯誤 -2當前預借量為空,取消成功1
{
int n=CheckD(bnum,rn);
if(n==-1)
return -1;
else if(n==-2)
return -2;
else
{
deNum[rn][n]=-1;
B.ReturnBook(bnum);
return 1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -