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