图书馆管理系统C代码.docx
《图书馆管理系统C代码.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统C代码.docx(20页珍藏版)》请在冰豆网上搜索。
图书馆管理系统C代码
//tushuguanli.cpp:
Definestheentrypointfortheconsoleapplication.
#include
#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=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<";
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<<"请修改数据:
"<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;
}
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<<"书号:
"<"<"<}
}
return;
}
}
;
classbook
{
public:
intno;//图书编号
charname[20];//图书名称
intb_flag;
intb_del;
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;
}
}
;
//读者类
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<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;
}
voideditreaders()//编辑读者信息
{
intcur;
cur=findreaders();
if(cur==-1)
{cout<<"没有该学生"<return;
}
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()//图书维护子菜单
{
cout<<"|---------------------|"<cout<<"|图书维护|"<cout<<"|
(1)增加|"<cout<<"|
(2)更改|"<cout<<"|(3)删除|"<cout<<"|(4)查找|"<cout<<"|(5)显示|"<cout<<"|(6)返回上一层|"<cout<<"|---------------------|"<}
voidreaderjiemian()//读者维护子菜单
{
cout<<"|---------------------|"<cout<<"|读者维护|"<cout<<"|
(1)增加|"<cout<<"|
(2)更改|"<cout<<"|(3)删除|"<cout<<"|(4)查找|"<cout<<"|(5)显示|"<cout<<"|(6)返回上一层|"<cout<<"|---------------------|"<}
voidmainjiemian()//主界面
{
cout<<"***********************************************"<cout<<"*图书管理系统*"<cout<<"**"<cout<<"*
(1)借书*"<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;
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<<"输入错误,请从新输入。
"<}
}while(in!
='0');
return0;
}