é«çº§è¯è¨ç¨åºè®¾è®¡ï¼2ï¼è¯¾ç¨è®¾è®¡
ä¸ ç¨åºè®¾è®¡è¯´æ书
ã设计é¢ç®ã å¾ä¹¦é¦åé
管ç
ãé®é¢æè¿°ãå¾ä¹¦é¦ï¼éåç¨C++é¢å对象çåè½æ¥æè¿°ãå¾ä¹¦é¦ç®¡çç³»ç»å为å书ãè¿ä¹¦ãå¾ä¹¦ç®¡çå读è
æå¡çå个é¨åã设计ä¸ä¸ªè¯»è
ç±»Reader,è®°å½æ¯ä¸ªè¯»è
åºæ¬ä¿¡æ¯ï¼è¯»è
åºç±»Rdatabase,è®°å½ææ读è
ä¿¡æ¯ï¼å¾ä¹¦ç±»Book, è®°å½æ¯æ¬ä¹¦çåºæ¬ä¿¡æ¯ï¼å¾ä¹¦åºç±»Bdatabase, è®°å½ææå¾ä¹¦ä¿¡æ¯ã
ãåºæ¬è¦æ±ã
1读è
åºç±»RDatabaseä¸ï¼å
¶æé å½æ°ä¸ï¼å°read.txtæ件ä¸ææ读å
¥è¯»è
è®°å½rede[]ä¸ãå¤çå®æ¯ï¼å¨ææå½æ°ä¸å°read[]ä¸çæææªå è®°å½åå
¥å°read.txtä¸ã
2å¾ä¹¦åºç±»BDatabaseä¸ï¼å
¶æé å½æ°ä¸ï¼å°book.txtæ件ä¸ææ读å
¥å¾ä¹¦è®°å½book[]ä¸ãå¤çå®æ¯ï¼å¨ææå½æ°ä¸å°book[]ä¸çæææªå è®°å½åå
¥å°book.txtä¸ã
3 å©ç¨æé å½æ°å®æ读è
åå¾ä¹¦æ°æ®åå§åï¼å®æå
ååé
ãç¨åºç»æåï¼ææå½æ°å®ææç³è¯·çå å
å空é´ã
4 ç¼å主å½æ°ï¼å¯¹æç¼åçç©éµç±»è¿è¡å
¨é¢æµè¯ãè¦æ±ç¨æ·çé¢éç¨èåæ¹å¼ãæµè¯ä¸éè¦è¯»è
åå¾ä¹¦æ°æ®éè¿I/Oæµä»ç£çæ件读å
¥ï¼åæ¶æ¾ç¤ºå¨å±å¹ä¸ãå¾å°çæ°æ®éè¿I/Oæµåå
¥ç£çæ件ä¿åï¼åæ¶æ¾ç¤ºå¨å±å¹ä¸ã
5 æºç¨åºä¸è¦æå
åç注éï¼æ¥åä¸è¦æ详ç»çæµç¨å¾åæåææã
ãç±»ç设计ã
该ç¨åºå
å«äºå个类ï¼å¦ä¸ï¼
1.Readerç±»ï¼æ读è
çåºæ¬ç®¡çåè½ï¼å
·æ以ä¸ç§ææ°æ®ï¼
int tag;//å é¤æ è®° 1ï¼å·²å ï¼0ï¼æªå
int no;//读è
ç¼å·
char name[10];//读è
å§å
int borbook[Maxbor];//æåå¾ä¹¦
2.读è
åºç±»Rdatabase, å
·æ以ä¸ç§ææ°æ®ï¼
int top;//读è
è®°å½æé
Reader read[Maxr];//读è
è®°å½
3.å¾ä¹¦åºç±»Book,æä¸æ¬å¾ä¹¦çåºæ¬åè½ï¼æ以ä¸ç§ææ°æ®ï¼
int tag;//å é¤æ è®° 1ï¼å·²å ï¼0ï¼æªå
int no;//å¾ä¹¦ç¼å·
char name[20];//书å
int onshelf;//æ¯å¦å¨æ¶ 1å¨æ¶ 0å·²å
4.å¾ä¹¦åºç±»BDatabase,æ以ä¸ç§ææ°æ®ï¼
int top;//å¾ä¹¦è®°å½æé
Book book[Maxb];//å¾ä¹¦è®°å½
ãç¹æ®å½æ°ç设计说æã
æé å½æ°
1.Readerç±»ä¸æé å½æ°Reader(),åå§åå½æ°ï¼
2.读è
åºç±»RDatabaseä¸ï¼å
¶æé å½æ°Rdatabaseï¼ï¼ï¼å°read.txtæ件ä¸ææ读å
¥è¯»è
è®°å½rede[]ä¸ã
3.Bookç±»ä¸æé å½æ°Book(),åå§åå½æ°ï¼
4.å¾ä¹¦åºç±»BDatabaseä¸ï¼å
¶æé å½æ°ä¸ï¼å°book.txtæ件ä¸ææ读å
¥å¾ä¹¦è®°å½book[]ä¸ã
æ·è´æé å½æ°
Readerç±»ä¸çæ·è´æé å½æ°å°getname()çè¿åå¼è¯»è
å§åæ·è´å°setname()ä¸ï¼Bookç±»ä¸çæ·è´æé å½æ°å°getname()å½æ°çè¿åå¼å¾ä¹¦åæ·è´å°å¾ä¹¦å设置å½æ°setname()ä¸ã
ææå½æ°
1.读è
åºç±»RDatabaseä¸ï¼å
¶ææå½æ°~Rdatabaseï¼ï¼ï¼å°read[]ä¸çæææªå è®°å½åå
¥å°read.txtä¸ï¼
2.å¾ä¹¦åºç±»BDatabaseä¸ï¼å
¶ææå½æ°~Bdatabaseï¼ï¼ï¼å°book[]ä¸çæææªå è®°å½åå
¥å°book.txtä¸ã
è¿ç®ç¬¦éè½½
éè½½äºâ=âï¼å½æ¯è¾è¯»è
ç¼å·åå¾ä¹¦ç¼å·æ¶ï¼éè½½ï¼éè½½ä½è¿ç®ç¬¦âããâåâããâçã
ã主è¦å½æ°ç®æ³æµç¨å¾ã
ãç¨åºç使ç¨æ¹æ³ã
1.è¿å
¥æä½é¡µé¢ï¼ææ示æä½ï¼
2.é¦å
ï¼æ°å¢å¾ä¹¦å读è
ä¿¡æ¯ï¼ä¹åå°±å¯ä»¥å¯¹ä»¥åå¨çä¿¡æ¯è¿è¡æä½ï¼
3.æä½å½ä¸ï¼å¯ä»¥éæ¶å¢å ï¼æ´æ¹åå é¤å¾ä¹¦æ读è
ä¿¡æ¯ï¼
4.å½éæ©éåºæ¶ï¼è¿è¡æ¸
å±ã
äº ç¨åºä¸æºè°è¯æ¥å
ãè¯æ³é误åå
¶æé¤ã
1ï¼å¨æ²ç¨åºæ¶ï¼æå¾å¤æ¼åé误ï¼ä¾å¥½å¤å¤æReaddata()误æReaddate()ï¼ç»æçåå·ï¼å¨ä¸åçè¾å
¥æ³ç¶æä¸è¾å
¥ï¼è¿äºå°é误åå¼å§å¾é¾åç°ï¼ä¸è¿æäºç»éªï¼å°±å¾å®¹æäºã
2ï¼å建æ°çæé å½æ°æ¶ï¼ä½¿ç¨åºç°äºé误ãéè½½æé å½æ°è¦æ³¨æå½æ°ç访é®æéï¼ç»æå°±ä¸ä¼åºç°é误ã
ãç®æ³é误åå
¶æé¤ã
1.读è
ç±»ä¸å书æä½å½æ°ä¸ï¼éç¨å¾ªç¯è¯å¥æ¶å¤æ读è
å·²åå¾ä¹¦éæ¶for(int i=0;i<Maxbor;i++)误å为for(int i=1;i<Maxbor;i++)ï¼ä½¿å¾ªç¯åçé误ã
2.æé使ç¨é误ï¼æébåræ··æ·ï¼å¯¼è´ç¼è¯é误å¾å°âerror C2660: 'retbook' : function does not take 1 parametersâé误æ¥åã
ä¸ ç¨åºæµè¯ç»æ
ãæ¶è·åä½ä¼ã
é¤äºè¯¾å å¤ï¼è¯¾ç¨è®¾è®¡æ¯æè½å¦å°ä¸è¥¿çï¼æèéªäººçãå¨å课ç¨è®¾è®¡è¿æ®µæ¶é´ï¼æ¶å»é½æè§èªå·±æ好å¤ä¸æï¼è¦å¦ç太å¤äºï¼ç»è¿è¿æ¬¡è¯¾ç¨è®¾è®¡ï¼è®©æ对C++è¿é¨è¯è¨æäºæ´æ·±ç认è¯ï¼æä½è½åæäºæé«ãè¦æ³å¾å°æ²ç代ç è¿è¡åºæ¥åç满足æï¼éè¦èå¿ç»å¿ï¼æ¯
å以åå
æ²çä½åãåªæç»è¿å¤æ¬¡ç¼è¾ï¼å¤æ¬¡ç¼è¯ï¼åå¤æ¬¡è¿è¡ï¼æè½ç¼ååºæ´å¥½çç¨åºï¼ææ¶åéè¦å¤æ¬¡çæ´æ£æè¾¾å°æè¦çè¿è¡ç»æãå¦ä¹ ç¼ç¨ï¼éè¦å¤æ£æ©ï¼å®è·µï¼å®è·µï¼åå®è·µï¼ç¼ç¨æè½æè½æ´ä¸ä¸å±æ¥¼ï¼æ¤å¤è¿å¾å¤åé«æ请æï¼
ãæºç¨åºä»£ç ã
//********************
//å¾ä¹¦é¦åé
管ç
//ç级ï¼
//å¦å·ï¼
//å§åï¼
//********************
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
const int Maxr=1000;//æå¤ç读è
const int Maxb=10000;//æå¤çå¾ä¹¦
const int Maxbor=8;//æ¯ä½è¯»è
æå¤å8æ¬ä¹¦
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;
}
}
}
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]<<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éåº"<<endl;
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<<"读è
ä¸åå¨"<<endl;
break;
}
r->delbook();
break;
case 4:
cout<<"请è¾å
¥è¯»è
ç¼å·ï¼";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读è
ç¼å·ä¸åå¨"<<endl;
break;
}
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
class Book//å¾ä¹¦ç±»
{
int tag;//å é¤æ è®° 1ï¼å·²å ï¼0ï¼æªå
int no;//å¾ä¹¦ç¼å·
char name[20];//书å
int onshelf;//æ¯å¦å¨æ¶ 1å¨æ¶ 0å·²å
public:
Book(){}
char*getname(){return name;}//è·å读è
å§å
int getno(){return no;}//è·åå¾ä¹¦ç¼å·
int gettag(){return tag;}//è·åå é¤æ è®°
void setname(char na[])//设置书å
{
strcpy(name,na);
}
void delbook(){tag=1;}//å é¤å¾ä¹¦
void addbook(int n,char*na)//å¢å å¾ä¹¦
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//å书æä½
{
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//è¿ä¹¦æä½
{
onshelf=1;
}
void disp()//è¾åºå¾ä¹¦
{
cout<<setw(6)<<no<<setw(18)<<name<<setw(10)<<(onshelf==1?"å¨æ¶":"å·²å")<<endl;
}
};
class BDatabase//å¾ä¹¦åºç±»
{
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();
}
void clear()//å
¨å
{
top=-1;
}
int addbook(int n,char*na)//å¢å å¾ä¹¦
{
Book*p=query(n);
if(p==NULL)
{
top++;
book[top].addbook(n,na);
return 1;
}
cout<<"æ°å¢æåï¼"<<endl;
}
Book*query(int bookid)//æ¥æ¾å¾ä¹¦
{
for(int i=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
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()
{
int choice;
char bname[40];
int bookid;
Book *b;
while(choice!=0)
{
cout<<"å¾ä¹¦ç®¡ç 1æ°å¢ 2æ´è¯¥ 3å é¤ 4æ¥æ¾ 5æ¾ç¤º 6å
¨å 0éåº"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"è¾å
¥å¾ä¹¦ç¼å·ï¼";
cin>>bookid;
cout<<"è¾å
¥å¾ä¹¦ä¹¦åï¼";
cin>>bname;
addbook(bookid,bname);
break;
case 2:
cout<<"è¾å
¥å¾ä¹¦ç¼å·ï¼";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该å¾ä¹¦ä¸åå¨"<<endl;
break;
}
cout<<"è¾å
¥æ°ä¹¦å:";
cin>>bname;
b->setname(bname);
cout<<"æ´åæåï¼"<<endl;
break;
case 3:
cout<<"è¾å
¥å¾ä¹¦ç¼å·ï¼";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该å¾ä¹¦ä¸åå¨ï¼"<<endl;
break;
}
b->delbook();
break;
case 4:
cout<<"请è¾å
¥å¾ä¹¦ç¼å·ï¼";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该书ä¸åå¨ï¼"<<endl;
break;
}
b->disp();
break;
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
void main()
{
int choice=1,bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!=0)
{
cout<<" 1å书 "<<endl;
cout<<" 2è¿ä¹¦ "<<endl;
cout<<" 3å¾ä¹¦ç»´æ¤ "<<endl;
cout<<" 4读è
ç»´æ¤ "<<endl;
cout<<" 0ç¦»å¼ "<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"å书ï¼è¯·è¾å
¥è¯»è
ç¼å·ï¼";
cin>>readerid;
cout<<"å¾ä¹¦ç¼å·ï¼";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"ååï¼å书æåï¼";
break;
}
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"ä¸åå¨è¯¥ä¹¦ï¼"<<endl;
break;
}
if(b->borrowbook()==0)
{
cout<<"该书已å"<<endl;
break;
}
r->borrowbook(b->getno());
break;
cout<<"å书æåï¼"<<endl;
case 2:
cout<<"è¿ä¹¦ï¼è¯·è¾å
¥è¯»è
ç¼å·ï¼";
cin>>readerid;
cout<<"请è¾å
¥å¾ä¹¦ç¼å·ï¼";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"ä¸åå¨è¯¥è¯»è
ï¼"<<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
cout<<"è¿ä¹¦æåï¼"<<endl;
case 3:
BookDB.bookdata();
break;
case 4:
ReaderDB.readerdata();
break;
}
}
}
ãè¾åºç»æã
1å书
2è¿ä¹¦
3å¾ä¹¦ç®¡ç
4读è
æå¡
0éåº
3
å¾ä¹¦ç®¡ç 1æ°å¢ 2æ´è¯¥ 3å é¤ 4æ¥æ¾ 5æ¾ç¤º 6å
¨å 0éåº
1
è¾å
¥å¾ä¹¦ç¼å·ï¼1111
è¾å
¥å¾ä¹¦ä¹¦åï¼æ¦æå¤ä¼
æ°å¢æåï¼
å¾ä¹¦ç®¡ç 1æ°å¢ 2æ´è¯¥ 3å é¤ 4æ¥æ¾ 5æ¾ç¤º 6å
¨å 0éåº
1
è¾å
¥å¾ä¹¦ç¼å·ï¼2222
è¾å
¥å¾ä¹¦ä¹¦åï¼ä»å¤æ ç
æ°å¢æåï¼
å¾ä¹¦ç®¡ç 1æ°å¢ 2æ´è¯¥ 3å é¤ 4æ¥æ¾ 5æ¾ç¤º 6å
¨å 0éåº
0
1å书
2è¿ä¹¦
3å¾ä¹¦ç®¡ç
4读è
æå¡
0éåº
4
读è
æå¡ 1æ°å¢ 2æ´è¯¥ 3å é¤ 4æ¥æ¾ 5æ¾ç¤º 6å
¨å 0éåº
1
请è¾å
¥è¯»è
ç¼å·ï¼001
读å
¥è¯»è
å§åï¼å¨å¼º
读è
æå¡ 1æ°å¢ 2æ´è¯¥ 3å é¤ 4æ¥æ¾ 5æ¾ç¤º 6å
¨å 0éåº
0
1å书
2è¿ä¹¦
3å¾ä¹¦ç®¡ç
4读è
æå¡
0éåº
1
å书ï¼è¯·è¾å
¥è¯»è
ç¼å·ï¼001
å¾ä¹¦ç¼å·ï¼1111
ååï¼å书æåï¼ 1å书
2è¿ä¹¦
3å¾ä¹¦ç®¡ç
4读è
æå¡
0éåº
2
è¿ä¹¦ï¼è¯·è¾å
¥è¯»è
ç¼å·ï¼001
请è¾å
¥å¾ä¹¦ç¼å·ï¼1111
è¿ä¹¦æåï¼
1å书
2è¿ä¹¦
3å¾ä¹¦ç®¡ç
4读è
æå¡
0éåº
3
å¾ä¹¦ç®¡ç 1æ°å¢ 2æ´è¯¥ 3å é¤ 4æ¥æ¾ 5æ¾ç¤º 6å
¨å 0éåº
2
è¾å
¥å¾ä¹¦ç¼å·ï¼2222
è¾å
¥æ°ä¹¦å:é庸å
¨é
æ´åæåï¼
Press any key to continue
è¿æ ·å¯ä»¥ä¹ï¼
追é®æé®é¢ æ好å¤é误