图书管理系统心得

代码

#include<bits/stdc++.h>
using namespace std;
class Time
{
    int year,month,day,hour,minute,second;
    public:
    Time()
    {
        year=month=day=hour=0;
    }
    Time(int a,int b,int c,int d)
    {
        year=a;month=b;day=c;hour=c;
    }
    void setYear(int a){year=a;}
    int getYear(){return year;}
    void setMonth(int a){month=a;}
    int getMonth(){return month;}
    int getHour(){return hour;}
    int getDay(){return day;}
    int getMinute(){return minute;}
    int getSecond(){return second;}
    friend ostream&operator<<(ostream&out,const Time&d);
    friend istream&operator>>(istream&in,Time&d);
};
ostream&operator<<(ostream&out,const Time&d)
{
    out<<d.year<<"年"<<d.month<<"月"<<d.day<<"日"<<d.hour<<"时";
    return out;
}
istream&operator>>(istream&in,Time&d)
{
    in>>d.year>>d.month>>d.day>>d.hour;
}
class record
{
    int id;
    string name;
    Time start;
    Time end;
    int sh;
    string caozuo;
    public:
    record()
    {
    }
    record(int a,string n,Time t1,int b,string s)
    {
        id=a;sh=b;caozuo=s;name=n;
        start=t1;
        if (t1.getMonth()+2>12)
        {
            Time t(t1.getYear()+1,t1.getMonth()-10,t1.getDay(),t1.getHour());
            end=t;
        }
        else
        {
            Time t(t1.getYear(),t1.getMonth()+2,t1.getDay(),t1.getHour());
            end=t;
        }
    }
    void setId(int x){id=x;}
    int getId(){return id;}
    Time getStart(){return start;}
    Time getEnd(){return end;}
    int getSh(){return sh;}
    friend ostream&operator<<(ostream&out,const record&d);
    friend istream&operator>>(istream&in,record&d);
};
ostream&operator<<(ostream&out,const record&d)
{
    out<<d.id<<" "<<d.name<<" ";
    if (d.caozuo=="借书")
    {
        out<<"借书日期:  "<<d.start<<endl;
        out<<"应还日期:  "<<d.end<<endl;
    }
    else
     out<<"还书日期:  "<<d.start<<endl;
}
istream&operator>>(istream&in,record&d)
{
    if (d.caozuo=="借书")
    in>>d.id>>d.start>>d.end;
    else
    in>>d.id>>d.start;
}
class book
{
    string name;
    int num;
    int sh;
    vector<record>v1;
    vector<record>::iterator it1;
    multimap<int,int>m1;
    multimap<int,int>::iterator mit1;
    public:
    book()
    {


    }
    book(int a,string b,int d)
    {
        sh=a;
        name=b;
        num=d;
    }
    void setSh(int a){sh=a;}
    int getSh(){return sh;}
    void setName(string a){name=a;}
    string getName(){return name;}
    void setNum(int x){num=x;}
    int getNum(){return num;}
    int serch1(int id);
    vector<record>getRecord()
    {
        return v1;
    }
    friend ostream&operator<<(ostream&out,const book&d);
    friend istream&operator>>(istream&in,book&d);
};
ostream&operator<<(ostream&out,const book&d)
{
    out<<d.sh<<" "<<d.name<<" "<<d.num<<" "<<endl ;
    return out;
}
istream&operator>>(istream&in,book&d)
{
    in>>d.sh;
    if(d.sh==-1)return in;
    in>>d.name;
    in>>d.num;
    return in;
}
int book::serch1(int id)
{
    mit1=m1.find(id);
    if (mit1!=m1.end())
    return mit1->second;
    else
    return -1;
}
class student
{
    string sname;
    int id;
    int max;
    int num;
    vector<record>v2;
    vector<record>::iterator it2;
    multimap<int,int>m2;
    multimap<int,int>::iterator mit2;
    public:
    student()
    {


    }
    student(int a,string s,int b,int c)
    {
        id=a;
        sname=s;
        num=b;
        max=c;
    }
    void setId(int s){id=s;}
    int getId(){return id;}
    void setSname(string s){sname=s;}
    string getSname(){return sname;}
    void setMax(int a){max=a;}
    int getMax(){return max;}
    void setNum(int b){num=b;}
    int getNum(){return num;}
    int  serch2(int a);
    vector<record>getRecord()
    {
        return v2;
    }
    void operator=(student&s)
    {
        id=s.getId();
        sname=s.getSname();
        max=s.getMax();
        num=s.getNum();
        v2=s.getRecord();
    }
    bool operator==(student s)
    {
        return this->id==s.getId()?1:0;
    }
    friend istream&operator>>(istream&in,student&s);
    friend ostream&operator<<(ostream&out,student&s);
};
istream&operator>>(istream&in,student&s)
{
    in>>s.id;
    if (s.id==-1)
    return in;
    in>>s.sname;
    in>>s.num;
    in>>s.max;
}
ostream&operator<<(ostream&out,student&s)
{
    out<<s.id<<" "<<s.sname<<" "<<s.num<<" "<<s.max<<endl;
}
int student::serch2(int a)
{
    mit2=m2.find(a);
    if(mit2!=m2.end())
    return mit2->second;
    else
    return -1;
}
class adm
{
    vector<book>v3;
    vector<book>::iterator it3;
    multimap<int,int>m8;
    multimap<int,int>::iterator mit8;
    multimap<int,int>m3;
    multimap<int,int>::iterator mit3;
    vector<student>v4;
    vector<student>::iterator it4;
    multimap<int,int>m4;
    multimap<int,int>::iterator mit4;
    public:
    adm()
    {


    }
    ~adm()
    {
        save1();
        save2();
    }
    void addbook();
    void shanchubook();
    void llbook();
    int serch3(int a);
    void addstu();
    void shanchustu();
    void llstu();
    int serch4(int a);
    void load1();
    void load2();
    void save1();
    void save2();
};
void adm::load1()
{
    book b;
    int i;
    ifstream infile("d:\\20171806book.txt",ios::in);
    if(!infile)
    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 adm::save1()
{
    ofstream outfile("d:\\20171806book.txt",ios::out);
    if(!outfile)
    return ;
    for(it3=v3.begin();it3!=v3.end();it3++)
    {
        outfile<<*it3;
    }
    outfile.close();
}
void adm::load2()
{
    student u;
    int i;
    ifstream infile("d:\\20171806stu.txt",ios::in);
    if(!infile)
    return;
    v4.clear();
    m4.clear();
    i=0;
    while(infile>>u)
    {v4.push_back(u);
    m4.insert(make_pair(u.getId(),i));
     i++;
    }
    infile.close();
}
void adm::save2()
{
    ofstream outfile("d:\\20171806stu.txt",ios::out);
    if(!outfile)
    return ;
    for(it4=v4.begin();it4!=v4.end();it4++)
    {
        outfile<<*it4;
    }
    outfile.close();
}
void adm::addbook()
{
    book b;
    int i;
    cout<<"请输入书号,书名,余量;";
    while(cin>>b&&b.getSh()!=-1)
    {
        v3.push_back(b);
        i=v3.size();
        m3.insert(make_pair(b.getSh(),i-1));
    }
}
int adm::serch3(int a)
{
    mit3=m3.find(a);
    if(mit3!=m3.end())
    {
        return mit3->second;
    }
    else
    return -1;
}
void adm::shanchubook()
{
    int h;
    cin>>h;
    int i=serch3(h);
    if(i!=-1)
    {
        it3=v3.begin()+i;
        m3.erase(m3.find(h));
        v3.erase(it3);
    }
}
void adm::llbook()
{
    for( it3=v3.begin();it3!=v3.end();++it3)
    cout<<*it3;
}
void adm::addstu()
{
    student s;
    int i;
    cout<<"请输入学号,学生姓名,借阅量,最大借阅量;";
    while(1)
    {
        cin>>s;
        if(s.getId()==-1)
        break;
        v4.push_back(s);
        i=v4.size();
        m4.insert(make_pair(s.getId(),i-1));
    }
}
int adm::serch4(int a)
{
    mit4=m4.find(a);
    if(mit4!=m4.end())
    {
        return mit4->second;
    }
    else
    return -1;
}
void adm::shanchustu()
{
    int no;
    cin>>no;
    int i=serch4(no);
    if(i!=-1)
    {
        it4=v4.begin()+i;
        m4.erase(m4.find(no));
        v4.erase(it4);
    }
}
void adm::llstu()
{
    for( it4=v4.begin();it4!=v4.end();++it4)
    cout<<*it4;
}
class kehu
{
    vector<book>v5;
    vector<book>::iterator it5;
    vector<record>v7;
    vector<record>::iterator it7;
    multimap<int,int>m5;
    multimap<int,int>::iterator mit5;
    student s;
    public:
    kehu()
    {
      load3();
      load4();
    }
    ~kehu()
    {
        save3();
        save4();
    }
    void load3();
    void save3();//将图书信息以及借阅记录写到book文件里
    void load4();//客户端单独操作,判断输入的学号是否是信息库里的
    void save4();//将改变后的学生信息以及同步产生的借阅记录写回到stu文件里
    void load5();
    void load6();
    void save6();
    void save7();
    void liulanbook();
    int search5(int a);
    void queryBook();
    void jieshu();
    void llrecord();
    void huanshu();
    void save5();
};
void kehu::liulanbook()
{
    for (it5=v5.begin();it5!=v5.end();it5++)
    cout<<*it5;
}
void kehu::load5()
{
    book b;
    int i;
    ifstream infile("d:\\20171806book.txt",ios::in);
    if(!infile)
    return;
    v5.clear();
    m5.clear();
    i=0;
    while(infile>>b)
    {
        v5.push_back(b);
        m5.insert(make_pair(b.getSh(),i-1));
        ++i;
    }
    infile.close();
}
void kehu::save5()
{
    ofstream outfile("d:\\20171806book.txt",ios::out);
    if(!outfile)
    return ;
    for(it5=v5.begin();it5!=v5.end();it5++)
    {
        outfile<<*it5;
    }
    outfile.close();
}
int kehu::search5(int a)
{
    mit5=m5.find(a);
    if(mit5!=m5.end())
    {
        return mit5->second;
    }
    else
    return -1;
}
void kehu::save3()
{
    ofstream outfile("d:\\20171806book.txt",ios::out);
    if(!outfile)
    {
        return ;
    }
    for(it5=v5.begin();it5!=v5.end();it5++)
    {
        outfile<<*it5;
    }
    for (it7=v7.begin();it7!=v7.end();it7++)
    outfile<<*it7;       //将产生的借书还书记录写回到文件里
    outfile.close();
}
void kehu::load3()
{
    book b;
    record r;
    int i;
    ifstream infile("d:\\20171806book.txt",ios::in);
    if(!infile)
   {
       return;
   }
    v5.clear();
    m5.clear();
    while(infile>>b)
    {
        v5.push_back(b);
        int i=v5.size();
        m5.insert(make_pair(b.getSh(),i-1));
    }
    while (infile>>r)
    {
        v7.push_back(r);
    }
    infile.close();
}
void kehu::load4()
{
    int id;
    cout<<"输入学号:";
    cin>>id;
    student s;
    int i;
    ifstream infile("d:\\20171806stu.txt",ios::in);
    if(!infile)
    return;
    while(infile>>s)
    {
        if(s.getId()==id)
        this->s=s;
    }
    infile.close();
}
void kehu::save4()
{
    vector<student>v6;
    vector<student>::iterator it6;
    student ss;
    ifstream infile("d:\\20171806stu.txt",ios::in);
    if(!infile)
    return ;
    while(infile>>ss)
   {
       if(ss==this->s)
       ss=this->s;
       v6.push_back(ss);
    }
    infile.close();
    ofstream outfile("d:\\20171806stu.txt",ios::out);
    if(!outfile)
    return;
    for(it6=v6.begin();it6!=v6.end();it6++)
    outfile<<*it6;
    for (it7=v7.begin();it7!=v7.end();it7++)
    outfile<<*it7;
    outfile.close();
}
void kehu::jieshu()
{
    int a,no;
    int q,w,e,y,p,l;
    cout<<"输入时间";
    cin>>q>>w>>e>>y;
    Time t1(q,w,e,y);
    cout<<"请输入书号:";
    cin>>a;
    int b=search5(a);
    s.setNum(s.getNum()+1);
    record r(s.getId(),v5[b].getName(),t1,a,"借书");
    cout<<r;
    v5[b].setNum(v5[b].getNum()-1);
    v7.push_back(r);
}
void kehu::huanshu()
{
    int a,no;
    int q,w,e,y,p,l;
    cout<<"输入时间:";
    cin>>q>>w>>e>>y;
    Time t1(q,w,e,y);
    cin>>a;
    int b=search5(a);
    s.setNum(s.getNum()-1);
    record r(s.getId(),v5[b].getName(),t1,a,"还书");
    v5[b].setNum(v5[b].getNum()+1);
    v7.push_back(r);
    }
void kehu::load6()
{
    book b;
    record r;
    int i;
    ifstream infile("d:\\20171806book.txt",ios::in);
    if(!infile)
    return;
    v5.clear();
    m5.clear();
    i=0;
    while(infile>>b)
    {
        v5.push_back(b);
        m5.insert(make_pair(b.getSh(),i-1));
        i++;
    }
    while(infile>>r)
    {
        v7.push_back(r);
    }
    infile.close();
}
int main()
{
   //adm r;
   //r.addbook();
   //r.addstu();
   //r.save1();
   //r.save2();
   kehu s;
   //s.jieshu();
   s.huanshu();

}

经过多次艰难的更改,和同学的帮助,才稍微弄懂了一些东西的用法,但是还是很多不明白的地方,直接套用的,需要抽时间静心 思考,也确实感觉到了编程的难度,不过也感觉到了一点乐趣了,以后继续加油吧


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值