问题补充说明:图书馆条件不是很好,没有象华中希望那样的可自动识别的条形码.只有靠电脑输入,有什么适合的推荐吗??
用C-FREE编一个也行
//图书管理系统
#include<iostream>
#include<iomanip>
#include<string>
#incl用少联意但仍选获急节ude<fstream>//输入/输出文件流类
#include<ctime>
usingnamespacestd;
constintMaxr=印首严杂整局衣矛至100;//最多的读者
constintMaxb=100;//最多的图书
constintMaxbor=5;//每位读者最多借五本书
//读者类,实现对读者依能级设言氢要曾的信息的描述
classReader
{
private:
inttag;//删除标记1:已删0:未删
intno;//读者编号
charname[10];//读者姓名
intborbook[Maxbor360问答];//所借图书
public:
Reader(){}
char*getname(){returnname;}//获取姓名
intgetta马迅们映担农则阶g(){return形镇国厚早钟然探热划久tag;}//获取删除标记
in例感识些五宁析深值二tgetno(){return外带冲老境感括富no;}//获取读者编号
voidsetname(charna[])//设置姓名
{
strcpy(name,na);
}
voiddelreader(){t粒较木个院每ag=1;}//设置删除标记1:已删0:未删
voidaddreader(intn,char*na)//增加读者
{
tag=0;
no=n;
strcpy(name晶理配庆,na);
for(inti=0整科径向到规史销载;i<Maxbor;i++)
borbook[i]=0;
}
voidborrowbook(intbookid)//借书操作
{
for(inti=0;i<Maxbor;i++)
{
歌标跳复if(borbook[i]==0)//找5本书中空余的空间把bookid给borbook
场通选派迅{
borbook[i]=bookid;
break;
}
}
}
voidretbook(intbookid)//还书操作
{
for(inti=0;i<Maxbor;i++)
{
if(borboo血k[i]==bookid)
{
b不成突景磁促orbook[i]=0;
}
}
}
voiddisp()/据稳司雨起住程建顾制们/读出读者信息
{
cout<<setw(5)<<"ID:"<<no<<s陆范按八拉找etw(10)<<"name:"<<name<<"\t"<<"借书编号:[";
for(inti=0;i<Maxbor&&tag!=1;i++)
if(borbook[i]!=0)
cout<<borbook[i]<<"|";
cout<<"]"<<endl;
}
};
//读者类库,实现建立读者的个人资料
classRDatabase
{
private:
inttop;//读者记录指针
Readerread[Maxr];//读者记录
public:
RDatabase()//构造函数,将***.txt读到read[]中
{
Readers;
top=-1;
fstreamfile("***.txt",ios::i策起用轴选待袁下给轮n);//打开一个输入文件
while(1)
{
***.read((char*)&s,sizeof(s));
if(!file)break;
top++;
read[top]=s;
}
***.c祖阻lose();//关闭***.txt
}
voidclear()//删除所有读者信息
{
top=-1;
}
voidaddreader(intn,char*na)//添加读者时先查找是否存在
{
Reader*p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
cout<<"增加读者成功!";
}
elsecout<<"读者已经存在!";
}
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[]写到***.txt文件中
{
fstreamfile("***.txt",ios::out);
for(inti=0;i<=top;i++)
if(read[i].gettag()==0)
***.write((char*)&read[i],sizeof(read[i]));
***.close();
}
};
voidRDatabase::readerdata()
{
charchoice;
charrname[20];
intreaderid;
Reader*r;
system("cls");
while(choice!='0')
{
cout<<"\n\n\t\t\t***读者维护***\n\n\n\t\t\t\t1新增\n\n\t\t\t\t2更改\n\n\t\t\t\t3删除\n\n\t\t\t\t4查找\n\n\t\t\t\t5显示\n\n\t\t\t\t6全删\n\n\t\t\t\t0退出"<<endl;
cin>>choice;
switch(choice)
{
case'1'://新增
system("cls");
cout<<"输入读者编号:";
cin>>readerid;
cout<<"输入读者姓名:";
cin>>rname;
addreader(readerid,rname);
break;
case'2'://更改
system("cls");
cout<<"输入读者编号:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<<endl;
break;
}
cout<<"输入新的姓名:";
cin>>rname;
r->setname(rname);
cout<<"更改读者成功!";
break;
case'3'://删除
system("cls");
cout<<"输入读者编号:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<<endl;
break;
}
r->delreader();
cout<<"删除读者成功!";
break;
case'4'://查找
cout<<"读入读者编号:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<<endl;
break;
}
cout<<"找到读者:"<<endl;
r->disp();
break;
case'5'://显示
cout<<"显示读者如下:"<<endl;
disp();
break;
case'6'://全删
clear();
cout<<"删除成功!";
break;
case'0'://退出
cout<<"退出!";system("cls");break;
default:cout<<"输入错误,请从新输入:";break;
}
}
}
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
classBook
{
private:
inttag;//删除标记1:已删0:未删
intno;//图书编号
charname[20];//书名
intonshelf;//是否在架1:在架2:已借
public:
Book(){}
char*getname(){returnname;}//获取书名
intgetno(){returnno;}//获取图书编号
intgettag(){returntag;}//获取删除标记
voidshowtime(tm*pt)
{
cout<<setfill('0')<<1900+pt->tm_year<<'-';
cout<<setw(2)<<pt->tm_mon+1<<'-';
cout<<setw(2)<<pt->tm_mday<<'';
}//显示借书时间
voidsetname(charna[])//设置书名
{
strcpy(name,na);
}
voiddelbook(){tag=1;}//删除图书
voidaddbook(intn,char*na)//增加图书
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
intborrowbook()//借书操作
{
if(onshelf==1)
{
onshelf=0;
return1;
}
return0;
}
intretbook()//还书操作
{
onshelf=1;
return0;
}
voiddisp()//显示图书
{
if(!tag)
{
cout<<setw(6)<<no<<setw(18)<<"《"<<name<<"》"<<setw(10);
if(onshelf==1)cout<<"在架"<<endl;
elsecout<<"已借"<<endl;
}
}
};
//图书库类,实现对图书的维护,查找,删除等
classBDatabase
{
private:
inttop;//图书记录指针
Bookbook[Maxb];//图书记录
public:
BDatabase()//构造函数,将***.txt读到book[]中
{
Bookb;
top=-1;
fstreamfile("***.txt",ios::in);
while(1)
{
***.read((char*)&b,sizeof(b));
if(!file)break;
top++;
book[top]=b;
}
***.close();
}
voidclear()//全删
{
top=-1;
}
voidaddbook(intn,char*na)//增加图书
{
Book*p=query(n);
if(NULL==p)
{
top++;
book[top].addbook(n,na);
cout<<"增加图书成功!";
}
elsecout<<"图书已经存在!";
}
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[]写到***.txt文件中
{
fstreamfile("***.txt",ios::out);
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
***.write((char*)&book[i],sizeof(book[i]));
***.close();
}
};
voidBDatabase::bookdata()
{
charchoice;
charbname[40];
intbookid;
Book*b;
system("cls");
while(choice!='0')
{
cout<<"\n\n\t\t\t***图书维护***\n\n\n\t\t\t\t1新增\n\n\t\t\t\t2更改\n\n\t\t\t\t3删除\n\n\t\t\t\t4查找\n\n\t\t\t\t5显示\n\n\t\t\t\t6全删\n\n\t\t\t\t0退出"<<endl;
cin>>choice;
switch(choice)
{
case'1'://新增
system("cls");
cout<<"输入图书编号:"<<endl;
cin>>bookid;
cout<<"输入图书书名:"<<endl;
cin>>bname;
addbook(bookid,bname);
break;
case'2'://更改
system("cls");
cout<<"输入图书编号:"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
cout<<"输入新的书名:"<<endl;
cin>>bname;
b->setname(bname);
cout<<"更改图书成功!";
break;
case'3'://删除
system("cls");
cout<<"输入图书编号:"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
b->delbook();
cout<<"删除图书成功!";
break;
case'4'://查找
system("cls");
cout<<"读入图书编号:"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL&&b->gettag()!=1)
{
cout<<"该图书不存在"<<endl;
break;
}
cout<<"找到图书:"<<endl;
b->disp();
break;
case'5'://显示
system("cls");
cout<<"显示图书如下:"<<endl;
disp();
break;
case'6'://全删
system("cls");
clear();
cout<<"删除图书成功!";
break;
case'0'://退出
cout<<"退出!";system("cls");break;
default:cout<<"输入错误,请从新输入:";
}
}
}
//main()函数的实现,程序的主界面的引导
voidxt()
{charchoice;
intbookid,readerid;
RDatabaseReaderDB;
Reader*r,r1;
BDatabaseBookDB;
Book*b;
while(choice!='0')
{
cout<<endl<<endl<<"\t\t\t***图书管理系统***\n\n\n";
cout<<"1借书\n"<<endl<<endl;
cout<<"2还书\n"<<endl<<endl;
cout<<"3图书管理\n"<<endl<<endl;
cout<<"4读者管理\n"<<endl<<endl;
cout<<"5离开\n"<<endl<<endl;
cin>>choice;
switch(choice)
{
case'1'://借书
system("cls");
cout<<"借书读者编号:";
cin>>readerid;
r=***.query(readerid);//按编号查找
if(r==NULL)
{
cout<<"不存在该读者,不能借书"<<endl;
break;
}
r->disp();
cout<<"图书编号:";
cin>>bookid;
b=***.query(bookid);
if(b==NULL)
{
cout<<"不存在该图书,不能借书"<<endl;
break;
}
if(b->borrowbook()==0)
{
cout<<"该图书已借出,不能借书"<<endl;
break;
}
b->disp();
r->borrowbook(b->getno());
cout<<"借书成功!";
break;
case'2'://还书
system("cls");
cout<<"还书\n读者编号:";
cin>>readerid;
r=***.query(readerid);
if(r==NULL)
{
cout<<"不存在该读者,不能还书"<<endl;
break;
}
r->disp();
cout<<"图书编号:";
cin>>bookid;
b=***.query(bookid);
if(b==NULL)
{
cout<<"不存在该图书,不能还书"<<endl;
break;
}
b->disp();
b->retbook();
r->retbook(b->getno());
cout<<"还书成功!";
break;
case'3'://图书管理
system("cls");
***.bookdata();
break;
case'4'://读者管理
system("cls");
***.readerdata();
break;
case'0'://退出
cout<<"退出!";break;
default:cout<<"输入错误,请从新输入:";
system("cls");
}
}
}
voidmain()
{
system("color7c");
intgh,pw;
cout<<"进入系统前请先登陆!"<<endl;
cout<<"请输入管理员工号:"<<endl;
cin>>gh;
cout<<"请输入密码:"<<endl;
cin>>pw;
if(gh==12345&&pw==12345)
{system("cls");
xt();}
else
cout<<"工号或密码输入错误,请重新输入!"<<endl<<endl;
main();}
标签:管理系统,中小学,图书馆