[C++]図書館図書管理システムソースコード

15065 ワード

プログラム:
#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、ファイルの操作をよりよく学びました.