图书馆模拟管理系统

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<fstream>
using namespace std;
class Time
{
    int year,month,day;
    public:
    Time()
    {
        year=0;
        month=0;
        day=0;
    }
    Time(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;
    }
    void setYear(int y)
    {
        year=y;
    }
    void setMonth(int m)
    {
        month=m;
    }
    void setDay(int d)
    {
        day=d;
    }
    int getYear()
    {
        return year;
    }
    int getMonth()
    {
        return month;
    }
    int getDay()
    {
        return day;
    }
    bool operator<(const Time&t1)const
    {
        return year!=t1.year?year<t1.year:month!=t1.month?month<t1.month:day<t1.day;
    }
    friend istream&operator>>(istream&input,Time&t);
    friend ostream&operator<<(ostream&output,Time&t);


};
ostream&operator<<(ostream&output,Time&t)
{
    output<<t.year<<" ";
    output<<t.month<<" ";
    output<<t.day;
    return output;
}
istream&operator>>(istream&input,Time&t)
{
    input>>t.year>>t.month>>t.day;
    return input;
}
class Record
{
    int id;
    Time start;
    int sh;
    Time end;
    int xj;
    int state;
    public:
    Record()
    {

    }
    Record(int i,Time s,int h)
    {
        id=i;
        start=s;
        sh=h;
        if(s.getMonth()+2>12)
        {
            Time e(s.getYear()+1,s.getMonth()-10,s.getDay());
            end=e;

        }
        else
        {
            Time e(s.getYear(),s.getMonth()+2,s.getDay());
            end=e;
        }
        xj=0;
        state=0;

    }
    int getId()
    {
        return id;
    }
    Time getStart()
    {
        return start;
    }
    int getSh()
    {
        return sh;
    }
    Time getEnd()
    {
        return end;
    }
    void setEnd();
    void setXj()
    {
        xj=1;
    }
    int getXj()
    {
        return xj;
    }
void setState(int n)
{
    state=n;
}
int getState()
{
    return state;
}

     friend ostream&operator<<(ostream&output,Record&r);
     friend istream&operator>>(istream&input,Record&r);

};
void Record::setEnd()
{Time e;
    if(end.getMonth()+1>12)
    e=Time(end.getYear()+1,end.getMonth()+1,end.getDay());
    else
    e=Time(end.getYear()+1,end.getMonth(),end.getDay());
    end=e;

}
istream&operator>>(istream&input,Record&r)
{
    input>>r.id;

    input>>r.start;
    input>>r.sh;
    input>>r.end;
    input>>r.xj;
    input>>r.state;

    return input;
}
ostream&operator<<(ostream&output,Record&r)
{
    output<<r.id<<" ";
    output<<r.start<<" ";
    output<<r.sh<<" ";
    output<<r.end<<" ";
    output<<r.xj<<" ";
    output<<r.state<<endl;
    return output;
}
class Book
{
    int sh;
    string name;
    string press;
     int date;
    int num;
    int jc;
    int rnum;
    vector<Record>v1;
vector<Record>::iterator it1;
multimap<int,int>m1;
multimap<int,int>::iterator mit1;
    public:
    Book()
    {rnum=0;

    }

    vector<Record>getRecord()
    {
        return v1;
    }
    int getSh()
    {
        return sh;

    }

    string getName()
    {
        return name;
    }
    string getPress()
    {
        return press;
    }
    int getDate()
    {
        return date;
    }
    void setNum(int n)
    {num=n;

    }
    int getNum()
    {
        return num;
    }
    void setJc(int j)
    {
        jc=j;
    }
    int getJc()
    {
        return jc;
    }
void setRnum(int n)
{
    rnum=n;
}
int getRnum()
{return rnum;

}
    void addRecord1(Record r1);
    void dispRecord1();
    void addR1(Record r1);
    void deleteRecord1(int no);
    friend istream&operator>>(istream&input,Book&b);
  friend  ostream&operator<<(ostream&output,Book&b);
  int search1(int no);
void display();
void modify(int no);

void clear1();

};
void Book::display()
{cout<<sh<<endl;
cout<<name<<endl;
cout<<press<<endl;
cout<<date<<endl;

}

istream&operator>>(istream&input,Book&b)
{
    input>>b.sh;
    if(b.sh==-1)
    return input;
    input>>b.name;
    input>>b.press;
    input>>b.date;
    input>>b.num;
    input>>b.jc;
    input>>b.rnum;

return input;
}
ostream&operator<<(ostream&output,Book&b)
{
    output<<b.sh<<" "<<b.name<<" "<<b.press<<" "<<b.date<<" "<<b.num<<" "<<b.jc<<" "<<b.rnum<<endl;
     if(b.getRnum()!=0)
    for(int i=0;i<b.getRnum();i++)
    output<<b.v1[i];
    return output;
    }
    void Book::addR1(Record r1)
    {
        v1.push_back(r1);
        int i=v1.size();
m1.insert(make_pair(r1.getId(),i-1));
    }
void Book::addRecord1(Record r1)
{r1.setState(1);
    v1.push_back(r1);
int i=v1.size();
m1.insert(make_pair(r1.getId(),i-1));
}
void Book::dispRecord1()
{if(v1.size()!=0)
   for(it1=v1.begin();it1!=v1.end();it1++)
   cout<<*it1;
   else
   cout<<"No Record!"<<endl;
}
void Book::clear1()
{
    v1.clear();
}
int Book::search1(int no)
{
    mit1=m1.find(no);
    if(mit1!=m1.end())
    return mit1->second;
    else
    return -1;
}
void Book::modify(int no)
{
    int i=search1(no);
    if(v1[i].getXj()==0)
    {v1[i].setXj();
    v1[i].setEnd();
    }
}
void Book::deleteRecord1(int no)
{
    int i;
    i=search1(no);
    if(i!=-1)
    {
      v1[i].setState(0);
    }
}

class User
{
    int id;
    string name;
    int max;
    int now;
    int wj;
    int rnum;
    vector<Record>v2;
    vector<Record>::iterator it2;
    multimap<int,int>m2;
multimap<int,int>::iterator mit2;
    public:
    User()
    {
     wj=0;
     rnum=0;
}
int getId()
{
    return id;
}
void setName(string nam)
{
    name=nam;
}
string getName()
{
    return name;
}
void setMax(int m)
{
    max=m;
}
int getMax()
{
    return max;
}
void setNow(int n)
{
    now=n;
}
int getNow()
{
    return now;
}
void setWj(int n)
{
    wj=n;
}
int getWj()
{
    return wj;
}
void setRnum(int n)
{
    rnum=n;
}
int getRnum()
{
    return rnum;
}
vector<Record>getRecord()
{
    return v2;
}
multimap<int,int>getMap()
{
    return m2;
}
void clear2();
void addRecord2(Record r2);
void dispRecord2();
int search2(int h);
void deleteRecord2(int h);
void modify(int h);
friend istream&operator>>(istream&input,User&u);
friend ostream&operator<<(ostream&output,User&u);
void pd(Time t);
void addR2(Record r);
void operator=(User&u)
{
    id=u.getId();
    name=u.getName();
    max=u.getMax();
    now=u.getNow();
    wj=u.getWj();
    rnum=u.getRnum();
        v2=u.getRecord();
        m2=u.getMap();
}
bool operator==(User u)
{
    return this->id==u.getId()?1:0;
}

};

istream&operator>>(istream&input,User&u)
{
    input>>u.id;
    if(u.id==-1)
    return input;
    input>>u.name;
    input>>u.max;
    input>>u.now;
    input>>u.wj;
    input>>u.rnum;
    return input;
}
ostream&operator<<(ostream&output,User&u)
{
    output<<u.id<<" "<<u.name<<" "<<u.max<<" "<<u.now<<" "<<u.wj<<" "<<u.rnum<<endl;

    if(u.getRnum()!=0)
    for(int i=0;i<u.getRnum();i++)
    output<<u.v2[i];
    return output;
}
void User::addR2(Record r2)
{
    v2.push_back(r2);
int i=v2.size();
m2.insert(make_pair(r2.getSh(),i-1));

}
void User::addRecord2(Record r2)
{r2.setState(1);
    v2.push_back(r2);
int i=v2.size();
m2.insert(make_pair(r2.getSh(),i-1));
}
void User::dispRecord2()
{if(v2.size()!=0)
   for(it2=v2.begin();it2!=v2.end();it2++)
   cout<<*it2;
   else
   cout<<"No Record!"<<endl;
}
int User::search2(int h)
{
    mit2=m2.find(h);
    if(mit2!=m2.end())
    return mit2->second;
    else
    return -1;
}
void User::deleteRecord2(int h)
{
    int i;
    i=search2(h);
    if(i!=-1)
    {
        v2[i].setState(0);

    }
}
void User::pd(Time t)
{setWj(0);
    for(int i=0;i<v2.size();i++)
    if(v2[i].getEnd()<t&&v2[i].getState()==1)
        {setWj(1);
        break;
        }
}
void User::modify(int h)
{int i=search2(h);
if(v2[i].getXj()==0)
    {v2[i].setXj();
    v2[i].setEnd();
    }
}

void User::clear2()
{
    v2.clear();
}
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;
    public:
    Manage()
    {


    }
    ~Manage()
    {save1();
    save2();

    }

    void addBook();
    void dispBook();
    int search3(int h);
    void queryBySh();

    void deleteBook();
    void modifyBook();
    void addUser();
    void dispUser();
    int search4(int h);
    void queryById();

    void deleteUser();
    void modifyUser();
    void load1();
    void load2();
    void save1();
    void save2();
};


void Manage::save1()
{
    ofstream outfile("d:\\20171754Book.txt",ios::out);
    if(!outfile)
    return ;
    for(it3=v3.begin();it3!=v3.end();it3++)
    {
        outfile<<*it3;
    }
    outfile.close();
}

void Manage::save2()
{
    ofstream outfile("d:\\20171754Stu.txt",ios::out);
    if(!outfile)
    return ;
    for(it4=v4.begin();it4!=v4.end();it4++)
    {
        outfile<<*it4;
    }
    outfile.close();
}
void Manage::addBook()
{
    Book b;
    int i;
    while(cin>>b)
    {
       if(b.getSh()==-1)
        break;
        v3.push_back(b);
      i=v3.size();
        m3.insert(make_pair(b.getSh(),i-1));
      b.clear1();
    }
}

int Manage::search3(int h)
{
    mit3=m3.find(h);
    if(mit3!=m3.end())
    {
        return mit3->second;
    }
    else
    return -1;

}
void Manage::queryBySh()
{
    int h;
    cin>>h;
   int i=search3(h);
   cout<<v3[i];
}
void Manage::deleteBook()
{
    int h;
    cin>>h;
    int i=search3(h);
    if(i!=-1)
    {it3=v3.begin()+i;
    m3.erase(m3.find(h));
    v3.erase(it3);
    }
    }
    void Manage::modifyBook()
    {
        int h;
        cin>>h;
       int i=search3(h);
        int n;
        cin>>n;
       v3[i].setNum(n);

    }
    void Manage::dispBook()
{
    for( it3=v3.begin();it3!=v3.end();++it3)
    cout<<*it3;
}
void Manage::addUser()
{
    User u;
    int i;
    while(cin>>u)
    {
        if(u.getId()==-1)
        break;

            v4.push_back(u);
        i=v4.size();
        m4.insert(make_pair(u.getId(),i-1));
u.clear2();
    }
}

int Manage::search4(int no)
{
    mit4=m4.find(no);
    if(mit4!=m4.end())
    {
        return mit4->second;
    }
    else
    return -1;

}
void Manage::queryById()
{
    int no;
    cin>>no;
   int i=search4(no);
   cout<<v4[i];

}
void Manage::deleteUser()
{
    int no;
    cin>>no;
    int i=search4(no);
    if(i!=-1)
    {it4=v4.begin()+i;
    m4.erase(m4.find(no));
    v4.erase(it4);
    }
    }
    void Manage::modifyUser()
    {
        int no;
        cin>>no;
      int i=search4(no);
        int m;
        cin>>m;
     v4[i].setMax(m);

    }
    void Manage::dispUser()
{
    for( it4=v4.begin();it4!=v4.end();++it4)
    cout<<*it4;
}

class Client
{
    vector<Book>v5;
    vector<Book>::iterator it5;
    multimap<int,int>m5;
    multimap<int,int>::iterator mit5;
   User u;
    public:
    Client()
    {
     load3();
     load4();
    }
    ~Client()
     {save3();
        save4();
}
    void load3();
void save3();
void load4();
void save4();
int search5(int h);

void queryBook();
void borrow();
void back();
void renew();
};

void Client::save3()
{
    ofstream outfile("d:\\20171754Book.txt",ios::out);
    if(!outfile)
    {
        return ;}
    for(it5=v5.begin();it5!=v5.end();it5++)
    {
        outfile<<*it5;
    }
    outfile.close();
}
void Client::load3()
{
    Book b;
    int i;
    ifstream infile("d:\\20171754Book.txt",ios::in);
    if(!infile)
   {return;
   }
    v5.clear();
    m5.clear();

    while(infile>>b)
    {
    if(b.getRnum()!=0)
    for(int i=0;i<b.getRnum();i++)
    {
        Record r3;
        infile>>r3;
        b.addR1(r3);
    }
    v5.push_back(b);
    int i=v5.size();
    m5.insert(make_pair(b.getSh(),i-1));
b.clear1();
    }
infile.close();
}
void Client::load4()
{int id;
cin>>id;
    User u1;
    int i;
    ifstream infile("d:\\20171754Stu.txt",ios::in);
    if(!infile)
    return;

    while(infile>>u1)
    {if(u1.getRnum()!=0)
    for(int i=0;i<u1.getRnum();i++)
    {
        Record r4;
        infile>>r4;
        u1.addR2(r4);
    }

        if(u1.getId()==id)
    this->u=u1;
u1.clear2();
    }
infile.close();
}
void Client::save4()
{vector<User>v;
vector<User>::iterator it;

User u2;
    ifstream infile("d:\\20171754Stu.txt",ios::in);
    if(!infile)
    return ;

    while(infile>>u2)
   {
       if(u2.getRnum()!=0)
       for(int i=0;i<u2.getRnum();i++)
       {
           Record r5;
           infile>>r5;
           u2.addR2(r5);
       }
if(u2==this->u)
    u2=this->u;

    v.push_back(u2);
u2.clear2();
    }
    infile.close();

    ofstream outfile("d:\\20171754Stu.txt",ios::out);
    if(!outfile)
    return;
    for(it=v.begin();it!=v.end();it++)
    outfile<<*it;
    outfile.close();
}
int Client::search5(int h)
{
    mit5=m5.find(h);
    if(mit5!=m5.end())
    {
        return mit5->second;
    }
    else
    return -1;

}

void Client::queryBook()
{int h;
cin>>h;
    int i=search5(h);
if(i!=-1)
v5[i].display();

}
void Client::borrow()
{
    int h,no;
    Time t;
    cin>>h;
    cin>>t;
    int a=search5(h);

    u.pd(t);
    if(u.getWj()==0&&u.getNow()<u.getMax())
    {v5[a].setJc(v5[a].getJc()+1);
    v5[a].setRnum(v5[a].getRnum()+1);
    u.setNow(u.getNow()+1);
    u.setRnum(u.getRnum()+1);
    Record r(u.getId(),t,h);
    v5[a].addRecord1(r);
    u.addRecord2(r);

}
}
void Client::back()
{
int h,no;
   cin>>h;
  int a=search5(h);
   v5[a].setJc(v5[a].getJc()-1);
    u.setNow(u.getNow()-1);
   v5[a].deleteRecord1(u.getId());
    u.deleteRecord2(h);
}
void Client::renew()
{
    int h;
    cin>>h;
    int a=search5(h);
   v5[a].modify(u.getId());
    u.modify(h);
    }
int main()
{

    Manage ma1;
    ma1.addBook();
   ma1.queryBySh();
    ma1.modifyBook();
    ma1.deleteBook();
   ma1.addUser();

   ma1.queryById();
   ma1.modifyUser();
   ma1.deleteUser();
Client c1;
c1.queryBook();
c1.borrow();
c1.renew();
c1.borrow();
c1.back();
Client c2;
c2.borrow();
c2.back();
}

猜你喜欢

转载自blog.csdn.net/sdauguanweihong/article/details/80682665