图书馆管理系统

本文介绍了一个图书管理系统的设计与实现,该系统包含图书管理、学生管理和图书借阅等功能。系统使用C++编写,通过类的设计实现了图书信息维护、学生信息管理及图书借阅与归还等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



#include<bits/stdc++.h>
using namespace std;
class Time //时间类
{
    int year,month,day,hour;
    public:
    Time(int y,int m,int d,int h)
    {
        year=y;
        month=m;
        day=d;
        hour=h;
    }
    Time()
    {
        year=month=day=hour=0;
    }
    void setYear(int y){year=y;}
    void setMonth(int m){month=m;}
    void setDay(int d){day=d;}
    void setHour(int h){hour=h;}
    int getYear(){return year;}
    int getMonth(){return month;}
    int getDay(){return day;}
    int getHour(){return hour;}
    friend istream&operator>>(istream&is,Time&t);
    friend ostream&operator<<(ostream&os,const Time&t);
};
istream &operator>>(istream &is,Time &t)
{
    is>>t.year>>t.month>>t.day>>t.hour;
}
ostream &operator<<(ostream & os,const Time&t)
{
    os<<t.year<<" "<<t.month<<" "<<t.day<<" "<<t.hour<<" ";
    return os;
}
class Record//记录类
{
    public:
    int id;
    string name;
    Time borrow;
    Time rback;
    int number;
    string caozuo;
    Record(int i,string x,Time b,int n,string c)
    {
        id=i;
        name=x;
        borrow=b;
        number=n,
        caozuo=c;
        if(b.getMonth()+2>12)
        {
            Time t(b.getYear()+1,b.getMonth()-10,b.getDay(),b.getHour());
            rback=t;
        }
        else
        {
            Time t(b.getYear(),b.getMonth()+2,b.getDay(),b.getHour());
            rback=t;
        }
    }
    Record()
    {

    }
    void setId(int i){id=i;}
    void setName(string x){name=x;}
    void setBorrow(Time b){borrow=b;}
    void setRback(Time r){rback=r;}
    void setNumber(int n){number=n;}
    void setCaozuo(string c){caozuo=c;}
    int getId(){return id;}
    string getName(){return name;}
    Time getBorrow(){return borrow;}
    Time getRback(){return rback;}
    int getNumber(){return number;}
    string getCaozuo(){return caozuo;}
    friend istream&operator>>(istream&is,Record&d);
    friend ostream&operator<<(ostream&os,const Record&d);
};
istream&operator>>(istream&is,Record&d)
{
    if(d.caozuo=="js")
    is>>d.id>>d.borrow>>d.rback;
    else
    is>>d.id>>d.borrow;
}
ostream&operator<<(ostream&os,Record&d)
{
    os<<d.id<<" "<<d.name;
    if(d.caozuo=="js")
    {
        os<<"js"<<d.borrow<<endl;
        os<<"hs"<<d.rback<<endl;
    }
    else
        os<<"js"<<d.borrow<<endl;
}
class book//书籍类
{
        public:
    string name;
    int num;
    int number;
    int cbdate;
    vector<Record>v1;
    vector<Record>::iterator it1;
    multimap<int,int>m1;
    multimap<int,int>::iterator mit1;
    book()
    {

    }
    book(string x,int y,int n,int c)
    {
        name=x;
        num=y;
        number=n;
        cbdate=c;
    }
    void setName(string x){name=x;}
    void setNum(int y){num=y;}
    void setNumber(int n){number=n;}
    void setCbdte(int c){cbdate=c;}
    string getName(){return name;}
    int getNum(){return num;}
    int getNumber(){return number;}
    int getCbdate(){return cbdate;}
    int serch1(int id);
    vector<Record>getRecord()
    {
        return v1;
    }
    friend istream&operator>>(istream&is,book&d);
    friend ostream&operator<<(ostream&os,const book&d);
};
istream&operator>>(istream&is,book&d)
{
    is>>d.number;
    if(d.number==-1)
    return is;
    is>>d.name;
    is>>d.num;
    is>>d.cbdate;
    return is;
}
ostream&operator<<(ostream&os,const book&d)
{
    os<<d.number<<" "<<d.name<<" "<<d.num<<" "<<d.cbdate<<endl;
    return os;
}
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(string s,int i,int m,int y)
    {
        sname=s;
        id=i;
        max=m;
        num=y;
    }
    void setSname(string s){sname=s;}
    void setId(int i){id=i;}
    void setMax(int m){max=m;}
    void setNum(int y){num=y;}
    string getSname(){return sname;}
    int getId(){return id;}
    int getMax(){return max;}
    int getNum(){return num;}
    int serch2(int m);
    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&is,student&s);
    friend ostream&operator<<(ostream&os,student&s);
};
istream&operator>>(istream&is,student&s)
{
    is>>s.id;
    if(s.id==-1)
        return is;
    is>>s.sname;
    is>>s.max;
    is>>s.num;
}
ostream&operator<<(ostream&os,student&s)
{
    os<<s.id<<" "<<s.sname<<" "<<s.max<<" "<<s.num<<" "<<endl;
}
int student::serch2(int m)
{
    mit2=m2.find(m);
    if(mit2!=m2.end())
        return mit2->second;
    else
        return -1;
}
class manager//管理类
{
    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:
    manager()
    {

    }
    ~manager()
    {
        save1();
        save2();
    }
    void addbook();
    void shanchubook();
    void liulanbook();
    int search3(int a);
    void addstudent();
    void shanchustudent();
    void liulanstudent();
    int search4(int a);
    void load1();
    void load2();
    void save1();
    void save2();
};
void manager::load1()
{
    book b;
    int i;
    ifstream infile("e:\\20171765book.txt",ios::in);
    if(!infile)
        return;
    v3.clear();
    m3.clear();
    i=0;
    while(infile>>b)
    {
        v3.push_back(b);
        m3.insert(make_pair(b.getNumber(),i-1));
        i++;
    }
    infile.close();
}
void manager::save1()
{
    ofstream outfile("e:\\20171765book.txt",ios::out);
    if(!outfile)
        return;
    for(it3=v3.begin();it3!=v3.end();it3++)
    {
        outfile<<*it3;
    }
    outfile.close();
}
void manager::load2()
{
    student u;
    int i;
    ifstream inflie("e:\\20171765stu.txt",ios::in);
    if(!inflie)
        return;
    v4.clear();
    m4.clear();
    i=0;
    while(inflie>>u)
    {
        v4.push_back(u);
        m4.insert(make_pair(u.getId(),i));
        i++;
    }
    inflie.close();
}
void manager::save2()
{
    ofstream outflie("e:\\20171765stu.txt",ios::out);
    if(!outflie)
        return;
    for(it4=v4.begin();it4!=v4.end();it4++)
    {
        outflie<<*it4;
    }
    outflie.close();
}
void manager::addbook()
{
    book b;
    int i;
    cout<<"请输入 阅读量,书名,出版日期,学号:";
    while(cin>>b&&b.getNumber()!=-1)
    {
        v3.push_back(b);
        i=v3.size();
        m3.insert(make_pair(b.getNumber(),i-1));
    }
}
int manager::search3(int a)
{
    mit3=m3.find(a);
    if(mit3!=m3.end())
    {
        return mit3->second;
    }
    else
        return -1;
}
void manager::shanchubook()
{
    int h;
    cin>>h;
    int i=search3(h);
    if(i!=-1)
    {
        it3=v3.begin()+i;
        m3.erase(m3.find(h));
        v3.erase(it3);
    }
}
void manager::liulanbook()
{
    for( it3=v3.begin();it3!=v3.end();++it3)
    cout<<*it3;
}
void manager::addstudent()
{
    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 manager::search4(int a)
{
    mit4=m4.find(a);
    if(mit4!=m4.end())
    {
        return mit4->second;
    }
    else
    return -1;
}
void manager::shanchustudent()
{
    int no;
    cin>>no;
    int i=search4(no);
    if(i!=-1)
    {
        it4=v4.begin()+i;
        m4.erase(m4.find(no));
        v4.erase(it4);
    }
}
void manager::liulanstudent()
{
    for( it4=v4.begin();it4!=v4.end();++it4)
    cout<<*it4;
}
class User//用户类
{
    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:
    User()
    {
        load3();
        load4();
    }
    ~User()
    {
        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 liulanRecord();
    void huanshu();
    void save5();
};
void User::liulanbook()
{
    for(it5=v5.begin();it5!=v5.end();it5++)
        cout<<*it5;
}
void User::load5()
{
    book b;
    int i;
    ifstream inflie("e:\\20171765book.txt",ios::in);
    if(!inflie)
        return;
    v5.clear();
    m5.clear();
    i=0;
    while(inflie>>b)
    {
        v5.push_back(b);
        m5.insert(make_pair(b.getNumber(),i-1));
        ++i;
    }
    inflie.close();
}
void User::save5()
{
    ofstream outflie("e:\\20171765book.txt",ios::out);
    if(!outflie)
        return;
    for(it5=v5.begin();it5!=v5.end();it5++)
    {
        outflie<<*it5;
    }
    outflie.close();
}
int User::search5(int a)
{
    mit5=m5.find(a);
    if(mit5!=m5.end())
    {
        return mit5->second;
    }
    else
        return -1;
}
void User::save3()
{
    ofstream outflie("e:\\20171765book.txt",ios::out);
    if(!outflie)
        return;
    for(it5=v5.begin();it5!=v5.end();it5++)
    {
        outflie<<*it5;
    }
    for(it7=v7.begin();it7!=v7.end();it7++)
    {
        outflie<<*it7; //将产生的借书还书记录写回到文件里
    }
    outflie.close();
}
void User::load3()
{
    book b;
    int i;
    ifstream inflie("e:\\20171765book.txt",ios::in);
    if(!inflie)
        return;
    v5.clear();
    m5.clear();
    while(inflie>>b)
    {
        v5.push_back(b);
        int i=v5.size();
        m5.insert(make_pair(b.getNumber(),i-1));
    }
    inflie.close();
}
void User::load4()
{
    int id;
    cout<<"请输入学号:";
    cin>>id;
    student s;
    int i;
    ifstream inflie("e:\\20171765stu.txt",ios::in);
    if(!inflie)
        return;
    while(inflie>>s)
    {
        if(s.getId()==id)
            this->s=s;
    }
    inflie.close();
}
void User::save4()
{
    vector<student>v6;
    vector<student>::iterator it6;
    student ss;
    ifstream inflie("e:\\20171765stu.txt",ios::in);
    if(!inflie)
        return;
    while(inflie>>ss)
    {
        if(ss==this->s)
            ss=this->s;
        v6.push_back(ss);
    }
    inflie.close();
    ofstream outflie("e:\\20171765stu.txt",ios::out);
    if(!outflie)
    return;
    for(it6=v6.begin();it6!=v6.end();it6++)
    outflie<<*it6;
    for (it7=v7.begin();it7!=v7.end();it7++)
    outflie<<*it7;
    outflie.close();
}
void User::jieshu()
{
    int a,no;
    int q,w,e,y;
    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 User::huanshu()
{
    int a,no;
    int q,w,e,y;
    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,"还书");
    v5[b].setNum(v5[b].getNum()+1);
    v7.push_back(r);
}
void User::load6()
{
    book b;
    Record r;
    int i;
    ifstream inflie("d:\\20171765book.txt",ios::in);
    if(!inflie)
    return;
    v5.clear();
    m5.clear();
    i=0;
    while(inflie>>b)
    {
        v5.push_back(b);
        m5.insert(make_pair(b.getNumber(),i-1));
        i++;
    }
    while(inflie>>r)
    {
        v7.push_back(r);
    }
    inflie.close();
}
int main()
{
    //manager r;
   //r.addbook();
   //r.addstudent();
   //r.save1();
   //r.save2();
    User u;
   u.jieshu();
   u.huanshu();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值