用C语言编写图书信息管理系统

在a中,您会看到:

#包括

#包括

#包括

#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

}

}

}