图书馆管理系统

代码

#include<bits/stdc++.h>

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

    {

       returnyear!=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);

  intsearch1(int no);

void display();

void modify(int no);

 

void clear1();

 

};

voidBook::display()//shuhao\shuming\jiage\riqi

{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);

friendistream&operator>>(istream&input,User&u);

friendostream&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:\\20171755Book.txt",ios::out);

   if(!outfile)

   return ;

   for(it3=v3.begin();it3!=v3.end();it3++)

    {

       outfile<<*it3;

    }

   outfile.close();

}

 

void Manage::save2()

{

   ofstream outfile("d:\\20171755Stu.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;

  Time t;

   public:

   Client(int id)

    {

    load3();

    load4(id);

    }

   ~Client()

    {save3();

       save4();

}

   void load3();

void save3();

void load4(int id);

void save4();

int search5(int h);

 

void queryBook();

void borrow();

void back();

void renew();

};

 

void Client::save3()

{

   ofstream outfile("d:\\20171755Book.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:\\20171755Book.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)

{

 

   User u1;

   int i;

   cin>>t;

   ifstream infile("d:\\20171755Stu.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:\\20171755Stu.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:\\20171755Stu.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;

 

   cin>>h;

 

    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;

  cin>>h;

  inta=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.addUser();

 

 

  int id;

  cin>>id;

Client c1(id);

 

c1.borrow();

 

c1.borrow();

c1.back();

 

}

运行

添加图书

 

 

 

 

 

 

 

 

 

 

 

添加学生

 

 

 

 

 

 

 

 

 

 

 

删除图书

删除学生

 

 

 

 

 

 

 

 

 

 

 

 

借阅图书

 

 

 

 

 

 

 

 

 

 

 

 

查书

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值