?? library.cpp
字號:
# include <iostream.h>
# include <iomanip.h>
# include <string.h>
# include <fstream.h>
const int Maxr=100; // 最大讀者數
const int Maxb=100; // 最大圖書數
const int Maxbor=5; // 最大借閱量
class Reader // 讀者類
{
private:
int note; // 刪除標記(1:已刪 0:未刪)
int number; // 讀者編號
char name[10]; // 讀者姓名
int borbook[Maxbor]; // 所借圖書
public:
Reader(){}
char *getname() //獲得姓名
{
return name;
}
int getnote() //獲得刪除標記
{
return note;
}
int getnumber() //獲得讀者編號
{
return number;
}
void setname(char na[]) //設置姓名
{
strcpy(name,na);
}
void delreader() //設置刪除讀者標記
{
note=1;
}
void addreader(int n,char *na) //添加讀者
{
note=0;
number=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 list() //輸出讀者信
{
cout<<setw(5)<<number<<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 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].getnumber()==readerid && read[i].getnote()==0)
return &read[i];
return NULL;
}
void list() //輸出所有讀者信息
{
for(int i=0;i<=top;i++)
read[i].list();
}
void readerdata(); //讀者庫維護
~RDatabase() //析構函數:寫文件
{
fstream file("Reader.txt",ios::out);
for(int i=0;i<=top;i++)
if(read[i].getnote()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata() //讀者庫維護的實現
{
int choice=1;
char readername[20];
int readerid;
Reader *r;
while(choice!=0)
{
cout<<"||===========================================================================||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 讀者維護操作 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"||===========================================================================||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 1、新增讀者 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 2、更改讀者 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 3、刪除讀者 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 4、查找讀者 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 5、瀏覽讀者 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 6、全刪讀者 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 0、返回主系統 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"||===========================================================================||"<<endl;
cout<<" ** 請輸入您的選擇:(0 - 6):";
cin>>choice;
switch(choice)
{
case 1:
cout<<"== 請您輸入讀者編號:";
cin>>readerid;
cout<<"== 請您輸入讀者姓名:";
cin>>readername;
addreader(readerid,readername);
break;
case 2:
cout<<"== 請您輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"*** 該讀者不存在!"<<endl;
break;
}
cout<<"== 請輸入新讀者姓名:";
cin>>readername;
r->setname(readername);
break;
case 3:
cout<<"== 請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"** 該讀者不存在!"<<endl;
break;
}
r->delreader();
break;
case 4:
cout<<"== 請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"** 該讀者不存在!"<<endl;
break;
}
r->list();
break;
case 5:
list();
break;
case 6:
clear();
break;
}
}
}
class Book //圖書類
{
int note;
int number;
char name[20]; //書名
int onshelf; //在架標志
public:
Book(){}
char *getname()
{
return name;
}
int getnumber()
{
return number;
}
int getnote()
{
return note;
}
void setname(char na[]) //設置書名
{
strcpy(name,na);
}
void delbook() //刪除圖書
{
note=1;
}
void addbook(int n,char *na) //添加圖書
{
note=0;
number=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook() //借書操作
{
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook() //還書操作
{
onshelf=1;
}
void list() //輸出圖書
{
cout<<setw(6)<<number<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl;
}
};
class BDatabase //圖書庫類
{
int top; //圖書記錄指針
Book book[Maxb]; //圖書記錄
public:
BDatabase() //構造函數:讀入文件
{
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;
}
return 0;
}
Book *query(int bookid) //查找圖書
{
for(int i=0;i<=top;i++)
if(book[i].getnumber()==bookid && book[i].getnote()==0)
return &book[i];
return NULL;
}
void bookdata(); //圖書庫維護
void list() //圖書輸出
{
for(int i=0;i<=top;i++)
if(book[i].getnote()==0)
book[i].list();
}
~BDatabase() //析構函數
{
fstream file("Book.txt",ios::out);
for(int i=0;i<=top;i++)
if(book[i].getnote()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata() //書庫維護的實現
{
int choice=1;
char bookname[40];
int bookid;
Book *b;
while(choice!=0)
{
cout<<"||===========================================================================||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 圖書維護操作 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"||===========================================================================||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 1、新增圖書 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 2、更改圖書 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 3、刪除圖書 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 4、查找圖書 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 5、瀏覽圖書 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 6、全刪圖書 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 0、返回主系統 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"||===========================================================================||"<<endl;
cout<<" [-]請輸入您的選擇:(0 - 6):";
cin>>choice;
switch(choice)
{
case 1:
cout<<"輸入圖書編號:";
cin>>bookid;
cout<<"輸入圖書書名:";
cin>>bookname;
addbook(bookid,bookname);
break;
case 2:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"** 系統警告:該圖書不存在!"<<endl;
break;
}
cout<<"輸入新的書名:";
cin>>bookname;
b->setname(bookname);
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->list();
break;
case 5:
list();
break;
case 6:
clear();
break;
}
}
}
void main() //主函數
{
int choice=1,bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!=0)
{
// 七十五個“=”
cout<<"||===========================================================================||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 圖書管理系統 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"||===========================================================================||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| [1] 讀者借書操作 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| [2] 讀者還書操作 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| [3] 圖書維護操作 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| [4] 讀者維護操作 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| [0] 退出系統 ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| ||"<<endl;
cout<<"||===========================================================================||"<<endl;
cout<<"|| ||"<<endl;
cout<<"|| 2005年9月25日 ||"<<endl;
cout<<"||===========================================================================||"<<endl;
cout<<" [-]請輸入您的選擇(0 - 4):";
cin>>choice;
switch(choice)
{
case 1:
cout<<"** 輸入借書讀者編號:";
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;
}
if(b->borrowbook==0)
{
cout<<"** 系統警告:該書已經借出,不借書!"<<endl;
break;
}
r->borrowbook(b->getnumber());
break;
case 2:
cout<<"** 請你輸入還書讀者編號:";
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->getnumber());
break;
case 3:
BookDB.bookdata();
break;
case 4:
ReaderDB.readerdata();
break;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -