#include<iostream>
#include<fstream>
#include<cstdio>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
class Time
{
int year,month,day;
public:
Time(int y,int m,int d):year(y),month(m),day(d){}
Time(){}
int getyear(){return year;}
int getmonth(){return month;}
int getday(){return day;}
Time operator=(const Time &t);
friend istream &operator>>(istream &is,Time &t);
friend ostream &operator<<(ostream &os,Time &t);
};
istream &operator>>(istream &is,Time &t)
{
is>>t.year>>t.month>>t.day;
return is;
}
ostream &operator<<(ostream &os,Time &t)
{
os<<t.year<<" ";
os<<t.month<<" ";
os<<t.day;
return os;
}
Time Time::operator=(const Time &t)
{
year=t.year;month=t.month;day=t.day;
return *this;
}
class Record
{
int no;//学号
int sh;//书号
Time ti;//时间
string type;//操作类型
public:
Record(int n,Time T,int s,string t):no(n),sh(s),type(t)
{
ti=T;
}
Record(){}
int getno(){return no;}
int getsh(){return sh;}
friend istream &operator>>(istream &is,Record &r);
friend ostream &operator<<(ostream &os,Record &r);
};
istream &operator>>(istream &is,Record &r)
{
is>>r.no>>r.ti>>r.sh>>r.type;
return is;
}
ostream &operator<<(ostream &os,Record &r)
{
os<<r.no<<" ";
os<<r.ti<<" ";
os<<r.sh<<" ";
os<<r.type;
return os;
}
class Book
{
int sh;//书号
string name,auther;//书名、作者
bool state;//书的状态(1为存在,0为借出)
int rs;//记录条数
vector<Record>v;//存储借阅记录
vector<Record>::iterator vit;
public:
Book(int n,string na,string au,int r):sh(n),name(na),auther(au),rs(r)
{
state=1;
}
Book(){}
int getsh(){return sh;}
bool getstate(){return state;}
int getrs(){return rs;}
vector<Record>getrecord(){return v;}
void setsh(int n){sh=n;}
void setname(string n){name=n;}
void setauther(string n){auther=n;}
void setstate(int n){state=n;}
void setrs(int n){rs+=n;}
void addrecord(Record &r);//增加借阅记录
void clear(){v.clear();}//清空借阅记录
void display();
Book operator=(Book &b);
friend istream &operator>>(istream &is,Book &b);
friend ostream &operator<<(ostream &os,Book &b);
};
Book Book::operator=(Book &b)
{
sh=b.sh;name=b.name;auther=b.auther;rs=b.rs;state=b.state;
v=b.getrecord();
return *this;
}
istream &operator>>(istream &is,Book &b)
{
is>>b.sh;
if(b.sh==-1) return is;
is>>b.name>>b.auther>>b.state>>b.rs;
return is;
}
ostream &operator<<(ostream &os,Book &b)
{
os<<b.sh<<" ";
os<<b.name<<" ";
os<<b.auther<<" ";
os<<b.state<<" ";
os<<b.rs<<endl;
for(int i=0;i<b.rs;i++)
os<<b.v[i]<<endl;
return os;
}
void Book::addrecord(Record &r)
{
v.push_back(r);
}
void Book::display()
{
cout<<sh<<" "<<name<<" "<<auther<<" "<<state<<" "<<rs<<endl;
for(vit=v.begin();vit!=v.end();vit++)
cout<<*vit<<endl;
}
class Student
{
vector<Record>v;//存储借阅记录
vector<Record>::iterator vit;
int no;//学号
int cl;//班级
string name,zhy;//姓名、专业
int num;//当前借书总数
int rs;//记录条数
public:
Student(int n,int c,string na,string z,int r):no(n),cl(c),name(na),zhy(z),rs(r)
{
num=0;
}
Student(){}
int getno(){return no;}
int getnum(){return num;}
int getrs(){return rs;}
vector<Record>getrecord(){return v;}
void setno(int n){no=n;}
void setcl(int n){cl=n;}
void setname(string n){name=n;}
void setzhy(string n){zhy=n;}
void setnum(int n){num+=n;}
void setrs(int n){rs+=n;}
void addrecord(Record &r);//增加借阅记录
void clear(){v.clear();}//清空借阅记录
void display();
Student operator=(Student &s);
bool operator==(Student &s);
friend istream &operator>>(istream &is,Student &s);
friend ostream &operator<<(ostream &os,Student &s);
};
bool Student::operator==(Student &s)
{
return no==s.getno()?1:0;
}
istream &operator>>(istream &is,Student &s)
{
is>>s.no;
if(s.no==-1) return is;
is>>s.name>>s.zhy>>s.cl>>s.num>>s.rs;
return is;
}
ostream &operator<<(ostream &os,Student &s)
{
os<<s.no<<" ";
os<<s.name<<" ";
os<<s.zhy<<" ";
os<<s.cl<<" ";
os<<s.num<<" ";
os<<s.rs<<endl;
for(int i=0;i<s.rs;i++)
os<<s.v[i]<<endl;
return os;
}
Student Student::operator=(Student &s)
{
no=s.no;cl=s.cl;name=s.name;zhy=s.zhy;num=s.num;rs=s.rs;
v=s.getrecord();
return *this;
}
void Student::addrecord(Record &r)
{
v.push_back(r);
}
void Student::display()
{
cout<<no<<" "<<name<<" "<<zhy<<" "<<cl<<" "<<num<<" "<<rs<<endl;
for(vit=v.begin();vit!=v.end();vit++)
cout<<*vit<<endl;
}
class Stuop
{
Student stu;//定义一个学生类对象
Time t;//当前操作时间
vector<Book>b;//存储书籍信息
vector<Book>::iterator bit;
multimap<int,int>mb;//按书号快速查找
multimap<int,int>::iterator mbit;
public:
Stuop(int no,Time ti)
{
load1();
load2(no);
t=ti;
}
~Stuop()
{
save1();
save2();
}
void load1();//从文件中读入书籍信息
void save1();//向文件中存储书籍信息
void load2(int n);//读入学生信息
void save2();//存储学生信息
void borrowbook();//借书
void returnbook();//还书
int findbook(int n);//按书号查找
};
void Stuop::load1()
{
Book b1;
int i=0;
ifstream infile("d:\\20171798book.txt",ios::in);
if(!infile)
return;
b.clear();
mb.clear();
while(infile>>b1)
{
if(b1.getrs())
for(int i=0;i<b1.getrs();i++)
{
Record r;
infile>>r;
b1.addrecord(r);
}
b.push_back(b1);
b1.clear();
mb.insert(make_pair(b1.getsh(),i));
i++;
}
infile.close();
}
void Stuop::save1()
{
ofstream outfile("d:\\20171798book.txt",ios::out);
if(!outfile)
return;
for(bit=b.begin();bit!=b.end();bit++)
outfile<<*bit<<endl;
outfile.close();
}
void Stuop::load2(int n)
{
Student s1;
ifstream infile("d:\\20171798stu.txt",ios::in);
if(!infile)
return;
while(infile>>s1)
{
if(s1.getrs())
for(int i=0;i<s1.getrs();i++)
{
Record r;
infile>>r;
s1.addrecord(r);
}
if(n==s1.getno())
{
stu=s1;
break;
}
s1.clear();
}
infile.close();
}
void Stuop::save2()
{
vector<Student>v;
vector<Student>::iterator it;
Student s;
ifstream infile("d:\\20171798stu.txt",ios::in);
if(!infile)
return;
while(infile>>s)
{
if(s.getrs())
for(int i=0;i<s.getrs();i++)
{
Record r;
infile>>r;
s.addrecord(r);
}
if(s==this->stu)
s=this->stu;
v.push_back(s);
s.clear();
}
infile.close();
ofstream outfile("d:\\20171798stu.txt",ios::out);
if(!outfile)
return;
for(it=v.begin();it!=v.end();it++)
outfile<<*it<<endl;
outfile.close();
}
int Stuop::findbook(int n)
{
mbit=mb.find(n);
if(mbit!=mb.end())
{
return mbit->second;
}
else
return -1;
}
void Stuop::borrowbook()
{
if(stu.getnum()<10)
{
int sh;
cin>>sh;
int i=findbook(sh);
if(i!=-1)
{
if(b[i].getstate()==1)
{
Record r1(stu.getno(),t,b[i].getsh(),"J");
stu.setnum(1);
stu.setrs(1);
stu.addrecord(r1);
b[i].setstate(0);
b[i].setrs(1);
b[i].addrecord(r1);
}
else
cout<<"书籍已被借走";
}
else
cout<<"书籍不存在";
}
else
cout<<"已超出借书上限";
}
void Stuop::returnbook()
{
int sh;
cin>>sh;
int i=findbook(sh);
if(i!=-1)
{
Record r1(stu.getno(),t,b[i].getsh(),"H");
stu.setnum(-1);
stu.setrs(1);
stu.addrecord(r1);
b[i].setstate(1);
b[i].setrs(1);
b[i].addrecord(r1);
}
else
cout<<"书籍不存在";
}
class Admop
{
vector<Book>b;//存储书籍信息
vector<Book>::iterator bit;
vector<Student>s;//存储学生信息
vector<Student>::iterator sit;
public:
Admop()
{
load1();
load2();
}
~Admop()
{
save1();
save2();
}
void load1();//读入学生信息
void load2();//读入书籍信息
void save1();//存储学生信息
void save2();//存储书籍信息
bool findstu(int n);//按学号查找
bool findbook(int n);//按书号查找
void addstu();//增加学生
void addbook();//增加书籍
void studisp();
void bookdisp();
};
void Admop::load1()
{
Student s1;
ifstream infile("d:\\20171798stu.txt",ios::in);
if(!infile)
return;
s.clear();
while(infile>>s1)
{
if(s1.getrs())
for(int i=0;i<s1.getrs();i++)
{
Record r;
infile>>r;
s1.addrecord(r);
}
s.push_back(s1);
s1.clear();
}
infile.close();
}
void Admop::save1()
{
ofstream outfile("d:\\20171798stu.txt",ios::out);
if(!outfile)
return;
for(sit=s.begin();sit!=s.end();sit++)
outfile<<*sit<<endl;
outfile.close();
}
void Admop::load2()
{
Book b1;
ifstream infile("d:\\20171798book.txt",ios::in);
if(!infile)
return;
b.clear();
while(infile>>b1)
{
if(b1.getrs())
for(int i=0;i<b1.getrs();i++)
{
Record r;
infile>>r;
b1.addrecord(r);
}
b.push_back(b1);
b1.clear();
}
infile.close();
}
void Admop::save2()
{
ofstream outfile("d:\\20171798book.txt",ios::out);
if(!outfile)
return;
for(bit=b.begin();bit!=b.end();bit++)
outfile<<*bit<<endl;
outfile.close();
}
bool Admop::findbook(int n)
{
for(bit=b.begin();bit!=b.end();bit++)
if(bit->getsh()==n)
return 1;
return 0;
}
bool Admop::findstu(int n)
{
for(sit=s.begin();sit!=s.end();sit++)
if(sit->getno()==n)
return 1;
return 0;
}
void Admop::addstu()
{
Student s1;
while(1)
{
cin>>s1;
if(s1.getno()==-1)
break;
s.push_back(s1);
}
}
void Admop::addbook()
{
Book b1;
while(1)
{
cin>>b1;
if(b1.getsh()==-1)
break;
b.push_back(b1);
}
}
void Admop::studisp()
{
for(sit=s.begin();sit!=s.end();sit++)
sit->display();
}
void Admop::bookdisp()
{
for(bit=b.begin();bit!=b.end();bit++)
bit->display();
}
int main()
{
Admop aop;
aop.addstu();
aop.addbook();
/*int n;
Time t;
cin>>n>>t;
Stuop sop(n,t);
sop.borrowbook();
sop.returnbook();*/
}
#include<fstream>
#include<cstdio>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
class Time
{
int year,month,day;
public:
Time(int y,int m,int d):year(y),month(m),day(d){}
Time(){}
int getyear(){return year;}
int getmonth(){return month;}
int getday(){return day;}
Time operator=(const Time &t);
friend istream &operator>>(istream &is,Time &t);
friend ostream &operator<<(ostream &os,Time &t);
};
istream &operator>>(istream &is,Time &t)
{
is>>t.year>>t.month>>t.day;
return is;
}
ostream &operator<<(ostream &os,Time &t)
{
os<<t.year<<" ";
os<<t.month<<" ";
os<<t.day;
return os;
}
Time Time::operator=(const Time &t)
{
year=t.year;month=t.month;day=t.day;
return *this;
}
class Record
{
int no;//学号
int sh;//书号
Time ti;//时间
string type;//操作类型
public:
Record(int n,Time T,int s,string t):no(n),sh(s),type(t)
{
ti=T;
}
Record(){}
int getno(){return no;}
int getsh(){return sh;}
friend istream &operator>>(istream &is,Record &r);
friend ostream &operator<<(ostream &os,Record &r);
};
istream &operator>>(istream &is,Record &r)
{
is>>r.no>>r.ti>>r.sh>>r.type;
return is;
}
ostream &operator<<(ostream &os,Record &r)
{
os<<r.no<<" ";
os<<r.ti<<" ";
os<<r.sh<<" ";
os<<r.type;
return os;
}
class Book
{
int sh;//书号
string name,auther;//书名、作者
bool state;//书的状态(1为存在,0为借出)
int rs;//记录条数
vector<Record>v;//存储借阅记录
vector<Record>::iterator vit;
public:
Book(int n,string na,string au,int r):sh(n),name(na),auther(au),rs(r)
{
state=1;
}
Book(){}
int getsh(){return sh;}
bool getstate(){return state;}
int getrs(){return rs;}
vector<Record>getrecord(){return v;}
void setsh(int n){sh=n;}
void setname(string n){name=n;}
void setauther(string n){auther=n;}
void setstate(int n){state=n;}
void setrs(int n){rs+=n;}
void addrecord(Record &r);//增加借阅记录
void clear(){v.clear();}//清空借阅记录
void display();
Book operator=(Book &b);
friend istream &operator>>(istream &is,Book &b);
friend ostream &operator<<(ostream &os,Book &b);
};
Book Book::operator=(Book &b)
{
sh=b.sh;name=b.name;auther=b.auther;rs=b.rs;state=b.state;
v=b.getrecord();
return *this;
}
istream &operator>>(istream &is,Book &b)
{
is>>b.sh;
if(b.sh==-1) return is;
is>>b.name>>b.auther>>b.state>>b.rs;
return is;
}
ostream &operator<<(ostream &os,Book &b)
{
os<<b.sh<<" ";
os<<b.name<<" ";
os<<b.auther<<" ";
os<<b.state<<" ";
os<<b.rs<<endl;
for(int i=0;i<b.rs;i++)
os<<b.v[i]<<endl;
return os;
}
void Book::addrecord(Record &r)
{
v.push_back(r);
}
void Book::display()
{
cout<<sh<<" "<<name<<" "<<auther<<" "<<state<<" "<<rs<<endl;
for(vit=v.begin();vit!=v.end();vit++)
cout<<*vit<<endl;
}
class Student
{
vector<Record>v;//存储借阅记录
vector<Record>::iterator vit;
int no;//学号
int cl;//班级
string name,zhy;//姓名、专业
int num;//当前借书总数
int rs;//记录条数
public:
Student(int n,int c,string na,string z,int r):no(n),cl(c),name(na),zhy(z),rs(r)
{
num=0;
}
Student(){}
int getno(){return no;}
int getnum(){return num;}
int getrs(){return rs;}
vector<Record>getrecord(){return v;}
void setno(int n){no=n;}
void setcl(int n){cl=n;}
void setname(string n){name=n;}
void setzhy(string n){zhy=n;}
void setnum(int n){num+=n;}
void setrs(int n){rs+=n;}
void addrecord(Record &r);//增加借阅记录
void clear(){v.clear();}//清空借阅记录
void display();
Student operator=(Student &s);
bool operator==(Student &s);
friend istream &operator>>(istream &is,Student &s);
friend ostream &operator<<(ostream &os,Student &s);
};
bool Student::operator==(Student &s)
{
return no==s.getno()?1:0;
}
istream &operator>>(istream &is,Student &s)
{
is>>s.no;
if(s.no==-1) return is;
is>>s.name>>s.zhy>>s.cl>>s.num>>s.rs;
return is;
}
ostream &operator<<(ostream &os,Student &s)
{
os<<s.no<<" ";
os<<s.name<<" ";
os<<s.zhy<<" ";
os<<s.cl<<" ";
os<<s.num<<" ";
os<<s.rs<<endl;
for(int i=0;i<s.rs;i++)
os<<s.v[i]<<endl;
return os;
}
Student Student::operator=(Student &s)
{
no=s.no;cl=s.cl;name=s.name;zhy=s.zhy;num=s.num;rs=s.rs;
v=s.getrecord();
return *this;
}
void Student::addrecord(Record &r)
{
v.push_back(r);
}
void Student::display()
{
cout<<no<<" "<<name<<" "<<zhy<<" "<<cl<<" "<<num<<" "<<rs<<endl;
for(vit=v.begin();vit!=v.end();vit++)
cout<<*vit<<endl;
}
class Stuop
{
Student stu;//定义一个学生类对象
Time t;//当前操作时间
vector<Book>b;//存储书籍信息
vector<Book>::iterator bit;
multimap<int,int>mb;//按书号快速查找
multimap<int,int>::iterator mbit;
public:
Stuop(int no,Time ti)
{
load1();
load2(no);
t=ti;
}
~Stuop()
{
save1();
save2();
}
void load1();//从文件中读入书籍信息
void save1();//向文件中存储书籍信息
void load2(int n);//读入学生信息
void save2();//存储学生信息
void borrowbook();//借书
void returnbook();//还书
int findbook(int n);//按书号查找
};
void Stuop::load1()
{
Book b1;
int i=0;
ifstream infile("d:\\20171798book.txt",ios::in);
if(!infile)
return;
b.clear();
mb.clear();
while(infile>>b1)
{
if(b1.getrs())
for(int i=0;i<b1.getrs();i++)
{
Record r;
infile>>r;
b1.addrecord(r);
}
b.push_back(b1);
b1.clear();
mb.insert(make_pair(b1.getsh(),i));
i++;
}
infile.close();
}
void Stuop::save1()
{
ofstream outfile("d:\\20171798book.txt",ios::out);
if(!outfile)
return;
for(bit=b.begin();bit!=b.end();bit++)
outfile<<*bit<<endl;
outfile.close();
}
void Stuop::load2(int n)
{
Student s1;
ifstream infile("d:\\20171798stu.txt",ios::in);
if(!infile)
return;
while(infile>>s1)
{
if(s1.getrs())
for(int i=0;i<s1.getrs();i++)
{
Record r;
infile>>r;
s1.addrecord(r);
}
if(n==s1.getno())
{
stu=s1;
break;
}
s1.clear();
}
infile.close();
}
void Stuop::save2()
{
vector<Student>v;
vector<Student>::iterator it;
Student s;
ifstream infile("d:\\20171798stu.txt",ios::in);
if(!infile)
return;
while(infile>>s)
{
if(s.getrs())
for(int i=0;i<s.getrs();i++)
{
Record r;
infile>>r;
s.addrecord(r);
}
if(s==this->stu)
s=this->stu;
v.push_back(s);
s.clear();
}
infile.close();
ofstream outfile("d:\\20171798stu.txt",ios::out);
if(!outfile)
return;
for(it=v.begin();it!=v.end();it++)
outfile<<*it<<endl;
outfile.close();
}
int Stuop::findbook(int n)
{
mbit=mb.find(n);
if(mbit!=mb.end())
{
return mbit->second;
}
else
return -1;
}
void Stuop::borrowbook()
{
if(stu.getnum()<10)
{
int sh;
cin>>sh;
int i=findbook(sh);
if(i!=-1)
{
if(b[i].getstate()==1)
{
Record r1(stu.getno(),t,b[i].getsh(),"J");
stu.setnum(1);
stu.setrs(1);
stu.addrecord(r1);
b[i].setstate(0);
b[i].setrs(1);
b[i].addrecord(r1);
}
else
cout<<"书籍已被借走";
}
else
cout<<"书籍不存在";
}
else
cout<<"已超出借书上限";
}
void Stuop::returnbook()
{
int sh;
cin>>sh;
int i=findbook(sh);
if(i!=-1)
{
Record r1(stu.getno(),t,b[i].getsh(),"H");
stu.setnum(-1);
stu.setrs(1);
stu.addrecord(r1);
b[i].setstate(1);
b[i].setrs(1);
b[i].addrecord(r1);
}
else
cout<<"书籍不存在";
}
class Admop
{
vector<Book>b;//存储书籍信息
vector<Book>::iterator bit;
vector<Student>s;//存储学生信息
vector<Student>::iterator sit;
public:
Admop()
{
load1();
load2();
}
~Admop()
{
save1();
save2();
}
void load1();//读入学生信息
void load2();//读入书籍信息
void save1();//存储学生信息
void save2();//存储书籍信息
bool findstu(int n);//按学号查找
bool findbook(int n);//按书号查找
void addstu();//增加学生
void addbook();//增加书籍
void studisp();
void bookdisp();
};
void Admop::load1()
{
Student s1;
ifstream infile("d:\\20171798stu.txt",ios::in);
if(!infile)
return;
s.clear();
while(infile>>s1)
{
if(s1.getrs())
for(int i=0;i<s1.getrs();i++)
{
Record r;
infile>>r;
s1.addrecord(r);
}
s.push_back(s1);
s1.clear();
}
infile.close();
}
void Admop::save1()
{
ofstream outfile("d:\\20171798stu.txt",ios::out);
if(!outfile)
return;
for(sit=s.begin();sit!=s.end();sit++)
outfile<<*sit<<endl;
outfile.close();
}
void Admop::load2()
{
Book b1;
ifstream infile("d:\\20171798book.txt",ios::in);
if(!infile)
return;
b.clear();
while(infile>>b1)
{
if(b1.getrs())
for(int i=0;i<b1.getrs();i++)
{
Record r;
infile>>r;
b1.addrecord(r);
}
b.push_back(b1);
b1.clear();
}
infile.close();
}
void Admop::save2()
{
ofstream outfile("d:\\20171798book.txt",ios::out);
if(!outfile)
return;
for(bit=b.begin();bit!=b.end();bit++)
outfile<<*bit<<endl;
outfile.close();
}
bool Admop::findbook(int n)
{
for(bit=b.begin();bit!=b.end();bit++)
if(bit->getsh()==n)
return 1;
return 0;
}
bool Admop::findstu(int n)
{
for(sit=s.begin();sit!=s.end();sit++)
if(sit->getno()==n)
return 1;
return 0;
}
void Admop::addstu()
{
Student s1;
while(1)
{
cin>>s1;
if(s1.getno()==-1)
break;
s.push_back(s1);
}
}
void Admop::addbook()
{
Book b1;
while(1)
{
cin>>b1;
if(b1.getsh()==-1)
break;
b.push_back(b1);
}
}
void Admop::studisp()
{
for(sit=s.begin();sit!=s.end();sit++)
sit->display();
}
void Admop::bookdisp()
{
for(bit=b.begin();bit!=b.end();bit++)
bit->display();
}
int main()
{
Admop aop;
aop.addstu();
aop.addbook();
/*int n;
Time t;
cin>>n>>t;
Stuop sop(n,t);
sop.borrowbook();
sop.returnbook();*/
}