# include & ltiomanip & gt
# include & lt字符串& gt
# include & ltfstream & gt//輸入/輸出文件流類
使用命名空間std
const int Maxr = 100;//最多的讀者
const int Maxb = 100;//最多的書
const int max bor = 5;//每個讀者最多可以借五本書。
//reader類,描述讀者的信息。
類閱讀器
{
私人:
int標簽;//刪除標記1:已刪除0:未刪除。
int號;//閱讀器編號
字符名稱[10];//讀者姓名
int bor book[max bor];//借書
公共:
Reader() {}
char * getname(){ return name;}//獲取名稱
int gettag(){ return tag;}//獲取刪除標記
int getno(){ return no;}//獲取閱讀器編號
Void setname(char na[]) //設置名稱。
{
strcpy(姓名,不適用);
}
void del book(){ tag = 1;}//設置刪除標誌1:已刪除0:未刪除。
Void addreader(int n,char *na)//增加讀取器。
{
tag = 0;
no = n;
strcpy(姓名,不適用);
for(int I = 0;我& ltMaxbori++)
bor book[I]= 0;
}
Void borrowbook(int bookid)//借入操作
{
for(int I = 0;我& ltMaxbori++)
{
if (borbook[i]==0)
{
bor book[I]= bookid;
返回;
}
}
}
Int retbook(int bookid)//圖書返回操作
{
for(int I = 0;我& ltMaxbori++)
{
if(borbook[i]==bookid)
{
bor book[I]= 0;
返回1;
}
}
返回0;
}
Void disp()//讀取閱讀器信息。
{
cout & lt& ltsetw(5)& lt;& lt否& lt& ltsetw(10)& lt;& lt名稱& lt& lt“借閱號:[”;
for(int I = 0;我& ltMaxbori++)
if(borbook[i]!=0)
cout & lt& ltbor book[I]& lt;& lt"|";
cout & lt& lt"]" & lt;& ltendl
}
};
//讀者類庫,實現讀者個人資料的建立。
類別數據庫
{
私人:
int top//讀取器記錄指針
閱讀器read[Maxr];//閱讀器記錄
公共:
RDatabase() //構造函數將reader.txt讀入read[]。
{
讀者s;
top =-1;
fstream文件(" reader.txt ",IOs::in);//打開壹個輸入文件
while (1)
{
file . read((char *)& amp;s,sizeof(s));
如果(!文件)中斷;
top++;
read[top]= s;
}
file . close();//關閉reader.txt
}
Void clear()//刪除所有閱讀器信息。
{
top =-1;
}
Int addreader(int n,char *na)//添加讀取器時,檢查它們是否存在。
{
reader * p = query(n);
if (p==NULL)
{
top++;
閱讀【頂部】。addreader(n,na);
返回1;
}
返回0;
}
Reader *query(int readerid)//按編號搜索。
{
for(int I = 0;我& lt= topi++)
如果(讀[我]。getno()= = readerid & amp;& amp
讀[我]。gettag()==0)
{
返回& amp改為[I];
}
返回NULL
}
Void disp() //輸出所有讀取器信息。
{
for(int I = 0;我& lt= topi++)
讀[我]。disp();
}
void reader data();//讀者庫維護
~RDatabase() //析構函數,將read[]寫入reader.txt文件。
{
fstream文件(" reader.txt ",IOs::out);
for(int I = 0;我& lt= topi++)
如果(讀[我]。gettag()==0)
file . write((char *)& amp;read[i],sizeof(read[I]);
file . close();
}
};
void RDatabase::readerdata()
{
char選擇;
char rname[20];
int readerid
reader * r;
而(選擇!='0')
{
cout & lt& lt" \ n \ n \ t \ tReader維護\n\n\n\t\t 1是新添加的\ n \ n \ t \ t 2被更改\ n \ n \ t \ t 3被刪除\ n \ n \ " & ltendl
CIN & gt;& gt選擇;
開關(選擇)
{
案例“1”:
cout & lt& lt"輸入讀卡器號:";
CIN & gt;& gtreaderid
cout & lt& lt"輸入讀取器名稱:";
CIN & gt;& gtrname
addreader (readerid,rname);
打破;
案例“2”:
cout & lt& lt"輸入讀卡器號:";
CIN & gt;& gtreaderid
r = query(readerid);
if (r==NULL)
{
cout & lt& lt"讀者不存在"
打破;
}
cout & lt& lt”輸入新名稱:“;
CIN & gt;& gtrname
r-& gt;set name(rname);
打破;
案例“3”:
cout & lt& lt"輸入讀卡器號:";
CIN & gt;& gtreaderid
r = query(readerid);
if (r==NULL)
{
cout & lt& lt"讀者不存在"
打破;
}
r-& gt;del book();
打破;
案例“4”:
cout & lt& lt"讀入閱讀器號:";
CIN & gt;& gtreaderid
r = query(readerid);
if (r==NULL)
{
cout & lt& lt"讀者不存在"
打破;
}
r-& gt;disp();
打破;
案例“5”:
disp();
打破;
案例“6”:
clear();
打破;
默認值:cout & lt& lt"輸入錯誤,請重新輸入:";打破;
}
}
}
//圖書類別,實現了圖書的描述、書號、書名、借出、歸還等。
課堂用書
{
私人:
int標簽;//刪除標記1:已刪除0:未刪除。
int號;//圖書編號
char name[20];//書名
int onshelf//要不要借1:借2:借?
公共:
Book(){}
char * getname(){ return name;}//獲取名稱
int getno(){ return no;}//獲取書號
int gettag(){ return tag;}//獲取刪除標記
Void setname(char na[])//設置書名。
{
strcpy(姓名,不適用);
}
void del book(){ tag = 1;}//刪除書籍
Void addbook(int n,char *na)//添加書籍。
{
tag = 0;
no = n;
strcpy(姓名,不適用);
on shelf = 1;
}
Int borrowbook()//借用操作
{
if(on self = = 1)
{
on shelf = 0;
返回1;
}
返回0;
}
Void retbook()//圖書返回操作
{
on shelf = 1;
}
Void disp()//輸出書籍
{
cout & lt& ltsetw(6)& lt;& lt否& lt& ltsetw(18)& lt;& lt名稱& lt& ltsetw(10)
& lt& lt(onshelf==1?《在架子上》:“借來的”)< & ltendl
}
};
//Library類,可以維護,搜索,刪除書籍。
b類數據庫
{
私人:
int top//圖書記錄指針
book book[Maxb];//圖書記錄
公共:
BDatabase()//構造函數,將book.txt讀入book[]。
{
書b;
top =-1;
fstream文件(" book.txt ",IOs::in);
while (1)
{
file . read((char *)& amp;b,sizeof(b));
如果(!文件)中斷;
top++;
book[top]= b;
}
file . close();
}
Void clear()//全部刪除
{
top =-1;
}
Int addbook(int n,char *na)//添加書籍。
{
book * p = query(n);
if (NULL==p)
{
top++;
書[頂]。addbook(n,na);
返回1;
}
返回0;
}
Book *query(int bookid)//查找書籍。
{
for(int I = 0;我& lt= topi++)
如果(書[我]。getno()= = bookid & amp;& amp書[我]。gettag()==0)
{
返回& amp書[I];
}
返回NULL
}
void book data();//庫維護
無效顯示()
{
for(int I = 0;我& lt= topi++)
如果(書[我]。gettag()==0)
書[我]。disp();
}
~BDatabase()//析構函數,將book[]寫入book.txt文件。
{
fstream文件(" book.txt ",IOs::out);
for(int I = 0;我& lt= topi++)
如果(書[我]。gettag()==0)
file . write((char *)& amp;book[i],sizeof(book[I]);
file . close();
}
};
void BDatabase::bookdata()
{
char選擇;
char bname[40];
int bookid
書* b;
而(選擇!='0')
{
cout & lt& lt" \ n \ n \ n \ t \ t \庫維護" < & ltendl & lt& ltendl
cout & lt& lt" \t\t1是新添加的\n \t\t2被更改\n\t\t3被刪除\n\t\t4被搜索\n\t\t5被顯示\n\t\t6被完全刪除\n\t\t0被停用" & ltendl
CIN & gt;& gt選擇;
開關(選擇)
{
案例“1”:
cout & lt& lt"輸入圖書編號:"
CIN & gt;& gtbookid
cout & lt& lt"輸入書名:"
CIN & gt;& gtbname
addbook(bookid,bname);
打破;
案例“2”:
cout & lt& lt"輸入圖書編號:"
CIN & gt;& gtbookid
b =查詢(bookid);
if (b==NULL)
{
cout & lt& lt“這本書不存在”
打破;
}
cout & lt& lt"輸入新標題:"
CIN & gt;& gtbname
b-& gt;set name(bname);
打破;
案例“3”:
cout & lt& lt"讀入書號:"
CIN & gt;& gtbookid
b =查詢(bookid);
if (b==NULL)
{
cout & lt& lt“這本書不存在”
打破;
}
b-& gt;del book();
打破;
案例“4”:
cout & lt& lt"讀入書號:"
CIN & gt;& gtbookid
b =查詢(bookid);
if (b==NULL)
{
cout & lt& lt“這本書不存在”
打破;
}
b-& gt;disp();
打破;
案例“5”:
disp();
打破;
案例“6”:
clear();
打破;
默認值:cout & lt& lt"輸入錯誤,請重新輸入:";
}
}
}
//main()函數的實現和程序主界面的引導。
void main()
{
char選擇;
int bookid,readerid
RDatabase ReaderDB
reader * r;
b數據庫BookDB
書* b;
而(選擇!='0')
{
cout & lt& ltendl & lt& ltendl & lt& lt”\ t \ t \圖書館管理系統\ n \ n \ n”;
cout & lt& lt" \t\t\t1借閱書籍\ n \ n \ t \ T2歸還書籍\ n \ n \ t \ T3圖書館維護\n\n\t\t\t4讀者維護\ n \ n \ n \ " & ltendl
CIN & gt;& gt選擇;
開關(選擇)
{
案例“1”:
cout & lt& lt”借用讀者號:“;
CIN & gt;& gtreaderid
cout & lt& lt"書號:";
CIN & gt;& gtbookid
r = readerdb . query(readerid);//按號碼搜索
if (NULL==r)
{
cout & lt& lt“讀者不存在,書不能借”< & ltendl
打破;
}
b = bookdb . query(bookid);
if (b==NULL)
{
cout & lt& lt“這本書不存在,所以妳不能借它”< & ltendl
打破;
}
if(b-& gt;borrowbook()==0)
{
cout & lt& lt“這本書已經借出去了,所以妳不能再借了”< & ltendl
打破;
}
r-& gt;借書(b-& gt;getno());
打破;
案例“2”:
cout & lt& lt”返回圖書\ n讀者編號:“;
CIN & gt;& gtreaderid
cout & lt& lt"書號:";
CIN & gt;& gtbookid
r = readerdb . query(readerid);
if (r==NULL)
{
cout & lt& lt“讀者不存在,所以書不能歸還”< & ltendl
打破;
}
b = bookdb . query(bookid);
if (b==NULL)
{
cout & lt& lt“該書不存在,無法歸還”< & ltendl
打破;
}
b-& gt;ret book();
r-& gt;retbook(b-& gt;getno());
打破;
案例“3”:
bookdb . book data();
打破;
案例“4”:
reader db . reader data();
打破;
默認值:cout & lt& lt"輸入錯誤,請重新輸入:";
}
}
}
自己跑試試~