C++图书管理系统代码.docx
《C++图书管理系统代码.docx》由会员分享,可在线阅读,更多相关《C++图书管理系统代码.docx(29页珍藏版)》请在冰豆网上搜索。
C++图书管理系统代码
C++图书管理系统代码
D
return1;
}
}
return0;
}
voiddisp()//读出读者信息
{
cout<[";
for(inti=0;i if(zfbook[i]!
=0)
cout< cout<<"]"<
}
};
//读者类库,实现建立读者的个人资料
classRDatabase
{
private:
inttop; //读者记录指针
Readerread[Maxr];//读者记录
public:
RDatabase() //构造函数,将reader.txt读到read[]中
{
Readers;
top=-1;
fstreamfile("reader.txt",ios:
:
in);//打开一个输入文件
while
(1)
{
file.read((char*)&s,sizeof(s));
if(!
file)break;
top++;
read[top]=s;
}
file.close(); //关闭reader.txt
}
voidclear()//删除所有读者信息
{
top=-1;
}
intaddreader(intn,char*na)//添加读者时先查找是否存在
{
Reader*p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
return1;
}
return0;
}
Reader*query(intreaderid)//按编号查找
{
for(inti=0;i<=top;i++)
if(read[i].getno()==readerid&&
read[i].gettag()==0)
{
return&read[i];
}
returnNULL;
}
voiddisp() //输出所有读者信息
{
for(inti=0;i<=top;i++)
read[i].disp();
}
voidreaderdata();//读者库维护
~RDatabase() //析构函数,将read[]写到reader.txt文件中
{
fstreamfile("reader.txt",ios:
:
out);
for(inti=0;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
};
voidRDatabase:
:
readerdata()
{
charchoice;
charrname[20];
intreaderid;
Reader*r;
while(choice!
='0')
{
cout<<"\n\n\t\t\t读 者 维 护\n\n\n\t\t1 新 增\n\n\t\t2 更 改\n\n\t\t3 删 除\n\n\t\t4 查 找\n\n\t\t5 显 示\n\n\t\t6 全 删\n\n\t\t0 退 出"< 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<<"该读者不存在 "< break;
}
cout<<"输入新的姓名:
";
cin>>rname;
r->setname(rname);
break;
case'3':
cout<<"输入读者编号:
";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"< break;
}
r->delbook();
break;
case'4':
cout<<"读入读者编号:
";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"< break;
}
r->disp();
break;
case'5':
disp();
break;
case'6':
clear();
break;
default:
cout<<"输入错误,请从新输入:
";break;
}
}
}
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
classBook
{
private:
inttag;//删除标记1:
已删0:
未删
intno;//图书编号
charname[20];//书名
intonshelf;//是否再架1:
再架2:
已借
public:
Book(){}
char*getname(){returnname;}//获取姓名
intgetno(){returnno;}//获取图书编号
intgettag(){returntag;}//获取删除标记
voidsetname(charna[])//设置书名
{
strcpy(name,na);
}
voiddelbook(){tag=1;}//删除图书
voidaddbook(intn,char*na)//增加图书
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
intzfrowbook()//借书操作
{
if(onshelf==1)
{
onshelf=0;
return1;
}
return0;
}
voidretbook()//还书操作
{
onshelf=1;
}
voiddisp()//输出图书
{
cout< <<(onshelf==1?
"在架":
"已借")< }
};
//图书库类,实现对图书的维护,查找,删除等
classBDatabase
{
private:
inttop; //图书记录指针
Bookbook[Maxb];//图书记录
public:
BDatabase()//构造函数,将book.txt读到book[]中
{
Bookb;
top=-1;
fstreamfile("book.txt",ios:
:
in);
while
(1)
{
file.read((char*)&b,sizeof(b));
if(!
file)break;
top++;
book[top]=b;
}
file.close();
}
voidclear()//全删
{
top=-1;
}
intaddbook(intn,char*na)//增加图书
{
Book*p=query(n);
if(NULL==p)
{
top++;
book[top].addbook(n,na);
return1;
}
return0;
}
Book*query(intbookid)//查找图书
{
for(inti=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
{
return&book[i];
}
returnNULL;
}
voidbookdata();//图书库维护
voiddisp()
{
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析构函数,将book[]写到book.txt文件中
{
fstreamfile("book.txt",ios:
:
out);
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
voidBDatabase:
:
bookdata()
{
charchoice;
charbname[40];
intbookid;
Book*b;
while(choice!
='0')
{
cout<<"\n\n\n\t\t\t图 书 维 护"< cout<<"\t\t1 新 增\n\t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"< cin>>choice;
switch(choice)
{
case'1':
cout<<"输入图书编号:
"< cin>>bookid;
cout<<"输入图书书名:
"< cin>>bname;
addbook(bookid,bname);
break;
case'2':
cout<<"输入图书编号:
"< cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在 "< break;
}
cout<<"输入新的书名:
"< cin>>bname;
b->setname(bname);
break;
case'3':
cout<<"读入图书编号:
"< cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"< break;
}
b->delbook();
break;
case'4':
cout<<" 读入图书编号:
"< cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<" 该图书不存在"< break;
}
b->disp();
break;
case'5':
disp();
break;
case'6':
clear();
break;
default:
cout<<"输入错误,请从新输入:
";
}
}
}
//main()函数的实现,程序的主界面的引导
voidmain()
{
charchoice;
intbookid,readerid;
RDatabaseReaderDB;
Reader*r;
BDatabaseBookDB;
Book*b;
while(choice!
='0')
{
cout<
cout<<"\t\t\t1 借 书\n\n\t\t\t2 还 书\n\n\t\t\t3 图书维护\n\n\t\t\t4 读者维护\n\n\t\t\t0 离 开"< cin>>choice;
switch(choice)
{
case'1':
cout<<" 借书读者编号:
";
cin>>readerid;
cout<<" 图书编号:
";
cin>>bookid;
r=ReaderDB.query(readerid);//按编号查找
if(NULL==r)
{
cout<<" 不存在该读者,不能借书"< break;
}
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<" 不存在该图书,不能借书"< break;
}
if(b->zfrowbook()==0)
{
cout<<" 该图书已借出,不能借书"< break;
}
r->zfrowbook(b->getno());
break;
case'2':
cout<<"还书\n读者编号:
";
cin>>readerid;
cout<<" 图书编号:
";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"不存在该读者,不能还书"< break;
}
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<" 不存在该图书,不能还书"< break;
}
b->retbook();
r->retbook(b->getno());
break;
case'3':
BookDB.bookdata();
break;
case'4':
ReaderDB.readerdata();
break;
default:
cout<<"输入错误,请从新输入:
";
}
}
}
1、类的设计
Book类的设计:
Book
Name[strNum]:
char
number[strNum]:
char
kind[type]:
char
inttag;intnum;intadd
Book(){}
getkind():
char
getname():
char
getnum():
int
gettag():
int
setnumber(charnum[]):
void
setname(charna[]):
void
setkind(charkin[]):
void
delbook():
void
addbook(intn,char*na,char*kin):
void
disp():
void
(1)数据成员
charname[StrNum];用来存放书名。
charnumber[StrNum];用来存放图书的编号。
charkind[Type];用来存放图书的类型。
inttag;定义删除标记。
intnum;定义图书编号为整形。
intadd;增加标记。
(2)函数成员
Book(){}无参构造函数,用于为书名和作者姓名设置默认值。
chargetkind()用于获取图书类型。
chargetname()用于获取书名。
intgetnum()用于获取图书编号。
intgettag()用于获取删除标记。
voidsetname(charna[])用于设置书名。
voidsetkind(charkin[])用于设置类型。
voiddelbook()用于删除图书。
voidaddbook(intn,char*na,char*kin)用于增加图书。
voiddisp()用于输出图书。
2.主程序的设计:
(1)函数的设计:
classBDatabase{}图书管理类的设置,实现对图书的添加,查找,删除等。
inttop;设置图书记录指针。
Bookbook[Maxb];设置图书记录(Maxb定义为最多可存储的图书数,定义为整形)。
voidclear()清空图书记录。
intaddbook(intn,char*na,char*kin)增加图书记录。
Book*query(intbookid)查找图书记录。
voidbookdata();定义图书库。
voiddisp()输出。
~BDatabase()设置析构函数,将book[]写到book.txt文件中
voidBDatabase:
:
bookdata()由此函数开始对图书管理系统的主菜单进行调用与功能的实现。
(界面参看执行界面部分)
最后用main()函数的实现,程序的主界面的引导
3.源代码分析:
/*****************************************************************************************/
#defineStrNum20
#defineType20
#include
#include
#include
#include//输入/输出文件流类
usingnamespacestd;
constintMaxb=100;//最多可存储的图书
classBook
{
private:
inttag;//删除标记
intnum;//图书编号
intadd;//增加标记
charnumber[StrNum];//编号
charname[StrNum];//书名
charkind[Type];//图书类型
public:
Book(){}
chargetkind()//获取图书类型
{
returnkind[Type];
}
chargetname()//获取书名
{
returnname[StrNum];
}
intgetnum()//获取图书编号
{
returnnum;
}
intgettag()//获取删除标记
{
returntag;
}
voidsetname(charna[])//设置书名
{
strcpy(name,na);
}
voidsetkind(charkin[])//设置类型
{
strcpy(kind,kin);
}
voiddelbook()//删除图书
{
tag=1;
}
voidaddbook(intn,char*na,char*kin)//增加图书
{
tag=0;
num=n;
strcpy(name,na);
strcpy(kind,kin);
}
voiddisp()//输出图书
{
cout.flags(ios:
:
left);//设置对齐的标志位为左
cout<}
};
/*****************************************************************************************/
classBDatabase
{
private:
inttop;//图书记录指针
Bookbook[Maxb];//图书记录
public:
BDatabase()//构造函数,将book.txt读到book[]中
{
Bookb;
top=-1;
fstreamfile("book.txt",io