📄 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 + -