#include<bits/stdc++.h>
using namespace std;
class Date
{
int year,month,day;
public:
using namespace std;
class Date
{
int year,month,day;
public:
Date(int x,int y,int z):year(x),month(y),day(z) {}
Date() {year=0;month=0;day=0;}
Date() {year=0;month=0;day=0;}
int getYear() {return year;}
int getMonth() {return month;}
int getDay() {return day;}
int getMonth() {return month;}
int getDay() {return day;}
void setYear(int x) {year=x;}
void setMonth(int y) {month=y;}
void setDay(int z) {day=z;}
void setMonth(int y) {month=y;}
void setDay(int z) {day=z;}
bool operator <(const Date&d);
friend ostream &operator<<(ostream&os,const Date &d);
friend istream &operator>>(istream&is,Date &d);
friend istream &operator>>(istream&is,Date &d);
};
bool Date::operator<(const Date&d)
{
year!=d.year?year<d.year:month!=d.month?month<d.month:day!=d.day;
}
{
year!=d.year?year<d.year:month!=d.month?month<d.month:day!=d.day;
}
ostream &operator<<(ostream &os,const Date&d)
{
os<<d.year<<" ";
os<<d.month<<" ";
os<<d.day;
{
os<<d.year<<" ";
os<<d.month<<" ";
os<<d.day;
return os;
}
istream&operator>>(istream&is,Date&d)
{
is>>d.year>>d.month>>d.day;
return is;
}
}
istream&operator>>(istream&is,Date&d)
{
is>>d.year>>d.month>>d.day;
return is;
}
class Record
{
int xh;
//string type;
Date start;
int sh;
int xj;//0不续借1续借
Date end;
int state;//是否还书0未还1已还
public:
Record(int a5,Date a6,int a7,int a8,Date a9,int a10 ):start(a6),end(a9)
{
xh=a5;
//type=aa;
sh=a7;
xj=a8;
state=a10;
}
Record() {}
int getXh() {return xh;}
Date getStart() {return start;}
int getSh() {return sh;}
int getXj() {return xj;}
Date getEnd() {return end;}
int getState() {return state;}
void setXh(int a) {xh=a;}
void setStart(Date a1) {start=a1;}
void setSh(int a2) {sh=a2;}
void setXj(int a3) {xj=a3;}
void setEnd(Date a11) {end=a11;}
void setState(int a4) {state=a4;}
friend ostream&operator<<(ostream&os,const Record&r);
friend istream&operator>>(istream&is,Record&r);
Record() {}
int getXh() {return xh;}
Date getStart() {return start;}
int getSh() {return sh;}
int getXj() {return xj;}
Date getEnd() {return end;}
int getState() {return state;}
void setXh(int a) {xh=a;}
void setStart(Date a1) {start=a1;}
void setSh(int a2) {sh=a2;}
void setXj(int a3) {xj=a3;}
void setEnd(Date a11) {end=a11;}
void setState(int a4) {state=a4;}
friend ostream&operator<<(ostream&os,const Record&r);
friend istream&operator>>(istream&is,Record&r);
};
ostream &operator<<(ostream&os,const Record&r)
{
os<<r.xh<<" ";
//os<<r.type<<" ";
os<<r.start<<" ";
os<<r.sh<<" ";
os<<r.xj<<" ";
os<<r.end<<" ";
os<<r.state;
return os;
}
istream &operator>>(istream&is,Record&r)
{
is>>r.xh>>r.start>>r.sh>>r.xj>>r.end>>r.state;
return is;
}
}
istream &operator>>(istream&is,Record&r)
{
is>>r.xh>>r.start>>r.sh>>r.xj>>r.end>>r.state;
return is;
}
class Book
{
int sh;
string sm;
string author;
int max;//最大图数量
int now;//图书库存量
int number;//记录数
vector<Record>v1;
vector<Record>::iterator it1;
multimap<int,int>m1;
multimap<int,int>::iterator mit1;
public:
Book(int b1,string b2,string b3,int b4,int b5,int b6)
{ sh=b1;
sm=b2;
author=b3;
max=b4;
now=b5;
number=b6;
}
Book() {}
vector<Record>&getRecord() //获取记录集合
{
return v1;
}
int getSh() {return sh;}
string getSm() {return sm;}
string getAuthor() {return author;}
int getMax() {return max;}
int getNow() {return now;}
int getNumber() {return number;}
void setNumber(int y){number=y;}
void setSh(int b6) {sh=b6;}
void setSm(string b7) {sm=b7;}
void setAuthor(string b8) {author=b8;}
void setMax(int b9) {max=b9;}
void setNow(int b10) {now=b10;}
friend ostream&operator<<(ostream&os,const Book&b1);
friend istream&operator>>(istream&is,Book&b1);
void addRecord(Record r1);
void dispRecord();
void deleteRecord(int no);
int search1(int no);
};
int Book::search1(int no)//根据书号指针的变化,与查询,删除有关
{
mit1=m1.find(no);
if(mit1!=m1.end())//枚举使指针找到
return mit1->second;
else
return -1;
}
void Book::deleteRecord(int no)
{
int i;
i=search1(no);
if(i!=-1)
{
v1[i].setState(0);
}
}
void Book::dispRecord()
{
if(v1.size()!=0)
{
for(it1=v1.begin();it1!=v1.end();it1++)
cout<<*it1;
}
else
cout<<"无记录"<<endl;
}
void Book::addRecord(Record r1)
{
r1.setState(1);//
v1.push_back(r1);
int i=v1.size();
m1.insert(make_pair(r1.getXh(),i-1));
}
istream&operator>>(istream&is,Book&b1)
{
is>>b1.sh;
if(b1.sh==-1)
return is;
is>>b1.sm>>b1.author>>b1.max>>b1.now>>b1.number;
b1.v1.clear();
if(b1.number!=0)
{
for(int u=0;u<b1.number;u++)
{
Record r;
int i;
{
is>>r;
b1.v1.push_back(r);
i=b1.v1.size();
b1.m1.insert(make_pair(r.getXh(),i-1));
}
}
}
return is;
}
ostream&operator<<(ostream&os,const Book&b1)
{
os<<b1.sh;
os<<" "<<b1.sm;
os<<" "<<b1.author;
os<<" "<<b1.max;
os<<" "<<b1.now;
os<<" "<<b1.number;
os<<endl;
if(b1.number!=0)
{
os<<" "<<b1.sm;
os<<" "<<b1.author;
os<<" "<<b1.max;
os<<" "<<b1.now;
os<<" "<<b1.number;
os<<endl;
if(b1.number!=0)
{
int i;
for(i=0;i<b1.number;i++)
{
os<<b1.v1[i]<<endl;
}
}
return os;}
class User
{
int xh;
string xm;
string major;
//有无违纪
int max;
int now;
int number;
vector<Record>v2;
vector<Record>::iterator it2;
multimap<int,int>m2;
multimap<int,int>::iterator mit2;
public:
User(int b1,string b2,string b3,int b4,int b5,int b6):xh(b1)
{
xm=b2;
major=b3;
max=b4;
now=b5;
number=b6;
}
User() {}
vector<Record>getRecord()
{
return v2;
}
// friend class Manage;
int getXh() {return xh;}
string getXm() {return xm;}
string getMajor() {return major;}
int getMax() {return max;}
int getNow() {return now;}
void setXh(int b6) {xh=b6;}
void setXm(string b7) {xm=b7;}
void setMajor(string b8) {major=b8;}
void setMax(int b9) {max=b9;}
void setNow(int b10) {now=b10;}
friend ostream&operator<<(ostream&os,const User&u1);
friend istream&operator>>(istream&is,User&u1);
void addRecord(Record r2);
void dispRecord();
void deleteRecord(int no);
int search2(int no);
int getNumber(){return number;}
void setNumber(int p){number=p;}
void operator=(User&ty)
{
xh=ty.xh;
xm=ty.xm;
major=ty.major;
max=ty.max;
now=ty.now;
number=ty.number;
v2=ty.getRecord();
}
bool operator==(User u1)
{
return this->xh==u1.getXh()?1:0;
}
};
int User::search2(int no)
{
mit2=m2.find(no);
if(mit2!=m2.end())
return mit2->second;
else
return -1;
}
void User::deleteRecord(int no)
{
int i;
i=search2(no);
if(i!=-1)
{
v2[i].setState(0);
}
}
void User::dispRecord()
{
if(v2.size()!=0)
{
for(it2=v2.begin();it2!=v2.end();it2++)
cout<<*it2;
}
else
cout<<"无记录"<<endl;
}
void User::addRecord(Record r2)
{
r2.setState(1);
v2.push_back(r2);
int i=v2.size();
m2.insert(make_pair(r2.getXh(),i-1));
}
istream&operator>>(istream&is,User&u1)
{
is>>u1.xh;
if(u1.xh==-1)
return is;
is>>u1.xm>>u1.major>>u1.max>>u1.now>>u1.number;
Record x;
int i;
u1.v2.clear();
if(u1.number!=0)
{
for(int a=0;a<u1.number;a++)
{
is>>x;
u1.v2.push_back(x);
i=u1.v2.size();
u1.m2.insert(make_pair(x.getXh(),i-1));
}
}
return is;
}
ostream&operator<<(ostream&os,const User&u1)
{
os<<u1.xh;
os<<" "<<u1.xm;
os<<" "<<u1.major;
os<<" "<<u1.max;
os<<" "<<u1.now;
os<<" "<<u1.number;
os<<endl;
if(u1.number!=0)
{
int i;
for(i=0;i<u1.number;i++)
{
os<<u1.v2[i]<<endl;
}
}
return os;
}
os<<" "<<u1.xm;
os<<" "<<u1.major;
os<<" "<<u1.max;
os<<" "<<u1.now;
os<<" "<<u1.number;
os<<endl;
if(u1.number!=0)
{
int i;
for(i=0;i<u1.number;i++)
{
os<<u1.v2[i]<<endl;
}
}
return os;
}
class Manage
{
vector<Book>v3;
vector<Book>::iterator it3;
multimap<int,int> m3;
multimap<int,int>::iterator mit3;
vector<User>v4;
vector<User>::iterator it4;
multimap<int,int> m4;
multimap<int,int>::iterator mit4;
{
vector<Book>v3;
vector<Book>::iterator it3;
multimap<int,int> m3;
multimap<int,int>::iterator mit3;
vector<User>v4;
vector<User>::iterator it4;
multimap<int,int> m4;
multimap<int,int>::iterator mit4;
public:
Manage(){}
~Manage()
{
save1();
save2();
}
void addBook();
void disBook();
void deleteBook();
int search3(int h);
void addUser();
void disUser();
void deleteUser();
int search4(int h);
//void load1();
//void load2();
void save1();
void save2();
Manage(){}
~Manage()
{
save1();
save2();
}
void addBook();
void disBook();
void deleteBook();
int search3(int h);
void addUser();
void disUser();
void deleteUser();
int search4(int h);
//void load1();
//void load2();
void save1();
void save2();
};
int Manage::search4(int h)
{
mit4=m4.find(h);
if(mit4!=m4.end())
{
return mit4->second;
}
else
return -1;
}
void Manage::deleteUser()
{ cout<<"请输入删除的学号"<<endl;
int no;
cin>>no;
int i=search4(no);
if(i!=-1)
{it4=v4.begin()+i;
m4.erase(m4.find(no));
v4.erase(it4);
}
cout<<endl;
cout<<"删除结束";
}
void Manage::disUser()
{ cout<<"显示用户"<<endl;
for( it4=v4.begin();it4!=v4.end();++it4)
cout<<*it4;
}
void Manage::addUser()
{ cout<<"请输入增加学生信息,当学号为-1结束"<<endl;
User u;
int i;
while(1)
{cin>>u;
int Manage::search4(int h)
{
mit4=m4.find(h);
if(mit4!=m4.end())
{
return mit4->second;
}
else
return -1;
}
void Manage::deleteUser()
{ cout<<"请输入删除的学号"<<endl;
int no;
cin>>no;
int i=search4(no);
if(i!=-1)
{it4=v4.begin()+i;
m4.erase(m4.find(no));
v4.erase(it4);
}
cout<<endl;
cout<<"删除结束";
}
void Manage::disUser()
{ cout<<"显示用户"<<endl;
for( it4=v4.begin();it4!=v4.end();++it4)
cout<<*it4;
}
void Manage::addUser()
{ cout<<"请输入增加学生信息,当学号为-1结束"<<endl;
User u;
int i;
while(1)
{cin>>u;
if(u.getXh()==-1)
break;
v4.push_back(u);
i=v4.size();
m4.insert(make_pair(u.getXh(),i-1));
break;
v4.push_back(u);
i=v4.size();
m4.insert(make_pair(u.getXh(),i-1));
}
cout<<"增加结束";
}
void Manage::addBook()
{ cout<<"请输入增加的图书信息,当书号为-1结束"<<endl;
Book b;
int i;
while(1)
{
cin>>b;
if(b.getSh()==-1)
break;
v3.push_back(b);
cout<<"增加结束";
}
void Manage::addBook()
{ cout<<"请输入增加的图书信息,当书号为-1结束"<<endl;
Book b;
int i;
while(1)
{
cin>>b;
if(b.getSh()==-1)
break;
v3.push_back(b);
i=v3.size();
m3.insert(make_pair(b.getSh(),i-1));
}
cout<<endl;
cout<<"增加结束";
}
m3.insert(make_pair(b.getSh(),i-1));
}
cout<<endl;
cout<<"增加结束";
}
void Manage::disBook()
{
for(it3=v3.begin();it3!=v3.end();++it3)
cout<<*it3;
{
for(it3=v3.begin();it3!=v3.end();++it3)
cout<<*it3;
}
void Manage::deleteBook()
{ cout<<"请输入删除图书书号"<<endl;
int h;
int i=search3(h);
if(i!=-1)
{it3=v3.begin()+i;
m3.erase(m3.find(h));
v3.erase(it3);
}
cout<<endl;
cout<<"删除结束";
}
int Manage::search3(int h)
{
mit3=m3.find(h);
if(mit3!=m3.end())
{
return mit3->second;
}
else
return -1;
void Manage::deleteBook()
{ cout<<"请输入删除图书书号"<<endl;
int h;
int i=search3(h);
if(i!=-1)
{it3=v3.begin()+i;
m3.erase(m3.find(h));
v3.erase(it3);
}
cout<<endl;
cout<<"删除结束";
}
int Manage::search3(int h)
{
mit3=m3.find(h);
if(mit3!=m3.end())
{
return mit3->second;
}
else
return -1;
}
/*void Manage::load1()
{
Book b;
int i;
ifstream infile("C:\\20171777book.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
v3.clear();
m3.clear();
i=0;
while(infile>>b)
{
v3.push_back(b);
m3.insert(make_pair(b.getSh(),i-1));
i++;
}
infile.close();
}*/
/*void Manage::load2()
{
User u;
Record r;
int i,a;
ifstream infile("C:\\20171777stu.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
v4.clear();
m4.clear();
i=0;
while(infile>>u)
{
v4.push_back(u);
m4.insert(make_pair(u.getXh(),i));
infile>>a;
for(int j=1;j<=a;j++)
{
infile>>r;
u.v4[i].v2.push_back(r);
i++;}
}
infile.close();
}*/
void Manage::save1()
{
ofstream outfile("D:\\20171777book.txt",ios::out);
if(!outfile)
{//cerr<<"没有找到相应文件";
return ;}
for(it3=v3.begin();it3!=v3.end();it3++)
{
outfile<<*it3;
{
Book b;
int i;
ifstream infile("C:\\20171777book.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
v3.clear();
m3.clear();
i=0;
while(infile>>b)
{
v3.push_back(b);
m3.insert(make_pair(b.getSh(),i-1));
i++;
}
infile.close();
}*/
/*void Manage::load2()
{
User u;
Record r;
int i,a;
ifstream infile("C:\\20171777stu.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
v4.clear();
m4.clear();
i=0;
while(infile>>u)
{
v4.push_back(u);
m4.insert(make_pair(u.getXh(),i));
infile>>a;
for(int j=1;j<=a;j++)
{
infile>>r;
u.v4[i].v2.push_back(r);
i++;}
}
infile.close();
}*/
void Manage::save1()
{
ofstream outfile("D:\\20171777book.txt",ios::out);
if(!outfile)
{//cerr<<"没有找到相应文件";
return ;}
for(it3=v3.begin();it3!=v3.end();it3++)
{
outfile<<*it3;
}
outfile.close();
}
void Manage::save2()
{
ofstream outfile("D:\\20171777stu.txt",ios::out);
if(!outfile)
{//cerr<<"没有找到相应文件";
return ;}
for(it4=v4.begin();it4!=v4.end();it4++)
{
outfile<<*it4;
}
outfile.close();
}
class Client
{
public:
Client()
{
load3();
load4();
}
~Client()
{save3();
save4();
}
Client(int n){no=n;}
void load3();
void save3();
void load4();
void save4();
int search5(int h);
void borrow();
void back();
void chaxun();
void chaxunshu(int z);
private:
vector<Book>v5;
vector<Book>::iterator it5;
multimap<int,int>m5;
multimap<int,int>::iterator mit5;
User a;
int no;
};
void Client::chaxunshu(int z)
{
int h=search5(z);
outfile.close();
}
void Manage::save2()
{
ofstream outfile("D:\\20171777stu.txt",ios::out);
if(!outfile)
{//cerr<<"没有找到相应文件";
return ;}
for(it4=v4.begin();it4!=v4.end();it4++)
{
outfile<<*it4;
}
outfile.close();
}
class Client
{
public:
Client()
{
load3();
load4();
}
~Client()
{save3();
save4();
}
Client(int n){no=n;}
void load3();
void save3();
void load4();
void save4();
int search5(int h);
void borrow();
void back();
void chaxun();
void chaxunshu(int z);
private:
vector<Book>v5;
vector<Book>::iterator it5;
multimap<int,int>m5;
multimap<int,int>::iterator mit5;
User a;
int no;
};
void Client::chaxunshu(int z)
{
int h=search5(z);
cout<<v5[h]<<endl;
}
void Client::chaxun()
{
cout<<a;
}
void Client::save3()
{
ofstream outfile("D:\\20171777book.txt",ios::out);
if(!outfile)
{//cerr<<"没有找到相应文件";
return ;}
for(it5=v5.begin();it5!=v5.end();it5++)
{
outfile<<*it5;
}
/*for(int i=0;i<v5.size();i++)
{
outfile<<v5[i];
int a=v5[i].getRecord().size();
outfile<<a;
for(int j=1;j<=a;j++)
outfile<<v5[i].getRecord()[j];
}*/
outfile.close();
}
void Client::load3()
{
Book b;
int i;
ifstream infile("D:\\20171777book.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
v5.clear();
m5.clear();
}
void Client::chaxun()
{
cout<<a;
}
void Client::save3()
{
ofstream outfile("D:\\20171777book.txt",ios::out);
if(!outfile)
{//cerr<<"没有找到相应文件";
return ;}
for(it5=v5.begin();it5!=v5.end();it5++)
{
outfile<<*it5;
}
/*for(int i=0;i<v5.size();i++)
{
outfile<<v5[i];
int a=v5[i].getRecord().size();
outfile<<a;
for(int j=1;j<=a;j++)
outfile<<v5[i].getRecord()[j];
}*/
outfile.close();
}
void Client::load3()
{
Book b;
int i;
ifstream infile("D:\\20171777book.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
v5.clear();
m5.clear();
while(infile>>b)
{v5.push_back(b);
int i=v5.size();
m5.insert(make_pair(b.getSh(),i-1));
{v5.push_back(b);
int i=v5.size();
m5.insert(make_pair(b.getSh(),i-1));
}
infile.close();
}
void Client::load4()
{//int id;
//cin>>id;
User a;
int i;
ifstream infile("D:\\20171777stu.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
infile.close();
}
void Client::load4()
{//int id;
//cin>>id;
User a;
int i;
ifstream infile("D:\\20171777stu.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
while(infile>>a)
{if(a.getXh()==no)
this->a=a;
}
infile.close();
}
void Client::save4()
{vector<User>v;
vector<User>::iterator it;
User u1;
ifstream infile("D:\\20171777stu.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
while(infile>>u1)
{v.push_back(u1);}
infile.close();
{if(a.getXh()==no)
this->a=a;
}
infile.close();
}
void Client::save4()
{vector<User>v;
vector<User>::iterator it;
User u1;
ifstream infile("D:\\20171777stu.txt",ios::in);
if(!infile)
{//cerr<<"没有找到相应文件";
return ;}
while(infile>>u1)
{v.push_back(u1);}
infile.close();
ofstream outfile("D:\\20171777stu.txt",ios::out);
if(!outfile)
{//cerr<<"没有找到相应文件.";
return;}
for(int i=0;i<v.size();i++)
if(v[i].getXh()==a.getXh())
{ v[i]=a;
outfile<<v[i]; }
else
outfile<<v[i];
outfile.close();
}
int Client::search5(int h)
{
mit5=m5.find(h);
if(mit5!=m5.end())
{
return mit5->second;
}
else
return -1;
if(!outfile)
{//cerr<<"没有找到相应文件.";
return;}
for(int i=0;i<v.size();i++)
if(v[i].getXh()==a.getXh())
{ v[i]=a;
outfile<<v[i]; }
else
outfile<<v[i];
outfile.close();
}
int Client::search5(int h)
{
mit5=m5.find(h);
if(mit5!=m5.end())
{
return mit5->second;
}
else
return -1;
}
void Client::borrow()
{
cout<<"请输入图书书号,借书时间,还书时间"<<endl;
int h;
Date d1,d2;
cin>>h>>d1>>d2;
int b=search5(h);
if(a.getNow()<=a.getMax()&&a.getNow()>0)
{ int u=a.getNumber();
a.setNumber(u+1);
int q=v5[b].getNumber();
v5[b].setNumber(q+1);
v5[b].setNow(v5[b].getNow()-1); //剩余书本减一
a.setNow(a.getNow()-1);//可借书本数
cout<<"是否选择续借"<<endl;
int z;
cin>>z;
Record r(a.getXh(),d1,h,z,d2,0);
v5[b].addRecord(r);
a.addRecord(r);
}
}
void Client::back()
{
cout<<"请输入归还图书书号"<<endl;
int h;
cin>>h;
int b=search5(h);
v5[b].setNow(v5[b].getNow()+1);
a.setNow(a.getNow()+1);
cout<<"输入借书,还书日期"<<endl;
Date h1,h2;
cin>>h1>>h2;
cout<<"之前是否选择续借?"<<endl;
Date h1,h2;
cin>>h1>>h2;
cout<<"之前是否选择续借?"<<endl;
int s;
cin>>s;
int u=a.getNumber();
a.setNumber(u+1);
int q=v5[b].getNumber();
v5[b].setNumber(q+1);
Record r(a.getXh(),h1,h,s,h2,1);
v5[b].addRecord(r);
a.addRecord(r);
int u=a.getNumber();
a.setNumber(u+1);
int q=v5[b].getNumber();
v5[b].setNumber(q+1);
Record r(a.getXh(),h1,h,s,h2,1);
v5[b].addRecord(r);
a.addRecord(r);
}
int main()
{
/* Manage ma1;
ma1.addBook();
ma1.save1();
ma1.addUser();
ma1.save2();*/
ma1.addBook();
ma1.save1();
ma1.addUser();
ma1.save2();*/
//Client c1;
//c1.borrow();
/*Book r1;
cin>>r1;
cout<<r1;*/
/*User s1;
cin>>s1;
cout<<s1;*/
int n;
cin>>n;
Client s1(n);
s1.load3();
s1.load4();
s1.chaxun();
s1.borrow();
//s1.chaxun();
//s1.chaxunshu(6745);
s1.chaxun();
s1.borrow();
//s1.chaxun();
//s1.chaxunshu(6745);
//s1.back();
//s1.save3();
// s1.save4();
//s1.save3();
// s1.save4();
//s1.back();
//s1.borrow();
return 0;
}