用C语言编写图书信息管理系统
#包括
#包括
#包括
#include//输入/输出文件流类
usingnamespacestd
constit maxr = 100;//最多的读者
constit maxb = 100;//最多的书
constitmaxbor = 5;//每个读者最多可以借五本书。
//reader类,描述读者的信息。
类阅读器
{
私人:
inttag//删除标记1:已删除0:未删除。
intno//阅读器编号
charname[10];//读者姓名
intborbook[max bor];//借书
公共:
Reader(){}
char * getname(){ return name;}//获取名称
int gettag(){ return tag;}//获取删除标记
int getno(){ return no;}//获取阅读器编号
Voidsetname(charna[])//设置名称。
{
strcpy(姓名,不适用);
}
void del book(){ tag = 1;}//设置删除标志1:已删除0:未删除。
voida reader(intn,char * na)//增加读取器。
{
tag = 0;
no = n;
strcpy(姓名,不适用);
for(inti = 0;ibor book[I]= 0;
}
Voidborrowbook(intbookid)//借入操作
{
for(inti = 0;我{
if(borbook[i]==0)
{
bor book[I]= bookid;
返回;
}
}
}
intro Book(intbookid)//图书返回操作
{
for(inti = 0;我{
if(borbook[i]==bookid)
{
bor book[I]= 0;
return 1;
}
}
return0
}
Voiddisp()//读取阅读器信息。
{
标准输出
for(inti = 0;iif(borbook[i]!=0)
标准输出
标准输出
}
};
//读者类库,实现读者个人资料的建立。
分类数据库
{
私人:
inttop//读取器记录指针
reader read[Maxr];//阅读器记录
公共:
RDatabase()//构造函数将reader.txt读入read[]。
{
读者;
top =-1;
fstreamfile("reader.txt ",IOs::in);//打开一个输入文件
while(1)
{
file . read((char *)& amp;s,sizeof(s));
如果(!文件)中断;
顶;
read[top]= s;
}
file . close();//关闭reader.txt
}
Voidclear()//删除所有阅读器信息。
{
top =-1;
}
Intaddreader(intn,char*na)//添加读取器时,检查它们是否存在。
{
reader * p = query(n);
if(p==NULL)
{
顶;
阅读【顶部】。addreader(n,na);
return 1;
}
return0
}
Reader*query(intreaderid)//按编号搜索。
{
for(inti = 0;我
如果(读[我]。getno()= = readerid & amp;& amp
读[我]。gettag()==0)
{
返回& amp改为[I];
}
returnNULL
}
Voiddisp()//输出所有读取器信息。
{
for(inti = 0;我
读[我]。disp();
}
voidreaderdata();//读者库维护
~RDatabase()//析构函数,将read[]写入reader.txt文件。
{
fstreamfile("reader.txt ",IOs::out);
for(inti = 0;我
如果(读[我]。gettag()==0)
file . write((char *)& amp;read[i],sizeof(read[I]);
file . close();
}
};
voidRDatabase::readerdata()
{
charchoice
charr name[20];
intreaderid
reader * r;
而(选择!='0')
{
标准输出
CIN & gt;& gt选择;
开关(选择)
{
案例“1”:
标准输出
CIN & gt;& gtreaderid
标准输出
CIN & gt;& gtrname
addreader(readerid,rname);
打破;
案例“2”:
标准输出
CIN & gt;& gtreaderid
r = query(readerid);
if(r==NULL)
{
标准输出
打破;
}
标准输出
CIN & gt;& gtrname
r-& gt;set name(rname);
打破;
案例“3”:
标准输出
CIN & gt;& gtreaderid
r = query(readerid);
if(r==NULL)
{
标准输出
打破;
}
r-& gt;del book();
打破;
案例“4”:
标准输出
CIN & gt;& gtreaderid
r = query(readerid);
if(r==NULL)
{
标准输出
打破;
}
r-& gt;disp();
打破;
案例“5”:
disp();
打破;
案例“6”:
clear();
打破;
默认值:cout
}
}
}
//图书类别,实现了图书的描述、书号、书名、借出、归还等。
点名簿
{
私人:
inttag//删除标记1:已删除0:未删除。
intno//图书编号
charname[20];//书名
intonshelf//要不要借1:借2:借?
公共:
Book(){}
char * getname(){ return name;}//获取名称
int getno(){ return no;}//获取书号
int gettag(){ return tag;}//获取删除标记
Voidsetname(charna[])//设置书名。
{
strcpy(姓名,不适用);
}
void del book(){ tag = 1;}//删除书籍
Voidaddbook(intn,char*na)//添加书籍。
{
tag = 0;
no = n;
strcpy(姓名,不适用);
on shelf = 1;
}
Intborrowbook()//图书借阅操作
{
if(on self = = 1)
{
on shelf = 0;
return 1;
}
return0
}
Voidretbook()//图书返回操作
{
on shelf = 1;
}
Voiddisp()//输出书籍
{
标准输出
}
};
//Library类,可以维护,搜索,删除书籍。
class b数据库
{
私人:
inttop//图书记录指针
book book[Maxb];//图书记录
公共:
BDatabase()//构造函数,将book.txt读入book[]。
{
Bookb
top =-1;
fstreamfile("book.txt ",IOs::in);
while(1)
{
file . read((char *)& amp;b,sizeof(b));
如果(!文件)中断;
顶;
book[top]= b;
}
file . close();
}
Voidclear()//全部删除
{
top =-1;
}
Intaddbook(intn,char*na)//添加书籍。
{
book * p = query(n);
if(NULL==p)
{
顶;
书[顶]。addbook(n,na);
return 1;
}
return0
}
Book*query(intbookid)//查找书籍。
{
for(inti = 0;我
如果(书[我]。getno()= = bookid & amp;& amp书[我]。gettag()==0)
{
返回& amp书[I];
}
returnNULL
}
voidbookdata();//库维护
voiddisp()
{
for(inti = 0;我
如果(书[我]。gettag()==0)
书[我]。disp();
}
~BDatabase()//析构函数,将book[]写入book.txt文件。
{
fstreamfile("book.txt ",IOs::out);
for(inti = 0;我
如果(书[我]。gettag()==0)
file . write((char *)& amp;book[i],sizeof(book[I]);
file . close();
}
};
void db database::book data()
{
charchoice
charb name[40];
intbookid
书* b;
而(选择!='0')
{
标准输出
标准输出
CIN & gt;& gt选择;
开关(选择)
{
案例“1”:
标准输出
CIN & gt;& gtbookid
标准输出
CIN & gt;& gtbname
addbook(bookid,bname);
打破;
案例“2”:
标准输出
CIN & gt;& gtbookid
b =查询(bookid);
if(b==NULL)
{
标准输出
打破;
}
标准输出
CIN & gt;& gtbname
b-& gt;set name(bname);
打破;
案例“3”:
标准输出
CIN & gt;& gtbookid
b =查询(bookid);
if(b==NULL)
{
标准输出
打破;
}
b-& gt;del book();
打破;
案例“4”:
标准输出
CIN & gt;& gtbookid
b =查询(bookid);
if(b==NULL)
{
标准输出
打破;
}
b-& gt;disp();
打破;
案例“5”:
disp();
打破;
案例“6”:
clear();
打破;
默认值:cout
}
}
}
//main()函数的实现和程序主界面的引导。
voidmain()
{
charchoice
intbookid,readerid
RDatabaseReaderDB
reader * r;
BDatabaseBookDB
书* b;
而(选择!='0')
{
标准输出
标准输出
CIN & gt;& gt选择;
开关(选择)
{
案例“1”:
标准输出
CIN & gt;& gtreaderid
标准输出
CIN & gt;& gtbookid
r = readerdb . query(readerid);//按号码搜索
if(NULL==r)
{
标准输出
打破;
}
b = bookdb . query(bookid);
if(b==NULL)
{
标准输出
打破;
}
if(b-& gt;borrowbook()==0)
{
标准输出
打破;
}
r-& gt;借书(b-& gt;getno());
打破;
案例“2”:
标准输出
CIN & gt;& gtreaderid
标准输出
CIN & gt;& gtbookid
r = readerdb . query(readerid);
if(r==NULL)
{
标准输出
打破;
}
b = bookdb . query(bookid);
if(b==NULL)
{
标准输出
打破;
}
b-& gt;ret book();
r-& gt;retbook(b-& gt;getno());
打破;
案例“3”:
bookdb . book data();
打破;
案例“4”:
reader db . reader data();
打破;
默认值:cout
}
}
}