# include & ltiostream & gt
# include & ltiomanip & gt
# include & lt字符串& gt
//輸入/輸出文件流類
# include & ltfstream & gt
使用命名空間std
//最多的讀者
const int Maxr = 100;
//最多的書
const int Maxb = 100;
//每個讀者最多可以借五本書。
const int max bor = 5;
//reader類,描述讀者的信息。
類閱讀器
{
私人:
//刪除標記1:已刪除0:未刪除。
int標簽;
//閱讀器編號
int號;
//讀者姓名
字符名稱[10];
//借書
int bor book[max bor];
公共:
讀者()
{
;
}
//獲取名稱
char *getname()
{
返回名稱;
}
//獲取刪除標誌
int gettag()
{
返回標簽;
}
//獲取閱讀器編號
int getno()
{
返回否;
}
//設置名稱
void集合名稱(char na[])
{
strcpy(姓名,不適用);
}
//設置刪除標誌1:已刪除0:未刪除。
void delbook()
{
tag = 1;
}
//增加讀者
void addreader(int n,char *na)
{
tag = 0;
no = n;
strcpy(姓名,不適用);
for(int I = 0;我& ltMaxbori++)
bor book[I]= 0;
}
//圖書借閱操作
void借書(int bookid)
{
for(int I = 0;我& ltMaxbori++)
{
if (borbook[i]==0)
{
bor book[I]= bookid;
返回;
}
}
}
//圖書退貨操作
int返回書(int bookid)
{
for(int I = 0;我& ltMaxbori++)
{
if(borbook[i]==bookid)
{
bor book[I]= 0;
返回1;
}
}
返回0;
}
//讀取閱讀器信息
無效顯示()
{
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];
公共:
//構造函數,將reader.txt讀入read[]
數據庫()
{
讀者s;
top =-1;
//打開壹個輸入文件
fstream文件(" reader.txt ",IOs::in);
while (1)
{
file . read((char *)& amp;s,sizeof(s));
如果(!文件)中斷;
top++;
read[top]= s;
}
//關閉reader.txt
file . close();
}
//刪除所有閱讀器信息
空清除()
{
top =-1;
}
//添加閱讀器前先尋找存在。
int addreader(int n,char *na)
{
reader * p = query(n);
if (p==NULL)
{
top++;
閱讀【頂部】。addreader(n,na);
返回1;
}
返回0;
}
//按號碼搜索
Reader *查詢(int readerid)
{
for(int I = 0;我& lt= topi++)
如果(讀[我]。getno()= = readerid & amp;& amp
讀[我]。gettag()==0)
{
返回& amp改為[I];
}
返回NULL
}
//輸出所有閱讀器信息
無效顯示()
{
for(int I = 0;我& lt= topi++)
讀[我]。disp();
}
//讀者庫維護
void reader data();
//析構函數,將read[]寫入reader.txt文件。
~ r數據庫()
{
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"輸入錯誤,請重新輸入:";打破;
}
}
}
//圖書類別,實現了圖書的描述、書號、書名、借出、歸還等。
課堂用書
{
私人:
//刪除標記1:已刪除0:未刪除。
int標簽;
//圖書編號
int號;
//書名
char name[20];
//要不要借1:借2:借?
int onshelf
公共:
Book(){}
//獲取名稱
char * getname(){ return name;}
//獲取書號
int getno(){ return no;}
//獲取刪除標誌
int gettag(){ return tag;}
//設置書的標題
void集合名稱(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;
}
//輸出書籍
無效顯示()
{
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];
公共:
//構造函數,將book.txt讀入book[]
b數據庫()
{
書b;
top =-1;
fstream文件(" book.txt ",IOs::in);
while (1)
{
file . read((char *)& amp;b,sizeof(b));
如果(!文件)中斷;
top++;
book[top]= b;
}
file . close();
}
//全部刪除
空清除()
{
top =-1;
}
//添加書籍
int addbook(int n,char *na)
{
book * p = query(n);
if (NULL==p)
{
top++;
書[頂]。addbook(n,na);
返回1;
}
返回0;
}
//查找書籍
Book *查詢(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();
}
//析構函數,將book[]寫入book.txt文件。
~ b數據庫()
{
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()函數的實現和程序主界面的引導。
int 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"輸入錯誤,請重新輸入:";
}
}
}
其中主要函數是int類型,是在devcpp下編程造成的。請將其他程序的錯誤改為void類型。