基于C++的图书管理系统
一、 实验目的
目的是将所学的C++面向对象的知识,包括类与对象的设计、类的继承和多态等应用到具体实践项目中,设计图书管理系统,熟悉类的继承,组合,依赖关系,并且熟悉类与类之间的使用关系。
二、实验内容及其要求
1、问题描述
编写图书借阅程序,图书的信息有:图书编号、图书名称,作者,出版社,单价,借阅状态等。所有图书的信息经管理员事先已存入计算机,屏幕上显示书所有的信息,选择图书编号,借书,还书,系统根据操作做出借书还书提示,还有管理员信息的设置和教师学生的个人信息输入,系统通过正确操作来实现查找图书和修改图书,并且有着对运算符的重载,和虚函数的正确使用。
2、系统用户
第一种用户:图书管理员,可以显示信息,图书上架,查询图书,修改图书;系统管理员,可以操作所有权限
第二种用户:借阅者,可以分为两类:教师和学生。可以显示信息(虚函数),借书,还书等功能,此外,教师最多可以借20本书,而学生最多借10本书。
三、功能模块设计和实现
1.判断用户类别
class User
{
protected:
string name;//用户姓名
string key;//用户密码
bool Is_Admin,Is_Librarian,Is_Reader;//什么用户类型
public:
void key_change(User *U);//修改用户密码
int Judge();//判断用户类型
static int User_Number;
User(){Is_Admin=0;Is_Librarian=0;Is_Reader=1;};//默认读者类型
void Setname(string name1);
void Setkey(string key1);
void SetIdentity(bool ad,bool li,bool re )//设置用户类型
{Is_Admin=ad;Is_Reader=re;Is_Librarian=li;}
string Getname(){return name;}
string Getkey(){return key;}
bool GetisAd(){return Is_Admin;}
bool Getisli(){return Is_Librarian;}
bool Getisre(){return Is_Reader;}
};
2.图书上架
void Librarian::Book_Add(Book *B)
{
string aa;
cout<<"---------------添加图书---------------"<<endl;
while(1)
{
cin>>B[Book::Book_Number];
ofstream bookmessage("Bookmessage.txt",ios::app);
if(bookmessage.is_open())
{
bookmessage << getCurrentSystemTime();
bookmessage << "操作:增加图书 "<<endl;
bookmessage <<B[Book::Book_Number]<<endl;
bookmessage.close();
}
Book::Book_Number++;
cout<<"录入成功!"<<endl;
aa=cin.get();
cout<<"按任意键继续录入(输入'0'可返回主菜单),";
aa=cin.get();
if(aa=="0")break;
}
}
3.查询图书
void Librarian::Book_Find(Book *B)
{
cout<<"-------查询图书-------"<<endl;
cout<<"请输入图书编号或书名:";
string a1;
cin>>a1;int flag=0,count=0;
for(int j=0;j<Book::Book_Number;j++)
{
if(a1==B[j].GetCode()||a1==B[j].GetName())
{flag=1;cout<<B[j];count++;}
}
if(count==0)cout<<"未找到此书..."<<endl;
else
cout<<"共找到"<<count<<"本书。"<<endl;
}
4.借书
void Reader::Book_Lend(Book *B)
{
for(int i=0;i<Book_Number;i++)
{
(s+i)->SetCode((B+i)->GetCode());
(s+i)->SetName((B+i)->GetName());
(s+i)->SetAuthor((B+i)->GetAuthor());
(s+i)->SetPress((B+i)->GetPress());
(s+i)->SetPrice((B+i)->GetPrice());
(s+i)->Book_Number=(B+i)->Book_Number;
if(Is_teacher==true)
(s+i)->SetDeadline(60);
else
(s+i)->SetDeadline(30);
}
Book *b=B;string a;
cout<<"---------借书---------"<<endl;
cout<<"请输入需要借阅书籍的编号或书名:";
cin>>a;int Find=0,flag1=0;int LendBookNumber=0;
for(int j=0;j<=Book::Book_Number;j++)
{
if((a==b[j].GetCode()||a==b[j].GetName())&&b[j].GetIs_Lend()==false)
{
flag1=1;Find =j;break;
}
}
for(int i=0;i<=Book::Book_Number;i++)
{
if(s[i].GetIs_Lend()==true)
{
LendBookNumber++;
}
}
if(!flag1)cout<<"图书不存在或已经被借出!"<<endl;
else
{
if(Is_teacher==true&&LendBookNumber==20){
throw LendBookNumber;
}
else if(Is_teacher==false&&LendBookNumber==10){
throw LendBookNumber;
}
cout<<"借阅成功!"<<endl;
b[Find].SetIs_Lend(true);
s[Find].SetIs_Lend(true);
s[Find].SetTime(getCurrentSystemTime());
s[Find].SetDeadline(s[Find].GetDeadline());
ofstream lendmessage("Lendmessage.txt",ios::app);
if(lendmessage.is_open())
{
lendmessage << "姓名:"<<LogName<<endl;
lendmessage << " 借书编号:"<<s[Find].GetCode();
lendmessage << " 借书时间:"<<s[Find].Gettime()<<endl;
lendmessage.close();
}
}
}
5.还书
void Reader::Book_Return(Book *B)
{
Book *b=B;int flag=0,Find=0;
cout<<"---------还书---------"<<endl;
string a;
cout<<"请输入需要归还书籍的编号或书名:";
cin>>a;
for(int j=0;j<Book::Book_Number;j++)
{
if(a==b[j].GetCode()||a==b[j].GetName())
{
flag=1;Find =j;break;
}
}
if(flag==1){
if(s[Find].GetIs_Lend()==true)
{
cout<<"归还时间:"<<getCurrentSystemTime()<<endl;
string lend_time=s[Find].Gettime();
string return_time=getCurrentSystemTime();
int mml,mmr,ddl,ddr;
//判断是否超时
mmr=return_time[6]-'0'+(return_time[5]-'0')*10;
mml=lend_time[6]-'0'+(lend_time[5]-'0')*10;
ddr=return_time[9]-'0'+(return_time[8]-'0')*10;
ddl=lend_time[9]-'0'+(lend_time[8]-'0')*10;
int day=0;
if(Is_teacher==true) day=60;
else day=30;
if(mmr*30+ddr-mml*30-ddl<=day)
{ s[Find].SetIs_Lend(false);
b[Find].SetIs_Lend(false);
ofstream lendmessage("Lendmessage.txt",ios::app);
if(lendmessage.is_open())
{
lendmessage << "姓名:"<<LogName<<endl;
lendmessage << " 还书编号:"<<s[Find].GetCode();
lendmessage << " 还书时间:"<<return_time<<endl;
lendmessage.close();
}
cout<<"归还成功!"<<endl;}
else
throw mmr*30+ddr-mml*30-ddl-day;
}
else
{
cout<<"此书未被借阅"<<endl;
}
}
else
{
cout<<"未找到此书!"<<endl;
}
}
言尽于此
通过百度网盘分享的文件:C++课程设计
链接:https://pan.baidu.com/s/1FQq4Q5F3XOBtLaiHYT4gyg?pwd=vwn2 提取码:vwn2复制这段内容打开「百度网盘APP 即可获取」