图书馆管理系统C++代码呕心沥血整理版.docx
《图书馆管理系统C++代码呕心沥血整理版.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统C++代码呕心沥血整理版.docx(19页珍藏版)》请在冰豆网上搜索。
![图书馆管理系统C++代码呕心沥血整理版.docx](https://file1.bdocx.com/fileroot1/2023-1/28/238b7fdd-0a0c-4e25-b562-f17107ef4e66/238b7fdd-0a0c-4e25-b562-f17107ef4e661.gif)
图书馆管理系统C++代码呕心沥血整理版
//tushuguanli。
cpp:
Definestheentrypointfortheconsoleapplication.
//
#include#include//文件头文件
#include〈iostream〉//是指标准库中输入输出流的头文件,cout就定义在这个头文件里
usingnamespacestd;//使用名字空间std
constintBMAX=50;//书最多个数
//图书管理模块
//图书类
classbook
{
public:
intno;//图书编号
charname[20];//图书名称
intb_flag;//1为在架,2为借出
intb_del;//1为存在,2为删除
public:
book(){}//构造函数
voidsetno(intn)
{
no=n;//图书编号取值
}
intgetno()
{
returnno;//返回图书编号值
}
voidsetname(charna[])
{
strcpy(name,na);//字符串复制
}
char*getname()
{
returnname;//返回图书名称
}
voidborbook()
{
b_flag=2;//借书标志
}
voiddelbook()
{
b_del=2;//删除标志
}
voidaddbook(intno,charna[])//增加图书功能
{
setno(no);
setname(na);
b_flag=1;
b_del=1;
}
}
;
//图书数据库类
classbdatabase
{
public:
bookbtarray[BMAX];//图书集合
inttop;
public:
bdatabase()
{
bookb;
top=—1;
fstreamfile("book。
txt”,ios:
:
in);//打开文件
while
(1)
{
file。
read((char*)&b,sizeof(b));
if(!
file)break;
top++;
btarray[top]=b;
}
file。
close();//关闭文件
}
~bdatabase()//析构函数,将btarray[]写到book.txt文件中
{
fstreamfile(”book。
txt",ios:
:
out);
for(inti=0;i〈=top;i++)
{
if(btarray[i].b_del==1)
file。
write((char*)&btarray[i],sizeof(btarray[i]));
}
file。
close();
}
voidaddbooks()//往图书数据库中加图书
{
bookbk;
intno;
charbname[20];
cout〈<”请输入书号:
";
cin〉>no;
cout〈〈endl<<"请输入书名:
";
cin〉〉bname;
cout〈bk。
b_flag=1;
bk.addbook(no,bname);
top++;
btarray[top]=bk;
return;
}
intfindbooks(intsuffix)//查找图书,这个函数用于借书这书操作,suffix是数组下标
{
intno;
cout〈〈”请输入书号:
”;
cin〉〉no;
for(inti=0;i〈=top;i++)
{
if(btarray[i]。
no==no&&btarray[i]。
b_del==1)
{
returni;
}
}
return-1;
}
intfindbooks()//查找图书,这个函数用于图书维护
{
intno;
charvalue[6];
cout<<”请输入书号:
";
cin>>no;
for(inti=0;i〈=top;i++)
{
if(btarray[i].no==no&&btarray[i]。
b_del==1)
{
if(btarray[i].b_flag==1)strcpy(value,"在架”);
if(btarray[i]。
b_flag==2)strcpy(value,"借出”);
cout<〈”书号:
"〈〈btarray[i].no<〈”书的名称:
”〈〈btarray[i]。
name<〈"图书状态:
"〈〈value〈returni;
}
}
return—1;
}
voideditbooks()//编辑图书
{
intcur;
cur=findbooks();
if(cur==—1)
{cout<<”没有这本书"〈〈endl;
return;
}
cout〈〈"书号:
”〈〈btarray[cur]。
no〈〈”书的名称:
”〈〈btarray[cur].name〈〈endl;
cout<〈"请修改数据:
”<〈endl;
cout〈〈endl<<”书的名称:
”;
cin>〉btarray[cur].name;
return;
}
voiddelbooks()//删除图书
{
intcur;
cur=findbooks();
if(cur==-1)
{
return;
}
if(btarray[cur].b_flag==2)//删除时判断图书是否借出
{
cout〈〈"该图书已经借出,请在归还后再删除。
"〈return;
}
btarray[cur]。
b_del=2;
return;
}
voidlistbooks()//显示全部图书
{
charvalue[6];
for(inti=0;i<=top;i++)
{
if(btarray[i]。
b_del==1)
{
if(btarray[i].b_flag==1)strcpy(value,"在架");
if(btarray[i]。
b_flag==2)strcpy(value,”借出”);
cout〈〈"书号:
"〈no<<"书的名称:
"〈〈btarray[i].name<〈”图书状态:
"<}
}
return;
}
}
;
//读者管理模块
//读者类
classreader
{
public:
intno;
charname[20];
intr_del;//1存在,2删除
intr_bor;//1借过书,2没有借书
bookbrbook;
public:
voidaddreader(intid,charna[])//增加读者
{
no=id;
strcpy(name,na);
r_del=1;
}
voidsetbrbook(bookbt)//设置借书标记
{
brbook=bt;
}
bookgetbrbook()
{
returnbrbook;//返回借书信息
}
};
//读者数据库类
classrdatabase
{
public:
readerrdarray[BMAX];
inttop;
public:
rdatabase()
{
readerrd;
top=-1;
fstreamfile("reader。
txt”,ios:
:
in);//打开文件
while
(1)
{
file。
read((char*)&rd,sizeof(rd));
if(!
file)break;
top++;
rdarray[top]=rd;
}
file。
close();//关闭文件
}
~rdatabase()//析构函数
{
fstreamfile(”reader。
txt”,ios:
:
out);
for(inti=0;i〈=top;i++)
{
if(rdarray[i]。
r_del==1)
file.write((char*)&rdarray[i],sizeof(rdarray[i]));
}
file。
close();
}
voidaddreaders()//添加读者
{
readerrd;
intno;
charrname[20];
cout〈〈"请输入学号:
";
cin〉〉no;
cout〈";
cin>〉rname;
cout〈〈endl;
rd。
addreader(no,rname);
rd。
r_bor=2;
top++;
rdarray[top]=rd;
return;
}
intfindreaders(intsuffix)//查找读者,这个函数用于借书还书操作.参数suffix是数组下标
{
intno;
cout〈<"请输入学号:
”;
cin>〉no;
for(inti=0;i〈=top;i++)
{
if(rdarray[i].no==no&&rdarray[i]。
r_del==1)
{
returni;
}
}
return—1;
}
intfindreaders()//查找读者,这个函数用于读者维护操作
{
intno;
charvalue[3];
cout<<"请输入学号:
";
cin〉〉no;
for(inti=0;i〈=top;i++)
{
if(rdarray[i]。
no==no&&rdarray[i].r_del==1)
{
if(rdarray[i].r_bor==1)strcpy(value,”借”);
if(rdarray[i].r_bor==2)strcpy(value,"无”);
cout〈〈”学号:
"〈〈rdarray[i]。
no〈<"姓名:
"〈name〈〈”是否借书:
"〈returni;
}
}
return—1;
}
voideditreaders()//编辑读者信息
{
intcur;
cur=findreaders();
if(cur==—1)
{cout〈〈”没有该学生”<〈endl;
return;
}
cout〈〈”请修改数据:
”〈〈endl;
cout<〈endl<〈”姓名:
”;
cin〉>rdarray[cur]。
name;
return;
}
voiddelreaders()//删除读者,读者如果借书要还书后才能删除
{
intcur;
cur=findreaders();
if(cur==-1)
{
return;
}
if(rdarray[cur].r_bor==1)
{
cout〈〈"该用户借了图书,请还书后再删除”<return;
}
rdarray[cur]。
r_del=2;
return;
}
voidlistreaders()//显示所有读者
{
charvalue[3];
for(inti=0;i<=top;i++)
{
if(rdarray[i]。
r_del==1)
{
if(rdarray[i].r_bor==1)strcpy(value,"借”);
if(rdarray[i]。
r_bor==2)strcpy(value,”无");
cout〈<"学号:
"〈no〈〈”姓名:
”<〈rdarray[i]。
name〈<”是否借书:
"<}
}
return;
}
}
;
voidbookjiemain()//图书维护子菜单
{
cout〈〈”|-————-———-———-——--——-|"〈〈endl;
cout〈<”|图书维护|"〈cout〈<"|
(1)增加|”<cout〈〈”|
(2)更改|”<〈endl;
cout〈<”|(3)删除|”〈〈endl;
cout<〈”|(4)查找|”<cout<〈”|(5)显示|"<〈endl;
cout〈<”|(6)返回上一层|”〈〈endl;
cout〈〈”|—————-----——-—-—-—-——|"〈〈endl;
}
voidreaderjiemian()//读者维护子菜单
{
cout<〈”|—-—-—————-———-——-——-—|”〈〈endl;
cout<〈”|读者维护|”〈〈endl;
cout〈〈"|
(1)增加|”〈〈endl;
cout<〈”|
(2)更改|"〈〈endl;
cout〈<”|(3)删除|”〈〈endl;
cout〈<”|(4)查找|”<cout<〈”|(5)显示|”〈cout〈〈"|(6)返回上一层|”<〈endl;
cout〈〈”|—-—————-——————--—-———|”<}
voidmainjiemian()//主界面
{
cout〈<”***********************************************”〈〈endl;
cout<<”*图书管理系统*"〈〈endl;
cout〈<"**"〈〈endl;
cout<〈”*
(1)借书*”<〈endl;
cout〈<”**”〈〈endl;
cout〈<"*
(2)还书*"<cout〈〈"**"<〈endl;
cout〈〈"*(3)图书管理*”〈cout〈<”**”<〈endl;
cout〈<”*(4)用户管理*”〈〈endl;
cout<〈"**"<cout〈〈”*(0)退出*”〈〈endl;
cout〈〈”***********************************************"〈〈endl;
}
voidborrowtoreturn(charbr)
//借书还书函数.参数br用来判断是“借书"还是“还书”.1为“借书”,2为“还书”
{
intrdid=0;
intbkid=0;
intrsuffix,bsuffix;
bdatabaset_bd;
rdatabaset_rd;
if(br==’1')//借书
{
rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if(rsuffix==—1||bsuffix==—1)
return;
if(t_bd.btarray[bsuffix]。
b_flag==2)
{
cout<〈”图书已经借出,请选择其它图书”<〈endl;
return;
}
if(t_rd。
rdarray[rsuffix]。
r_bor==1)
{
cout〈<"你已经借过图书,请先归还再借其它图书"<〈endl;
return;
}
t_bd.btarray[bsuffix].b_flag=2;
t_rd。
rdarray[rsuffix].r_bor=1;
t_rd.rdarray[rsuffix]。
brbook=t_bd.btarray[bsuffix];
return;
}
if(br==’2’)
{
rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if(rsuffix==-1||bsuffix==-1)
return;
if(t_rd.rdarray[rsuffix]。
brbook.no==t_bd。
btarray[bsuffix]。
no)
{
t_bd。
btarray[bsuffix]。
b_flag=1;
t_rd。
rdarray[rsuffix]。
r_bor=2;
t_rd。
rdarray[rsuffix]。
brbook=t_bd。
btarray[bsuffix];
}
else
{
cout〈<”请重新输入,读者借的图书号不正确”〈return;
}
return;
}
}
voidbooksmange()
{
charin;
bdatabasebd;
do{
bookjiemain();
cin〉>in;
switch(in)
{
case’1’:
bd.addbooks();
break;
case’2’:
bd.editbooks();
break;
case'3’:
bd。
delbooks();
break;
case’4’:
bd.findbooks();
break;
case’5’:
bd.listbooks();
break;
case’6’:
break;
default:
cout〈<”输入错误,请从新输入。
”〈}
}while(in!
=’6');
return;
}
voidreadersmange()
{
charin;
rdatabasebd;
do{
readerjiemian();
cin〉>in;
switch(in)
{
case’1':
bd。
addreaders();
break;
case’2’:
bd。
editreaders();
break;
case’3’:
bd.delreaders();
break;
case'4':
bd.findreaders();
break;
case’5':
bd。
listreaders();
break;
case'6’:
break;
default:
cout<〈"输入错误,请从新输入。
"〈}
}while(in!
='6’);
return;
}
intmain(intargc,char*argv[])
{charin;
do{
mainjiemian();
cin>〉in;
switch(in)
{
case'1’:
borrowtoreturn(in);
break;
case'2’:
borrowtoreturn(in);
break;
case’3’:
booksmange();
break;
case’4’:
readersmange();
break;
case'0':
break;
default:
cout〈<”输入错误,请从新输入。
”〈〈endl;
}
}while(in!
=’0’);
return0;
}