一,实现目标
对于用户,能够实现,查询书目,借书,续借,还书,查询当前在借书目
对于管理员,能够实现,增加书目,查询书目,删除书目,改变书目信息;增加用户,查询用户,更改用户信息,删除用户
二,代码实现
#include<bits/stdc++.h>
using namespace std;
class Time//年月日
{
int year;
int month;
int day;
public:
Time();
Time(int a,int b,int c);
Time(const Time &);//fu zhi gou zao;
Time& operator=(const Time &);//chong zai
void addTime(Time x);//在某一时间的基础上,续借或者借书,应还时间自增两个月
int getYear(){return year;}
int getMonth(){return month;}
int getDay(){return day;}
bool operator <(const Time obj)const
{ return year<obj.year?true:month<obj.month?true:day<obj.day?true:false;}
friend ostream &operator<<(ostream &os,const Time &obj);
friend istream &operator>>(istream &is,Time &obj);
// friend ostream &operator<<(ostream &os,const stu_record &obj);
// friend istream &operator>>(istream &is,stu_record &obj);
// friend ostream &operator<<(ostream &os,const book_record &obj);
// friend istream &operator>>(istream &is,book_record &obj);
};
Time::Time()
{
year=month=day=0;
}
Time::Time(int a,int b,int c)
{
year=a;
month=b;
day=c;
}
Time::Time(const Time & obj)
{
year=obj.year;
month=obj.month;
day=obj.day;
}
Time &Time::operator=(const Time &obj)
{
year=obj.year;
month=obj.month;
day=obj.day;
return *this;
}
ostream &operator<<(ostream &os,const Time &obj)
{
os<<obj.year<<" ";
os<<obj.month<<" ";
os<<obj.day;
return os;
}
istream &operator>>(istream &is,Time &obj)
{
is>>obj.year;
is>>obj.month;
is>>obj.day;
return is;
}
void Time::addTime(Time x)
{
if(x.month+2>12)
{
year=x.year+1;
month=x.month+2-12;
day=x.day; //cout<<endl<<"x.month="<<x.month<<endl;
}
else
{ year=x.year;
month=x.month+2;
day=x.day;
}
}
class book_record//一本确切的书所经历过的一个人和事
{
string stuName;//借书学生姓名
int stuNum;//学生学号
Time lendTime;//该书借出时间
Time shouldBackTime;//应还时间
Time realBackTime;//实际还书时间
public:
book_record();
book_record(string a,int b,Time c);//借书人姓名,学号,借书时间
book_record(const book_record &);//复制构造函数
book_record &operator=(const book_record &obj);
void realBack(Time backT);
string getStuName(){return stuName;}//借书学生姓名
int getStuNum(){return stuNum;}//学生学号
Time getLendTime(){return lendTime;}//该书借出时间
Time getShouldBackTime(){return shouldBackTime;}
Time getRealBackTime(){return realBackTime;}//实际还书时间
friend ostream &operator<<(ostream &os,const book_record &obj);
friend istream &operator>>(istream &is,book_record &obj);
};
book_record::book_record()
{
stuName="sdau";//借书学生姓名
stuNum=11111111;//学生学号
//时间类的对象有其自己的初始值,不用初始化
}
book_record::book_record(string a,int b,Time c)
{
stuName=a;//借书学生姓名
stuNum=b;//学生学号
lendTime=c;//该书借出时间
shouldBackTime.addTime(c);//应还时间
}
book_record::book_record(const book_record & obj)//复制构造函数
{
stuName=obj.stuName ;//借书学生姓名
stuNum=obj.stuNum ;//学生学号
lendTime=obj.lendTime ;//该书借出时间
shouldBackTime=obj.shouldBackTime ;//应还时间
realBackTime=obj.realBackTime ;//实际还书时间
}
book_record &book_record::operator=(const book_record &obj)
{
stuName=obj.stuName ;//借书学生姓名
stuNum=obj.stuNum ;//学生学号
lendTime=obj.lendTime ;//该书借出时间
shouldBackTime=obj.shouldBackTime ;//应还时间
realBackTime=obj.realBackTime ;//实际还书时间
return *this;
}
void book_record::realBack(Time backT)
{
realBackTime=backT;
}
ostream &operator<<(ostream &os,const book_record &obj)
{
os<<obj.stuName<<endl;
os<<obj.stuNum<<endl;
os<<obj.lendTime<<endl;
os<<obj.shouldBackTime<<endl;
os<<obj.realBackTime<<endl;
return os;
}
istream &operator>>(istream &is,book_record &obj)
{
is>>obj.stuName;
is>>obj.stuNum;
is>>obj.lendTime;
is>>obj.shouldBackTime;
is>>obj.realBackTime;
return is;
}
class Book
{
int allBookNum;//该书的总册数
int outBookNum;
int remainBookNum;
string bookName;
string bookNum;
string press;
int recos;//有多少条记录(包括隐藏的已还记录)
public:
vector<book_record> record;
vector<book_record>::iterator pv_br1,pv_br2;
multimap<int,book_record> map1;//按学号查找
multimap<int,book_record>::iterator pm_br1,pm_br2;
Book();
Book(int all,string bName,string bNum,string pre);
Book(const Book &); //Book &operator=(const Book &);
int getAllBookNum(){return allBookNum;}//该书的总册数
int getOutBookNum(){return outBookNum;}
int getRemainBookNum(){return remainBookNum;}
string getBookName(){return bookName;}
string getBookNum(){return bookNum;}
string getPress(){return press;}
int getRecos(){return recos;}
void setBookNum(int all);//设置书的总册数(不可少于当前外借的数目)
int setOutBookNum(int n){outBookNum+=n;}
int setRemainBookNum(int n){remainBookNum+=n;}
void addRecord(book_record r1){record.push_back(r1);}
void addLendRecord(string name,int num,Time lend);
void addBackRecord(int stuNum,Time t);
friend ostream &operator<<(ostream &os,const Book &obj);
friend istream &operator>>(istream &is,Book &obj);
};
Book::Book()
{
allBookNum=0;
outBookNum=0;
remainBookNum=allBookNum-outBookNum;
bookName="SDAU";
bookNum="11111111";
press="SDAU";
recos=0;
}
Book::Book(int all,string bName,string bNum,string pre)
{
allBookNum=all;
outBookNum=0;//创建一本书时不能有外借的量;
remainBookNum=all-outBookNum;
bookName=bName;
bookNum=bNum;
press=pre;
recos=0;//p_map=map1.begain();
}
Book::Book(const Book &obj)
{
allBookNum=obj.allBookNum;
outBookNum=obj.outBookNum;//创建一本书时不能有外借的量;
remainBookNum=obj.remainBookNum;
bookName=obj.bookName;
bookNum=obj.bookNum;
press=obj.press;
recos=obj.recos;
record=obj.record;
}
ostream &operator<<(ostream &os,const Book &obj)
{
os<<obj.bookName<<endl;
os<<obj.bookNum<<endl;
os<<obj.press<<endl;
os<<obj.allBookNum<<endl;
os<<obj.outBookNum<<endl;
os<<obj.remainBookNum<<endl;
os<<obj.recos<<endl;
if(obj.recos>0)
for(int i=0;i<=obj.recos-1;i++)
{
os<<obj.record[i];
os<<endl;
}
return os;
}
istream &operator>>(istream &is,Book &obj)
{
is>>obj.bookName;
is>>obj.bookNum;
is>>obj.press;
is>>obj.allBookNum;
is>>obj.outBookNum;
is>>obj.remainBookNum;
is>>obj.recos;
if(obj.recos>0)
{
book_record r1;
for(int i=1;i<=obj.recos;i++)
{
//cout<<"i="<<i<<endl;
is>>r1;
obj.record.push_back(r1);
}
}
return is;
}
void Book::setBookNum(int all)//设置书的总册数(不可少于当前外借的数目)
{
if(all>=outBookNum)
{
allBookNum=all;//outBookNum=out;
remainBookNum=all-outBookNum;
}
}
void Book::addLendRecord(string Sname,int Snum,Time lend)
{
book_record r1(Sname,Snum,lend);
recos++;
outBookNum++;//借出数目加一
remainBookNum--;//剩余数目减一;
record.push_back(r1);//增加一条记录//cout<<"r1="<<r1<<endl;
map1.insert(make_pair(Snum,r1));//cout<<"recos="<<recos<<endl;//cout<<"record[0]="<<record[0]<<endl;
}
void Book::addBackRecord(int stuNum,Time t)
{
pv_br1=record.begin();//在vector里按学号查找到该学生的记录
pv_br2=record.end();
for(pv_br1;pv_br1!=pv_br2;pv_br1++)
{
if(pv_br1->getStuNum()==stuNum)
{
pv_br1->realBack(t);//将vector中该学生对于这本书的操作添加还书时间
}
}
pm_br1=map1.find(stuNum);//在map里按学号查找到该学生的记录
for(int i=1;i<=map1.count(stuNum);i++)
{
pm_br1->second.realBack(t);//将这个学生所有关于这本书的借阅信息都隐藏
pm_br1++;
}
pm_br1--;//找到最后一条操作
book_record r1;
r1=pm_br1->second;
r1.realBack(t);//再添加一条正经的还书记录
record.push_back(r1);
recos++;
map1.insert(make_pair(stuNum,r1));
outBookNum--;//借出数目减一;
remainBookNum++;
}
class stu_record//一个学生所经历过的书和事
{
string bookName;//书名
string bookNum;//书号
string press;//出版社
Time lendTime;//该学生借出时间
Time shouldBackTime;//应还时间
Time realBackTime;//实际还书时间
public:
stu_record();
stu_record(string book,string bookN,string pre, Time lend);//书名,书号,出版社,借书时间
stu_record(const stu_record &);//复制构造函数
int getYear(){if (realBackTime.getYear()==1)return 1;else return 0;}
string getBookNum(){return bookNum;}
string getBookName(){return bookName;}
Time getLendTime(){return lendTime;}
Time getShouldBackTime(){return shouldBackTime;}
void realBack(Time backT);
friend ostream &operator<<(ostream &os,const stu_record &obj);
friend istream &operator>>(istream &is,stu_record &obj);
};
stu_record::stu_record()
{
bookName="SDAU";
bookNum="11111111";
press="SDAU";
Time a(0,0,0);
lendTime=shouldBackTime=realBackTime=a;
}
stu_record::stu_record(string book,string bookN,string pre,Time lend)
{
bookName=book;
bookNum=bookN;
press=pre;
lendTime=lend;
shouldBackTime.addTime(lendTime);
Time a(0,0,0);
realBackTime=a;
}
stu_record::stu_record(const stu_record & obj)//复制构造函数
{
bookName=obj.bookName;//借书学生姓名
bookNum=obj.bookNum;//书号
press=obj.press;//出版社
lendTime=obj.lendTime;//该书借出时间
shouldBackTime=obj.shouldBackTime;//应还时间
realBackTime=obj.realBackTime;//实际还书时间
}
void stu_record::realBack(Time backT)
{
realBackTime=backT;
}
ostream &operator<<(ostream &os,const stu_record &obj)
{
os<<obj.bookName<<endl;
os<<obj.bookNum<<endl;
os<<obj.press<<endl;
os<<obj.lendTime<<endl;
os<<obj.shouldBackTime<<endl;
os<<obj.realBackTime<<endl;
return os;
}
istream &operator>>(istream &is,stu_record &obj)
{
is>>obj.bookName;
is>>obj.bookNum;
is>>obj.press;
is>>obj.lendTime;
is>>obj.shouldBackTime;
is>>obj.realBackTime;
return is;
}
class Student
{
string stuName;//学生姓名
int stuNum;//学号
string stuClass;//班级
int hadBookNum;//已有书的数目
int mistake;//违规次数
int maxBookNum;
int recors;//操作次数
public:
vector<stu_record> record;//学生操作记录
vector<stu_record>::iterator pv_sr1,pv_sr2;
multimap<string,stu_record> map_num;
multimap<string,stu_record>::iterator pm_num;
multimap<string,stu_record> map_name;
multimap<string,stu_record>::iterator pm_name;
Student();
Student(string name,int num,string clas);
int getRecors(){return recors;}
string getStuName(){return stuName;}
int getStuNum(){return stuNum;}
int getHadBookNum(){return hadBookNum;};//已有书的数目
int getMistake(){return mistake;};//违规次数
int getMaxBookNum(){return maxBookNum;};
void addRecord(stu_record r1){record.push_back(r1);}
void lendBook(string bName,string bNum,string pre1,Time t1);
void backBook_name(string bName,Time t1);
void backBook_num(string bNum,Time t1);
int setRecors(int n){recors+=n;}
int setHadBookNum(int n){hadBookNum+=n;};//已有书的数目
void setMaxBookNum(int x){maxBookNum=x;}
void setMistake(int x){mistake+=x;}
friend ostream &operator<<(ostream &os,const Student &obj);
friend istream &operator>>(istream &is,Student &obj);
};
Student::Student()
{
stuName="SDAU";//学生姓名
stuNum=11111111;//学号int
stuClass="00级00专业00班";//班级
hadBookNum=0;//已有书的数目
mistake=0;//违规次数
recors=0;//操作次数
maxBookNum=10;//默认可借10 本
}
Student::Student(string name,int num,string clas)
{
stuName=name;//学生姓名
stuNum=num;//学号int
stuClass=clas;//班级
hadBookNum=0;//已有书的数目
mistake=0;//违规次数
recors=0;//操作次数
maxBookNum=10;//默认可借10 本
}
void Student::lendBook(string bName,string bNum,string pre1,Time t1)
{
//Time t1(2018,6,4);
stu_record r1(bName,bNum,pre1,t1);//记录数加一
record.push_back(r1);
recors++;//增加一条记录
map_num.insert(make_pair(bNum,r1));
map_name.insert(make_pair(bName,r1)); //两个map各加一
hadBookNum++; //当前借阅数目++;
}
void Student::backBook_name(string bName,Time t1)
{
pv_sr1=record.begin();//在vector里按学号查找到该学生的记录
pv_sr2=record.end();
for(pv_sr1;pv_sr1!=pv_sr2;pv_sr1++)
{
if(pv_sr1->getBookName()==bName)
{
pv_sr1->realBack(t1);//将vector中该学生对于这本书的操作也隐藏
}
}
pm_name=map_name.find(bName);//隐藏mapname中该学生对本书的操作隐藏
for(int i=1;i<=map_name.count(bName);i++)
{
pm_name->second.realBack(t1);//将这个学生所有关于这本书的借阅信息都隐藏
pm_name++;
}
pm_name--;//找到最后一条操作
string num2;//隐藏mapnum中该学生对本书的操作隐藏
num2=pm_name->second.getBookNum();
pm_num=map_num.find(num2);
for(int i=1;i<=map_num.count(num2);i++)
{
pm_num->second.realBack(t1);//将这个学生所有关于这本书的借阅信息都隐藏
pm_num++;
}
pm_num--;//找到最后一条操作
stu_record r1 ;//修改完以前的数据,增加新的记录;
r1=pm_name->second;
r1.realBack(t1);
record.push_back(r1);
recors++;
map_name.insert(make_pair(bName,r1));
map_num.insert(make_pair(pm_name->second.getBookNum(),r1));
hadBookNum++;
}
void Student::backBook_num(string bNum,Time t1)
{
pv_sr1=record.begin();//在vector里按学号查找到该学生的记录
pv_sr2=record.end();
for(pv_sr1;pv_sr1!=pv_sr2;pv_sr1++)
{
if(pv_sr1->getBookNum()==bNum)
{
pv_sr1->realBack(t1);//将vector中该学生对于这本书的操作也隐藏
}
}
pm_num=map_num.find(bNum);
for(int i=1;i<=map_num.count(bNum);i++)
{
pm_num->second.realBack(t1);//将这个学生所有关于这本书的借阅信息都隐藏
pm_num++;
}
pm_num--;//找到最后一条操作
string name2;
name2=pm_num->second.getBookName();
pm_name=map_name.find(name2);
for(int i=1;i<=map_name.count(name2);i++)
{
pm_name->second.realBack(t1);//将这个学生所有关于这本书的借阅信息都隐藏
pm_name++;
}
pm_name--;//找到最后一条操作
stu_record r1 ;
r1=pm_num->second;
r1.realBack(t1);
record.push_back(r1);
recors++;
map_num.insert(make_pair(bNum,r1));
map_num.insert(make_pair(pm_num->second.getBookNum(),r1));
hadBookNum--;
}
ostream &operator<<(ostream &os,const Student &obj)
{
os<<obj.stuName<<endl;
os<<obj.stuNum<<endl;
os<<obj.stuClass<<endl;
os<<obj.hadBookNum<<endl;
os<<obj.maxBookNum<<endl;
os<<obj.mistake<<endl;
os<<obj.recors<<endl;
if(obj.recors>0)
for(int i=0;i<=obj.recors-1;i++)
{
os<<obj.record[i];
os<<endl;
}
return os;
}
istream &operator>>(istream &is,Student &obj)
{
is>>obj.stuName;
is>>obj.stuNum;
is>>obj.stuClass;
is>>obj.hadBookNum;
is>>obj.maxBookNum;
is>>obj.mistake;
is>>obj.recors;
if(obj.recors>0)
{
stu_record sr1;
for(int i=1;i<=obj.recors;i++)
{
is>>sr1;
obj.record.push_back(sr1);
}
}
return is;
}
class Manager
{
public:
vector<Student> students;
vector<Student>::iterator pv_S1,pv_S2;
multimap<int,Student> map_stu;
multimap<int,Student>::iterator pm_S1;
vector<Book> books;
vector<Book>::iterator pv_B1,pv_B2;
multimap<string,Book> map_bookName;
multimap<string,Book>::iterator pm_bName,pm1,pm2;
multimap<string,Book> map_bookNum;
multimap<string,Book>::iterator pm_bNum;
Manager(){loadStu();loadBook();}
~Manager(){saveStu();saveBook();}
void addStu(string sName,int sNum,string sClas);//创建一个用户需要基本信息
void loadStu();//读入学生信息
void saveStu();//将学生信息写入文件
void addBook(int allNum,string bName,string bNum,string pre);//创建一本书;
void loadBook();//读入书的信息
void saveBook();//将书的信息写入文件
};
void Manager::addStu(string sName,int sNum,string sClas)//创建一个用户需要基本信息
{
Student stu1(sName,sNum,sClas);
students.push_back(stu1);
map_stu.insert(make_pair(sNum,stu1));
}
void Manager::loadStu()//读入学生信息
{
//cout<<"1"<<endl;
ifstream infile("student.txt",ios::in);//("d:\\Demo.txt",ios::in);//数据文件在d盘根目录下
if(!infile)
return ;
students.clear();
map_stu.clear();
Student b;
while(infile>>b)
{
Student B;
B=b;//将除了记录之外的信息加入books数组
if(B.getRecors()>0)//如果从文件得到了记录不为零
{
stu_record re;//创建一个记录类的对象
for(int i=1;i<=B.getRecors();i++)
{
infile>>re;
B.addRecord(re);
}
}
students.push_back(B);
map_stu.insert(make_pair(b.getStuNum(),B));
}
infile.close();
}
void Manager::saveStu()//将学生信息写入文件
{
ofstream outfile("student.txt",ios::out);//数据文件在d盘根目录下
if(!outfile)
return;
for(pv_S1=students.begin();pv_S1!=students.end();pv_S1++)
{
outfile<<*pv_S1;
}
outfile.close();
}
void Manager::addBook(int allNum,string bName,string bNum,string pre)//创建一本书;
{
Book b1(allNum,bName,bNum,pre);
books.push_back(b1);
map_bookName.insert(make_pair(b1.getBookName(),b1));
map_bookNum.insert(make_pair(b1.getBookNum(),b1));
}
void Manager::loadBook()//读入书的信息
{
ifstream infile("book.txt",ios::in);//("d:\\Demo.txt",ios::in);//数据文件在d盘根目录下
if(!infile)
return ;
books.clear();
map_bookName.clear();
map_bookNum.clear();
Book b;
while(infile>>b)
{
Book B;
B=b;
//books.push_back(b);//将除了记录之外的信息加入books数组
if(B.getRecos()>0)//如果从文件得到了记录不为零
{
book_record re;//创建一个记录类的对象
for(int i=1;i<=B.getRecos();i++)
{
infile>>re;
B.addRecord(re);
}
}
cout<<B;
books.push_back(B);
map_bookNum.insert(make_pair(b.getBookNum(),B));
map_bookName.insert(make_pair(b.getBookName(),B));
}
infile.close();
}
void Manager::saveBook()//将书的信息写入文件
{
ofstream outfile("book.txt",ios::out);//数据文件在d盘根目录下
if(!outfile)
return;
for(pv_B1=books.begin();pv_B1!=books.end();pv_B1++)
{
outfile<<*pv_B1;
}
outfile.close();
}
class StuClient
{
public:
vector<Book> books;//学生只能查到在借的记录
vector<Book>::iterator pb1,pb2;
multimap<string,Book> map_bookName;
multimap<string,Book>::iterator p_bookName,pm1,pm2;
multimap<string,Book> map_bookNum;
multimap<string,Book>::iterator p_bookNum;
Student me;
void lendBook(string bName,string bNum,string pre1,Time t1);
void backBook_name(string bName,Time t1);
void backBook_num(string bNum,Time t1);
StuClient(int myNum);
~StuClient();
void loadBook();
void saveBook();
};
StuClient::StuClient(int myNum)
{
loadBook();
ifstream infile("student.txt",ios::in);//("d:\\Demo.txt",ios::in);//数据文件在d盘根目录下
if(!infile)
{
return ;
}
Student b;
while(infile>>b)
{
Student B;
B=b;//books.push_back(b);//将除了记录之外的信息加入books数组
if(B.getStuNum()==myNum)
me=B;
}
infile.close();
}
StuClient::~StuClient()
{
saveBook();
vector<Student> students;
vector<Student>::iterator pv1,pv2;
ifstream infile("student.txt",ios::in);//("d:\\Demo.txt",ios::in);//数据文件在d盘根目录下
if(!infile)
{ return ;}
Student b;
while(infile>>b)
{
if(b.getStuNum()==me.getStuNum())
{
b=me;
}
students.push_back(b);
}
infile.close();
ofstream outfile("student.txt",ios::out);//数据文件在d盘根目录下
if(!outfile)
return;
for(pv1=students.begin();pv1!=students.end();pv1++)
{
outfile<<*pv1;
}
outfile.close();
}
void StuClient::loadBook()
{
ifstream infile("book.txt",ios::in);//("d:\\Demo.txt",ios::in);//数据文件在d盘根目录下
if(!infile)
return ;
books.clear();
map_bookName.clear();
map_bookNum.clear();
Book b;
while(infile>>b)
{
Book B;
B=b;
//books.push_back(b);//将除了记录之外的信息加入books数组
if(B.getRecos()>0)//如果从文件得到了记录不为零
{
book_record re;//创建一个记录类的对象
for(int i=1;i<=B.getRecos();i++)
{
infile>>re;
B.addRecord(re);
}
}
//cout<<B;
books.push_back(B);
map_bookNum.insert(make_pair(b.getBookNum(),B));
map_bookName.insert(make_pair(b.getBookName(),B));
}
infile.close();
}
void StuClient::saveBook()
{
//cout<<"进入了savebook函数"<<endl;
ofstream outfile("book.txt",ios::out);
if(!outfile)
return;
for(pb1=books.begin();pb1!=books.end();pb1++)
{
//cout<<"得到了一本书,为:"<<endl;
outfile<<*pb1;
}
outfile.close();
}
void StuClient::lendBook(string bName,string bNum,string pre1,Time t1)
{
if(me.getHadBookNum()<me.getMaxBookNum())//判断该学生是否可借
{
//对学生的记录
me.lendBook(bName,bNum,pre1,t1);
//对图书馆中的书也要添加该学生的记录,相应的数目也发生变化
//找到该书位置
pb1=books.begin();
pb2=books.end();
for(pb1;pb1!=pb2;pb1++)
{
if(pb1->getBookName()==bName)
{
pb1->addLendRecord(me.getStuName(),me.getStuNum(),t1);
break;//弄完这本书就快跑
}
}
}
else
{ if(me.getHadBookNum()==me.getMaxBookNum())
{cout<<"您当前最大借阅数目为:"<<me.getHadBookNum()<<" 已借数目:"<<me.getMaxBookNum()<<" 借阅失败"<<endl;}
}
}
void StuClient::backBook_name(string bName,Time t1)
{
int num1=me.map_name.count(bName);//该书的操作次数
if(num1==0)//验证是否借过该书
{ cout<<"无借书记录,不能进行此操作 "<<endl<<endl;}
else
{
me.backBook_name(bName,t1);
//对该书添加记录;
//找到该书位置
pb1=books.begin();
pb2=books.end();
for(pb1;pb1!=pb2;pb1++)
{
if(pb1->getBookName()==bName)//找到该书
{
pb1->addBackRecord(me.getStuNum(),t1);
}
}
}
}
void StuClient::backBook_num(string bNum,Time t1)
{
int num1=me.map_num.count(bNum);//该书的操作次数
if(num1==0)//验证是否借过该书
{ cout<<"无借书记录,不能进行此操作 "<<endl<<endl;}
else
{
me.backBook_num(bNum,t1);
//对该书添加记录;
//找到该书位置
pb1=books.begin();
pb2=books.end();
for(pb1;pb1!=pb2;pb1++)
{
if(pb1->getBookNum()==bNum)//找到该书
{
pb1->addBackRecord(me.getStuNum(),t1);
}
}
}
}
int main()
{
// 1,加书加人
/*Manager m1;
m1.addBook(10,"《凡·高》","39655017","安徽文艺出版社");
m1.addBook(10,"《诗经密码》","40462161","湖南文艺出版社");
m1.addBook(10,"《自得其乐》","59404817","江苏凤凰文艺出版社");
m1.addBook(10,"《高效能时间管理术》","08679815","中信出版社");
m1.addBook(10,"《汪曾祺散文精选》","35498847","长江文艺出版社");
m1.addBook(10,"《高等数学》","97871154","人民邮电出版社");
m1.addStu("郭忠浩",20171830,"17级计算机专业2班");
m1.addStu("郭旭",20171314,"17级土木工程专业1班");
m1.addStu("郭二苗",20170001,"17级计算机专业6班");
m1.addStu("郭大宝",20175201,"17级金融专业1班");*/
//用户登录
StuClient stu1(20171830);
Time t1(2018,6,16);
stu1.lendBook("《凡·高》","39655017","安徽文艺出版社",t1);
stu1.lendBook("《汪曾祺散文精选》","35498847","长江文艺出版社",t1);
stu1.backBook_name("《凡·高》",t1);
cout<<stu1.me;
stu1.backBook_num("35498847",t1);
cout<<stu1.me;
stu1.lendBook("《自得其乐》","59404817","江苏凤凰文艺出版社",t1);
cout<<stu1.me;
Time t2(2018,8,12);
return 0;
}
//测试Time类的主函数
//测试时间类
// Time t1;
//cout<<"t1="<<t1<<endl;
// Time t2(2018,6,13);
//cout<<"t2="<<t2<<endl;
//
// Time t3(t2);
//cout<<"t3(t3=t2)="<<t3<<endl;
// t3=t1;
//cout<<"t3(t3=t1)="<<t3<<endl;
//
// t2.addTime(t2);
//cout<<"t2+2="<<t2<<endl;
// t2.addTime(t2);
//cout<<"t2+2="<<t2<<endl;
// t2.addTime(t2);
//cout<<"t2+2="<<t2<<endl;
// t2.addTime(t2);
//cout<<"t2+2="<<t2<<endl;
// t2.addTime(t2);
//cout<<"t2+2="<<t2<<endl;
//
//cout<<"t2.Y="<<t2.getYear()<<" t2.M="<<t2.getMonth()<<" t2.D="<<t2.getDay()<<endl;
//return 0;
//测试book_record书的记录类
// book_record br1;
// cout<< "br1="<<br1<<endl;
//
// Time t1(2018,6,13);
// book_record br2("郭忠浩",20171830,t1);
// cout<<"br2="<<br2<<endl;
//
// book_record br3(br1);
// cout<<"br3(br3=br1)="<<br3<<endl;
//
// br3=br2;
// cout<<"br3(br3=br2)="<<br3<<endl;
//
// Time t2(2018,9,28);
// br3.realBack(t2);
// cout<<"br3(realBack)="<<br3<<endl;
//
// cin>>br1;
// cout<<"br1="<<br1<<endl;
//测试书Book类
// Book b1;
// cout<<"b1="<<endl<<b1<<endl;
//
// Book b2(10,"《孔雀森林》","27170001","长江文艺出版社");
// cout<<"b2="<<endl<<b2<<endl;
//
// Book b3(b2);
// cout<<"b3(b3=b2)="<<endl<<b3<<endl;
//
// b3.setBookNum(16);
// cout<<"b3="<<endl<<b3<<endl;
//
// Time t1(2018,6,13);
// b3.addLendRecord("郭忠浩",20171830,t1);
// cout<<"b3="<<endl<<b3<<endl;
// b3.addLendRecord("郭旭",20171314,t1);
// cout<<"b3="<<endl<<b3<<endl;
//
// Time t2(2018,7,11);
// b3.addBackRecord(20171830,t2);
// cout<<"b3="<<endl<<b3<<endl;
//
// cout<<"hey,boy,来测试一下输入运算符,输入一本带记录的书:"<<endl;
// cin>>b1;
// cout<<"b111="<<b1<<endl;
//测试stu_record类
//stu_record sr1;
// cout<<"sr1="<<endl<<sr1<<endl;
//
// Time t1(2018,6,16);
// stu_record sr2("《飘》","27170003","北京邮电大学出版社",t1);
// cout<<"sr2="<<endl<<sr2<<endl;
//
// stu_record sr3(sr1);
// cout<<"sr3(sr3=sr1)="<<endl<<sr1<<endl;
//
// sr3=sr2;
// cout<<"sr3(sr3=sr2)="<<endl<<sr3<<endl;
//
// Time t2(2018,6,28);
// sr3.realBack(t2);
// cout<<"sr3="<<endl<<sr3<<endl;
//
// cout<<sr3.getYear()<<endl;
// cout<<sr3.getBookNum()<<endl;
// cout<<sr3.getBookName()<<endl;
// cout<<sr3.getLendTime()<<endl;
// cout<<sr3.getShouldBackTime()<<endl;
//
// cin>>sr1;
// cout<<"ssssr1="<<endl<<sr1<<endl;
//测试student类
// Student s1;
// cout<<"s1="<<endl<<s1<<endl;
//
// Time t1(2018,6,15);
// s1.lendBook("《飘》","27170001","外语教学与研究出版社",t1);
// s1.lendBook("《飘飘》","27170002","外语教学与研究出版社2",t1);
// cout<<"s1="<<endl<<s1<<endl;
//
// s1.backBook_name("《飘飘》",t1);
// s1.backBook_name("《飘》",t1);
// cout<<"s1="<<endl<<s1<<endl;
//
// Time t3(2018,6,19);
// s1.lendBook("《硅谷之火》","27170004","中信出版社",t3);
// s1.lendBook("《腾讯传》","27170007","人民教育出版社",t3);
// cout<<"s1="<<endl<<s1<<endl;
//
// Time t4(2018,6,22);
// s1.backBook_num("27170004",t4);
// s1.backBook_num("27170007",t4);
// cout<<"s1="<<endl<<s1<<endl;
// Student s2;
// cin>>s2;
// cout<<"s2="<<endl<<s2<<endl;
三,学习感悟
系统快要写好时才反应过来可以使用继承,可以大大缩短代码量。而且其中还隐藏着bug,时间限制加上越写越烦躁,最后还是没能将功能全部实现。一个是要注意多加注释,一个是注意代码简洁性,那样在写较大的项目时,才不会越写越乱。