#include<bits/stdc++.h>
using namespace std;
class Time //时间类
{
int year,month,day,hour;
public:
Time(int y,int m,int d,int h)
{
year=y;
month=m;
day=d;
hour=h;
}
Time()
{
year=month=day=hour=0;
}
void setYear(int y){year=y;}
void setMonth(int m){month=m;}
void setDay(int d){day=d;}
void setHour(int h){hour=h;}
int getYear(){return year;}
int getMonth(){return month;}
int getDay(){return day;}
int getHour(){return hour;}
friend istream&operator>>(istream&is,Time&t);
friend ostream&operator<<(ostream&os,const Time&t);
};
istream &operator>>(istream &is,Time &t)
{
is>>t.year>>t.month>>t.day>>t.hour;
}
ostream &operator<<(ostream & os,const Time&t)
{
os<<t.year<<" "<<t.month<<" "<<t.day<<" "<<t.hour<<" ";
return os;
}
class Record//记录类
{
public:
int id;
string name;
Time borrow;
Time rback;
int number;
string caozuo;
Record(int i,string x,Time b,int n,string c)
{
id=i;
name=x;
borrow=b;
number=n,
caozuo=c;
if(b.getMonth()+2>12)
{
Time t(b.getYear()+1,b.getMonth()-10,b.getDay(),b.getHour());
rback=t;
}
else
{
Time t(b.getYear(),b.getMonth()+2,b.getDay(),b.getHour());
rback=t;
}
}
Record()
{
}
void setId(int i){id=i;}
void setName(string x){name=x;}
void setBorrow(Time b){borrow=b;}
void setRback(Time r){rback=r;}
void setNumber(int n){number=n;}
void setCaozuo(string c){caozuo=c;}
int getId(){return id;}
string getName(){return name;}
Time getBorrow(){return borrow;}
Time getRback(){return rback;}
int getNumber(){return number;}
string getCaozuo(){return caozuo;}
friend istream&operator>>(istream&is,Record&d);
friend ostream&operator<<(ostream&os,const Record&d);
};
istream&operator>>(istream&is,Record&d)
{
if(d.caozuo=="js")
is>>d.id>>d.borrow>>d.rback;
else
is>>d.id>>d.borrow;
}
ostream&operator<<(ostream&os,Record&d)
{
os<<d.id<<" "<<d.name;
if(d.caozuo=="js")
{
os<<"js"<<d.borrow<<endl;
os<<"hs"<<d.rback<<endl;
}
else
os<<"js"<<d.borrow<<endl;
}
class book//书籍类
{
public:
string name;
int num;
int number;
int cbdate;
vector<Record>v1;
vector<Record>::iterator it1;
multimap<int,int>m1;
multimap<int,int>::iterator mit1;
book()
{
}
book(string x,int y,int n,int c)
{
name=x;
num=y;
number=n;
cbdate=c;
}
void setName(string x){name=x;}
void setNum(int y){num=y;}
void setNumber(int n){number=n;}
void setCbdte(int c){cbdate=c;}
string getName(){return name;}
int getNum(){return num;}
int getNumber(){return number;}
int getCbdate(){return cbdate;}
int serch1(int id);
vector<Record>getRecord()
{
return v1;
}
friend istream&operator>>(istream&is,book&d);
friend ostream&operator<<(ostream&os,const book&d);
};
istream&operator>>(istream&is,book&d)
{
is>>d.number;
if(d.number==-1)
return is;
is>>d.name;
is>>d.num;
is>>d.cbdate;
return is;
}
ostream&operator<<(ostream&os,const book&d)
{
os<<d.number<<" "<<d.name<<" "<<d.num<<" "<<d.cbdate<<endl;
return os;
}
int book::serch1(int id)
{
mit1=m1.find(id);
if (mit1!=m1.end())
return mit1->second;
else
return -1;
}
class student//学生类
{
string sname;
int id;
int max;
int num;
vector<Record>v2;
vector<Record>::iterator it2;
multimap<int,int>m2;
multimap<int,int>::iterator mit2;
public:
student()
{
}
student(string s,int i,int m,int y)
{
sname=s;
id=i;
max=m;
num=y;
}
void setSname(string s){sname=s;}
void setId(int i){id=i;}
void setMax(int m){max=m;}
void setNum(int y){num=y;}
string getSname(){return sname;}
int getId(){return id;}
int getMax(){return max;}
int getNum(){return num;}
int serch2(int m);
vector<Record>getRecord()
{
return v2;
}
void operator=(student&s)
{
id=s.getId();
sname=s.getSname();
max=s.getMax();
num=s.getNum();
v2=s.getRecord();
}
bool operator==(student s)
{
return this->id==s.getId()?1:0;
}
friend istream&operator>>(istream&is,student&s);
friend ostream&operator<<(ostream&os,student&s);
};
istream&operator>>(istream&is,student&s)
{
is>>s.id;
if(s.id==-1)
return is;
is>>s.sname;
is>>s.max;
is>>s.num;
}
ostream&operator<<(ostream&os,student&s)
{
os<<s.id<<" "<<s.sname<<" "<<s.max<<" "<<s.num<<" "<<endl;
}
int student::serch2(int m)
{
mit2=m2.find(m);
if(mit2!=m2.end())
return mit2->second;
else
return -1;
}
class manager//管理类
{
vector<book>v3;
vector<book>::iterator it3;
multimap<int,int>m8;
multimap<int,int>::iterator mit8;
multimap<int,int>m3;
multimap<int,int>::iterator mit3;
vector<student>v4;
vector<student>::iterator it4;
multimap<int,int>m4;
multimap<int,int>::iterator mit4;
public:
manager()
{
}
~manager()
{
save1();
save2();
}
void addbook();
void shanchubook();
void liulanbook();
int search3(int a);
void addstudent();
void shanchustudent();
void liulanstudent();
int search4(int a);
void load1();
void load2();
void save1();
void save2();
};
void manager::load1()
{
book b;
int i;
ifstream infile("e:\\20171765book.txt",ios::in);
if(!infile)
return;
v3.clear();
m3.clear();
i=0;
while(infile>>b)
{
v3.push_back(b);
m3.insert(make_pair(b.getNumber(),i-1));
i++;
}
infile.close();
}
void manager::save1()
{
ofstream outfile("e:\\20171765book.txt",ios::out);
if(!outfile)
return;
for(it3=v3.begin();it3!=v3.end();it3++)
{
outfile<<*it3;
}
outfile.close();
}
void manager::load2()
{
student u;
int i;
ifstream inflie("e:\\20171765stu.txt",ios::in);
if(!inflie)
return;
v4.clear();
m4.clear();
i=0;
while(inflie>>u)
{
v4.push_back(u);
m4.insert(make_pair(u.getId(),i));
i++;
}
inflie.close();
}
void manager::save2()
{
ofstream outflie("e:\\20171765stu.txt",ios::out);
if(!outflie)
return;
for(it4=v4.begin();it4!=v4.end();it4++)
{
outflie<<*it4;
}
outflie.close();
}
void manager::addbook()
{
book b;
int i;
cout<<"请输入 阅读量,书名,出版日期,学号:";
while(cin>>b&&b.getNumber()!=-1)
{
v3.push_back(b);
i=v3.size();
m3.insert(make_pair(b.getNumber(),i-1));
}
}
int manager::search3(int a)
{
mit3=m3.find(a);
if(mit3!=m3.end())
{
return mit3->second;
}
else
return -1;
}
void manager::shanchubook()
{
int h;
cin>>h;
int i=search3(h);
if(i!=-1)
{
it3=v3.begin()+i;
m3.erase(m3.find(h));
v3.erase(it3);
}
}
void manager::liulanbook()
{
for( it3=v3.begin();it3!=v3.end();++it3)
cout<<*it3;
}
void manager::addstudent()
{
student s;
int i;
cout<<"请输入 学号,学生姓名,最大借阅量,现在借阅量:";
while(1)
{
cin>>s;
if(s.getId()==-1)
break;
v4.push_back(s);
i=v4.size();
m4.insert(make_pair(s.getId(),i-1));
}
}
int manager::search4(int a)
{
mit4=m4.find(a);
if(mit4!=m4.end())
{
return mit4->second;
}
else
return -1;
}
void manager::shanchustudent()
{
int no;
cin>>no;
int i=search4(no);
if(i!=-1)
{
it4=v4.begin()+i;
m4.erase(m4.find(no));
v4.erase(it4);
}
}
void manager::liulanstudent()
{
for( it4=v4.begin();it4!=v4.end();++it4)
cout<<*it4;
}
class User//用户类
{
vector<book>v5;
vector<book>::iterator it5;
vector<Record>v7;
vector<Record>::iterator it7;
multimap<int,int>m5;
multimap<int,int>::iterator mit5;
student s;
public:
User()
{
load3();
load4();
}
~User()
{
save3();
save4();
}
void load3();
void save3();//将图书信息以及借阅记录写到book文件里
void load4();//客户端单独操作,判断输入的学号是否是信息库里的
void save4();//将改变后的学生信息以及同步产生的借阅记录写回到stu文件里
void load5();
void load6();
void save6();
void save7();
void liulanbook();
int search5(int a);
void querybook();
void jieshu();
void liulanRecord();
void huanshu();
void save5();
};
void User::liulanbook()
{
for(it5=v5.begin();it5!=v5.end();it5++)
cout<<*it5;
}
void User::load5()
{
book b;
int i;
ifstream inflie("e:\\20171765book.txt",ios::in);
if(!inflie)
return;
v5.clear();
m5.clear();
i=0;
while(inflie>>b)
{
v5.push_back(b);
m5.insert(make_pair(b.getNumber(),i-1));
++i;
}
inflie.close();
}
void User::save5()
{
ofstream outflie("e:\\20171765book.txt",ios::out);
if(!outflie)
return;
for(it5=v5.begin();it5!=v5.end();it5++)
{
outflie<<*it5;
}
outflie.close();
}
int User::search5(int a)
{
mit5=m5.find(a);
if(mit5!=m5.end())
{
return mit5->second;
}
else
return -1;
}
void User::save3()
{
ofstream outflie("e:\\20171765book.txt",ios::out);
if(!outflie)
return;
for(it5=v5.begin();it5!=v5.end();it5++)
{
outflie<<*it5;
}
for(it7=v7.begin();it7!=v7.end();it7++)
{
outflie<<*it7; //将产生的借书还书记录写回到文件里
}
outflie.close();
}
void User::load3()
{
book b;
int i;
ifstream inflie("e:\\20171765book.txt",ios::in);
if(!inflie)
return;
v5.clear();
m5.clear();
while(inflie>>b)
{
v5.push_back(b);
int i=v5.size();
m5.insert(make_pair(b.getNumber(),i-1));
}
inflie.close();
}
void User::load4()
{
int id;
cout<<"请输入学号:";
cin>>id;
student s;
int i;
ifstream inflie("e:\\20171765stu.txt",ios::in);
if(!inflie)
return;
while(inflie>>s)
{
if(s.getId()==id)
this->s=s;
}
inflie.close();
}
void User::save4()
{
vector<student>v6;
vector<student>::iterator it6;
student ss;
ifstream inflie("e:\\20171765stu.txt",ios::in);
if(!inflie)
return;
while(inflie>>ss)
{
if(ss==this->s)
ss=this->s;
v6.push_back(ss);
}
inflie.close();
ofstream outflie("e:\\20171765stu.txt",ios::out);
if(!outflie)
return;
for(it6=v6.begin();it6!=v6.end();it6++)
outflie<<*it6;
for (it7=v7.begin();it7!=v7.end();it7++)
outflie<<*it7;
outflie.close();
}
void User::jieshu()
{
int a,no;
int q,w,e,y;
cout<<"输入时间:";
cin>>q>>w>>e>>y;
Time t1(q,w,e,y);
cout<<"请输入书号:";
cin>>a;
int b=search5(a);
s.setNum(s.getNum()+1);
Record r(s.getId(),v5[b].getName(),t1,a,"借书");
cout<<r;
v5[b].setNum(v5[b].getNum()-1);
v7.push_back(r);
}
void User::huanshu()
{
int a,no;
int q,w,e,y;
cout<<"输入时间:";
cin>>q>>w>>e>>y;
Time t1(q,w,e,y);
cout<<"输入书号";
cin>>a;
int b=search5(a);
s.setNum(s.getNum()-1);
Record r(s.getId(),v5[b].getName(),t1,a,"还书");
v5[b].setNum(v5[b].getNum()+1);
v7.push_back(r);
}
void User::load6()
{
book b;
Record r;
int i;
ifstream inflie("d:\\20171765book.txt",ios::in);
if(!inflie)
return;
v5.clear();
m5.clear();
i=0;
while(inflie>>b)
{
v5.push_back(b);
m5.insert(make_pair(b.getNumber(),i-1));
i++;
}
while(inflie>>r)
{
v7.push_back(r);
}
inflie.close();
}
int main()
{
//manager r;
//r.addbook();
//r.addstudent();
//r.save1();
//r.save2();
User u;
u.jieshu();
u.huanshu();
}