图书管理系统总结

匿名 (未验证) 提交于 2019-12-03 00:33:02

c++标准模板库STL的一知半解,小白还是在实现过程中遇到了重重阻碍。比如说,我们都知道STL中有动态数组vector和搜索multimap,通过map搜索可以快速、高效率查找所需内容,但是如何正确使用成为了我写代码的一大障碍。通过自主学习和请教同学之后,我大致明白了它们的用法。首先二者的构建和使用都要通过迭代器iterator来实现,其构建语句如下:

vector<Record>v1;

vector<Record>::iterator it1;

multimap<int,int>m1;

multimap<int,int>::iterator it1;//对整形数的查找

multimap<string,int>m2;

multimap<string,int>::iterator it2;//对字符串的查找

管理端的增加用户和图书信息,就是通过loadsave函数,把图书和用户的信息键入,系统自动生成数据文本(txt格式),用以用户端的借书和还书操作。

以下附上源代码:

#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 x){year=x;}     void setMonth(int x){month=x;}     void setDay(int x){day=x;}     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 no;//学号     Time js;//借书时间     int bn;//书号     Time hs;//还书时间     int xj;//续借     int state;//书的状态,即是否在借     public:     Record(){}     Record(int x,Time y,int z)     {         no=x;         js=y;         bn=z;         if(y.getMonth()+2>12)         {             Time t(y.getYear()+1,y.getMonth()-10,y.getDay());             hs=t;          }         else         {             Time t(y.getYear(),y.getMonth()+2,y.getDay());             hs=t;         }         xj=0;         state=0;     }     int getNo(){return no;}     Time getJs(){return js;}     int getBn(){return bn;}     Time getHs(){return hs;}     void setHs();     void setXj(){xj=1;}     int getXj(){return xj;}     void setState(int x){state=x;}     int getState(){return state;}     friend ostream&operator<<(ostream&output,Record&r);     friend istream&operator>>(istream&input,Record&r); }; void Record::setHs()//修改还书时间(续借) {     Time t;     if(hs.getMonth()+1>12)     t=Time(hs.getYear()+1,hs.getMonth()+1,hs.getDay());     else     t=Time(hs.getYear()+1,hs.getMonth(),hs.getDay());     hs=t; } istream&operator>>(istream&input,Record&r) {     input>>r.no;     input>>r.js;     input>>r.bn;     input>>r.hs;     input>>r.xj;     input>>r.state;     return input; } ostream&operator<<(ostream&output,Record&r) {     output<<r.no<<" ";     output<<r.js<<" ";     output<<r.bn<<" ";     output<<r.hs<<" ";     output<<r.xj<<" ";     output<<r.state<<endl;     return output; } class Book {     int bn;//书号     string name;//书名     string address;//出版社     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 getBn(){return bn;}     string getName(){return name;}     string getAddress(){return address;}     int getDate(){return date;}     void setNum(int x){num=x;}     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<<bn<<endl;     cout<<name<<endl;     cout<<address<<endl;     cout<<date<<endl; }  istream&operator>>(istream&input,Book&b) {     input>>b.bn;     if(b.bn==-1)     return input;     input>>b.name;     input>>b.address;     input>>b.date;     input>>b.num;     input>>b.jc;     input>>b.rnum;     return input; } ostream&operator<<(ostream&output,Book&b) {     output<<b.bn<<" "<<b.name<<" "<<b.address<<" "<<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.getNo(),i-1));     } void Book::addRecord1(Record r1) {     r1.setState(1);     v1.push_back(r1);     int i=v1.size();     m1.insert(make_pair(r1.getNo(),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].setHs();     } } void Book::deleteRecord1(int no) {     int i;     i=search1(no);     if(i!=-1)     {       v1[i].setState(0);     } }  class User {     int no;//学号     string name;//姓名     int most_num;//最大借阅量     int pre_num;//当前借阅量     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 getNo(){return no;} void setName(string x){name=x;} string getName(){return name;} void setMost_num(int m){most_num=m;} int getMost_num(){return most_num;} void setPre_num(int x){pre_num=x;} int getPre_num(){return pre_num;} 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) {     no=u.getNo();     name=u.getName();     most_num=u.getMost_num();     pre_num=u.getPre_num();     wj=u.getWj();     rnum=u.getRnum();     v2=u.getRecord();     m2=u.getMap(); } bool operator==(User u) {     return this->no==u.getNo()?1:0; } }; istream&operator>>(istream&input,User&u) {     input>>u.no;     if(u.no==-1)     return input;     input>>u.name;     input>>u.most_num;     input>>u.pre_num;     input>>u.wj;     input>>u.rnum;     return input; } ostream&operator<<(ostream&output,User&u) {     output<<u.no<<" "<<u.name<<" "<<u.most_num<<" "<<u.pre_num<<" "<<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.getBn(),i-1)); } void User::addRecord2(Record r2) {     r2.setState(1);     v2.push_back(r2);     int i=v2.size();     m2.insert(make_pair(r2.getBn(),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].getHs()<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].setHs();     } }  void User::clear2() {     v2.clear(); } class Regulator {     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:     Regulator(){}     ~Regulator()     {         save1();         save2();     }     void addBook();     void dispBook();     int search3(int h);     void queryBySh();     void addUser();     void dispUser();     int search4(int h);     void load1();     void load2();     void save1();     void save2(); };   void Regulator::save1() {     ofstream outfile("d:\\20171828book.txt",ios::out);     if(!outfile)     return ;     for(it3=v3.begin();it3!=v3.end();it3++)     {         outfile<<*it3;     }     outfile.close(); }  void Regulator::save2() {     ofstream outfile("d:\\20171828stu.txt",ios::out);     if(!outfile)     return ;     for(it4=v4.begin();it4!=v4.end();it4++)     {         outfile<<*it4;     }     outfile.close(); } void Regulator::addBook() {     Book b;     int i;     while(cin>>b)     {         if(b.getBn()==-1) break;         v3.push_back(b);         i=v3.size();         m3.insert(make_pair(b.getBn(),i-1));         b.clear1();     } }  int Regulator::search3(int h) {     mit3=m3.find(h);     if(mit3!=m3.end())     {         return mit3->second;     }     else     return -1;  } void Regulator::dispBook() {     for(it3=v3.begin();it3!=v3.end();++it3)     cout<<*it3; } void Regulator::addUser() {     User u;     int i;     while(cin>>u)     {         if(u.getNo()==-1) break;         v4.push_back(u);         i=v4.size();         m4.insert(make_pair(u.getNo(),i-1));         u.clear2();     } }  int Regulator::search4(int no) {     mit4=m4.find(no);     if(mit4!=m4.end())     {         return mit4->second;     }     else return -1;  } void Regulator::dispUser() {     for(it4=v4.begin();it4!=v4.end();++it4)     cout<<*it4; }  class UserOp {     vector<Book>v5;     vector<Book>::iterator it5;     multimap<int,int>m5;     multimap<int,int>::iterator mit5;     User u;     public:     UserOp()     {      load3();      load4();     }     ~UserOp()      {         save3();         save4();      }      void load3();      void save3();      void load4();      void save4();      int search5(int h);      void borrowbook();      void retbook(); };  void UserOp::save3() {     ofstream outfile("d:\\20171828book.txt",ios::out);     if(!outfile)     {return ;}     for(it5=v5.begin();it5!=v5.end();it5++)     {         outfile<<*it5;     }     outfile.close(); } void UserOp::load3() {     Book b;     int i;     ifstream infile("d:\\20171828book.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.getBn(),i-1));        b.clear1();      }      infile.close(); } void UserOp::load4() {     int no;     cin>>no;     User u1;     int i;     ifstream infile("d:\\20171828stu.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.getNo()==no)         this->u=u1;         u1.clear2();     }     infile.close(); } void UserOp::save4() {     vector<User>v;     vector<User>::iterator it;     User u2;     ifstream infile("d:\\20171828stu.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:\\20171828stu.txt",ios::out);     if(!outfile) return;     for(it=v.begin();it!=v.end();it++)     outfile<<*it;     outfile.close(); } int UserOp::search5(int h) {     mit5=m5.find(h);     if(mit5!=m5.end())     {         return mit5->second;     }     else return -1; } void UserOp::borrowbook() {     int h,no;     Time t;     cin>>h;     cin>>t;     int a=search5(h);     u.pd(t);     if(u.getWj()==0&&u.getPre_num()<u.getMost_num())     {         v5[a].setJc(v5[a].getJc()+1);         v5[a].setRnum(v5[a].getRnum()+1);         u.setPre_num(u.getPre_num()+1);         u.setRnum(u.getRnum()+1);         Record r(u.getNo(),t,h);         v5[a].addRecord1(r);         u.addRecord2(r);      } } void UserOp::retbook() {    int h,no;    cin>>h;    int i=search5(h);    v5[i].setJc(v5[i].getJc()-1);    u.setPre_num(u.getPre_num()-1);    v5[i].deleteRecord1(u.getNo());    u.deleteRecord2(h); } int main() {      /*Regulator r;     r.addBook();     r.addUser();     UserOp u;     u.borrowbook();     u.borrowbook();     u.retbook();*/ } 



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!