63图书管理.docx

上传人:b****5 文档编号:7265435 上传时间:2023-01-22 格式:DOCX 页数:25 大小:63.39KB
下载 相关 举报
63图书管理.docx_第1页
第1页 / 共25页
63图书管理.docx_第2页
第2页 / 共25页
63图书管理.docx_第3页
第3页 / 共25页
63图书管理.docx_第4页
第4页 / 共25页
63图书管理.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

63图书管理.docx

《63图书管理.docx》由会员分享,可在线阅读,更多相关《63图书管理.docx(25页珍藏版)》请在冰豆网上搜索。

63图书管理.docx

63图书管理

图书管理

一.实验目的

【问题描述】

图书管理系统基本业务包括:

对一本书的采编入库,清除库存、借阅和归还等等。

试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。

【基本要求】

1)每种书的登记内容至少包括书号、书名、著者、现存量和总库存量等五项;

2)作为演示系统,不必使用文件,全部数据可以都在内存存放。

但是由于上述四项基本业务活动都是通过书号(即关键字)进行的,所以要用B树(2-3树)对书号建立索引,以获得高效率。

3)系统应实现的操作及其功能定义如下:

●采编入库:

新购入的一种书,经分类和确定书号之后登记到图书账目中去。

如果这种书在账中已有,则只将总库存量增加。

●清除库存:

某种书已无保留价值,将它从图书账目中注销。

●借阅:

如果一种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。

●归还:

注销对借阅者的登记,改变该书的现存量。

●显示:

以凹入表的形式显示B树。

这个操作是为了调试和维护的目的而设置的。

【测试数据】

入库书号:

35、16、18、70、5、50、22、60、13、17、12、45、25、42、15、90、30、7

然后清除:

45、90、50、22、42

其余数据自行设计。

由空树开始,每插入删除一个关键字后就显示B树的状态。

二.实验内容

原程序代码

classBook

{//图书类,实现对图书的描述,图书的编号,书名,借出,还入等功能

private:

inttag;//删除标记1:

已删0:

未删

intno;//图书编号

charname[20];//书名

charauthor[20];//作者

charcbs[20];//出版社

#include"iostream.h"

#include"conio.h"

#include"fstream.h"

#include"iomanip.h"

#include"string.h"

constintMaxr=100;//最多的读者数

constintMaxb=100;//最多的图书数

constintMaxbor=5;//每位读者最多借的书

 

intonshelf;//是否再架1:

再架2:

已借

public:

Book(){;}

char*getname()

{//获取书名

returnname;

}

char*getauthorname()

{//获取作者名

returnauthor;

}

char*getcbsname()

{//获取出版社名

returncbs;

}

intgetno()

{//获取图书编号

returnno;

}

intgettag()

{//获取删除标记

returntag;

}

voidsetname(charna[])

{//设置书名

strcpy(name,na);

}

voidsetonshelf(intoa)

{

onshelf=oa;

}

voiddelbook()

{//删除图书

tag=1;

}

voidaddbook(intn,char*na,char*aa,char*ca,intoa)

{//增加图书

tag=0;

no=n;

strcpy(name,na);

strcpy(author,aa);

strcpy(cbs,ca);

onshelf=oa;

}

intborrowbook()

{//借书操作

if(onshelf>0)

{

onshelf--;

return1;

}

return0;

}

voidretbook()

{//还书操作

onshelf++;

}

voiddisp()

{//输出图书

cout<

}

};

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,char*aa,char*ca,intoa)

{//增加图书

Book*p=query1(n);

if(NULL==p)

{

top++;

book[top].addbook(n,na,aa,ca,oa);

return1;

}

return0;

}

Book*query1(intbookid)

{//按编号查找图书

for(inti=0;i<=top;i++)

if(book[i].getno()==bookid&&book[i].gettag()==0)

{

return&book[i];

}

returnNULL;

}

Book*query2(chara[])

{//按书名查找图书

Book*e;

intr=0;

for(inti=0;i<=top;i++)

if(strcmp(book[i].getname(),a)==0&&book[i].gettag()==0)

{

if(r==0)

cout<

e=&book[i];

e->disp();

r++;

}

if(r==0)

cout<<"找不到该书!

"<

returnNULL;

}

Book*query3(chara[])

{//按作者查找图书

Book*e;

intr=0;

for(inti=0;i<=top;i++)

if(strcmp(book[i].getauthorname(),a)==0&&book[i].gettag()==0)

{

if(r==0)

cout<

e=&book[i];

e->disp();

r++;

}

if(r==0)

cout<<"找不到该书!

"<

returnNULL;

}

Book*query4(chara[])

{//按出版社查找图书

Book*e;

intr=0;

for(inti=0;i<=top;i++)

if(strcmp(book[i].getcbsname(),a)==0&&book[i].gettag()==0)

{

if(r==0)cout<

e=&book[i];

e->disp();

r++;

}

if(r==0)

cout<<"找不到该书!

"<

returnNULL;

}

voidbookdata();//图书库信息

voiddisp()

{

for(inti=0;i<=top;i++)

if(book[i].gettag()==0)

book[i].disp();

}

 

cin>>bname;

cout<<"请输入新书作者名:

";

cin>>auname;

cout<<"请输入新书出版社:

";

cin>>cname;

cout<<"请输入新书数量:

";

cin>>bookod;

addbook(bookid,bname,auname,cname,bookod);

cout<<"添加图书成功!

";

getch();

break;

case'2':

cout<<"请输入图书编号:

";

cin>>bookid;

b=query1(bookid);

if(b==NULL)

{

cout<<"该图书不存在!

"<

break;

}

cout<<"该图书的信息是:

"<

cout<

b->disp();

cout<<"是否修改?

(y/n):

";

cin>>ch;

if(ch=='y')

{

cout<<"请输入新的书名:

";

cin>>bname;

cout<<"请输入新的作者:

";

cin>>auname;

cout<<"请输入新书出版社:

";

cin>>cname;

cout<<"请输入新的存量:

";

cin>>bookod;

b->setname(bname);

b->setonshelf(bookod);

}

cout<<"修改图书成功!

";

getch();

break;

~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()

{

charchoice3;

charbname[40];

charauname[40];

charcname[40];

charch;

intchoice4;

intbookid;

intbookod;

Book*b;

while(choice3!

='0')

{

cout<<"\n\t\t\t**图书信息**\n"<

cout<<"\t\t\t**1.新增**"<

cout<<"\t\t\t**2.更改**"<

cout<<"\t\t\t**3.删除**"<

cout<<"\t\t\t**4.查找**"<

cout<<"\t\t\t**5.显示**"<

cout<<"\t\t\t**6.全删**"<

cout<<"\t\t\t**0.返回**"<

cout<<"\t\t\t请选择:

";

cin>>choice3;

switch(choice3)

{

case'1':

cout<<"请输入新书编号:

";

cin>>bookid;

b=query1(bookid);

if(b!

=NULL)

{

cout<<"该编号已经存在,不能添加!

"<

break;

}

cout<<"请输入新书书名:

";

 

case'3':

cout<<"请输入图书编号:

";

cin>>bookid;

b=query1(bookid);

if(b==NULL)

{

cout<<"该图书不存在,无法删除!

"<

break;

}

b->delbook();

cout<<"删除成功!

";

getch();

break;

case'4':

cout<<"\t\t\t**1.按图书编号查找**"<

cout<<"\t\t\t**2.按图书书名查找**"<

cout<<"\t\t\t**3.按图书作者查找**"<

cout<<"\t\t\t**4.按图书出版社查找**"<

cout<<"\t\t\t**0.返回**"<

cout<<"\t\t\t请选择:

";

cin>>choice4;

switch(choice4)

{

case1:

cout<<"请输入图书编号:

";

cin>>bookid;

b=query1(bookid);

if(b==NULL)

{

cout<<"该图书不存在!

";

break;

}

cout<

b->disp();

break;

case2:

cout<<"请输入图书书名:

";

cin>>bname;

b=query2(bname);

break;

case3:

cout<<"请输入图书作者:

";

cin>>auname;

b=query3(auname);

break;

case4:

cout<<"请输入图书出版社:

";

cin>>cname;

b=query4(cname);

break;

case0:

break;

}

break;

case'5':

cout<

disp();

getch();

break;

case'6':

clear();

break;

default:

break;

}

}

}

classReader

{//读者的信息描述

private:

inttag;//删除标记1表示已删0表示未删

intno;//读者编号

charname[10];//读者姓名

intborbook[Maxbor];//所借图书

public:

Reader()

{;}

char*getname()

{//获取姓名

returnname;

}

 

cout<<"未借该书,还书失败!

"<

return0;

}

voiddisp()

{//读出读者信息

inthave=0;

intbz=0;

cout<

for(inti=0;i

if(borbook[i]!

=0)

{

if(bz==0)

{

have=1;

cout<<"["<

bz++;

}

else

{

cout<<"\r\t\t\t\t\t""["<

}

}

if(have==0)

cout<<"\t还未借书"<

}

};

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;

intgettag()

{//获取删除标记

returntag;

}

intgetno()

{//获取读者编号

returnno;

}

voidsetname(charna[])

{//设置姓名

strcpy(name,na);

}

voiddelbook()

{//设置删除标记1:

已删0:

未删

tag=1;

}

voidaddreader(intn,char*na)

{//增加读者

tag=0;

no=n;

strcpy(name,na);

for(inti=0;i

borbook[i]=0;

}

voidborrowbook(intbookid)

{//借书操作

for(inti=0;i

{

if(borbook[i]==0)

{

borbook[i]=bookid;

return;

}

}

}

intretbook(intbookid)

{//还书操作

for(inti=0;i

{

if(borbook[i]==bookid)

{

borbook[i]=0;

cout<<"还书成功!

"<

return1;

}

}

 

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()

{

charchoice1;

charrname[20];

intreaderid;

charreadername[10];

intchoice2;

Reader*r;

while(choice1!

='0')

{

cout<<"\n\t\t\t**读者信息**\n"<

cout<<"\t\t\t**1.新增**"<

cout<<"\t\t\t**2.更改**"<

cout<<"\t\t\t**3.删除**"<

cout<<"\t\t\t**4.查找**"<

cout<<"\t\t\t**5.显示**"<

cout<<"\t\t\t**6.全删**"<

cout<<"\t\t\t**0.返回**"<

cout<<"\t\t\t请选择:

";

cin>>choice1;

switch(choice1)

{

case'1':

cout<<"请输入读者编号:

";

cin>>readerid;

cout<<"请输入读者姓名:

";

cin>>rname;

addreader(readerid,rname);

read[top]=s;

}

file.close();//关闭reader.txt文件

}

voidclear()

{//删除所有读者信息

top=-1;

}

intaddreader(intn,char*na)

{//添加读者时先查找是否存在

Reader*p=queryid(n);

if(p==NULL)

{

top++;

read[top].addreader(n,na);

return1;

}

else

cout<<"该编号已经存在!

";

return0;

}

Reader*queryid(intreaderid)

{//按读者编号查找

for(inti=0;i<=top;i++)

if(read[i].getno()==readerid&&read[i].gettag()==0)

{

return&read[i];

}

returnNULL;

}

Reader*queryname(charreadername[10])

{//按读者姓名查找

for(inti=0;i<=top;i++)

if(strcmp(read[i].getname(),readername)==0&&read[i].gettag()==0)

{

return&read[i];

}

returnNULL;

}

 

cout<<"添加读者成功!

"<

getch();

break;

case'2':

cout<<"请输入读者编号:

";

cin>>readerid;

r=queryid(readerid);

if(r==NULL)

{

cout<<"该读者不存在!

"<

break;

}

cout<<"请输入新的姓名:

";

cin>>rname;

r->setnam

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1