代码
#include<bits/stdc++.h>
using namespace std;
class Time
{
int year,month,day,hour,minute,second;
public:
Time()
{
year=month=day=hour=0;
}
Time(int a,int b,int c,int d)
{
year=a;month=b;day=c;hour=c;
}
void setYear(int a){year=a;}
int getYear(){return year;}
void setMonth(int a){month=a;}
int getMonth(){return month;}
int getHour(){return hour;}
int getDay(){return day;}
int getMinute(){return minute;}
int getSecond(){return second;}
friend ostream&operator<<(ostream&out,const Time&d);
friend istream&operator>>(istream&in,Time&d);
};
ostream&operator<<(ostream&out,const Time&d)
{
out<<d.year<<"年"<<d.month<<"月"<<d.day<<"日"<<d.hour<<"时";
return out;
}
istream&operator>>(istream&in,Time&d)
{
in>>d.year>>d.month>>d.day>>d.hour;
}
class record
{
int id;
string name;
Time start;
Time end;
int sh;
string caozuo;
public:
record()
{
}
record(int a,string n,Time t1,int b,string s)
{
id=a;sh=b;caozuo=s;name=n;
start=t1;
if (t1.getMonth()+2>12)
{
Time t(t1.getYear()+1,t1.getMonth()-10,t1.getDay(),t1.getHour());
end=t;
}
else
{
Time t(t1.getYear(),t1.getMonth()+2,t1.getDay(),t1.getHour());
end=t;
}
}
void setId(int x){id=x;}
int getId(){return id;}
Time getStart(){return start;}
Time getEnd(){return end;}
int getSh(){return sh;}
friend ostream&operator<<(ostream&out,const record&d);
friend istream&operator>>(istream&in,record&d);
};
ostream&operator<<(ostream&out,const record&d)
{
out<<d.id<<" "<<d.name<<" ";
if (d.caozuo=="借书")
{
out<<"借书日期: "<<d.start<<endl;
out<<"应还日期: "<<d.end<<endl;
}
else
out<<"还书日期: "<<d.start<<endl;
}
istream&operator>>(istream&in,record&d)
{
if (d.caozuo=="借书")
in>>d.id>>d.start>>d.end;
else
in>>d.id>>d.start;
}
class book
{
string name;
int num;
int sh;
vector<record>v1;
vector<record>::iterator it1;
multimap<int,int>m1;
multimap<int,int>::iterator mit1;
public:
book()
{
}
book(int a,string b,int d)
{
sh=a;
name=b;
num=d;
}
void setSh(int a){sh=a;}
int getSh(){return sh;}
void setName(string a){name=a;}
string getName(){return name;}
void setNum(int x){num=x;}
int getNum(){return num;}
int serch1(int id);
vector<record>getRecord()
{
return v1;
}
friend ostream&operator<<(ostream&out,const book&d);
friend istream&operator>>(istream&in,book&d);
};
ostream&operator<<(ostream&out,const book&d)
{
out<<d.sh<<" "<<d.name<<" "<<d.num<<" "<<endl ;
return out;
}
istream&operator>>(istream&in,book&d)
{
in>>d.sh;
if(d.sh==-1)return in;
in>>d.name;
in>>d.num;
return in;
}
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(int a,string s,int b,int c)
{
id=a;
sname=s;
num=b;
max=c;
}
void setId(int s){id=s;}
int getId(){return id;}
void setSname(string s){sname=s;}
string getSname(){return sname;}
void setMax(int a){max=a;}
int getMax(){return max;}
void setNum(int b){num=b;}
int getNum(){return num;}
int serch2(int a);
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&in,student&s);
friend ostream&operator<<(ostream&out,student&s);
};
istream&operator>>(istream&in,student&s)
{
in>>s.id;
if (s.id==-1)
return in;
in>>s.sname;
in>>s.num;
in>>s.max;
}
ostream&operator<<(ostream&out,student&s)
{
out<<s.id<<" "<<s.sname<<" "<<s.num<<" "<<s.max<<endl;
}
int student::serch2(int a)
{
mit2=m2.find(a);
if(mit2!=m2.end())
return mit2->second;
else
return -1;
}
class adm
{
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:
adm()
{
}
~adm()
{
save1();
save2();
}
void addbook();
void shanchubook();
void llbook();
int serch3(int a);
void addstu();
void shanchustu();
void llstu();
int serch4(int a);
void load1();
void load2();
void save1();
void save2();
};
void adm::load1()
{
book b;
int i;
ifstream infile("d:\\20171806book.txt",ios::in);
if(!infile)
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 adm::save1()
{
ofstream outfile("d:\\20171806book.txt",ios::out);
if(!outfile)
return ;
for(it3=v3.begin();it3!=v3.end();it3++)
{
outfile<<*it3;
}
outfile.close();
}
void adm::load2()
{
student u;
int i;
ifstream infile("d:\\20171806stu.txt",ios::in);
if(!infile)
return;
v4.clear();
m4.clear();
i=0;
while(infile>>u)
{v4.push_back(u);
m4.insert(make_pair(u.getId(),i));
i++;
}
infile.close();
}
void adm::save2()
{
ofstream outfile("d:\\20171806stu.txt",ios::out);
if(!outfile)
return ;
for(it4=v4.begin();it4!=v4.end();it4++)
{
outfile<<*it4;
}
outfile.close();
}
void adm::addbook()
{
book b;
int i;
cout<<"请输入书号,书名,余量;";
while(cin>>b&&b.getSh()!=-1)
{
v3.push_back(b);
i=v3.size();
m3.insert(make_pair(b.getSh(),i-1));
}
}
int adm::serch3(int a)
{
mit3=m3.find(a);
if(mit3!=m3.end())
{
return mit3->second;
}
else
return -1;
}
void adm::shanchubook()
{
int h;
cin>>h;
int i=serch3(h);
if(i!=-1)
{
it3=v3.begin()+i;
m3.erase(m3.find(h));
v3.erase(it3);
}
}
void adm::llbook()
{
for( it3=v3.begin();it3!=v3.end();++it3)
cout<<*it3;
}
void adm::addstu()
{
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 adm::serch4(int a)
{
mit4=m4.find(a);
if(mit4!=m4.end())
{
return mit4->second;
}
else
return -1;
}
void adm::shanchustu()
{
int no;
cin>>no;
int i=serch4(no);
if(i!=-1)
{
it4=v4.begin()+i;
m4.erase(m4.find(no));
v4.erase(it4);
}
}
void adm::llstu()
{
for( it4=v4.begin();it4!=v4.end();++it4)
cout<<*it4;
}
class kehu
{
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:
kehu()
{
load3();
load4();
}
~kehu()
{
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 llrecord();
void huanshu();
void save5();
};
void kehu::liulanbook()
{
for (it5=v5.begin();it5!=v5.end();it5++)
cout<<*it5;
}
void kehu::load5()
{
book b;
int i;
ifstream infile("d:\\20171806book.txt",ios::in);
if(!infile)
return;
v5.clear();
m5.clear();
i=0;
while(infile>>b)
{
v5.push_back(b);
m5.insert(make_pair(b.getSh(),i-1));
++i;
}
infile.close();
}
void kehu::save5()
{
ofstream outfile("d:\\20171806book.txt",ios::out);
if(!outfile)
return ;
for(it5=v5.begin();it5!=v5.end();it5++)
{
outfile<<*it5;
}
outfile.close();
}
int kehu::search5(int a)
{
mit5=m5.find(a);
if(mit5!=m5.end())
{
return mit5->second;
}
else
return -1;
}
void kehu::save3()
{
ofstream outfile("d:\\20171806book.txt",ios::out);
if(!outfile)
{
return ;
}
for(it5=v5.begin();it5!=v5.end();it5++)
{
outfile<<*it5;
}
for (it7=v7.begin();it7!=v7.end();it7++)
outfile<<*it7; //将产生的借书还书记录写回到文件里
outfile.close();
}
void kehu::load3()
{
book b;
record r;
int i;
ifstream infile("d:\\20171806book.txt",ios::in);
if(!infile)
{
return;
}
v5.clear();
m5.clear();
while(infile>>b)
{
v5.push_back(b);
int i=v5.size();
m5.insert(make_pair(b.getSh(),i-1));
}
while (infile>>r)
{
v7.push_back(r);
}
infile.close();
}
void kehu::load4()
{
int id;
cout<<"输入学号:";
cin>>id;
student s;
int i;
ifstream infile("d:\\20171806stu.txt",ios::in);
if(!infile)
return;
while(infile>>s)
{
if(s.getId()==id)
this->s=s;
}
infile.close();
}
void kehu::save4()
{
vector<student>v6;
vector<student>::iterator it6;
student ss;
ifstream infile("d:\\20171806stu.txt",ios::in);
if(!infile)
return ;
while(infile>>ss)
{
if(ss==this->s)
ss=this->s;
v6.push_back(ss);
}
infile.close();
ofstream outfile("d:\\20171806stu.txt",ios::out);
if(!outfile)
return;
for(it6=v6.begin();it6!=v6.end();it6++)
outfile<<*it6;
for (it7=v7.begin();it7!=v7.end();it7++)
outfile<<*it7;
outfile.close();
}
void kehu::jieshu()
{
int a,no;
int q,w,e,y,p,l;
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 kehu::huanshu()
{
int a,no;
int q,w,e,y,p,l;
cout<<"输入时间:";
cin>>q>>w>>e>>y;
Time t1(q,w,e,y);
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 kehu::load6()
{
book b;
record r;
int i;
ifstream infile("d:\\20171806book.txt",ios::in);
if(!infile)
return;
v5.clear();
m5.clear();
i=0;
while(infile>>b)
{
v5.push_back(b);
m5.insert(make_pair(b.getSh(),i-1));
i++;
}
while(infile>>r)
{
v7.push_back(r);
}
infile.close();
}
int main()
{
//adm r;
//r.addbook();
//r.addstu();
//r.save1();
//r.save2();
kehu s;
//s.jieshu();
s.huanshu();
}
经过多次艰难的更改,和同学的帮助,才稍微弄懂了一些东西的用法,但是还是很多不明白的地方,直接套用的,需要抽时间静心 思考,也确实感觉到了编程的难度,不过也感觉到了一点乐趣了,以后继续加油吧