图书借阅管理系统.docx
《图书借阅管理系统.docx》由会员分享,可在线阅读,更多相关《图书借阅管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
图书借阅管理系统
一、需求分析
管理员功能:
①登录:
输入管理员密码,若密码错误则不得执行管理员操作。
②添加新书:
增加新的图书资料,同时需检查新书的图书编号是否已存在于
原图书资料中,若已存在则应取消添加或提示重新输入。
③修改图书:
通过编号查询该图书资料,若该编号存在,则显示已有信息,
允许修改,否则提示无该图书信息。
④删除图书:
通过编号查询该图书资料,若该编号存在,则显示已有信息,
允许删除,否则提示无该图书信息。
删除对象包括该图书资料
以及“图书状态”和“借阅人”中与此书相关的所有记录。
⑤查找图书:
A.按书号查找:
通过编号查询该图书资料,若该编号存在,则显示图书信
息,否则提示无该图书信息。
B.按书名查找:
通过书名查询该图书资料,若该编号存在,则显示图书信
息,否则提示无该图书信息。
C.按作者查找:
通过作者查询该图书资料,若该编号存在,则显示图书信
息,否则提示无该图书信息。
⑥查看全部图书:
显示所有图书资料,包括书号、书名、作者、状态和借阅
人等信息。
⑦修改读者:
通过姓名查询该读者信息,若该姓名存在,则显示已有信息,
允许修改,否则提示无该读者信息。
⑧删除读者:
通过姓名查询该读者信息,若该姓名存在,则显示已有信息,
允许删除,否则提示无该读者信息。
删除对象包括该读者姓名、
班级、电话以及“图书状态”和“借阅人”中与此人相关的所
有记录。
⑨查看所有读者:
显示所有读者资料,包括姓名、班级、电话等信息。
读者功能:
①登录:
输入读者姓名,若未经注册则不得进入读者服务界面。
②注册:
新用户经注册方可登录系统并使用读者服务功能。
③借书:
A.输入所需图书编号,判断该编号是否存在,若不存在则提示重新输入。
B.若所输入图书编号存在,则判断该书籍是否已被借出,若已借则不允
许执行借书操作。
C.若所输入图书未借,则提示输入读者姓名,判断所输入读者姓名是否
存在,若不存在则提示重新输入。
D.若读者姓名存在,则允许执行借书操作。
E.借书处理包括在“图书状态”中加上“已借”标记。
④还书:
A.输入所借书编号,判断该编号是否存在,若不存在则提示重新输入。
B.判断该书是否已借出,若未借则不允许执行还书操作。
C.借书处理包括在“图书状态”中加上“未借”标记。
⑤查询图书:
A.按书号查找:
通过编号查询该图书资料,若该编号存在,则显示图书信
息,否则提示无该图书信息。
B.按书名查找:
通过书名查询该图书资料,若该编号存在,则显示图书信
息,否则提示无该图书信息。
C.按作者查找:
通过作者查询该图书资料,若该编号存在,则显示图书信
息,否则提示无该图书信息。
⑥查看借阅情况:
输入读者姓名,若该姓名不存在则提示重新输入,若该姓
名存在则显示该读者借阅信息。
二、总体设计
经过需求分析,本系统共设计了五个大模块,分别是书籍数据维护模块、书籍管理模块、读者数据维护模块、读者管理模块和菜单模块。
接着相应定义了五个结构体,分别是书籍结构体(Book)、书籍管理结构体(BookManage)、读者结构体(Reader)、读者管理结构体(ReaderManage)和菜单结构体(Menu)。
书籍结构体(Book)的功能在于存放和维护书籍的基本信息,包括书号、书名、作者、状态(已借/在架)和借阅人;书籍管理结构体(BookManage)的功能在于实现对书籍的相关操作,包括读取书籍文档文件(book.txt)、保存书籍文档文件、添加图书、修改图书、删除图书、显示全部图书和查找图书;读者结构体(Reader)的功能在于存放和维护读者的基本信息,包括姓名、班级和电话;读者管理结构体(ReaderManage)的功能在于实现对读者的相关操作,包括读取读者文档文件(reader.txt)、保存读者文档文件、新读者注册、修改读者、删除读者、显示全部读者和查找读者;菜单结构体(Menu)的功能在于实现各界面的引导工作,包括主登录界面、系统管理界面、读者登录界面、读者服务界面、管理员书籍查找界面和读者书籍查找界面。
系统层次结构图
流程图(部分示例)
①管理员登录
②读者登录
③读者借阅图书
三、详细设计
书籍结构体(Book)
①私有数据
charbnum[10];//书号
charbname[20];//书名
charbauthor[10];//作者
charrname[10];//借阅人
②公有数据及公有函数
inttag;//状态标记判断指标(已借/在架)
Book()//构造函数初始化信息
voidset_bnum(char*no)//设置书号
char*get_bnum()//获得书号
voidset_bname(char*n)//设置书名
char*get_bname()//获得书名
voidset_bauthor(char*a)//设置作者
char*get_bauthor()//获得作者姓名
voidset_tag(intt)//状态设置
voidset_rname(char*rn)//设置借阅人
char*get_rname()//获得借阅人姓名
voidshow_tag()//显示图书状态
voidcopy(Bookm)//Book结构体copy函数
书籍管理结构体(BookManage)
①私有数据及函数
Bookbooks[100];//定义Book书籍结构体数组对象,最大容量100本
intlength;//计数
voidsaveFile()//保存书籍文件
voidreadFile()//读取书籍文件
②公有数据及函数
BookManage()//构造函数,读取磁盘文件
~BookManage()//析构函数,保存磁盘文件
booladd(Bookbook)//添加图书资料
intbnu_search(char*bnu)//按书号查找书籍
intbna_search(char*bna)//按书名查找书籍
intbau_search(char*bau)//按作者查找书籍
intrn_search(char*rn)//按借阅人查找书籍
voidrevise(Bookbook,inti)//带参的修改书籍函数
voiddeleteBook(intindex)//带参的删除书籍资料函数
voidshow_book()//不带参的显示书籍函数
voidshow_book(inti)//带参的显示书籍函数
voidbr_book()//读者借、还书功能函数
boolin(inti)//判断图书是否在架函数
读者结构体(Reader)
①私有数据及函数
charrname[10];//读者姓名
charrclass[10];//班级
charrtel[10];//电话
②公有数据及函数
Reader()//构造函数,实现数据初始化
voidset_rname(char*rn)//设置读者姓名
char*get_rname()//获得读者姓名
voidset_rclass(char*rc)//设置班级
char*get_rclass()//获得班级
voidset_rtel(char*rt)//设置电话
char*get_rtel()//获得电话
voidcopy(Readerm)//读者Reader结构体copy函数
读者管理结构体(ReaderManage)
①私有数据及函数
Readerreaders[50];//定义读者结构体数组对象,最多50位
intlength;//计数
voidreadFile()//读取读者文件函数
voidsaveFile()//保存读者文件
②公有数据及函数
ReaderManage()//构造函数,读取读者文件
~ReaderManage()//析构函数,保存读者文件
voidadd_reader(Readerr)//添加读者用户函数
intsearch(char*rn)//按姓名查找读者函数
boolrevise(Readerreader,inti)//修改读者资料函数
voiddelete_reader(intindex)//删除读者函数
boollog_reader(Readerr)//登录时判断读者用户是否存在函数
voidreg_reader()//注册用户函数
voidshow_reader()//不带参的显示读者信息函数
voidshow_reader(inti)//带参的显示读者信息函数
菜单结构体(Menu)
①私有数据及函数
BookManagebm;//定义书籍管理结构体对象bm
ReaderManagerm;//定义读者管理结构体对象rm
Readerr;//定义读者结构体对象r
intchoice;//菜单序号选择
intkey;//管理员密码
②公有数据及函数
voidheader()//页眉
voidlog_menu()//主界面登录菜单
voidadmin_menu()//管理员管理菜单
voidreader_menu()//读者服务菜单
voidbsearch_menu()//读者查找书籍菜单
voidabsearch_menu()//管理员查找书籍菜单
voidreader_lr()//读者登录或注册菜单
voidlog_admin()//管理员登录
voidrn_search()//按书号查找函数
voidbnu_search()//按书号查找函数
voidbna_search()//按书名查找函数
voidbau_search()//按作者查找函数
voidaddBook()//新增书籍函数
voidreviseBook()//修改书籍函数
voiddelBook()//删除书籍函数
voidreviseReader()//修改读者用户函数
voiddelReader()//删除读者用户函数
主函数(main)
intmain()
四、编码
#include
#include
#include
#include
#include
#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()//获得电话
cin.ignore();//清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响
switch(choice)
{
case1:
log_admin();//管理员登录,需密码验证
break;
case2:
reader_lr();//读者登录或注册
break;
case0:
break;
default:
cout<<"\n\t您的操作有误,请重新选择(0→2):
";
gotochoice;
}
}
voidadmin_menu()//管理员管理菜单
{
system("cls");
system("colorf9");
cout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\t※※\n";
cout<<"\t※****************系**统**管**理**界**面**************※\n";
cout<<"\t※※\n";
cout<<"\t※1:
添加新的图书资料2:
修改已有图书资料※\n";
cout<<"\t※※\n";
cout<<"\t※3:
删除已有图书资料4:
查找已有图书资料※\n";
cout<<"\t※※\n";
cout<<"\t※5:
查看所有图书资料6:
修改读者用户信息※\n";
cout<<"\t※※\n";
cout<<"\t※7:
删除读者用户信息8:
查看所有读者信息※\n";
cout<<"\t※※\n";
cout<<"\t※9:
返回系统登录界面0:
退出图书管理系统※\n";
cout<<"\t※※\n";
cout<<"\t※※\n";
cout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\n\t请选择您需要的服务序号:
";
choice:
cin>>choice;
cin.ignore();
switch(choice)
{
case1:
//添加图书
addBook();
bm.~BookManage();
break;
case2:
//修改图书
reviseBook();
bm.~BookManage();
break;
case3:
//删除图书
delBook();
bm.~BookManage();
break;
case4:
//查找图书
absearch_menu();
break;
case5:
//查看全部图书
bm.show_book();
cout<<"\n\t显示完毕!
";
system("pause");
admin_menu();
break;
case6:
//修改读者
reviseReader();
rm.~ReaderManage();
break;
case7:
//删除读者
delReader();
voidreader_menu()//读者服务菜单
{
system("cls");
system("colorf9");
cout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\t※※\n";
cout<<"\t※****************读**者**服**务**界**面**************※\n";
cout<<"\t※※\n";
cout<<"\t※1:
借阅图书2:
归还图书※\n";
cout<<"\t※※\n";
cout<<"\t※3:
查找图书4:
借阅情况※\n";
cout<<"\t※※\n";
cout<<"\t※5:
返上一级0:
退出系统※\n";
cout<<"\t※※\n";
cout<<"\t※※\n";
cout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\n\t请选择您需要的服务序号:
";
choice:
cin>>choice;
cin.ignore();
switch(choice)
{
cout<<"\n\t操作有误,请重新选择<0→4>";
break;
}
}
voidabsearch_menu()//管理员查找书籍菜单
{
system("cls");
system("colorf2");
cout<<"\t\t\t※※※※※※※※※※※※※※※※※\n";
cout<<"\t\t\t※※\n";
cout<<"\t\t\t※****书**籍**查**找**界**面****※\n";
cout<<"\t\t\t※※\n";
cout<<"\t\t\t※1:
按书号查找※\n";
cout<<"\t\t\t※※\n";
cout<<"\t\t\t※2:
按书名查找※\n";
cout<<"\t\t\t※※\n";
cout<<"\t\t\t※3:
按作者查找※\n";
cout<<"\t\t\t※※\n";
cout<<"\t\t\t※4:
返回上级※\n";
cout<<"\t\t\t※※\n";
cout<<"\t\t\t※0:
退出系统※\n";
cout<<"\t\t\t※※\n";
cout<<"\t\t\t※※※※※※※※※※※※※※※※※\n";
intbsc;//booksearchchoice
cout<<"\n\t请输入您需要的服务序号:
";
cin>>bsc;
cin.ignore();
switch(bsc)
{
case1:
bnu_search();
break;
case2:
bna_search();
break;
case3:
bau_search();
break;
case4:
admin_menu();
break;
case5:
exit
(1);
default:
cout<<"\n\t操作有误,请重新选择<0→4>";
break;
}
}
voidreader_lr()//读者登录或注册菜单
{
system("cls");
header();
system("colorf1");
cout<<"\n\t\t\t<读者登录界面>\n";
cout<<"\n\t\t\t1:
登录\t2:
注册\n\n\t\t\t3:
返回\t0:
退出\n\t您的选择是:
";
intrlc;//readerloginchoice
choice:
cin>>rlc;
cin.ignore();
switch(rlc)
{
case1:
//已注册读者登录
cout<<"\n\t请输入您的姓名:
";
charrn[10];//readername
cin>>rn;
r.set_rname(rn);
if(rm.log_reader(r))
{
cout<<"\n\t登录成功!
";
system("pause");
reader_menu();
}
else
cout<<"\n\t登录失败!
新用户请先注册!
";
system("pause");
reader_lr();
break;
case2:
//新用户注册
rm.reg_reader();
rm.~ReaderManage();
system("pause");
reader_lr();
break;
case3:
system("cls");
log_menu();
case0:
exit
(1);
break;
default:
cout<<"\n\t您的操作有误,请重新选择(0→2):
";
gotochoice;
}
}
voidlog_admin()//管理员登录
{
cout<<"\n\t请输入管理员密码:
";
intkey;
cin>>key;
if(key==2009)
{
cout<<"\n\t登录成功!
\n\n\t";
system("pause");
admin_menu();//管理员操作菜单
}
else
{cout<<"\n\t登录失败!
原因是密码错误!
\n";
cout<<"\n\t请选择<1:
返回上一级菜单0:
退出系统>";
cin>>choice;
cin.ignore();
switch(choice)
{
case1:
system("cls");
log_menu();
break;
case0:
exit
(1);
break;
default:
cout<<"\n\t操作有误,请重新选择(0/1)";
}
}
}
voidrn_search()//按书号查找函数
{
charrn[10];//readername
cout<<"\n\t请输入您的姓名:
";
cin>>rn;
intindex=bm.rn_search(rn);
if(index>=0)
bm.show_book(index);
else
cout<<"\n\t对不起,系统无您的借阅记录!
";
cout<<"\n\t";
system("pause");
reader_me