图书馆管理系统C++代码.docx
《图书馆管理系统C++代码.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统C++代码.docx(18页珍藏版)》请在冰豆网上搜索。
图书馆管理系统C++代码
//tushuguanli.cpp:
Definestheentrypointfortheconsoleapplication.
#inelude
#include
#include/
usingnamespacestd;
constintBMAX=50;
//图书数据库类
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=O;i<=top;i++)
{
if(btarray[i].b_del==1)
file.write((char*)&btarray[i],sizeof(btarray[i]));
}
file.close();
}
图书
bookbk;
intno;
charbname[20];
cout<<"请输入书号:
";
cin»no;
cout<";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<<"书号:
"<书的名称
"<"<returni;
}
return-1;
voideditbooks()//
{
intcur;
cur=findbooks();
if(cur==-1)
{cout<<"没有这本书"<return;
}
cout<<"书号:
"<cout<<"请修改数据:
"<";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;
图书
{
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,"
"<}
}return;
}
}
5
classbook
{public:
intno;charname[20];
intb_flag;
intb_del;
public:
book(){}voidsetno(intn)
{
no=n;
intgetno()
{
returnno;//
}
voidsetname(charna[])
{strcpy(name,na);//
cout<<"书号
图书状态
"<:
"<在架");
借出");
书的名称
//
//
图书编号
图书名称
返回图书编号值
字符串复制
}
char*getname()
{
returnname;//返回图书名称
}
voidborbook()
{b_flag=2;II借书标志
}
voiddelbook()
{
b_del=2;II删除标志
}
voidaddbook(intno,charna[])II增加图书功能
{
setno(no);
setname(na);b_flag=1;b_del=1;
}
}
5
II读者类
classreader
{
public:
intno;
charname[20];
intr_del;II1存在,2删除
intr_bor;II1借过书,2没有借书
bookbrbook;
public:
voidaddreader(intid,charna[])II增加读者
{
no=id;
strcpy(name,na);r_del=1;
}
voidsetbrbook(bookbt)II设置借书标记
{
brbook=bt;
}
bookgetbrbook()
{
returnbrbook;II返回借书信息
}
};
II读者数据库类
class「database
{
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=O;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<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<<"学号:
"<"<returni;
}
}
return-1;
}
者信息
intcur;
cur=findreaders();
if(cur==-1)
{cout<<"没有该学生"<}
cout<<"请修改数据:
"<cout<";
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<<"学号:
"<"<}return;
}
voidbookjiemain()
护子菜单
{
coutvv"|
|"vvendl;
coutvv"|
图书维护
「vvendl;
coutvv"|
(1)
增
加
|"vvendl;
coutvv"|
⑵
更
改
|"vvendl;
coutvv"|
⑶
删
除
|"vvendl;
coutvv"|
⑷
查
找
|"vvendl;
coutvv"|
显
示
|"vvendl;
coutvv"|
⑹
返回上一层
|"vven
coutvv"卜
一-|"vvendl;
voidreaderjiemian()//
者维护子菜单
{
cout<<"||"<cout<<"|读者维护「<cout<<"|(6)返回上一层「<cout<<"||"<}
mainjiemian()
void
II主界面
coutcout<<"*
图书管理系统*"<coutvv"*
coutvv"*
(1)
*"vvendl;
借书
*"vvendl;
cout<<"*
*"<cout<<"*
(2)
还书
*"<cout<<"*
*"<cout<<"*
(3)
图书管理
*"<cout<<"*
*"<cout<<"*
(4)
用户管理
*"<cout<<"*
*"<cout<<"*
(0)
退出
*"<cout<<"
************************************************
"<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<<"图书已经借出,请选择其它图书"<return;
}
if(t_rd.rdarray[rsuffix].r_bor==1)
{
cout<<"你已经借过图书,请先归还再借其它图书"<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;
case2:
bd.editbooks();
break;
case3:
bd.delbooks();
break;
case4:
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;
case3:
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;
case2:
borrowtoreturn(in);break;
case3:
booksmange();
break;
case4:
readersmange();break;
case'O':
"<break;
default:
cout<<"输入错误,请从新输入。
}
}while(in!
='0');
return0;
}