图书借阅管理系统Word文件下载.docx
- 文档编号:16775101
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:35
- 大小:80.67KB
图书借阅管理系统Word文件下载.docx
《图书借阅管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《图书借阅管理系统Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。
B.若所输入图书编号存在,则判断该书籍是否已被借出,若已借则不允许执行借书操作。
C.若所输入图书未借,则提示输入读者姓名,判断所输入读者姓名是否存在,若不存在则提示重新输入。
D.若读者姓名存在,则允许执行借书操作。
E.借书处理包括在“图书状态”中加上“已借”标记。
④还书:
A.输入所借书编号,判断该编号是否存在,若不存在则提示重新输入。
B.判断该书是否已借出,若未借则不允许执行还书操作。
C.借书处理包括在“图书状态”中加上“未借”标记。
⑤查询图书:
通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
⑥查看借阅情况:
输入读者姓名,若该姓名不存在则提示重新输入,若该姓名存在则显示该读者借阅信息。
三.算法设计
1.流程图(部分示例)
①管理员登录
②读者登录
③读者借阅图书
④管理员或读者按书名查找图书
2.代码实现
#include<
iostream>
iomanip>
string>
fstream>
//文件流
conio.h>
#defineBookFile"
book.txt"
//将字符串BookFile替换原文件中的宏名称book
#defineReaderFile"
reader.txt"
usingnamespacestd;
//**********读者结构体,用于存放读者基本信息**********
classReader
{
private:
charrname[10];
charrclass[10];
charrtel[10];
public:
Reader()//构造函数,实现数据初始化
{strcpy(rname,"
"
);
strcpy(rclass,"
strcpy(rtel,"
}//初始化
voidset_rname(char*rn)//设置读者姓名
{strcpy(rname,rn);
}//将rn的字符复制给rname
char*get_rname()//获得读者姓名
{returnrname;
}//返回rname的值
voidset_rclass(char*rc)//设置班级
{strcpy(rclass,rc);
}
char*get_rclass()//获得班级
{returnrclass;
voidset_rtel(char*rt)//设置电话
{strcpy(rtel,rt);
char*get_rtel()//获得电话
{returnrtel;
}
voidcopy(Readerm)//读者Reader结构体copy函数
{strcpy(rname,m.get_rname());
strcpy(rclass,m.get_rclass());
strcpy(rtel,m.get_rtel());
};
//*********读者管理结构体,实现对读者用户的管理*********
classReaderManage
{Readerreaders[50];
//定义读者结构体数组对象,最多50位
intlength;
voidreadFile()//读取读者文件函数
{ifstreamfread;
//定义输入文件流对象fread
length=0;
//计数
if(!
fread)
{cout<
<
读取磁盘文件失败!
endl;
exit
(1);
fread.open(ReaderFile,ios:
:
binary);
//使文件流与文件关联,以二进制方式打开
inti=0;
while((fread.read((char*)&
readers[i],sizeof(Reader))))//计算并返回所占字节数
i++;
length=i;
fread.close();
//关闭磁盘文件
}
voidsaveFile()//保存读者文件
{ofstreamfwrite;
//定义输出文件流对象fwrite
fwrite)
文件保存失败!
\n"
;
exit
(1);
fwrite.open(ReaderFile,ios:
fwrite.write((char*)readers,length*sizeof(Reader));
//计算并返回所占字节数
fwrite.close();
//关闭磁盘文件
ReaderManage()//构造函数,读取读者文件
{readFile();
~ReaderManage()//析构函数,保存读者文件
{saveFile();
voidadd_reader(Readerr)//添加读者用户函数
{if(length>
=50)
{cout<
对不起,注册人数已满!
return;
readers[length].copy(r);
//调用读者结构体copy函数
length++;
intsearch(char*rn)//按姓名查找读者函数
{for(inti=0;
i<
length;
i++)
if(strcmp(readers[i].get_rname(),rn)==0)//判断是否相等
returni;
return-1;
boolrevise(Readerreader,inti)//修改读者资料函数
{readers[i].copy(reader);
//调用读者结构体cpoy函数
returntrue;
voiddelete_reader(intindex)//删除读者函数
{for(inti=index;
length-1;
readers[i].copy(readers[i+1]);
//用后面的地址覆盖前面的地址
length--;
boollog_reader(Readerr)//登录时判断读者用户是否存在函数,相当于遍历
i++)
if(strcmp(readers[i].get_rname(),r.get_rname())==0)
returntrue;
returnfalse;
voidreg_reader()//注册用户函数
{charn[10];
//姓名name
charc[10];
//班级class
chart[10];
//电话tel
Readerreader;
cout<
\n\t请输入您的姓名:
cin>
>
n;
\n\t请输入您的所在班级:
c;
\n\t请输入您的联系电话:
t;
reader.set_rname(n);
//调用读者结构体设置读者姓名函数
reader.set_rclass(c);
//调用读者结构体设置读者班级函数
reader.set_rtel(t);
//调用读者结构体设置联系电话函数
add_reader(reader);
//调用读者结构体添加读者函数
cout<
\n\t注册成功!
voidshow_reader()//不带参的显示读者信息函数
{
\n☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆\n\n"
姓名\t\t\t班级\t\t\t电话\n"
for(inti=0;
{cout<
readers[i].get_rname();
cout<
\t\t\t"
readers[i].get_rclass();
readers[i].get_rtel()<
}
voidshow_reader(inti)//带参的显示读者信息函数
\n☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆\n\n"
}
//********书籍结构体,用于存放书籍基本信息********
classBook
{
charbnum[10];
//书号
charbname[20];
//书名
charbauthor[10];
//作者
//借阅人
inttag;
//状态标记判断指标(已借/在架)
Book()//构造函数初始化信息
{strcpy(bnum,"
strcpy(bname,"
strcpy(bauthor,"
strcpy(rname,"
tag=0;
voidset_bnum(char*no)//设置书号
{strcpy(bnum,no);
}//把字符串no中的字符复制到字符串bnum中
char*get_bnum()//获得书号
{returnbnum;
}//返回值为bnum
voidset_bname(char*n)//设置书名
{strcpy(bname,n);
char*get_bname()//获得书名
{returnbname;
voidset_bauthor(char*a)//设置作者
{strcpy(bauthor,a);
char*get_bauthor()//获得作者姓名
{returnbauthor;
voidset_tag(intt)//状态设置
{tag=t;
voidset_rname(char*rn)//设置借阅人
char*get_rname()//获得借阅人姓名
voidshow_tag()//显示图书状态
{if(tag==1)
已借"
else
在架"
voidcopy(Bookm)//Book结构体copy函数
{strcpy(bnum,m.get_bnum());
//将获得书号函数里的返回值里的字符复制到bnum
strcpy(bname,m.get_bname());
strcpy(bauthor,m.get_bauthor());
tag=0;
//**********书籍管理结构体,实现管理书籍功能**********
classBookManage
Bookbooks[100];
//定义Book书籍结构体数组对象,最大容量100本
voidsaveFile()//保存书籍文件
//定义输出文件流ofstream结构体对象fwrite
if(!
fwrite.open(BookFile,ios:
//使文件流与文件建立关联,以二进制方式打开
fwrite.write((char*)books,length*sizeof(Book));
//计算并返回所占字节数
voidreadFile()//读取书籍文件
文件读取失败!
Booktemp;
//定义书籍结构体临时对象temp
inti=0;
fread.open(BookFile,ios:
while((fread.read((char*)&
books[i],sizeof(Book))))
//每读完一次,指针后移一位,直到不能读出正确结果为止
length=i;
BookManage()//构造函数,读取磁盘文件
{length=0;
//从头读起,计数,最大100
readFile();
//调用读取文件函数
~BookManage()//析构函数,保存磁盘文件
{saveFile();
//调用保存文件函数
booladd(Bookbook)//添加图书资料
=100)
对不起,储存已满,您无法继续添加!
else
{books[length].copy(book);
//调用书籍结构体copy函数
return(length-1);
intbnu_search(char*bnu)//按书号查找书籍
if(strcmp(books[i].get_bnum(),bnu)==0)//字符串比较,判断是否相等
returni;
intbna_search(char*bna)//按书名查找书籍
if(strcmp(books[i].get_bname(),bna)==0)//判断
intbau_search(char*bau)//按作者查找书籍
if(strcmp(books[i].get_bauthor(),bau)==0)//判断
intrn_search(char*rn)//按借阅人查找书籍
if(strcmp(books[i].get_rname(),rn)==0)//判断
voidrevise(Bookbook,inti)//带参的修改书籍函数
{books[i].copy(book);
}//调用Book结构体copy函数
voiddeleteBook(intindex)//带参的删除书籍资料函数
books[i].copy(books[i+1]);
//用后面的地址将当前的地址覆盖
length--;
voidshow_book()//不带参的显示书籍函数
{cout<
☆☆☆☆☆☆☆☆☆☆☆书★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆\n\n"
书号"
cout.width(10);
书名"
作者"
cout.width(17);
状态"
cout.width(25);
借阅人\n"
books[i].get_bnum();
books[i].get_bname();
books[i].get_bauthor();
cout.width(20);
books[i].show_tag();
books[i].get_rname()<
voidshow_book(inti)//带参的显示书籍函数
voidbr_book()//读者借、还书功能函数
{ReaderManagereader;
intchoi;
//选择
inta;
//图书状态指标(1已借2在架)
charsh[10];
//需要还书的书号
chardz[10];
//读者姓名
sh;
intindex=bnu_search(sh);
//定义一个变量等于查找到的书号
if(index>
=0)
{if(books[index].tag==1)//已借
a=1;
if(books[index].tag==0)//在架
a=2;
switch(a)
{case1:
\n\t该书目前状态为<
已借出>
\n\t请选择您需要的服务:
1:
还书0:
返回\n"
choi;
cin.ignore();
//清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响
if(choi!
=1&
&
choi!
{cout<
\n\t操作有误,请重新选择(0/1)!
return;
}
elseif(choi==1)
\n\t请输入您的姓名:
dz;
intindex1=reader.search(dz);
if(index1==-1)
{cout<
\n\t对不起,系统无该读者记录,新用户请先注册!
return;
}
else
{strcpy(dz,"
//将读者姓名已空白代替
books[index].set_rname(dz);
//借阅人一项变为空白
books[index].set_tag(0);
//图书状态变为在架
cout<
\n\t还书成功!
}break;
case2:
在馆>
\n\t请您需要的服务:
借书0:
}
cin>
intindex1=reader.search(dz);
if(index1==-1)
\n\t对不起,系统无改读者记录,新用户请先
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 借阅 管理 系统