[C++]図書館図書管理システムソースコード
15065 ワード
プログラム:
心得:
このシステムでは、継承、STLのvectorとmap、ファイルの操作をよりよく学びました.
#include
using namespace std;
class Date
{
private:
int year;
int month;
int day;
public:
Date(int x,int y,int z):year(x),month(y),day(z){}
Date(){}
int getYear(){return year;}
int getMonth(){return month;}
int getDay(){return day;}
void setYear(int x){year=x;}
void setMonth(int x){month=x;}
void setDay(int x){day=x;}
friend ostream & operator <>(istream & input,Date & obj)
{
input>>obj.year>>obj.month>>obj.day;
return input;
}
bool operator >(istream & in,Record & obj);
};
ostream & operator <>(istream & in,Record & obj)
{
in>>obj.bookIndex>>obj.bookName>>obj.stuName>>obj.stuID>>obj.type>>
obj.opTime>>obj.endTime>>obj.ifback;
return in;
}
class Records
{
protected:
int RecordNum;
vector v1;
vector ::iterator vit1;
multimapm2;
multimap::iterator mit2;// bool
public:
Records(){RecordNum=0;}
int getRecordNum(){return RecordNum;}
vector & getRecord(){return v1;}
multimap & getM2(){return m2;}
void setRecordNum(int x){RecordNum=x;}
// Op,book student
void disAllRecord();//
void disNobackRecord();//
};
void Records::disAllRecord()
{
for(int i=0;isecond]<m1;
multimap::iterator mit1;// int
public:
Book(string n,int in,int tott,int shengyuu)
{
name=n;
index=in;
tot=tott;
shengyu=shengyuu;
ch='/';
}
Book()
{
ch='/';
}
multimap& getM1(){return m1;}
string getName(){return name;}
int getIndex(){return index;}
int getShengyu(){return shengyu;}
int getTot(){return tot;}
void setEndTime(int);// op ( );
void setTot(int x){tot=x;}
void setShengyu(int x){shengyu=x;}
void setName(string x){name=x;}
void setIndex(int x){index=x;}
void deleteRecord(int id,Date preTime)// ;
{
for(mit1=m1.lower_bound(id);mit1!=m1.upper_bound(id);++mit1)
{
if(v1[mit1->second].getifback()==0)
{
v1[mit1->second].setifback(1);
v1[mit1->second].setendTime(preTime);
}
}
}
void addRecord(Record r)//
{
RecordNum++;
v1.push_back(r);
m2.insert(make_pair(r.getifback(),v1.size()-1));
m1.insert(make_pair(r.getID(),v1.size()-1));
}
friend ostream & operator <>(istream & input,Book & obj);
void disBase()
{
cout<second].getifback()==0)
{
tt=v1[mit1->second].getopTime();
tt.setMonth(tt.getMonth()+2);
v1[mit1->second].setendTime(tt);
}
}
}
ostream & operator < vt;
vt=obj.getRecord();
for(int j=0;j>(istream & input,Book & obj)
{
input>>obj.index>>obj.name>>obj.shengyu>>obj.ch>>obj.tot>>obj.RecordNum;
int p=obj.RecordNum;
obj.setRecordNum(0);
for(int i=1;i<=p;++i)
{
Record r;
input>>r;
obj.addRecord(r);
}
return input;
}
class Student:public Records
{
private:
string name;
int ID;
int num;//
multimapm1;
multimap::iterator mit1;// int
public:
Student(string n,int id)
{
name=n;
ID=id;
num=10;
}
Student()
{
num=10;
}
multimap& getM1(){return m1;}
string getName(){return name;}
int getID(){return ID;}
int getNum(){return num;}
void setName(string n){name=n;}
void setID(int x){ID=x;}
void setNum(int x){num=x;}
void deleteRecord(int index,Date preTime)// student
{
for(mit1=m1.lower_bound(index);mit1!=m1.upper_bound(index);++mit1)
{
if(v1[mit1->second].getifback()==0)
{
v1[mit1->second].setifback(1);
v1[mit1->second].setendTime(preTime);
}
}
}
void setEndTime(int index)
{
Date tt;
for(mit1=m1.lower_bound(index);mit1!=m1.upper_bound(index);++mit1)
{
if(v1[mit1->second].getifback()==0)
{
tt=v1[mit1->second].getopTime();
tt.setMonth(tt.getMonth()+2);
v1[mit1->second].setendTime(tt);
}
}
}
void addRecord(Record r)//
{
RecordNum++;
v1.push_back(r);
m2.insert(make_pair(r.getifback(),v1.size()-1));
m1.insert(make_pair(r.getIndex(),v1.size()-1));// book ;
}
bool queryTLE(Date);
void disBase()
{
cout<>(istream & input,Student & obj);
};
istream & operator >>(istream & input,Student & obj)
{
input>>obj.name>>obj.ID>>obj.num>>obj.RecordNum;
int p=obj.getRecordNum();
obj.setRecordNum(0);
for(int i=1;i<=p;++i)
{
Record r;
input>>r;
obj.addRecord(r);
}
return input;
}
ostream & operator <vt;
vt=obj.getRecord();
for(int j=0;jsecond].getendTime();
if(temp v1;
vector ::iterator vit1;
map m1;// ,hu yi,so just use map
map ::iterator mit1;
vector v2;
vector ::iterator vit2;
mapm2;//
map::iterator mit2;
map m3;//
map ::iterator mit3;
public:
MangerOp()
{
stuNum=0;bookNum=0;v2.clear();m2.clear();m3.clear();
load1();load2();
}
~MangerOp()
{
save1();
save2();
}
void load1();
void load2();
void save1();
void save2();
void addBook();
void addStu();
void deleteBook();
void deleteStu();
void queryStuAll();//
void queryStuNoback();//
void queryBookAllRecord();
void queryBookNoback();
void queryABook();//
void queryAStu();//
};
void MangerOp::load1()
{
ifstream infile("20171778book.txt",ios::in);
if(!infile)return ;
v2.clear();
m2.clear();
m3.clear();
Book b;
int i=0;
while(infile>>b)
{
bookNum++;
v2.push_back(b);
m2.insert(make_pair(b.getIndex(),i));
m3.insert(make_pair(b.getName(),i));
i++;
vector < Record > & vt=b.getRecord();// ; book ;
multimap & m2=b.getM2();
multimap& m1=b.getM1();
vt.clear();
m1.clear();m2.clear();m3.clear();
}
bookNum=i;
infile.close();
cout<>s)
{
v1.push_back(s);
m1.insert(make_pair(s.getID(),i));
i++;
vector & vt=s.getRecord();//
multimap & m2=s.getM2();
multimap & m1=s.getM1();
vt.clear();
m1.clear();
m2.clear();
}
stuNum=i;
infile.close();
cout<>id;
mit1=m1.find(id);
if(mit1!=m1.end())
{
cout<>index;
mit2=m2.find(index);
if(mit2!=m2.end())
cout<>index&&index!=-1)
{
cin>>name>>n;// , ,
mit2=m2.find(index);
if(mit2!=m2.end())
{
v2[mit2->second].setTot(v2[mit2->second].getTot()+n);
v2[mit2->second].setShengyu(v2[mit2->second].getShengyu()+n);
}
else
{
v2.push_back(Book(name,index,n,n));
m2.insert(make_pair(index,v2.size()-1));
m3.insert(make_pair(name,v2.size()-1));
bookNum++;
}
}
}
void MangerOp::addStu()
{
int id;
string name;
while(cin>>id&&id!=-1)// id
{
cin>>name;
mit1=m1.find(id);
if(mit1==m1.end())
{
stuNum++;
v1.push_back(Student(name,id));
m1.insert(make_pair(id,v1.size()-1));
}
}
}
void MangerOp::deleteBook()
{
int index,num;
cin>>index>>num;
mit2=m2.find(index);
int i=mit2->second;
if(mit2!=m2.end())
{
if(num==v2[i].getShengyu()&&num==v2[i].getTot())
{
bookNum--;
v2.erase(v2.begin()+i);
m2.erase(index);
m3.erase(v2[i].getName());
}
else if(num<=v2[i].getShengyu())
{
v2[i].setShengyu(v2[i].getShengyu()-num);
v2[i].setTot(v2[i].getTot()-num);
}
}
}
void MangerOp::deleteStu()
{
int id;
cin>>id;
mit1=m1.find(id);
if(mit1!=m1.end())
{
stuNum--;
m1.erase(id);
v1.erase(v1.begin()+(mit1->second));
}
}
void MangerOp::queryBookAllRecord()
{
int index;
cin>>index;
mit2=m2.find(index);
if(mit2!=m2.end())
{
v2[mit2->second].disAllRecord();
}
}
void MangerOp::queryBookNoback()
{
int index;
cin>>index;
mit2=m2.find(index);
if(mit2!=m2.end())
{
v2[mit2->second].disNobackRecord();
}
}
void MangerOp::queryStuAll()
{
int id;
cin>>id;
mit1=m1.find(id);
if(mit1!=m1.end())
{
v1[mit1->second].disAllRecord();
}
}
void MangerOp::queryStuNoback()
{
int id;
cin>>id;
mit1=m1.find(id);
if(mit1!=m1.end())
{
v1[mit1->second].disNobackRecord();
}
}
class StuOp
{
private:
Student stu;
int id;
Date t1;
vector v1;
vector ::iterator vit1;
map m1;
map ::iterator mit1;//shu hao
public:
StuOp(int ID,Date t):id(ID),t1(t)
{
load1();
load2();
}
~StuOp()
{
save1();
save2();
}
void load1();//book
void load2();//student
void save1();
void save2();
void borrow();
void back();
void againBorrow();//
void disAllRecord();//
void disNobackRecord();//
void queryABook();
void disAllBook();
};
void StuOp::load1()
{
ifstream infile("20171778book.txt",ios::in);
if(!infile)return ;
v1.clear();
Book b;
int k=0;
while(infile>>b)
{
v1.push_back(b);
m1.insert(make_pair(b.getIndex(),k));
k++;
vector & vt=b.getRecord();
multimap & m2=b.getM2();
multimap& m1=b.getM1();
vt.clear();
m1.clear();m2.clear();m1.clear();
}
infile.close();
cout<>s)
{
if(s.getID()==id)
{
stu=s;stu.disBase();
cout< & vt=s.getRecord();
multimap & m2=s.getM2();
multimap & m1=s.getM1();
vt.clear();
m1.clear();
m2.clear();
}
if(!flag)cout< v3;
vector ::iterator vit3;
int k=0;
Student s;
while(infile>>s)
{
v3.push_back(s);
k++;
vector & vt=s.getRecord();
multimap & m2=s.getM2();
multimap & m1=s.getM1();
vt.clear();
m1.clear();
m2.clear();
}
infile.close();
ofstream outfile("20171778stu.txt",ios::out);
if(!outfile)return ;
for(int i=0;isecond].disBase();
cout<>index;
mit1=m1.find(index);
if(mit1!=m1.end())
cout<>index;
mit1=m1.find(index);
if(mit1==m1.end())cout<second].setShengyu(v1[m1[index]].getShengyu()-1);
stu.setNum(stu.getNum()-1);
cout<>index;
mit1=m1.find(index);
if(mit1!=m1.end())
{
Record r(v1[m1[index]].getName(),index,stu.getName(),stu.getID(),"huanshu",t1,t1,1);
stu.addRecord(r);
v1[mit1->second].addRecord(r);
stu.setNum(stu.getNum()+1);
v1[mit1->second].setShengyu(v1[mit1->second].getShengyu()+1);
stu.deleteRecord(index,t1);
v1[mit1->second].deleteRecord(stu.getID(),t1);
cout<>index;
mit1=m1.find(index);
if(mit1!=m1.end())
{
Record r(v1[m1[index]].getName(),index,stu.getName(),stu.getID(),"xvjie",t1,t1,1);
v1[mit1->second].addRecord(r);
stu.addRecord(r);
stu.setEndTime(index);
v1[mit1->second].setEndTime(stu.getID());
cout<>id>>t;
StuOp stu(id,t);
stu.disAllBook();// ;
stu.borrow();
//stu.back();
//stu.againBorrow();
//*/
return 0;
}
心得:
このシステムでは、継承、STLのvectorとmap、ファイルの操作をよりよく学びました.