ä½ è¯´çç¨åºä¸æä¸åæå¨è¯¾ç¨è®¾è®¡ä¸åååè¿ãæå
´è¶£çè¯å¯ä»¥åéä½ çé®ç®±ç»æã
[email protected] å«å¿äºç»æè¯æä½³çæ¡é¿ã
æä¸åéä¸å¾ä¹¦ç®¡çç³»ç»ãå©ä¸çé®ç®±åã
#include <iostream>
#include <iomanip>//åæ°åè¾å
¥/è¾åº
#include <string>//å符串å¤ç
#include <fstream>//è¾å
¥/è¾åºæ件æµç±»
using namespace std;
const int Maxr=100;//æå¤ç读è
const int Maxb=100;//æå¤çå¾ä¹¦
const int Maxbor=3;//æ¯ä½è¯»è
æå¤åä¸æ¬ä¹¦
//读è
ç±»,å®ç°å¯¹è¯»è
çä¿¡æ¯çæè¿°
class Reader
{
private:
int tag; //å é¤æ è®° 1:å·²å 0:æªå
int num; //读è
ç¼å·
char name[10]; //读è
å§å
char danwei[20];
int borbook[Maxbor];//æåå¾ä¹¦
public:
Reader() {}
char *getname() {return name;} //è·åå§å
int gettag() {return tag;} //è·åå é¤æ è®°
int getnum() {return num;} //è·å读è
ç¼å·
char *getdanwei(){return danwei;}
void setname(char na[]) //设置å§å
{
strcpy(name,na);
}
void setdanwei(char dw[]) //设置åä½
{
strcpy(danwei,dw);
}
void delbook(){ tag=1; }//设置å é¤æ è®° 1:å·²å 0:æªå
void addreader(int n,char *na,char *dw)//å¢å 读è
{
tag=0;
num=n;
strcpy(name,na);
strcpy(danwei,dw);
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 << " " << num <<" " << name<<" "<<danwei<<" "<<"å书ç¼å·ï¼[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i]<<" ";
cout << "]"<<endl;
}
};
//读è
ç±»åºï¼å®ç°å»ºç«è¯»è
ç个人èµæ
class RDatabase
{
private:
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(); //å
³é reader.txt
}
void clear()//å é¤ææ读è
ä¿¡æ¯
{
top=-1;
}
int addreader(int n,char *na,char *dw)//æ·»å 读è
æ¶å
æ¥æ¾æ¯å¦åå¨
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na,dw);
return 1;
}
return 0;
}
Reader *query(int readerid)//æç¼å·æ¥æ¾
{
for (int i=0;i<=top;i++)
if (read[i].getnum()==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()
{
char choice;
char rname[20];
char rdanwei[40];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t读 è
ç»´ æ¤\n\n\n\t\t 1ââæ° å¢\n\n\t\t 2ââå é¤\n\n\t\t 3ââæ¥ è¯¢\n\n\t\t 4ââæ¾ ç¤º\n\n\t\t 0ââé åº"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "è¾å
¥è¯»è
ç¼å·:";
cin >> readerid;
cout << "è¾å
¥è¯»è
å§å:";
cin >> rname;
cout << "è¾å
¥è¯»è
åä½:";
cin >> rdanwei;
addreader (readerid,rname,rdanwei);
break;
case '2':
cout << " è¾å
¥è¯»è
ç¼å·:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 该读è
ä¸åå¨" << endl;
break;
}
r->delbook();
break;
case '3':
cout << "读å
¥è¯»è
ç¼å·:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"该读è
ä¸åå¨"<< endl;
break;
}
r->disp();
break;
case '4':
disp();
break;
default:cout<<"请éæ°è¾å
¥ï¼";break;
}
}
}
//å¾ä¹¦ç±»ï¼å®ç°å¯¹å¾ä¹¦çæè¿°ï¼å¾ä¹¦çç¼å·ï¼ä¹¦åï¼ååºï¼è¿å
¥ç
class Book
{
private:
int tag;//å é¤æ è®° 1:å·²å 0:æªå
int no;//å¾ä¹¦ç¼å·
char name[20];//书å
int num;//å¾ä¹¦åæ°
int onshelf;//æ¯å¦åæ¶ 1:åæ¶ 2:å·²å
public:
Book(){}
char *getname() { return name; }//è·åå§å
int getno(){ return no; }//è·åå¾ä¹¦ç¼å·
int getnum(){ return num; }//è·åå¾ä¹¦åæ°
int gettag(){ return tag; }//è·åå é¤æ è®°
void setname(char na[])//设置书å
{
strcpy(name,na);
}
void delbook(){ tag=1;}//å é¤å¾ä¹¦
void addbook(int n,int nu,char *na)//å¢å å¾ä¹¦
{
tag=0;
no=n;
num=nu;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//å书æä½
{
if (num>2||num==2)
{
onshelf=1;
num=num-1;
return 1;
}
else
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//è¿ä¹¦æä½
{
onshelf=1;
}
void disp()//è¾åºå¾ä¹¦
{
cout << " " << no << " " << name << " "
<<(onshelf==1? "å¨æ¶":"å·²å") <<endl;
}
};
//å¾ä¹¦åºç±»ï¼å®ç°å¯¹å¾ä¹¦çç»´æ¤ï¼æ¥æ¾ï¼å é¤ç
class BDatabase
{
private:
int top; //å¾ä¹¦è®°å½æé
Book book[Maxb]; //å¾ä¹¦è®°å½
public:
BDatabase()//æé å½æ°ï¼å°book.txt读å°book[]ä¸
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
int addbook(int n,int nu,char *na)//å¢å å¾ä¹¦
{
Book *p=query(n);
Book *q=query(nu);
if (NULL==p)
{
top++;
book[top].addbook(n,nu,na);
return 1;
}
return 0;
}
Book *query(int bookid)//æ¥æ¾å¾ä¹¦
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();//å¾ä¹¦åºç»´æ¤
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//ææå½æ°ï¼å°book[]åå°book.txtæ件ä¸
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
char choice;
char bname[40];
int bnum;
int bookid;
Book *b;
while (choice!='0')
{
cout <<"\n\n\n\t\t\tå¾ ä¹¦ ç»´ æ¤ "<<endl<<endl;
cout<<"\n\t\t 1ââæ° å¢\n\n\t\t 2ââå é¤\n\n\t\t 3ââæ¥ æ¾\n\n\t\t 4ââæ¾ ç¤º\n\n\t\t 0ââé åº"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "è¾å
¥å¾ä¹¦ç¼å·:"<<endl;
cin >> bookid;
cout << "è¾å
¥å¾ä¹¦ä¹¦å:"<<endl;
cin >> bname;
cout << "è¾å
¥å¾ä¹¦åæ°:"<<endl;
cin >> bnum;
addbook(bookid,bnum,bname);
break;
case '2':
cout <<" 读å
¥å¾ä¹¦ç¼å·:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 该å¾ä¹¦ä¸åå¨" << endl;
break;
}
b->delbook();
break;
case '3':
cout << " 读å
¥å¾ä¹¦ç¼å·:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 该å¾ä¹¦ä¸åå¨"<< endl;
break;
}
b->disp();
break;
case '4':
disp();
break;
default:cout<<"请éæ°è¾å
¥:";
}
}
}
//main() å½æ°çå®ç°ï¼ç¨åºç主çé¢çå¼å¯¼
void main()
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t å¾ ä¹¦ 管 ç ç³» ç»\n\n\n";
cout <<"\t\t 1ââå 书\n\n\t\t 2ââè¿ ä¹¦ \n\n\t\t 3ââå¾ ä¹¦ ç»´ æ¤\n\n\t\t 4ââ读 è
ç»´ æ¤\n\n\t\t 5ââé åº ç³» ç»"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" å书 读è
ç¼å·:";
cin >>readerid;
cout <<" å¾ä¹¦ç¼å·ï¼ ";
cin >>bookid;
r=ReaderDB.query(readerid);//æç¼å·æ¥æ¾
if (NULL==r)
{
cout <<" ä¸åå¨è¯¥è¯»è
ï¼ä¸è½å书"<< endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" ä¸åå¨è¯¥å¾ä¹¦ï¼ä¸è½å书"<< endl;
break;
}
if (b->borrowbook()==0)
{
cout << " 该å¾ä¹¦å·²ååºï¼ä¸è½å书"<< endl;
break;
}
r->borrowbook(b->getno());
break;
case '2':
cout<<"è¿ä¹¦\n 读è
ç¼å·:";
cin >>readerid;
cout << " å¾ä¹¦ç¼å·:";
cin >>bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout <<" ä¸åå¨è¯¥è¯»è
ï¼ä¸è½è¿ä¹¦" << endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" ä¸åå¨è¯¥å¾ä¹¦ï¼ä¸è½è¿ä¹¦" <<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
case '3':
BookDB.bookdata();
break;
case '4':
ReaderDB.readerdata();
break;
default:cout<<"请éæ°è¾å
¥ï¼";
}
}
}