图书馆管理系统.docx
《图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
![图书馆管理系统.docx](https://file1.bdocx.com/fileroot1/2023-1/29/39c15927-2f45-473f-beb4-ac1131b88fa5/39c15927-2f45-473f-beb4-ac1131b88fa51.gif)
图书馆管理系统
图书管理系统
1、设计目的
图书管理系统主要目的是对图书馆种类繁多的书籍进行管理,并且合理管理好用户的借还信息,提高图书馆的工作效率,降低管理成本。
由于图书馆在正常的运营过程中面对大量书籍、读者信息,以及两者间相互产生的借书信息、还书信息。
人工记录方法即效率低又错误过多,大大影响了图书馆的正常馆的正常管理工作。
因需要对书籍、读者资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,有利于管理效率的提高。
二、案例需求
1、案例描述
模拟图书管理系统的部分功能功能,包括读者注册、读者借阅、图书管理、用户管理等。
2、功能说明
(1)模拟图书管理系统的流程,包括读者注册、读者借阅、图书管理、用户管理等。
(2)管理员登陆的初始密码是1234。
(3)借阅图书数目受系统设置的最大借阅量的限制,系统的图书总数和用户总数受系统设置最大量的限制。
3、案例分析
本案例涉及两个方面的内容。
一个是用户可以进行信息的查询,借书还书等基本操作。
管理员凭借密码可以进行图书和用户的相关操作。
图书类具有“图书编号”、“图书名称”、“删除标记”、“是否在架”等基本属性。
需要实现“获取书名”、“获取图书编号”、“获取删除标记”、“读出所有图书信息”、“借书操作”、“还书操作”、“增加图书”、“删除图书”等操作。
把这些操作定义为图书类的成员函数。
图书库类的具有“借阅记录指针”、“图书记录”、“当前图书最大编号”等基本属性。
需要实现“增加图书”、“查找图书”、“读出所有图书信息”等操作。
把这些操作定义为图书库类的成员函数。
读者类具有“读者编号”、“读者姓名”、“删除标记”等基本特性。
需要实现“获取姓名”、“获取删除标记”、“获取读者编号”、“还书操作”、“记录所借图书”、“增加读者”、“借书操作”、“读出所有读者信息”等操作。
把这些定义为读者类的成员函数。
读者库类具有“读者记录指针”、“读者记录”、“当前读者最大编号”等特性性。
需要实现“添加读者”、“查询读者信息”、“输出所有读者信息”等操作。
把这些操作定义为图书库类的成员函数。
3、案例设计
1、类的设计
根据以上的设计思想,设计了四个类:
图书类、图书库类、读者类和读者库类。
图书类定义了对基本图书信息的模拟,包括获取书名、获取图书编号、获取删除标记、读出所有图书信息、借书操作、还书操作、增加图书、删除图书等功能。
图书库类定义了对基本图书入库管理的模拟,包括图书管理界面、增加图书、查找图书、读出所有图书信息等功能。
读者类完成对基本读者信息记录的存储,包括获取姓名、获取删除标记、获取读者编号、借书操作、还书操作、记录所借图书、增加读者、读出所有读者信息等功能。
读者库类定义了基本对图书对图书入库管理的模拟,包括读者管理界面、添加读者、输出所有读者信息、查询读者信息等功能。
类的定义保存在头文件database.h中,类的实现保存在database.cpp文件中。
(1)Book类的类图如下图所示
Book
-id:
int
-tag:
int
-oneself:
int
-name[20]:
int
+Book()
+getid():
int
+gettag():
int
+borrowbook():
int
+*getname():
char
+setname(char*na)():
void
+delbook():
void
+addbook():
void
+returnbook():
void
+show():
void
Book类图
(2)B_Data类的设计
B_Data类如下图所示
B_Data
-top:
int
-maxid:
int
-book[MAXBOOKS]
+B_Data()
+~B_Data()
+addbook():
int
+bookdata():
void
+show():
void
+*search()
B_Data类图
(3)Reader类的设计
Reader类图如下图所示
Reader
-id:
int
-tag:
int
-name[20]:
int
+Reader()
+getid():
int
+gettag():
int
+returnbook():
void
+borbook[MAXBORROWED]():
int
+*getname():
char
+setname():
void
+delbook():
void
+addreader():
void
+borrowbook():
int
+show():
void
Reader类图
(4)R_Data类的设计
R_Data类图如下图所示
R_Data
-top:
int
-maxid:
int
-read[MAXREADERS]
+R_Data()
+~R_Data()
+addreader():
int
+show():
void
+usershow():
void
+readerdata():
void
+*search()
R_Data类图
2、主程序设计
四个类Book类、B_Data类、Reader类及R_Data类完成了一个完整的图书管理系统的基本功能。
在主函数main()中,生成主界面分别指向用户登录和管理员登录。
用户登录处,可以进行新用户注册和老用户登录的界面。
新用户可以进行借书,还书,查询借阅情况等信息;管理员输入密码正确后进入系统,分别进行图书管理和用户管理等。
分别具有添加、删除、查找等基本功能。
4、案例实现
//Param.h参数定义头文件
#ifndefPARAM_H_
#definePARAM_H_
#include
#include
#include
#include
#include
constintMAXREADER=40000;//系统可容纳的读者
constintMAXBOOKS=1000000;//系统中可容纳的图书
constintMAXBORROWED=5;//每个读者最多借十本书
usingnamespacestd;
#endif
//database.h系统类定义头文件
#ifndefDATABASE_H_
#defineDATABASE_H_
#include"Param.h"
classReader//读者类
{
public:
Reader();//构造函数,初始化读者信息
intgettag();//获取删除标记
intgetid();//获取读者编号
intreturnbook(intbookid);//还书操作
intborbook[MAXBORROWED];//记录所借图书
char*getname();//获取姓名
voidsetname(charna[]);//设置姓名
voiddelbook();//设置删除标记
voidaddreader(intn,char*na);//增加读者
voidborrowbook(intbookid);//读出读者信息
voidshow();
private:
inttag;//删除标记1:
已删0:
未删
intid;//读者编号
charname[20];//读者姓名
};
classR_Data//读者库
{
public:
R_Data();//构造函数,将reader.txt读到read[]中
~R_Data();//析构函数,将read[]写到reader.txt
intaddreader(char*na);//添加读者
voidshow();//输出所有读者信息
voidusershow(intreaderid);//输出读者信息
voidreaderdata();//读者管理
Reader*search(intreaderid);//按编号查找
private:
intmaxid;//当前最大读者编号
inttop;//读者记录指针
Readerread[MAXREADER];//读者记录
};
classBook//图书类
{
public:
Book();//构造函数,初始化图书信息
intgettag();//获取删除标记
intgetid();//获取图书编号
intborrowbook();//借书操作
char*getname();//获取书名
voidsetname(charna[]);//设置书名
voiddelbook();//删除图书
voidaddbook(intn,char*na);//增加图书
voidreturnbook();//还书操作
voidshow();//读出所有图书信息
private:
inttag;//删除标记1:
已删0:
未删
intid;//图书编号
intonshelf;//是否在架1:
在架2:
已删
charname[20];//图书名称
};
classB_Data//图书库
{
public:
B_Data();//构造函数,将book.txt读到book[]中
~B_Data();//析构函数,将book[]写到book.txt
intaddbook(char*na);//增加图书
voidshow();//读出所有的图书
voidbookdata();//图书管理
Book*search(intbookid);//查找图书
private:
intmaxid;//当前图书最大编号
inttop;//图书记录指针
Bookbook[MAXBOOKS];//图书记录
};
#endif
//database.cpp类操作定义文件
#include"database.h"
Reader:
:
Reader()//构造函数,初始化读者信息
{
id=0;
tag=0;
for(inti=0;iborbook[i]=0;
}
char*Reader:
:
getname()//获取姓名
{
returnname;
}
intReader:
:
gettag(){returntag;}//获取删除标记
intReader:
:
getid(){returnid;}//获取读者编号
voidReader:
:
setname(charna[]){strcpy(name,na);}//设置姓名
voidReader:
:
delbook()//设置删除标记
{
for(inti=0;i{
if(borbook[i]!
=0)
{
cout<<"读者"<return;
}
}
tag=1;
cout<<"读者删除成功"<}
voidReader:
:
addreader(intn,char*na)//增加读者
{
tag=0;
id=n;
strcpy(name,na);
for(inti=0;iborbook[i]=0;
cout<cout<<"读者添加成功,读者编号为"<cout<<"请牢记该编号,这是你在本系统中的登录号码"<}
voidReader:
:
borrowbook(intbookid)//借书操作
{
for(inti=0;i{
if(borbook[i]=0)
{
cout<return;
}
}
}
intReader:
:
returnbook(intbookid)//还书操作
{
for(inti=0;i{
if(borbook[i]=bookid)
{
borbook[i]=0;
cout<return1;
}
}
return0;
}
voidReader:
:
show()//读出读者信息
{
cout<";
for(inti=0;i{
if(borbook[i]!
=0)
{
cout<<"["<}
}
}
R_Data:
:
R_Data()
{
Readers;
top=0;
fstreamfile("reader.txt",ios:
:
in);
while
(1)
{
file.read((char*)&s,sizeof(s));
if(!
file)break;
top++;
read[top]=s;
}
maxid=read[top].getid();
file.close();
}
intR_Data:
:
addreader(char*na)
{
top++;
maxid++;
read[top].addreader(maxid,na);
return1;
}
Reader*R_Data:
:
search(intreaderid)
{
for(inti=1;i<=top;i++)
if(read[i].getid()==readerid&&read[i].gettag()==0)
return&(read[i]);
returnNULL;
}
voidR_Data:
:
show()
{
if(top==0)
{
cout<return;
}
for(inti=1;i<=top;i++)
read[i].show();
}
voidR_Data:
:
usershow(intreaderid)
{
read[readerid].show();
}
voidR_Data:
:
readerdata()
{
charchoice=1;
charrname[20];
intreaderid;
Reader*r;
while(choice!
='0')
{
cout<<"读者管理"<cout<<"1、增加读者信息"<cout<退出读者管理"<";
cin>>choice;
switch(choice)
{
case'1':
cout<<"输入读者姓名:
";
cin>>rname;
addreader(rname);
break;
case'2':
cout<<"输入读者编号:
";
cin>>readerid;
r=search(readerid);
if(r==NULL)
{
cout<break;
}
cout<<"输入新的读者名:
";
cin>>rname;
r->setname(rname);
break;
case'3':
cout<<"输入读者编号:
";
cin>>readerid;
r=search(readerid);
if(r=NULL)
{
cout<break;
}
r->delbook();
break;
case'4':
cout<<"读入读者的编号:
";
cin>>readerid;
r=search(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<break;
}
r->show();
break;
case'5':
show();
break;
case'0':
break;
default:
cout<<"输入错误,请重新输入"<}
}
}
R_Data:
:
~R_Data()
{
fstreamfile("reader.txt",ios:
:
out);
for(inti=1;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&(read[i]),sizeof(read[i]));
file.close();
}
Book:
:
Book()
{
id=0;
tag=1;
onshelf=1;
}
char*Book:
:
getname()
{
returnname;
}
intBook:
:
gettag()
{
returntag;
}
intBook:
:
getid(){returnid;}
voidBook:
:
setname(charna[]){strcpy(name,na);}
voidBook:
:
delbook()
{
onshelf=1;
tag=1;
}
voidBook:
:
addbook(intn,char*na)
{
tag=0;
id=n;
strcpy(name,na);
onshelf=1;
cout<cout<<"图书添加成功,图书编号为"<cout<<"请牢记该编号,这是该图书在本系统中的使用号码"<}
intBook:
:
borrowbook()
{
if(onshelf=1)
{
onshelf=0;
return1;
}
return0;
}
voidBook:
:
returnbook()
{
onshelf=1;
}
voidBook:
:
show()
{
cout<"可借":
"借出")<}
B_Data:
:
B_Data()
{
Bookb;
top=0;
fstreamfile("book.txt",ios:
:
in);
while
(1)
{
file.read((char*)&b,sizeof(b));
if(!
file)break;
top++;
book[top]=b;
}
maxid=book[top].getid();
file.close();
}
intB_Data:
:
addbook(char*na)
{
top++;
maxid++;
book[top].addbook(maxid,na);
return1;
}
Book*B_Data:
:
search(intbookid)
{
for(inti=1;i<=top;i++)
if(book[i].getid()==bookid&&book[i].gettag()==0)
return&(book[i]);
returnNULL;
}
voidB_Data:
:
show()
{
if(top==0)
{
cout<return;
}
for(inti=1;i<=top;i++)
if(book[i].gettag()==0)
book[i].show();
}
voidB_Data:
:
bookdata()
{
charchoice='1';
charbname[40];
intbookid;
Book*b;
while(choice!
='0')
{
cout<<"图书管理"<cout<<"1、增加图书信息"<cout<退出图书管理"<";
cin>>choice;
switch(choice)
{
case'1':
cout<<"输入图书书名:
";
cin>>bname;
addbook(bname);
break;
case'2':
cout<<"输入图书编号:
";
cin>>bookid;
b=search(bookid);
if(b==NULL)
{
cout<getid()<<"的图书"<break;
}
cout<<"输入新的书名:
";
cin>>bname;
b->setname(bname);
break;
case'3':
cout<<"输入图书编号:
";
cin>>bookid;
b=search(bookid);
if(b=NULL)
{
cout<getid()<<"的图书"<break;
}
b->delbook();
break;
case'4':
cout<<"读入图书的编号:
";
cin>>bookid;
b=search(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<break;
}
b->show();
break;
case'5':
show();
break;
case'0':
break;
de