1. 程式人生 > >圖書館管理系統心得體會

圖書館管理系統心得體會

圖書管理系統的感想

對於這個系統在操作的過程中出錯最多的地方是檔案的操作,就是檔案的讀入和讀出總是出現問題,問題在於以下兩點:

一是在過載輸入流輸出流運算子的時候出現了錯誤,即輸入和輸出的格式是不相同的,下面是正確的程式碼:

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;

}