C++课程设计图书馆管理系统.docx
《C++课程设计图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计图书馆管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
C++课程设计图书馆管理系统
//图书室管理系统
#include
#include
#include
usingnamespacestd;
constintMax_book=3000;//可保存图书数量的上限
constintMax_reader=1000;//可保存读者数量的上限
constintMax_bor_book=2;//读者借阅图书本数上限
classBook//图书类
{
private:
intID;//登录号
intnum;//设置书目编号
intflag;//设置删除标记
intonshelf;//判断图书是否再架
charbname[50];//设置图书书名
charw_name[10];//设置作者姓名
public:
Book(){}
intgetID(){returnID;}//获取登录号
intgetnum(){returnnum;}//获取图书编号
intgetflag(){returnflag;}//获取删除标记
char*getbname(){returnbname;}//获取图书书名
char*getw_name(){returnw_name;}//获取作者姓名
voidsetbname(charna[]){strcpy(bname,na);}//设置书名
voidsetwname(charna[]){strcpy(w_name,na);}//设置作者名字
voidAddbook(intID,intn,char*na,char*wname);//新增图书
intborrowbook();//借阅图书
voidretbook();//归还图书
voiddelbook(){flag=1;}//删除图书信息
voidshow();//输出图书信息
};
voidBook:
:
Addbook(intID,intn,char*na,char*wname)//新增图书信息
{
flag=0;
ID=ID;
num=n;
strcpy(bname,na);
strcpy(w_name,wname);
onshelf=1;
}
intBook:
:
borrowbook()//借阅图书
{
if(onshelf==1)
{
onshelf=0;
return1;
}
return0;
}
voidBook:
:
retbook()//归还图书
{
onshelf=1;
}
voidBook:
:
show()//输出图书详细信息
{
cout<<"图书状态:
"<<(onshelf==1?
"在架可借":
"本馆借出")<<""<<"作者姓名:
"<"<<"《"<cout<<"图书编号:
"<}
classBookdata//图书数据类
{
private:
intbook_total;//图书总共数目
Bookbook[Max_book];//图书记录数组
public:
Bookdata();
intAddbook(intID,intn,char*na,char*wname);//新增图书
Book*search_ID(intID)//按登录号查找图书
{
for(inti=0;i<=book_total;i++)
if(book[i].getID()==ID&&book[i].getflag()==0)
{
return&book[i];
}
returnNULL;}
Book*search_bnum(intbook_num)//按图书编号查找图书
{
for(inti=0;i<=book_total;i++)
if(book[i].getnum()==book_num&&book[i].getflag()==0)
{
return&book[i];
}
returnNULL;
}
Book*search_bname(charbname[50])//按图书书名查找图书
{
for(inti=0;i<=book_total;i++)
if(strcmp(book[i].getbname(),bname)==0&&book[i].getflag()==0)
{
return&book[i];
}
returnNULL;
}
Book*search_wname(charwname[50])//按作者姓名查找图书
{
for(inti=0;i<=book_total;i++)
if(strcmp(book[i].getw_name(),wname)==0&&book[i].getflag()==0)
{
return&book[i];
}
returnNULL;
}//图书数据管理
voidbookdata();//图书数据管理
voidshow();//输出书籍信息
~Bookdata()//析构函数
{
fstreamfile("book.txt",ios:
:
out);
for(inti=0;i<=book_total;i++)
if(book[i].getflag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
Bookdata:
:
Bookdata()//构造函数
{
Bookb;
book_total=-1;
fstreamfile("book.txt",ios:
:
in);
while
(1)
{
file.read((char*)&b,sizeof(b));
if(!
file)break;
book_total++;
book[book_total]=b;
}
file.close();
}
intBookdata:
:
Addbook(intID,intn,char*na,char*wname)//新增图书
{
Book*p=search_bnum(n);
if(NULL==p)
{
book_total++;
book[book_total].Addbook(ID,n,na,wname);
return1;
}
return0;
}
voidBookdata:
:
show()
{
for(inti=0;i<=book_total;i++)
if(book[i].getflag()==0)
{
book[i].show();
cout<}
}
voidBookdata:
:
bookdata()
{
intchoice;
charwname[10];
intID;
charbname[50];
intbook_num;
Book*b;
while(choice!
=0)
{
cout<<"\n"<<"***************************************************"<cout<<"\n图书管理"<cout<<"\n1新增图书信息"<cout<<"\n2图书信息更改"<cout<<"\n3删除图书信息"<cout<<"\n4图书信息显示"<cout<<"\n5搜索图书信息"<cout<<"\n0安全退出模块"<cout<<"\n"<<"***************************************************"<cout<<"请输入相对有的数字:
"<do
{
cin>>choice;
if(choice<0||choice>5)
cout<<"对不起,输入有误,请查证后再输入!
"<else
break;
}while
(1);
switch(choice)
{
case1:
cout<<"请输入新增图书的书名:
"<cin>>bname;
cout<<"请输入新增图书的登录号:
"<cin>>ID;
cout<<"请输入新增图书作者姓名:
"<cin>>wname;
cout<<"请输入新增图书的编号:
"<cin>>book_num;
Addbook(ID,book_num,bname,wname);
break;
case2:
cout<<"请输入需要修改的图书的登录号:
"<cin>>ID;
b=search_ID(ID);
if(b==NULL)
{
cout<<"对不起,该图书不存在!
"<break;
}
cout<<"请输入新的书名:
"<cin>>bname;
b->setbname(bname);
cout<<"请输入图书作者新的名字:
"<cin>>wname;
b->setwname(wname);
break;
case3:
cout<<"请输入需要删除的图书的登录号:
"<cin>>ID;
b=search_ID(ID);
if(b==NULL)
{
cout<<"对不起,该图书不存在!
"<break;
}
b->delbook();
break;
case4:
show();
break;
case5:
intselection;
cout<<"按图书编号搜索->请按1"<cout<<"按图书登录号搜索->请按2"<cout<<"按图书书名搜索->请按3"<cout<<"按作者姓名搜索->请按4"<cin>>selection;
if(selection==1)
{
cout<<"请输入需要查找的图书的编号:
"<cin>>book_num;
b=search_bnum(book_num);
if(b==NULL)
{
cout<<"对不起,该图书不存在!
"<break;
}
b->show();
break;}
elseif(selection==2)
{
cout<<"请输入需要查找的图书的登录号:
"<cin>>ID;
b=search_ID(ID);
if(b==NULL)
{
cout<<"对不起,该图书不存在!
"<break;
}
b->show();
break;
}
elseif(selection==3)
{
cout<<"请输入需要查找的图书的书名:
"<cin>>bname;
char*p=bname;
b=search_bname(bname);
if(b==NULL)
{
cout<<"对不起,该图书不存在!
"<break;
}
b->show();
break;
}
elseif(selection==4)
{
cout<<"请输入需要查找的作者的姓名:
"<cin>>wname;
char*q=wname;
b=search_wname(wname);
if(b==NULL)
{
cout<<"对不起,该图书不存在!
"<b->show();
break;break;
}
}
else
cout<<"对不起,输入有误,请重新输入!
"<}
}
}
classReader//读者类
{
private:
intnum;//读者借阅证编号
charrname[10];//读者姓名
intborbook[Max_bor_book];//读者借阅的图书
intflag;//删除标记1:
已经删除0:
还未删除
public:
Reader(){}
intgetnum(){returnnum;}//获取读者借阅证编号
intretbook(intbookid);//归还图书
char*getrname(){returnrname;}//获取读者姓名
intgetflag(){returnflag;}//获取删除标记
voidsetname(charna[]);//设置姓名
voiddelbook(){flag=1;};//设置删除标记1:
已经删除0:
还未删除
voidaddreader(intn,char*na);//增加读者
voidborrowbook(intbookid);//借阅图书
voidshow();//输出读者详细信息
};
voidReader:
:
setname(charna[])//设置姓名
{
strcpy(rname,na);
}
voidReader:
:
addreader(intn,char*na)//新增读者
{
flag=0;
num=n;
strcpy(rname,na);
for(inti=0;iborbook[i]=0;
}
voidReader:
:
borrowbook(intbook_num)//借阅图书
{
for(inti=0;i{
if(borbook[i]==0)
{
borbook[i]=book_num;
return;
}
}
}
intReader:
:
retbook(intbook_num)//归还图书
{
for(inti=0;i{
if(borbook[i]==book_num)
{
borbook[i]=0;
return1;
}
}
return0;
}
voidReader:
:
show()//输出读者信息
{
cout<<"读者编号:
"<"<for(inti=0;iif(borbook[i]!
=0)
cout<}
classReaderdata//读者数据类
{
private:
intreader_total;//读者总共数目
Readerreader[Max_reader];//读者信息记录
public:
Readerdata();//构造函数
intaddreader(intn,char*na);//新增读者时先检察该读者是否已经存在
Reader*search_rnum(intreader_num)//按读者借阅证编号查找
{
for(inti=0;i<=reader_total;i++)
if(reader[i].getnum()==reader_num&&reader[i].getflag()==0)
{
return&reader[i];
}
returnNULL;
}
Reader*search_rname(charreader_name[20])//按读者姓名查找读者
{
for(inti=0;i<=reader_total;i++)
for(inti=0;i<=reader_total;i++)
if(strcmp(reader[i].getrname(),reader_name)==0&&reader[i].getflag()==0)
{
return&reader[i];
}
returnNULL;
}
voidshow();//输出所有读者详细信息
voidreaderdata();//读者数据管理
~Readerdata()//析构函数
{
fstreamfile("reader.txt",ios:
:
out);
for(inti=0;i<=reader_total;i++)
if(reader[i].getflag()==0)
file.write((char*)&reader[i],sizeof(reader[i]));
file.close();
}
};
Readerdata:
:
Readerdata()//构造函数
{
ReaderR;
reader_total=-1;
fstreamfile("reader.txt",ios:
:
in);//打开一个输入文件
while
(1)
{
file.read((char*)&R,sizeof(R));
if(!
file)break;
reader_total++;
reader[reader_total]=R;
}
file.close();
}
intReaderdata:
:
addreader(intn,char*na)//新增读者时先检察该读者是否已经存在
{
Reader*p=search_rnum(n);
if(p==NULL)
{
reader_total++;
reader[reader_total].addreader(n,na);
return1;
}
return0;
}
voidReaderdata:
:
show()//输出所有读者详细信息
{
for(inti=0;i<=reader_total;i++)
{
reader[i].show();
cout<}
}
voidReaderdata:
:
readerdata()
{
intchoice;
charreader_name[20];
intreader_num;
Reader*r;
while(choice!
=0)
{
cout<<"\n"<<"***************************************************"<cout<<"\n读者管理"<cout<<"\n1新增读者信息"<cout<<"\n2读者信息更改"<cout<<"\n3删除读者信息"<cout<<"\n4读者信息显示"<cout<<"\n5搜索读者信息"<cout<<"\n0安全退出模块"<cout<<"\n***************************************************"<cout<<"请输入相对有的数字:
"<do
{
cin>>choice;
if(choice<0||choice>5)
cout<<"对不起,输入有误,请查证后再输入!
"<else
break;
}while
(1);
switch(choice)
{
case1:
cout<<"请输入读者编号:
";
cin>>reader_num;
cout<<"请输入读者姓名:
";
cin>>reader_name;
addreader(reader_num,reader_name);
break;
case2:
cout<<"请输入读者编号:
";
cin>>reader_num;
r=search_rnum(reader_num);
if(r==NULL)
{
cout<<"对不起,该读者不存在!
"<break;
}
cout<<"请输入新的姓名:
";
cin>>reader_name;
r->setname(reader_name);
break;
case3:
cout<<"请输入读者编号:
";
cin>>reader_num;
r=search_rnum(reader_num);
if(r=