图书管理系统
翻出了以前写的C++作业,图书管理系统,虽然挺简单的,但留下纪念下吧。

翻出了以前写的C++作业,图书管理系统,虽然挺简单的,但留下纪念下吧。

#include <iostream>
#include<cstdlib>
#include<cstring>
#include<fstream>
using namespace std;
class CUser
{
private:
    int code;      //表示用户编号;
    char name[20];  //表示用户姓名
public:
    CUser()
    {
        ;
    };   // 默认构造函数
    CUser(int id, char na[])
    {
        code=id;
        strcpy(name,na);
    };   //构造函数,初始化用户信息
    void setcode(int n)
    {
        code=n;
    };      //用来设置用户编号
    int getcode()
    {
        return code;
    };          //用来获取用户编号
    void setname(char na[])
    {
        strcpy(name,na);
    };  //用来设置用户姓名
    char* getname()
    {
        return name;
    };        //用来获取用户姓名
    void show()
    {
        cout<<"用户编号:"<<code<<endl;
        cout<<"姓名:"<<name<<endl;
    };           //用来显示用户的基本信息
};
class CBook
{
private:
    int code;              //图书编号
    char name[20];      //图书名称
    bool Is_Stock;          //true为在架,false为借出
    bool Is_Existing;       //true为存在, false为删除
public:
    CBook()
    {
        ;
    }; //默认构造函数
    CBook(int no,char na[])
    {
        code=no;
        strcpy(name,na);
        Is_Stock=true;
        Is_Existing=true;
    };    //构造函数,初始化图书信息
    void setcode(int n)
    {
        code=n;
    };   //设置图书编号
    int getcode()
    {
        return code;
    };    //获取图书编号
    void setname(char na[])
    {
        strcpy(name,na);
    };    //设置图书名称
    char* getname()
    {
        return name;
    };  //获取图书名称
    bool  get_Stock()
    {
        return Is_Stock;
    };  //获取图书是否在库信息
    void set_Stock(bool isstock)
    {
        Is_Stock=isstock;
    };// 设置图书是否在库信息
    bool  get_Existing()
    {
        return Is_Existing;
    };//获取存在标志
    void set_Existing(bool isex)
    {
        Is_Existing=isex;
    };//设置存在标志
};
class CReader:public CUser
{
private:
    bool Is_Existing;  //true存在,false删除
    bool Is_Borrowing;  //true借过书,false没有借书
    CBook brbook;     //表示读者所借的图书
public:
    CReader()
    {
        CUser();
    };   //构造函数,初始化读者信息
    CReader(int id, char na[])
    {
        CUser(id,na);
    };   //构造函数,初始化读者信息
    bool get_Existing()
    {
        return Is_Existing;
    };        //用来获取删除标志
    void set_Existing(bool isex)
    {
        Is_Existing=isex;
    };     //用来设置删除标志
    bool get_Borrowing()
    {
        return Is_Borrowing;
    };      //用来获取读者借阅情况
    void set_Borrowing(bool isbo)
    {
        Is_Borrowing=isbo;
    };   //用来设置读者借阅情况
    void setbrbook(CBook bt)
    {
        brbook=bt;
        Is_Borrowing=true;
    };  //用来记录读者结束信息
    CBook getbrbook()
    {
        return brbook;
    };     //用来获取读者结束信息
    void show()
    {
        CUser::show();
        if(Is_Borrowing)
        {
            cout<<"当前借书:"<<brbook.getname()<<endl;
        }
        else
        {
            cout<<"当前用户没有借书!"<<endl;
        }
    };               //重写基类成员,显示读者的基本信息情况和借书情况
};
class CReaderManager
{
private:
    CReader rdarray[50];// 存储读者信息的集合
    int top;      //当前数组中存储的读者数量
public:
    CReaderManager()
    {
        top=0;
    };  // 构造函数
    ~CReaderManager()
    {
    };   //析构函数
    void addreaders()
    {
        char tmp[20];
        int tmp_no;
        cout<<"请输入读者的相关信息:"<<endl;
        cout<<"请输入读者的名称:"<<endl;
        cin>>tmp;
        cout<<"请输入读者的编号:"<<endl;
        cin>>tmp_no;
        CReader tmp_reader(tmp_no,tmp);
        rdarray[top]=tmp_reader;
        top++;
        cout<<"读者添加成功。"<<endl;
    };          //添加读者
    int findreaders(int suffix)
    {
        for(int i=0; i<top; i++)
        {
            if(rdarray[i].getcode()==suffix)
            {
                return i;//返回在库中的位置。
            }
        }
        return -1;//未找到
    };     //查找读者,这个函数用于借书还书操作。
    int findreaders()
    {
        char tmp[20];
        cout<<"请输入需要查找的用户的名称:"<<endl;
        cin>>tmp;
        for(int i=0; i<top; i++)
        {
            if(strcmp(rdarray[i].getname(),tmp)==0)
            {
                return i;
            }
        }
        return -1;
    };            //查找读者,这个函数用于读者维护操作
    void editreaders()
    {
        char tmp[20];
        int code;
        int num=findreaders();
        int tmp_ex;
        if(num==-1)
        {
            cout<<"您要的用户没有找到。"<<endl;
            return;
        }
        cout<<"用户姓名:"<<rdarray[num].getname()<<endl;
        cout<<"编号:"<<rdarray[num].getcode()<<endl;
        if(rdarray[num].get_Borrowing())
        {
            cout<<"用户借了"<<rdarray[num].getbrbook().getname()<<endl;
        }
        else
        {
            cout<<"用户没有借任何书。"<<endl;
        }
        if(rdarray[num].get_Existing())
        {
            cout<<"用户状态正常。"<<endl;
        }
        else
        {
            cout<<"用户已经被删除。"<<endl;
        }
        cout<<"请输入修改后的姓名:"<<endl;
        cin>>tmp;
        rdarray[num].setname(tmp);
        cout<<"请输入修改后的编号:"<<endl;
        cin>>code;
        rdarray[num].setcode(code);
        if(!rdarray[num].get_Existing())
        {
            cout<<"用户被标记为删除状态,是否恢复?(1恢复/0不恢复)"<<endl;
            cin>>tmp_ex;
            rdarray[num].set_Existing(tmp_ex);
        }
    };          //编辑读者信息
    void delreaders()
    {
        int tmp_code;
        int num;
        cout<<"请输入要删除的用户的编号:"<<endl;
        cin>>tmp_code;
        num=findreaders(tmp_code);
        if(num==-1)
        {
            cout<<"用户未找到,操作失败。"<<endl;
            return;
        }
        if(!rdarray[num].get_Existing())
        {
            cout<<"用户已经被删除,操作失败。"<<endl;
            return;
        }
        if(!rdarray[num].get_Borrowing())
        {
            cout<<"用户有书未还,操作失败。"<<endl;
            return;
        }
        rdarray[num].set_Existing(false);
        cout<<"用户删除完毕。"<<endl;
    };          //删除读者,读者如果借书要还书后才能删除
    void listreaders()
    {
        for(int i=0; i<top; i++)
        {
            if(rdarray[i].get_Existing())
            {
                cout<<rdarray[i].getcode()<<'\t'<<rdarray[i].getname()<<'\t';
                if(rdarray[i].get_Borrowing())
                {
                    cout<<rdarray[i].getbrbook().getname();
                }
                else
                {
                    cout<<"未借书";
                }
                cout<<endl;
            }
        }
    };           //显示所有读者
    CReader& getreader(int p)
    {
        if(p<0||p>=top)
        {
            cout<<"下标越界。"<<endl;
            p=0;
        }
        return rdarray[p];
    }
};
class CBookManager
{
private:
    CBook btarray[50];                   //图书集合
    int top;                         //当前数组中存储的图书数量
public:
    CBookManager()
    {
        top=0;
    };
    ~CBookManager()
    {
        ;
    };
    void addbooks()
    {
        char tmp[20];
        int tmp_no;
        cout<<"请输入图书的相关信息:"<<endl;
        cout<<"请输入图书的名称:"<<endl;
        cin>>tmp;
        cout<<"请输入图书的编号:"<<endl;
        cin>>tmp_no;
        CBook tmp_book(tmp_no,tmp);
        btarray[top]=tmp_book;
        top++;
        cout<<"图书入库成功。"<<endl;
    };    //添加图书
    int findbooks(int suffix)
    {
        for(int i=0; i<top; i++)
        {
            if(btarray[i].getcode()==suffix)
            {
                return i;//返回图书在书库中的位置。
            }
        }
        return -1;//未找到图书
    };  //查找图书,这个函数用于借书还书操作
    int findbooks()
    {
        char tmp[20];
        cout<<"请输入需要查找的图书的名称:"<<endl;
        cin>>tmp;
        for(int i=0; i<top; i++)
        {
            if(strcmp(btarray[i].getname(),tmp)==0)
            {
                return i;
            }
        }
        return -1;
    };  //查找图书,用于图书维护操作
    void editbooks()
    {
        char tmp[20];
        int code;
        int num=findbooks();
        int tmp_ex;
        if(num==-1)
        {
            cout<<"您要的图书没有找到。"<<endl;
            return;
        }
        cout<<"图书名称:"<<btarray[num].getname()<<endl;
        cout<<"图书编号:"<<btarray[num].getcode()<<endl;
        if(btarray[num].get_Stock())
        {
            cout<<"图书在架。"<<endl;
        }
        else
        {
            cout<<"图书已经借出。"<<endl;
        }
        if(btarray[num].get_Existing())
        {
            cout<<"图书状态正常。"<<endl;
        }
        else
        {
            cout<<"图书已经被删除。"<<endl;
        }
        cout<<"请输入修改后的名称:"<<endl;
        cin>>tmp;
        btarray[num].setname(tmp);
        cout<<"请输入修改后的编号:"<<endl;
        cin>>code;
        btarray[num].setcode(code);
        if(!btarray[num].get_Existing())
        {
            cout<<"图书被标记为删除状态,是否恢复?(1恢复/0不恢复)"<<endl;
            cin>>tmp_ex;
            btarray[num].set_Existing(tmp_ex);
        }
    };     //编辑图书
    void delbooks()
    {
        int tmp_code;
        int num;
        cout<<"请输入要删除的图书的编号:"<<endl;
        cin>>tmp_code;
        num=findbooks(tmp_code);
        if(num==-1)
        {
            cout<<"图书未找到,操作失败。"<<endl;
            return;
        }
        if(!btarray[num].get_Existing())
        {
            cout<<"图书已经被删除,操作失败。"<<endl;
            return;
        }
        if(!btarray[num].get_Stock())
        {
            cout<<"图书被借出,操作失败。"<<endl;
            return;
        }
        btarray[num].set_Existing(false);
        cout<<"图书删除完毕。"<<endl;
    };   //  删除图书
    void listbooks()
    {
        for(int i=0; i<top; i++)
        {
            if(btarray[i].get_Stock()&&btarray[i].get_Existing())
            {
                cout<<btarray[i].getcode()<<'\t'<<btarray[i].getname()<<endl;
            }
        }
    } ;  //显示全部图书
    CBook& getbook(int p)
    {
        if(p<0||p>=top)
        {
            cout<<"下标越界。"<<endl;
            p=0;
        }
        return btarray[p];
    }
};
int showmenu()
{
    char re=0;
    while(re<'1'||re>'6')
    {
        cout<<"功能菜单"<<endl;
        cout<<"1.读者管理"<<endl;
        cout<<"2.借书管理"<<endl;
        cout<<"3.还书管理"<<endl;
        cout<<"4.图书管理"<<endl;
        cout<<"5.文件存储"<<endl;
        cout<<"6.退出"<<endl;
        cout<<"请输入对应序号并回车"<<endl;
        cin>>re;
        //cout<<re;
    }
    return re-'0';
}
int showmenu1()
{
    int re=0;
    while(re<1||re>4)
    {
        cout<<"功能菜单--读者管理"<<endl;
        cout<<"1.添加读者"<<endl;
        cout<<"2.删除读者"<<endl;
        cout<<"3.修改读者"<<endl;
        cout<<"4.查找读者"<<endl;
        cout<<"请输入对应序号并回车"<<endl;
        cin>>re;
    }
    return re;
}
int showmenu4()
{
    int re=0;
    while(re<1||re>4)
    {
        cout<<"功能菜单--图书管理"<<endl;
        cout<<"1.添加图书"<<endl;
        cout<<"2.删除图书"<<endl;
        cout<<"3.修改图书"<<endl;
        cout<<"4.查找图书"<<endl;
        cout<<"请输入对应序号并回车"<<endl;
        cin>>re;
    }
    return re;
}
int showmenu5()
{
    int re=0;
    while(re<1||re>2)
    {
        cout<<"功能菜单--文件存储"<<endl;
        cout<<"1.读取"<<endl;
        cout<<"2.保存"<<endl;
        cout<<"请输入对应序号并回车"<<endl;
        cin>>re;
    }
    return re;
}
int main()
{
    CReaderManager cm1;
    CBookManager cb1;
    ofstream file;
    ifstream file2;
    int cz=0;
    int tmp_us;
    int tmp_bo;
    while(true)
    {
        cz=showmenu();
        switch(cz)
        {
        case 1:
            cz=showmenu1();
            switch(cz)
            {
            case 1:
                cm1.addreaders();
                break;
            case 2:
                cm1.delreaders();
                break;
            case 3:
                cm1.editreaders();
                break;
            case 4:
                cm1.findreaders();
                break;
            }
            break;
        case 2:
            tmp_bo=cb1.findbooks();
            if(tmp_bo==-1)
            {
                cout<<"您要借的书没有找到。"<<endl;
                break;
            }
            if(!cb1.getbook(tmp_bo).get_Existing())
            {
                cout<<"您要借的书已经被删除,操作失败。"<<endl;
                break;
            }
            if(!cb1.getbook(tmp_bo).get_Stock())
            {
                cout<<"您要借的书已经被借出,操作失败。"<<endl;
                break;
            }
            tmp_us=cm1.findreaders();
            if(tmp_bo==-1)
            {
                cout<<"您使用的身份无效。"<<endl;
                break;
            }
            if(!cm1.getreader(tmp_us).get_Existing())
            {
                cout<<"您的账户已经被管理员删除。"<<endl;
                break;
            }
            if(cm1.getreader((tmp_us)).get_Borrowing())
            {
                cout<<"请把您借的书还了再借。"<<endl;
                break;
            }
            cm1.getreader(tmp_us).set_Borrowing(true);
            cm1.getreader(tmp_us).setbrbook(cb1.getbook(tmp_bo));
            cb1.getbook(tmp_bo).set_Stock(false);
            break;
        case 3:
            cm1.editreaders();
        case 4:
            cz=showmenu4();
            switch(cz)
            {
            case 1:
                cb1.addbooks();
                break;
            case 2:
                cb1.delbooks();
                break;
            case 3:
                cb1.editbooks();
                break;
            case 4:
                cb1.findbooks();
                break;
            }
            break;
        case 5:
            cz=showmenu5();
            switch(cz)
            {
            case 1:
                file2.open("cb1.dat",ios::binary);
                //二进制打开,缺省为文本,ios::out,ios::in,文本输入输出用<<,>>
                file2.read((char *)&cb1,sizeof(cb1));
                ///int num=file2.gcount(); //获取读到文件的大小
                file2.close();
                file2.open("cm1.dat",ios::binary);
                //二进制打开,缺省为文本,ios::out,ios::in,文本输入输出用<<,>>
                file2.read((char *)&cm1,sizeof(cm1));
                ///int num=file2.gcount(); //获取读到文件的大小
                file2.close();
                break;
            case 2:
                file.open("cb1.dat",ios::binary);
                //缓存的类型是 unsigned char *,需要类型转换
                file.write((char *)&cb1,sizeof(cb1));  //winServer为类对象
                file.close();
                file.open("cm1.dat",ios::binary);
                //缓存的类型是 unsigned char *,需要类型转换
                file.write((char *)&cm1,sizeof(cm1));  //winServer为类对象
                file.close();
                break;
            }
            break;
        case 6:
            exit(0);
            break;
        }
    }
    return 0;
}

最后修改于 2019-04-13