图书馆管理系统心得体会

图书管理系统的感想

对于这个系统在操作的过程中出错最多的地方是文件的操作,就是文件的读入和读出总是出现问题,问题在于以下两点:

一是在重载输入流输出流运算符的时候出现了错误,即输入和输出的格式是不相同的,下面是正确的代码:

istream&operator>>(istream&is,Record&r)

{

   is>>r.no>>r.t1>>r.name>>r.type>>r.xujie;

    return is;

}

ostream&operator<<(ostream&os,Record&r)

{

    int a,b,c;

    int w;

    if(r.xujie==1){

    a=r.t1.getDay();

    c=r.t1.getYear();

    b=r.t1.getMonth()+4;

    if(b>=13) {b=b-12;c+=1;}

    }

    if(r.xujie==2)

    {  a=r.t1.getDay();

        c=r.t1.getYear();

        b=r.t1.getMonth()+2;

         if(b>=13) {b=b-12;c+=1;}

    }

    Time t3(c,b,a);

    os<<r.no<<" ";

    os<<r.t1<<" ";

    os<<r.name<<" ";

    os<<r.type<<" ";

    os<<r.xujie<<" ";

    //os<<t3<<" ";

    return os;

}

也就是说,在重载的过程中要保证输入和输出的格式保持一致;

第二点,是加一个识别的控制符,控制输入图书信息和记录,让系统能够识别你输入的是记录,还是图书信息,同样用户也是这样,也要加一个控制符来区别用户信息和借阅记录,这样系统也就可以正确的识别出来,我的方法是,加一个number,也就是借阅的总量,让系统在输入的时候,可以依照for循环来向系统里输入借阅记录,具体代码如下:

istream&operator>>(istream&is,Book&b)

{

    is>>b.number>>b.name>>b.kind>>b.auther>>b.gross>>b.alive>>b.price>>b.lishi;

     b.r1.clear();

  for(int u=0;u<b.lishi;u++)

  {

        Record r;

    int i;

    {

       is>>r;

        //if(r.getNo()==0) break;

        b.r1.push_back(r);

        i=b.r1.size();

       b.r2.insert(make_pair(r.getName(),i-1));

       }

    }

    return is;

}

学生类的是这样:

istream&operator>>(istream&is,Student&e1)

{

   is>>e1.no>>e1.name>>e1.allow>>e1.broke>>e1.number;

    Record x;

    int i;

    e1.m1.clear();

    if(e1.number!=0)

    {

    for(int a=0;a<e1.number;a++)

    {

        is>>x;

        if(x.getNo()==0) break;

        e1.m1.push_back(x);

       i=e1.m1.size();

       e1.m2.insert(make_pair(x.getName(),i-1));

    }

    }

    return is;

}

ostream&operator<<(ostream&os,Student&e1)

{

    os<<e1.no<<" ";

    os<<e1.name<<" ";

    os<<e1.allow<<" ";

    os<<e1.broke<<" ";

    os<<e1.number<<" ";

    os<<endl;

    if(e1.number!=0)

    {  int i;

        for(i=0;i<e1.number;i++)

        {

            os<<e1.m1[i]<<endl;

        }

    }

    return os;

}

对于这个系统,是分成两个部分一个是用户操作类,另一个是管理员操作类

对于用户类应该有查书,借书还书,查看自己的借阅记录几个功能,

借书:

voidStudentop::jieshu(string name)

{

     int i,o,p;

    i=getYear();

   o=getMonth();

    p=getDay();

   Time t1(i,o,p);

    int u;

    int h=search4(name);

    cout<<b1[h];

    int g=b1[h].getAlive();

    int d=s1.getAllow();

    int r=s1.getBroke();

    if(g==0) cout<<"Notenough!"<<endl;

    else

    { if(d==0) cout<<"youcan't"<<endl;

    if(r!=0) cout<<"youcan't"<<endl;

    else{

        cout<<"Are yourenew?"<<endl;

        cin>>u;

    //b1[h].setAlive(g-1);

    //s1.setAllow(d-1);

    Recordz(s1.getNo(),t1,name,"jieshu",u);

    b1[h].addRecord(z);

    s1.add(z);

   cout<<"success!"<<endl;

    }

    }

}

查书需要先进行几个前提处理,这本书的库存是否够,自己是否有不良借阅记录,自己借书的上限是否已经达到,满足条件即可实现借书功能。

还书:

voidStudentop::huanshu(string name)

{

    int u1;

     int i,o,p;

  i=getYear();

   o=getMonth();

  p=getDay();

  Time t2(i,o,p);

  int u=search4(name);

  int w=b1[u].getAlive();

     int d=s1.getAllow();

     cout<<"WasRenewed?"<<endl;

     cin>>u1;

     Recordf(s1.getNo(),t2,name,"huanshu",u1);

     //b1[u].setAlive(w+1);

     //s1.setAllow(d+1);

     b1[u].addRecord(f);

     s1.add(f);

}

还书时候需要搜寻这本书之前的借阅记录,一一对应起来之后就可以,修改可借数量即可。

最后,是查询功能,这个地方在写的时候,会出现查询的信息不一一对应的情况,要加一个clear(),具体实现如下:

istream&operator>>(istream&is,Student&e1)

{

   is>>e1.no>>e1.name>>e1.allow>>e1.broke>>e1.number;

    Record x;

    int i;

    e1.m1.clear();

    if(e1.number!=0)

    {

    for(int a=0;a<e1.number;a++)

    {

        is>>x;

        if(x.getNo()==0) break;

        e1.m1.push_back(x);

       i=e1.m1.size();

       e1.m2.insert(make_pair(x.getName(),i-1));

    }

    }

    return is;

}

加一个clear()函数可以把建立的临时对象及时更新,避免查询时出现错误,

图书信息也是这样:

istream&operator>>(istream&is,Book&b)

{

   is>>b.number>>b.name>>b.kind>>b.auther>>b.gross>>b.alive>>b.price>>b.lishi;

     b.r1.clear();

  for(int u=0;u<b.lishi;u++)

  {

        Record r;

    int i;

    {

       is>>r;

        //if(r.getNo()==0) break;

        b.r1.push_back(r);

        i=b.r1.size();

       b.r2.insert(make_pair(r.getName(),i-1));

       }

    }

    return is;

}

猜你喜欢

转载自blog.csdn.net/fzydlrb/article/details/80853061