#include <iomanip.h>
#include <string.h>
#include <fstream.h>
const int Maxr=100; //讀者上限
const int Maxb=100; //圖書上限
const int Maxbor=5; //每個讀者最多借借5本
class Reader //讀者類
{
int tag; //刪除標記 1:已刪,0:未刪
int no; //讀者編號
char name[10]; //讀者姓名
int borbook[Maxbor]; //所借圖書
public:
Reader() {}
char *getname() {return name;} //獲取姓名
int gettag() {return tag;} //獲取刪除標記
int getno() {return no;} //獲取讀者編號
void setname(char na[]) //設置姓名
{
strcpy(name,na);
}
void delbook() {tag=1;} //設置刪除標記
void addreader(int n,char *na) //增加讀者
{
tag=0;
no=n;
strcpy(name,na);
for (int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid) //借書操作
{
for (int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
int retbook(int bookid) //還書操作
{
for (int i=0;i<Maxbor;i++)
{
if (borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp() //輸出讀者信息
{
cout<<setw(5)<<no<<setw(10)<<name<<"借書編號:[";
for (int i=0;i<Maxbor;i++)
if (borbook[i]!=0)
cout<<borbook[i]<<"|";
cout<<"]"<<endl;
}
};
class RDatabase //讀者庫類
{
int top; //讀者記錄指針
Reader read[Maxr]; //讀者記錄
public:
RDatabase() //構造函數,將reader.txt讀到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file) break;
top++;
read[top]=s;
}
file.close();
}
void clear() //刪除所有讀者信息
{
top=-1;
}
int addreader (int n,char *na) //添加讀者時先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader *query(int readerid) //按編號查找
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid && read[i].gettag()==0)
return &read[i];
return NULL;
}
void disp() //輸出所有讀者信息
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata(); //讀者庫維護
~RDatabase() //析構函數,將read[]寫入reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
int choice=1;
char rname[20];
int readerid;
Reader *r;
while (choice!=0)
{
cout<<"讀者維護 1:新增 2:更改 3:刪除 4:查找 5:顯示 6:全刪 0:退出=>";
cin>>choice;
switch (choice)
{
case 1:
cout<<"輸入讀者編號:";
cin>>readerid;
cout<<"輸入讀者姓名:";
cin>>rname;
addreader(readerid,rname);
break;
case 2:
cout<<"輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if (r==NULL)
{
cout<<"該讀者不存在"<<endl;
break;
}
cout<<"輸入新的姓名:";
cin>>rname;
r->setname(rname);
break;
case 3:
cout<<"輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if (r==NULL)
{
cout<<"該讀者不存