图书管理系统简单版stl

#include<bits/stdc++.h>
using namespace std;
class Date
{
    int year,month,day;
      public:
      Date(int x,int y,int z):year(x),month(y),day(z)  {}
      Date()  {year=0;month=0;day=0;}
      int getYear()  {return year;}
      int getMonth()  {return month;}
      int getDay()   {return day;}
      void setYear(int x)  {year=x;}
      void setMonth(int y)  {month=y;}
      void setDay(int z)   {day=z;}
      bool operator <(const Date&d);
      friend ostream &operator<<(ostream&os,const Date &d);
      friend istream &operator>>(istream&is,Date &d);
      };
      bool Date::operator<(const Date&d)
      {
          year!=d.year?year<d.year:month!=d.month?month<d.month:day!=d.day;
      }
    ostream &operator<<(ostream &os,const Date&d)
    {
        os<<d.year<<" ";
        os<<d.month<<" ";
        os<<d.day;
        return os;
    }
 istream&operator>>(istream&is,Date&d)
    {
        is>>d.year>>d.month>>d.day;
        return is;
    }


 class Record
{
    int xh;
    //string type;
    Date start;
    int sh;
    int xj;//0不续借1续借
    Date end;
    int state;//是否还书0未还1已还
    public:
        Record(int a5,Date a6,int a7,int  a8,Date a9,int a10 ):start(a6),end(a9)
        {
            xh=a5;
            //type=aa;
            sh=a7;
            xj=a8;
            state=a10;
        }
        Record()    {}
        int getXh()   {return xh;}
        Date getStart()  {return start;}
        int getSh()   {return sh;}
        int getXj()  {return xj;}
        Date getEnd()   {return end;}
        int  getState()  {return state;}
        void setXh(int a)   {xh=a;}
        void setStart(Date a1)  {start=a1;}
        void setSh(int a2)   {sh=a2;}
        void setXj(int a3)   {xj=a3;}
        void  setEnd(Date a11)    {end=a11;}
        void   setState(int a4)  {state=a4;}
        friend ostream&operator<<(ostream&os,const Record&r);
        friend istream&operator>>(istream&is,Record&r);

};


 ostream &operator<<(ostream&os,const Record&r)
 {
     os<<r.xh<<" ";
     //os<<r.type<<" ";
     os<<r.start<<" ";
     os<<r.sh<<" ";
     os<<r.xj<<" ";
     os<<r.end<<" ";
     os<<r.state;
     return os;
 }
 istream &operator>>(istream&is,Record&r)
 {
     is>>r.xh>>r.start>>r.sh>>r.xj>>r.end>>r.state;
     return is;
 }


class Book
{
    int sh;
    string sm;
    string author;
    int max;//最大图数量
    int now;//图书库存量
    int number;//记录数
    vector<Record>v1;
    vector<Record>::iterator it1;
    multimap<int,int>m1;
    multimap<int,int>::iterator mit1;
    public:
    Book(int b1,string b2,string b3,int b4,int b5,int b6)
    {   sh=b1;
        sm=b2;
        author=b3;
        max=b4;
        now=b5;
        number=b6;
    }
    Book()  {}
    vector<Record>&getRecord()    //获取记录集合
    {
        return v1;
    }
    int getSh()  {return sh;}
    string getSm()  {return sm;}
    string getAuthor()  {return author;}
    int getMax()    {return max;}
    int getNow()    {return now;}
    int getNumber() {return number;}
    void setNumber(int y){number=y;}
    void setSh(int b6)    {sh=b6;}
    void setSm(string b7)   {sm=b7;}
    void setAuthor(string b8)   {author=b8;}
    void setMax(int b9)   {max=b9;}
    void setNow(int b10)    {now=b10;}
    friend ostream&operator<<(ostream&os,const Book&b1);
    friend istream&operator>>(istream&is,Book&b1);
    void addRecord(Record r1);
    void dispRecord();
    void deleteRecord(int no);
    int  search1(int no);

};
int Book::search1(int no)//根据书号指针的变化,与查询,删除有关
{
   mit1=m1.find(no);
   if(mit1!=m1.end())//枚举使指针找到
      return mit1->second;
   else
      return -1;
}
void Book::deleteRecord(int no)
{
    int i;
    i=search1(no);
    if(i!=-1)
    {
        v1[i].setState(0);
    }
}
void Book::dispRecord()
{
    if(v1.size()!=0)
    {
        for(it1=v1.begin();it1!=v1.end();it1++)
        cout<<*it1;
    }
    else
    cout<<"无记录"<<endl;
}
void Book::addRecord(Record r1)
{
    r1.setState(1);//
    v1.push_back(r1);
    int i=v1.size();
    m1.insert(make_pair(r1.getXh(),i-1));
}
istream&operator>>(istream&is,Book&b1)
{
    is>>b1.sh;
    if(b1.sh==-1)
    return is;
    is>>b1.sm>>b1.author>>b1.max>>b1.now>>b1.number;
    b1.v1.clear();
    if(b1.number!=0)
   {

    for(int u=0;u<b1.number;u++)
    {
        Record r;
        int i;
        {
            is>>r;
            b1.v1.push_back(r);
            i=b1.v1.size();
            b1.m1.insert(make_pair(r.getXh(),i-1));
        }
    }
   }
    return is;
}
ostream&operator<<(ostream&os,const Book&b1)
{
    os<<b1.sh;
    os<<" "<<b1.sm;
    os<<" "<<b1.author;
    os<<" "<<b1.max;
    os<<" "<<b1.now;
    os<<" "<<b1.number;
    os<<endl;
    if(b1.number!=0)
    {

    int i;
    for(i=0;i<b1.number;i++)
    {
        os<<b1.v1[i]<<endl;
    }
    }
    return os;}
class User
{
    int xh;
    string xm;
    string major;
               //有无违纪
    int max;
    int now;
    int number;
    vector<Record>v2;
    vector<Record>::iterator it2;
    multimap<int,int>m2;
    multimap<int,int>::iterator mit2;
    public:
    User(int b1,string b2,string b3,int b4,int b5,int b6):xh(b1)
    {
        xm=b2;
        major=b3;
        max=b4;
        now=b5;
        number=b6;
    }
    User()  {}
    vector<Record>getRecord()
    {
        return v2;
    }
  // friend class Manage;
    int getXh()  {return xh;}
    string getXm()  {return xm;}
    string getMajor()  {return major;}
    int getMax()    {return max;}
    int getNow()    {return now;}
    void setXh(int b6)    {xh=b6;}
    void setXm(string b7)   {xm=b7;}
    void setMajor(string b8)   {major=b8;}
    void setMax(int b9)   {max=b9;}
    void setNow(int b10)    {now=b10;}
    friend ostream&operator<<(ostream&os,const User&u1);
    friend istream&operator>>(istream&is,User&u1);
    void addRecord(Record r2);
    void dispRecord();
    void deleteRecord(int no);
    int  search2(int no);
    int getNumber(){return number;}
    void setNumber(int p){number=p;}
    void operator=(User&ty)
    {
        xh=ty.xh;
        xm=ty.xm;
        major=ty.major;
        max=ty.max;
        now=ty.now;
        number=ty.number;
        v2=ty.getRecord();
    }
    bool operator==(User u1)
    {
        return this->xh==u1.getXh()?1:0;
    }

};
int User::search2(int no)
{
   mit2=m2.find(no);
   if(mit2!=m2.end())
      return mit2->second;
   else
      return -1;
}
void User::deleteRecord(int no)
{
    int i;
    i=search2(no);
    if(i!=-1)
    {
        v2[i].setState(0);
    }
}
void User::dispRecord()
{
    if(v2.size()!=0)
    {
        for(it2=v2.begin();it2!=v2.end();it2++)
        cout<<*it2;
    }
    else
    cout<<"无记录"<<endl;
}
void User::addRecord(Record r2)
{
    r2.setState(1);
    v2.push_back(r2);
    int i=v2.size();
    m2.insert(make_pair(r2.getXh(),i-1));
}
istream&operator>>(istream&is,User&u1)
{
    is>>u1.xh;
    if(u1.xh==-1)
    return is;
    is>>u1.xm>>u1.major>>u1.max>>u1.now>>u1.number;
    Record x;
    int i;
    u1.v2.clear();
    if(u1.number!=0)
    {
        for(int a=0;a<u1.number;a++)
        {
            is>>x;
            u1.v2.push_back(x);
            i=u1.v2.size();
            u1.m2.insert(make_pair(x.getXh(),i-1));
        }
    }
    return is;
}
ostream&operator<<(ostream&os,const User&u1)
{
    os<<u1.xh;
    os<<" "<<u1.xm;
    os<<" "<<u1.major;
    os<<" "<<u1.max;
    os<<" "<<u1.now;
    os<<" "<<u1.number;
    os<<endl;
    if(u1.number!=0)
    {
        int i;
        for(i=0;i<u1.number;i++)
        {
            os<<u1.v2[i]<<endl;
        }
    }
    return os;
}

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 disBook();
    void deleteBook();
    int  search3(int h);
    void addUser();
    void disUser();
    void deleteUser();
    int search4(int h);
    //void load1();
    //void load2();
    void save1();
    void save2();

};
int Manage::search4(int h)
{
    mit4=m4.find(h);
    if(mit4!=m4.end())
    {
        return mit4->second;
    }
    else
    return -1;
}
void Manage::deleteUser()
{   cout<<"请输入删除的学号"<<endl;
    int no;
    cin>>no;
    int i=search4(no);
    if(i!=-1)
    {it4=v4.begin()+i;
    m4.erase(m4.find(no));
    v4.erase(it4);
    }
    cout<<endl;
    cout<<"删除结束";
}
void Manage::disUser()
{   cout<<"显示用户"<<endl;
    for( it4=v4.begin();it4!=v4.end();++it4)
    cout<<*it4;
}
void Manage::addUser()
{  cout<<"请输入增加学生信息,当学号为-1结束"<<endl;
   User u;
    int i;
    while(1)
    {cin>>u;
        if(u.getXh()==-1)
        break;
        v4.push_back(u);
        i=v4.size();
        m4.insert(make_pair(u.getXh(),i-1));
    }
    cout<<"增加结束";
}
void Manage::addBook()
{   cout<<"请输入增加的图书信息,当书号为-1结束"<<endl;
    Book b;
    int i;
    while(1)
    {
        cin>>b;
        if(b.getSh()==-1)
        break;
        v3.push_back(b);
        i=v3.size();
        m3.insert(make_pair(b.getSh(),i-1));
    }
    cout<<endl;
      cout<<"增加结束";
}
void Manage::disBook()
{
    for(it3=v3.begin();it3!=v3.end();++it3)
    cout<<*it3;
}
void Manage::deleteBook()
{   cout<<"请输入删除图书书号"<<endl;
    int h;
    int i=search3(h);
    if(i!=-1)
    {it3=v3.begin()+i;
    m3.erase(m3.find(h));
    v3.erase(it3);
    }
    cout<<endl;
    cout<<"删除结束";
}
int Manage::search3(int h)
{
   mit3=m3.find(h);
    if(mit3!=m3.end())
    {
        return mit3->second;
    }
    else
    return -1;
}
/*void Manage::load1()
{
    Book b;
    int i;
    ifstream infile("C:\\20171777book.txt",ios::in);
    if(!infile)
    {//cerr<<"没有找到相应文件";
        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 Manage::load2()
{
    User u;
    Record  r;
    int i,a;
    ifstream infile("C:\\20171777stu.txt",ios::in);
    if(!infile)
    {//cerr<<"没有找到相应文件";
        return ;}
    v4.clear();
    m4.clear();
    i=0;
    while(infile>>u)
    {
        v4.push_back(u);
        m4.insert(make_pair(u.getXh(),i));
        infile>>a;
       for(int j=1;j<=a;j++)
        {
          infile>>r;
         u.v4[i].v2.push_back(r);
        i++;}
    }
    infile.close();
}*/
void Manage::save1()
{
    ofstream outfile("D:\\20171777book.txt",ios::out);
    if(!outfile)
  {//cerr<<"没有找到相应文件";
        return ;}
    for(it3=v3.begin();it3!=v3.end();it3++)
    {
        outfile<<*it3;
    }
    outfile.close();
}
void Manage::save2()
{
    ofstream outfile("D:\\20171777stu.txt",ios::out);
    if(!outfile)
    {//cerr<<"没有找到相应文件";
        return ;}
    for(it4=v4.begin();it4!=v4.end();it4++)
    {
        outfile<<*it4;
    }
    outfile.close();
}
class Client
{
    public:
    Client()
    {
     load3();
     load4();
    }
    ~Client()
    {save3();
        save4();
}
Client(int n){no=n;}
void load3();
void save3();
void load4();
void save4();
int search5(int h);
void borrow();
void back();
void chaxun();
void chaxunshu(int z);
private:
    vector<Book>v5;
    vector<Book>::iterator it5;
    multimap<int,int>m5;
    multimap<int,int>::iterator mit5;
   User a;
   int no;
};
void Client::chaxunshu(int z)
{
    int h=search5(z);
    cout<<v5[h]<<endl;
}
void Client::chaxun()
{
    cout<<a;
}
void Client::save3()
{
    ofstream outfile("D:\\20171777book.txt",ios::out);
    if(!outfile)
    {//cerr<<"没有找到相应文件";
        return ;}
        for(it5=v5.begin();it5!=v5.end();it5++)
        {
            outfile<<*it5;
        }
    /*for(int i=0;i<v5.size();i++)
    {
        outfile<<v5[i];
        int a=v5[i].getRecord().size();
        outfile<<a;
        for(int j=1;j<=a;j++)
        outfile<<v5[i].getRecord()[j];
    }*/
    outfile.close();
}
void Client::load3()
{
    Book b;
    int i;
    ifstream infile("D:\\20171777book.txt",ios::in);
    if(!infile)
  {//cerr<<"没有找到相应文件";
        return ;}
    v5.clear();
    m5.clear();
    while(infile>>b)
    {v5.push_back(b);
    int i=v5.size();
    m5.insert(make_pair(b.getSh(),i-1));
    }
infile.close();
}
void Client::load4()
{//int id;
//cin>>id;
    User a;
    int i;
    ifstream infile("D:\\20171777stu.txt",ios::in);
    if(!infile)
    {//cerr<<"没有找到相应文件";
        return ;}
    while(infile>>a)
    {if(a.getXh()==no)
    this->a=a;
    }
infile.close();
}
void Client::save4()
{vector<User>v;
vector<User>::iterator it;
User u1;
    ifstream infile("D:\\20171777stu.txt",ios::in);
    if(!infile)
 {//cerr<<"没有找到相应文件";
        return ;}
    while(infile>>u1)
   {v.push_back(u1);}
    infile.close();
    ofstream outfile("D:\\20171777stu.txt",ios::out);
    if(!outfile)
    {//cerr<<"没有找到相应文件.";
    return;}
    for(int i=0;i<v.size();i++)
       if(v[i].getXh()==a.getXh())
       { v[i]=a;
        outfile<<v[i];  }
       else
        outfile<<v[i];
    outfile.close();
}
int Client::search5(int h)
{
    mit5=m5.find(h);
    if(mit5!=m5.end())
    {
        return mit5->second;
    }
    else
    return -1;
}

void Client::borrow()
{
   cout<<"请输入图书书号,借书时间,还书时间"<<endl;
   int h;
   Date d1,d2;
   cin>>h>>d1>>d2;
   int b=search5(h);
   if(a.getNow()<=a.getMax()&&a.getNow()>0)
   {   int u=a.getNumber();
      a.setNumber(u+1);
      int q=v5[b].getNumber();
      v5[b].setNumber(q+1);
       v5[b].setNow(v5[b].getNow()-1);  //剩余书本减一
       a.setNow(a.getNow()-1);//可借书本数
       cout<<"是否选择续借"<<endl;
       int z;
       cin>>z;
       Record r(a.getXh(),d1,h,z,d2,0);
       v5[b].addRecord(r);
       a.addRecord(r);
   }


}
void Client::back()
{
    cout<<"请输入归还图书书号"<<endl;
   int h;
   cin>>h;
  int b=search5(h);
    v5[b].setNow(v5[b].getNow()+1);
    a.setNow(a.getNow()+1);
    cout<<"输入借书,还书日期"<<endl;
    Date h1,h2;
    cin>>h1>>h2;
    cout<<"之前是否选择续借?"<<endl;
    int s;
    cin>>s;
    int u=a.getNumber();
      a.setNumber(u+1);
      int q=v5[b].getNumber();
      v5[b].setNumber(q+1);
    Record r(a.getXh(),h1,h,s,h2,1);
   v5[b].addRecord(r);
    a.addRecord(r);
}


int main()
{

  /* Manage ma1;
   ma1.addBook();
   ma1.save1();
   ma1.addUser();
   ma1.save2();*/

    //Client c1;
    //c1.borrow();
    /*Book r1;
    cin>>r1;
    cout<<r1;*/
    /*User s1;
    cin>>s1;
    cout<<s1;*/
    int n;
    cin>>n;
    Client s1(n);
    s1.load3();
    s1.load4();
    s1.chaxun();
   
   s1.borrow();
    //s1.chaxun();
    //s1.chaxunshu(6745);
   //s1.back();
      //s1.save3();
   // s1.save4();

    //s1.back();
    //s1.borrow();
    return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值