}//读者类库,实现建立读者的个人资料
class RDatabase
{
private: int top; //读者记录指针 Reader read[Maxr];//读者记录
public: RDatabase() //构造函数,将reader.txt读到read[]中 {
}
void clear()//删除所有读者信息 { top=-1; }
int addreader(int n,char *na)//添加读者时先查找是否存在 { Reader *p=query(n);
if (p==NULL) {
top++;
read[top].addreader(n,na); Reader s;
top=-1;
fstream file(\"reader.txt\打开一个输入文件 while (1) {
file.read((char *)&s,sizeof(s)); if (!file)break;
top++; read[top]=s; }
file.close(); //关闭 reader.txt
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\ 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]; int readerid; Reader *r;
while (choice!='0') { cout <<\"\\n\\n\\\读 者 维 护\\n\\n\\n\\ 1 新 增\\n\\n\\ 2 更改\\n\\n\\ 3 删 除\\n\\n\\ 4
查 找\\n\\n\\ 5 显 示\\n\\n\\ 6 全 删\\n\\n\\ 0 退出\"<> 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 << \" 该读者不存在 \"<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; } r->disp(); break; disp();
break;
case '5': break; case '6': clear();
break;
default:cout<<\"输入错误,请从新输入:\";break;
} } }
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等 class Book {
private: int tag;//删除标记 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);
int no;//图书编号 char name[20];//书名
int onshelf;//是否再架 1:再架 2:已借
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? \"在架\":\"已借\") <//图书库类,实现对图书的维护,查找,删除等 class BDatabase{
private: int top; //图录指针 Book book[Maxb]; //图录
public: BDatabase()//构造函数,将book.txt读到book[]中
{ Book b;
top=-1;
fstream file(\"book.txt\ 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 (NULL==p) {
top++;
book[top].addbook(n,na);
return 1; }
return 0; }
Book *query(int bookid)//查找图书 { }
void bookdata();//图书库维护 void disp()
{ for (int i=0;i<=top;i++) }
~BDatabase()//析构函数,将book[]写到book.txt文件中 {
fstream file(\"book.txt\
for (int i=0;i<=top;i++) if (book[i].gettag()==0) file.write((char *)&book[i],sizeof(book[i]));
if (book[i].gettag()==0) book[i].disp();
for (int i=0;i<=top;i++) if (book[i].getno()==bookid &&book[i].gettag()==0) { return &book[i];
}
return NULL;
file.close();
} };
void BDatabase::bookdata() {
char choice; char bname[40]; int bookid; Book *b; while (choice!='0')
{ cout <<\"\\n\\n\\n\\\图 书 维 护 \"<cout<<\"\\1 新 增\\n \\2 更 改\\n\\3 删 除\\n\\4 查 找\\n\\5 显示\\n\\6 全 删\\n\\0 退 出\"<cin >> choice; switch (choice) {case '1': cout << \"输入图书编号:\"<cin >> bookid;cout << \"输入图书书名:\"<> bname;addbook(bookid,bname);
break; case '2': cout << \"输入图书编号:\"<cin >> bookid; b=query(bookid);if (b==NULL) { cout << \" 该图书不存在 \"<cout << \"输入新的书名:\"<> bname; b->setname(bname); break;case '3': cout <<\" 读入图书编号:\"<cin >> bookid; b=query(bookid); if (b==NULL){ cout <<\" 该图书不存在\" << endl; break; }
b->delbook(); break;
case '4': cout << \" 读入图书编号:\"<> bookid;b=query(bookid);
if (b==NULL) { cout <<\" 该图书不存在\"<< endl; break; }
b->disp();
break; case '5': disp();
break; case '6':
clear(); break;
default:cout<<\"输入错误,请从新输入:\"; }
} }
//main() 函数的实现,程序的主界面的引导
void main() {
while(choice!='0') { cout <int bookid,readerid; RDatabase ReaderDB; Reader *r;BDatabase BookDB; Book *b;
cout <<\"\\\1 借 书\\n\\n\\\2 还 书 \\n\\n\\\3 图 书 维护\\n\\n\\\4 读 者 维 护\\n\\n\\\0 离 开\"<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 <<\" 不存在该图书,不能还书\" <b->retbook();r->retbook(b->getno()); break;
case '3': BookDB.bookdata();
break;
case '4': ReaderDB.readerdata();
break;
default:cout<<\"输入错误,请从新输入:\"; }
运行图片如下:
进入图书馆理系统
借书有误
新增图书并显示图书结果
更改并显示图书结果
再新增图书并显示结果
删除图书编号01并显示结果