




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C++详细实现完整图书管理功能目录图书管理系统功能概览:
登录,注册学生,老师借书,查看自己当前借书情况,还书。管理员增加书,查看当前借阅情况,查看当前所有借阅人,图书信息。
代码概览:
各个模块主要负责功能
COperationManagement.h负责登录,注册,管理员,将图书,初始化操作,将借阅信息等从文件中读取出来,放入容器中,便于操作,不用一直对文件进行I/O.
CBook.h用于对书抽象,并实现了的重载,便于文件读入,读出
CUser.h工具人,作为老师,学生的父类
CStudent.h对学生进行的抽象
CTeacher.h对老师进行的抽象
CAdministrator.h对管理的抽象
CManagementBooks.h用户所有的相关操作的中间执行者,有设计模式中代理的思想
源.cpp界面的的实现与系统入口
说明:代码100%完整,如果大家不想CV,也可以私聊我发你完整代码,还有就是文件读入建议大家都直接放在相应项目里面,不然就写绝对路径。有问题欢迎大家在评论区提问,喜欢就点个赞咯!
全部代码与讲解:
1.源.cpp
#includeiostream
#include"CBook.h"
#include"CStudent.h"
#include"CManagementBooks.h"
#include"CTeacher.h"
#includefstream
#include"CAdministrator.h"
#include"COperationManagement.h"
usingnamespacestd;
intmain()
CManagementBooksmb;
CUser*user=nullptr;
COperationManagementom;
om.init(mb);
cout"*****欢迎来到图书馆*****"endl;
cout"注意事项"endl;
cout"1.学生最多共可借三本书,老师最多共可借五本"endlendl;
cout"请选择您的登录方式1:老师2:学生3:管理员"endl;
intt;
cint;
if(t==1)
user=newCTeacher;
elseif(t==2)
user=newCStudent;
elseif(t==3)
CAdministratoradmin;
om.adminLogin(admin);
admin.showInfo();
om.adminOperation(admin,mb);
return0;
cout"您是否已有账号?(y/n):"endl;
stringc;
cinc;
if(c=="y")
cout"请登录:"endl;
om.login(user,t);
user-showInfo();
else
cout"来注册一个吧!"endl;
om.Register(user,t);
om.userOperation(user,mb);
deleteuser;
return0;
}
实现效果:
2.COperationManagement.cpp
#include"COperationManagement.h"
voidCOperationManagement::login(CUser*user,intt)
ifstreamreadFile;
ifstreamreadFile1;
if(t==1)
readFile.open("teacherLogin.txt");
readFile1.open("teacher.txt");
else
readFile1.open("student.txt");
readFile.open("studentLogin.txt");
if(!readFile.is_open())
cout"登录数据读取错误"endl;
if(!readFile1.is_open())
cout"用户数据读取错误"endl;
cout"请输入您的学工号:"endl;
stringaccount,password;
cinaccount;
intflag=0;
while(!readFile.eof())
stringact;
readFileact;
if(act==account)
cout"请输入密码:"endl;
cinpassword;
stringpwd;
readFilepwd;
if(pwd==password)
cout"登录成功"endl;
flag=1;
while(!readFile1.eof())
readFile1user;
if(user-getId()==act)
break;
break;
else
cout"密码错误,请重新登录"endl;
login(user,t);
if(!flag)
cout"学工号错误,请重输入"endl;
login(user,t);
readFile.close();
readFile1.close();
voidCOperationManagement::Register(CUser*user,intt)
ofstreamwriteFile;
ofstreamwriteFile1;
if(t==1)
writeFile1.open("teacher.txt",ios::app);
writeFile.open("teacherLogin.txt",ios::app);
else
writeFile1.open("student.txt",ios::app);
writeFile.open("studentLogin.txt",ios::app);
stringpwd,act;
cout"请输入您的学工号作为注册账号:"endl;
cinact;
cout"请输入您的注册密码:"endl;
cinpwd;
writeFileendlact""pwd;
cout"请完善您的相应信息:"endl;
stringname,department,gender;
cout"您的姓名:"endl;
cinname;
cout"您的性别:"endl;
cingender;
cout"您所在的院系:"endl;
cindepartment;
writeFile1endlact""name""gender""department;//这里不能用user,因为在登录时才用,并且并没有初始化
writeFile.close();
writeFile1.close();
cout"注册成功!赶紧登录进入图书管吧!"endl;
login(user,t);
voidCOperationManagement::userOperation(CUser*user,CManagementBooksmb)
while(1)
cout"请选择您的操作1.借书2.查看自己当前借书情况3.还书4.退出"endl;
intt;
cint;
if(t==1)
cout"当前图书馆情况如下:"endl;
mb.showCurrentAllBook();
cout"是否有您想要借阅的图书(y/n)"endl;
strings;
cins;
if(s=="y")
user-borrowBookFromLibrary(mb);
elseif(t==2)
mb.checkBorrowedBook(user-getId());
elseif(t==3)
user-returnBook(mb);
elseif(t==4)
cout"退出成功"endl;
break;
else
cout"暂无此操作,请按提示操作"endl;
voidCOperationManagement::adminLogin(CAdministratoradmin)
ifstreamreadFile("adminLogin.txt");
ifstreamreadFile1("admin.txt");
cout"请输入您的工号:"endl;
stringaccount,password;
cinaccount;
intflag=0;
while(!readFile.eof())
stringact;
readFileact;
if(act==account)
cout"请输入密码:"endl;
cinpassword;
stringpwd;
readFilepwd;
if(pwd==password)
cout"登录成功,欢迎您"endl;
flag=1;
while(!readFile1.eof())
readFile1admin;
if(admin.getId()==act)
break;
break;
else
cout"密码错误,请重新登录"endl;
adminLogin(admin);
if(!flag)
cout"学工号错误,请重输入"endl;
adminLogin(admin);
readFile.close();
readFile1.close();
voidCOperationManagement::init(CManagementBooksmb)
mb.initBooks();
mb.initOutBook();
voidCOperationManagement::adminOperation(CAdministratoradmin,CManagementBooksmb)
while(1)
cout"请选择您的操作1.增加书2.查看当前借阅情况3.查看当前所有图书信息情况4.查看借阅人详细信息5.退出"endl;
intt;
cint;
if(t==1)
admin.addBook(mb);
elseif(t==2)
mb.checekOutBook();
elseif(t==3)
mb.showAllBooksInfo();
elseif(t==4)
stringid;
cout"请输入您要查看借阅人的学工号:"endl;
cinid;
mb.viewBorrowerDetails(id);
elseif(t==5)
cout"退出成功"endl;
break;
else
cout"暂无此操作,请按提示操作"endl;
}
登录效果:
其余功能大家可以自行测试。
CUser.cpp
#include"CUser.h"
#includeiostream
#includefstream
#include"CManagementBooks.h"
usingnamespacestd;
CUser::CUser()
m_name="陈1";
voidCUser::setId(stringid)
m_id=id;
voidCUser::setName(stringname)
m_name=name;
voidCUser::setGender(stringgender)
m_gender=gender;
voidCUser::setDepartment(stringdepartment)
m_department=department;
CUser::~CUser()
voidCUser::returnBook(CManagementBooksmb)
intall=mb.checkBorrowedBook(m_id);
if(all==0)
cout"您暂未借书,无需归还"endl;
else
cout"请输入您要归还的书名:"endl;
stringbookName;
cinbookName;
if(mb.checkTrueBorrow(m_id,bookName))
mb.Return(m_id,bookName);
cout"还书成功"endl;
else
cout"您并未借阅此书"endl;
stringCUser::getId()
returnm_id;
stringCUser::getName()
returnm_name;
stringCUser::getGender()
returnm_gender;
stringCUser::getDepartment()
returnm_department;
std::ostreamoperator(std::ostreamos,constCUser*user)
osendluser-m_id""user-m_name""user-m_gender""user-m_department;
returnos;
std::istreamoperator(std::istreamis,CUser*user)
isuser-m_iduser-m_nameuser-m_genderuser-m_department;
returnis;
}
CTeacher.cpp
#include"CTeacher.h"
#includefstream
CTeacher::CTeacher()
m_name="刘X";
voidCTeacher::borrowBookFromLibrary(CManagementBooksmb)
intall=mb.checkBorrowedBook(m_id);
if(all5)
stringname;
cout"请输入您要借的书名:"endl;
cinname;
if(mb.borrow(name))
ofstreamwriteFile("borrowedBook.txt",ios::app);
mb.setMapValue(m_id,name);
writeFileendlm_id""name;
writeFile.close();
else
cout"您已经超过了最大可借阅数"endl;
voidCTeacher::showInfo()
cout"姓名:"m_name"""学号:"m_id"""性别:"m_gender"""院系:"m_departmentendl;
}
CStudent.cpp
#include"CStudent.h"
#includefstream
usingnamespacestd;
CStudent::CStudent()
m_class="软件";
voidCStudent::showInfo()
cout"姓名:"m_name"""学号:"m_id"""性别:"m_gender"""院系:"m_department"""班级:"m_classendl;
voidCStudent::borrowBookFromLibrary(CManagementBooksmb)
intall=mb.checkBorrowedBook(m_id);
if(all3)
stringname;
cout"请输入您要借的书名:"endl;
cinname;
if(mb.borrow(name))
ofstreamwriteFile("borrowedBook.txt",ios::app);
mb.setMapValue(m_id,name);
writeFileendlm_id""name;
writeFile.close();
else
cout"您已经超过了最大可借阅数"endl;
voidCStudent::setClass(stringClass)
m_class=Class;
stringCStudent::getClass()
returnm_class;
}
CManagementBooks.cpp
#include"CManagementBooks.h"
usingnamespacestd;
voidCManagementBooks::showCurrentAllBook()
for(inti=0;im_allBookNum;i++)
cout"书名:"m_books[i].getName()"""剩余数量"m_books[i].getNum()endl;
CManagementBooks::CManagementBooks()
m_allBookNum=0;
voidCManagementBooks::addBook(CBookbook)
intflag=0;
for(inti=0;im_allBookNum;i++)
if(m_books[i].getName()==book.getName())
flag=1;
m_books[i].setNum(m_books[i].getNum()+book.getNum());
ofstreamwriteFile("library.txt",ios::out);
for(inti=0;im_allBookNum;i++)
writeFilem_books[i];
writeFile.close();
break;
if(!flag)
ofstreamwriteFile("library.txt",ios::app);
m_books.push_back(book);
m_allBookNum++;
writeFilebook;
writeFile.close();
intCManagementBooks::getAllBookNum()
returnm_allBookNum;
voidCManagementBooks::showAllBooksInfo()
for(inti=0;im_allBookNum;i++)
m_books[i].showInfo();
boolCManagementBooks::borrow(stringname)
for(inti=0;im_allBookNum;i++)
if(m_books[i].getName()==name)
if(m_books[i].getNum()=1)
m_books[i].setNum(m_books[i].getNum()-1);
cout"借书成功"endl;
ofstreamwriteFile("library.txt");
for(inti=0;im_allBookNum;i++)
writeFilem_books[i];
writeFile.close();
returntrue;
else
cout"此书数量不足"endl;
returnfalse;
cout"很抱歉,暂无此书"endl;
returnfalse;
voidCManagementBooks::Return(stringid,stringbookName)
CBookbook;
book.setName(bookName);
addBook(book);
ofstreamwriteFile("borrowedBook.txt",ios::out);
for(autoiter=m_outBookMap.begin();iter!=m_outBookMap.end();++iter)
if(iter-first==iditer-second==bookName)
m_outBookMap.erase(iter);
break;
for(automap:m_outBookMap)
writeFileendlmap.first""map.second;
writeFile.close();
voidCManagementBooks::initOutBook()
ifstreamreadFile("borrowedBook.txt");
if(!readFile.is_open())
cout"查看全体借书情况数据读取出错"endl;
else
while(!readFile.eof())
stringstudentId,bookName;
readFilestudentIdbookName;
m_outBookMap.insert(pairstring,string(studentId,bookName));
readFile.close();
voidCManagementBooks::checekOutBook()
for(automap:m_outBookMap)
cout"借阅人学工号:"map.first"""借阅书名:"map.secondendl;
voidCManagementBooks::initBooks()
ifstreamreadFile;
readFile.open("library.txt");
if(!readFile.is_open())
cout"图书数据读取错误"endl;
readFile.close();
return;
while(!readFile.eof())
CBookbook;
readFilebook;
m_allBookNum++;
m_books.push_back(book);
readFile.close();
intCManagementBooks::checkBorrowedBook(stringuserId)
intflag=0;
for(automap:m_outBookMap)
if(userId==map.first)
if(!flag)
cout"您已经借的全部图书如下:"endl;
flag++;
else
flag++;
coutmap.second"";
if(!flag)
cout"您目前没有借书"endl;
cout"共:"flag"本";
coutendl;
returnflag;
voidCManagementBooks::viewBorrowerDetails(stringid)
ifstreamreadFile("teacher.txt");
ifstreamreadFile1("student.txt");
intflag=0;
if(!readFile1.is_open()||!readFile.is_open())
cout"用户数据读取错误"endl;
while(!readFile1.eof())
stringact1,name,department,gender;
readFile1act1namegenderdepartment;
if(id==act1)
cout"用户类别:""学生""""用户姓名:"name"""用户性别:"gender"""用户所在部门:"departmentendl;
flag=1;
if(!flag)
while(!readFile.eof())
stringact1,name,department,gender;
readFileact1namegenderdepartment;
if(id==act1)
flag=1;
cout"用户类别:""老师""""用户姓名:"name"""用户性别:"gender"""用户所在部门:"departmentendl;
if(!flag)
cout"无此用户!"endl;
readFile.close();
readFile1.close();
boolCManagementBooks::checkTrueBorrow(stringid,stringbookName)
for(automap:m_outBookMap)
if(map.first==idmap.second==bookName)
returntrue;
returnfalse;
voidCManagementBooks::setMapValue(stringuserId,stringbookName)
m_outBookMap.insert(pairstring,string(userId,bookName));
}
CBook.cpp
#include"CBook.h"
#includeiostream
#includefstream
usingnamespacestd;
CBook::CBook()
stringb="";
stringrandStr="0123456789X";
for(inti=0;i=12;i++)
if(i==1||i==5||i==11)
b+='-';
else
if(i==12)
b+=randStr[rand()%11];
else
b+=randStr[rand()%10];
m_num=1;
m_name="等待戈多";
m_author="李XX";
m_isbn=b;
m_page=rand();
m_pressInfo="XX出版社";
m_price=rand();
voidCBook::setNum(intnum)
m_num=num;
intCBook::getNum()
returnm_num;
voidCBook::setName(stringname)
m_name=name;
stringCBook::getName()
returnm_name;
voidCBook::setIsbn(stringisbn)
m_isbn=isbn;
stringCBook::getIsbn()
returnm_isbn;
voidCBook::setPressInfo(stringperssInfo)
m_pressInfo=perssInfo;
stringCBook::getPressInfo()
returnm_pressInfo;
voidCBook::setPrice(doubleprice)
m_price=price;
doubleCBook::getPrice()
returnm_price;
voidCBook::setPage(intpage)
m_page=page;
intCBook::getPage()
returnm_page;
voidCBook::setAuthor(stringauthor)
m_author=author;
stringCBook::getAuthor()
returnm_author;
voidCBook::checkIsnb()
intsum=0;
for(inti=0,j=1;im_isbn.size();i++){
if(m_isbn[i]!='-'i!=12){
sum+=(m_isbn[i]-'0')*j;
j++;
sum%=11;
charc='X';
if(sum10)c=sum+'0';
if(m_isbn[12]==c)puts("ThisbookisbnareRight!");
elseputs("Thisbookisbnarewrong!");
boolCBook::isBorrowed()
if(m_num=1)
m_num--;
returntrue;
returnfalse;
voidCBook::showInfo()
cout"作者:"m_author"""isbn号码:"m_isbn"""书本名称:"m_name""
"总页数:"m_page"""出版社:"m_pressInfo"""价格:"m_price
"""剩余本数:"m_numendl;
std::ostreamoperator(std::ostreamos,constCBookbook)
osendlbook.m_name""book.m_isbn""book.m_pressInfo""book.m_price""book.m_page""bo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论