📄 525.cpp
字号:
/* 课程题目:图书管理系统
*问题描述:设计已图书管理系统,该图书管理系统分为借书、还书、图书维护和读者
维护等四个部分,系统总框图如图所示:
*算法分析:
1、设计一个读者类Reader,包括一个读者的基本管理功能,具有以下私有数据:
int tag; //删除标记 1:已删 0:未删
int no; //读者编号
char name[10]; //读者姓名
int borbook[Marbor]; //所借图书
2、设计一个读者库类RDatabase,具有以下私有数据:
int top; //读者记录指针
Reader read[Maxr]; //读者记录
在其构造函数中,将reader.txt文件的所有记录读到read[]中。处理完毕,在析构
函数中将read[]中的所有未删记录写入到reader.txt文件中,中间的处理都是对
read[]进行的。
3、设计一个图书类Book,包括一本图书的基本管理功能,私有数据包括:
int tag; //删除标记 1:已删 0:未删
int no; //图书编号
char name[20]; //书名
int onshelf; //是否在架 1:在架 0:已借
4、设计一个图书库类Bdatabase,私有数据包括:
int top; //图书记录指针
Book book[Maxb]; //图书记录
在其构造函数中,将book.txt文件的所有记录读到book[]中。处理完毕,在析构
函数中讲book[]中的所有未删记录写入到book.txt文件中,中间的处理都是对book[]
进行的。*/
//各个模板的设计分析
//1、调用系统库函数
#include"iostream.h"
#include"iomanip.h"
#include"string.h"
#include"fstream.h"
//2、定义常数据
const int Maxr=100; //最多的读者数
const int Marb=100; //最多的图书数
const int Maxbor=5; //每位读者最多借5本书
//3、定义读者类
class Reader
{
private:
int tag; //删除标记 1:已删 0:末删
int no; //读者编号
char name[10]; //读者姓名
int borbook[Maxbor]; //所借图书
public:
Reader(){}
char *getname() //获取姓名
{return name;}
int gettag() //获取删除标记
{return tag;}
int getno() //获取读者编号
{return no;}
void setname(char na[]) //设置姓名
{
strcpy(name,na);
}
void delbook() //设置删除标记
{tag=1;}
void addreader(int n,char *na) //增加读者
{
tag=0;
no=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;
cout<<"\t 借书成功"<<endl;
return ;
}
}
}
int retbook(int bookid) //还书操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
cout<<"\t 还书成功"<<endl;
return 1;
}
cout<<"还书失败"<<endl;
}
return 0;
}
void disp() //输出读者信息
{
cout<<setw(5)<<no<<setw(10)<<name<<" 借书编号:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout<<borbook[i]<<"|";
cout<<"]"<<endl;
}
};
//定义读者库类
class RDatabase
{
private:
int top; //读者记录指针
Reader read[Maxr]; //读者记录
public:
RDatabase()
{
Reader s; //建立读者类的对象s
top=-1;
fstream file("reader.txt",ios::in); //构造函数,将reader.txt读到read[]中
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].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",ios::out);
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() //读者库维护
{
int choice=1;
char rname[20];
int readerid;
Reader *r;
while(choice!=0)
{
cout<<"读者维护 1:新增 2:更改 3:删除 4:查找 5:显示 6:全删 0:退出=>";
cin>>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<<"该读者不存在"<<endl;
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;
break;
}
r->disp();
break;
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
//定义图书类
class Book //图书类
{
private:
int tag; //删除标记 1:已删 0:未删
int no; //图书编号
char name[20]; //书名
int onshelf; //是否在架 1:在架 0:已借
public:
Book(){};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -