C++编写图书管理系统

 
 

///主程序

#include "CReader.h"
#include "CBook.h"
#include "CUser.h"
#include "CBookManager.h"
#include "CReaderManager.h"
#include <iostream>
#include "stdlib.h"
CBookManager bookManager;
CReaderManager readerManager;
int landbook() ///借书
{
    bool flag=1;
    while(flag)
    {
        string readerName, bookName;
        int readerSubscript, bookSubscript;
        cout << "请输入读者名称" << endl;
        cin >> readerName;
        readerSubscript = readerManager.findreader(readerName);
        if (readerSubscript == -1)
        {
            cout << "读者不存在" << endl;
            return 0;
        }
        cout << "请输入书籍名称" << endl;
        cin >> bookName;
        bookSubscript = bookManager.findbook(bookName);
        if (bookSubscript == -1)
        {
            cout << "书籍不存在" << endl;
            return 0;
        }
        else if (bookSubscript == -2)
        {
            cout << "书籍已借出" << endl;
            return 0;
        }
        bookManager.editbook(bookSubscript, false);
        readerManager.editreader(readerSubscript, bookManager.getbook(bookSubscript));
        readerManager.editreader(readerSubscript, true);
        cout << "借书成功" << endl;
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续借书  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int returnbook() ///还书
{
    bool flag=1;
    while(flag)
    {
        cout << "请输入读者名称" << endl;
        string readername;
        cin >> readername;
        int readersubscript = readerManager.findreader(readername);///readersubscript读者是否存在
        if (readersubscript == -1)
        {
            cout << "读者不存在" << endl;
            return 0;
        }
        CReader reader = readerManager.getreader(readersubscript);///名字查找读者
        CBook book = reader.getbrbook();
        int booksubscript = bookManager.findbook(book.getname());
        if (booksubscript == -1)
        {
            cout << "没有此书!" << endl;
            return 0;
        }
        bookManager.editbook(booksubscript, true);///书变回在架状态
        readerManager.editreader(readersubscript, false);///人变为未借书 状态
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续还书  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}


int bookcreate()///加书
{
    bool flag=1;
    while(flag)
    {
        CBook book;
        int code;
        string name;
        cout << "请输入书号" << endl;
        book.setcode(code);
        cin >> code;
        cout << "请输入书名" << endl;
        cin >> name;
        book.setname(name);
        bookManager.addbook(book);
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续加书  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int bookdelete()  ///删除书籍
{
    bool flag=1;
    while(flag)
    {
        cout << "请输入书名" << endl;
        string bookname;
        cin >> bookname;
        int booksubscript = bookManager.findbook(bookname);
        if (booksubscript == -1)
        {
            cout << "没有这本书" << endl;
            return 0;
        }
        bookManager.delbook(booksubscript);
        cout << "删除成功" << endl;
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续删书  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int bookedit() ///编辑图书
{
    while(1)
    {
        cout << "请输入书名" << endl;
        string bookname;
        cin >> bookname;
        int booksubscript = bookManager.findbook(bookname);
        if (booksubscript == -1)
        {
            cout << "没有这本书" << endl;
            return 0;
        }
        int newbookcode;
        string newbookname;
        cout << "请输入新书名" << endl;
        cin >> newbookname;
        bookManager.editbook(booksubscript, newbookname);
        cout << "请输入新书号" << endl;
        cin >> newbookcode;
        bookManager.editbook(booksubscript, newbookcode);
        cout << "更改成功" << endl;
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续编辑图书  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int bookfind() ///找书
{
    while(1)
    {
        cout << "1.按书名查找" << endl << "2.按书号查找" << "其他退出" << endl;
        int command;
        cin >> command;
        int booksubscript=-1;
        if (command == 1)
        {
            cout << "请输入书名" << endl;
            string bookname;
            cin >> bookname;
            booksubscript = bookManager.findbook(bookname);
        }
        else if (command == 2)
        {
            cout << "请输入书号" << endl;
            int bookcode;
            cin >> bookcode;
            booksubscript = bookManager.findbook(bookcode);
        }
        else
        {
            return 0;
        }
        if (booksubscript == -1)
        {
            cout << "没有这本书" << endl;
            return 0;
        }
        CBook book = bookManager.getbook(booksubscript);
        book.show();
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续查找图书  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int booklist()  ///显示图书
{
    bookManager.listbooks();
    return 0;
}
int bookmanage() ///图书管理
{
    cout << "1.增加图书" << endl;
    cout << "2.删除图书" << endl;
    cout << "3.更改图书" << endl;
    cout << "4.查找图书" << endl;
    cout << "5.显示图书" << endl;
    int command;
    cout << "请输入指令" << endl;
    cin >> command;
    switch (command)
    {
    case 1:
        bookcreate();
        break;
    case 2:
        bookdelete();
        break;
    case 3:
        bookedit();
        break;
    case 4:
        bookfind();
        break;
    case 5:
        booklist();
    default:
        return 0;
    }
    return 0;
}
int readercreate()  ///增加读者
{
    while(1)
    {
        int code;
        string name;
        CReader reader;
        cout << "请输入编号" << endl;
        cin >> code;
        cout << "请输入姓名" << endl;
        cin >> name;
        reader.setcode(code);
        reader.setname(name);
        readerManager.addreader(reader);
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续增加读者  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int readerdelete() ///删除读者
{
    while(1)
    {
        cout << "请输入读者姓名" << endl;
        string readername;
        cin >> readername;
        int  readersubscript = readerManager.findreader(readername);
        if (readersubscript == -1)
        {
            cout << "没有这位读者" << endl;
            return 0;
        }
        readerManager.delreader(readersubscript);
        cout << "删除成功" << endl;
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续增删除读者  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int readeredit()  ///编辑读者
{
    while(1)
    {
        cout << "请输入读者姓名" << endl;
        string readername;
        cin >> readername;
        int readersubscript = readerManager.findreader(readername);
        if (readersubscript == -1)
        {
            cout << "没有这位读者" << endl;
            return 0;
        }
        int newreadercode;
        string newreadername;
        cout << "请输入新读者姓名" << endl;
        cin >> newreadername;
        readerManager.editreader(readersubscript, newreadername);
        cout << "请输入新读者编号" << endl;
        cin >> newreadercode;
        readerManager.editreader(readersubscript, newreadercode);
        cout << "更改成功" << endl;
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续编辑读者  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int readerfind()  ///图书查找
{
    while(1)
    {
        cout << "1.按书名查找" << endl << "2.按书号查找" << "其他退出" << endl;
        int command;
        cin >> command;
        int readersubscript = -1;
        if (command == 1)
        {
            cout << "请输入书名" << endl;
            string readername;
            cin >> readername;
            readersubscript = readerManager.findreader(readername);
        }
        else if (command == 2)
        {
            cout << "请输入书号" << endl;
            int readercode;
            cin >> readercode;
            readersubscript = readerManager.findreader(readercode);
        }
        else
        {
            return 0;
        }
        if (readersubscript == -1)
        {
            cout << "没有这本书" << endl;
            return 0;
        }
        CReader reader = readerManager.getreader(readersubscript);
        reader.show();
        cout<<"请选择您的操作:"<<endl;
        cout<<"1.继续查找读者  0.退出"<<endl;
        int ss=0;
        cin>>ss;
        if(ss==0) break;
    }
    system("cls");///清屏
    return 0;
}
int readerlist() ///读者清单
{
    readerManager.listreaders();
    return 0;
}
int readermanage()  ///读者管理
{
    cout << "1.增加读者" << endl;
    cout << "2.删除读者" << endl;
    cout << "3.更改读者" << endl;
    cout << "4.查找读者" << endl;
    cout << "5.显示读者" << endl;
    int command;
    cout << "请输入指令" << endl;
    cin >> command;
    switch (command)
    {
    case 1:
        readercreate();
        break;
    case 2:
        readerdelete();
        break;
    case 3:
        readeredit();
        break;
    case 4:
        readerfind();
    case 5:
        readerlist();
        break;
    default:
        return 0;
    }
    return 0;
}
int filemanage()  ///文件操作
{
    cout << "1.文件存储" << endl << "2.文件读取" << endl;
    int command;
    cin >> command;
    if (command == 1)
    {
        readerManager.save();
        bookManager.save();
        cout << "已存储在books.txt和readers.txt中" << endl;
        return 0;
    }
    else if (command == 2)
    {
        readerManager.load();
        bookManager.load();
        cout << "文件已读取" << endl;
        bookManager.listbooks();
        cout << endl;
        readerManager.listreaders();
        return 0;
    }
    else
    {
        cout << "文件未操作" << endl;
        return 1;
    }
    return 0;
}


int main()
{
    /// system("图书管理系统");
    bool flag = true;
    while (flag)
    {
        cout <<"#####################################"<<endl;
        cout <<"#       欢迎使用图书馆管理系统      #"      << endl;
        cout <<"#          1.借书                   #"<< endl;
        cout <<"#          2.还书                   #"<< endl;
        cout <<"#          3.图书管理               #"<< endl;
        cout <<"#          4.读者管理               #"<< endl;
        cout <<"#          5.文件存储               #"<< endl;
        cout <<"#          0.退出                   #"<< endl;
        cout<<"#####################################"<<endl;
        int command;
        cout << "请输入指令" << endl;
        cin >> command;
        switch (command)
        {
        case 1:
            landbook();
            break;
        case 2:
            returnbook();
            break;
        case 3:
            bookmanage();
            break;
        case 4:
            readermanage();
            break;
        case 5:
            filemanage();
            break;
        default:
            flag = false;
        }
    }
    bookManager.save();
    readerManager.save();
    return 0;
}

///.h头文件

#ifndef CBOOK_H
#define CBOOK_H
#include <string>
using namespace std;
class CBook
{
private:
int code;              ///图书编号
string name;     ///图书名称
bool Is_Stock;          ///true为在架,false为借出
bool Is_Existing;       ///true为存在, false为删除
public:
CBook(); ///默认构造函数/
CBook(int co, string na);    ///构造函数,初始化图书信息
void setcode(int n);   ///设置图书编号
int getcode();    ///获取/图书编号
void setname(string na);    ///设置图书名称
string getname();  ///获取图书名称
bool  get_Stock();  ///获取图书是否在库信息
void set_Stock(bool is);/// 设置图书是否在库信息
bool  get_Existing();///获取存在标志
void set_Existing(bool is);///设置存在标志
void show();
};


#endif //CBOOK_H


#ifndef CBOOKMANAGER_H
#define CBOOKMANAGER_H
#include <vector>
#include <string>
#include "CBook.h"
using namespace std;
class CBookManager
{
private:
vector <CBook> bkarray;  ///使用容器存储图书信息
public:
CBookManager();
~CBookManager();
void addbook(CBook book);    ///添加图书
int findbook(string name);  ///书名查找图书
int findbook(int code);  ///编号查找图书
CBook getbook(int subscript);   ///通过编号返回书的信息  **
void editbook(int subscript, CBook book);///编辑图书
void editbook(int subscript, int code);///编辑图书序号
void editbook(int subscript, string name);///编辑图书名字
  void editbook(int subscript, bool Is_Stock);///编辑图书是否在架
void delbook(int subscript);   ///删除图书
void listbooks();  ///显示全部图书
void save(string filename = "books.txt"); /// 保存到文件
void load(string filename = "books.txt"); /// 从文件读取
};


#endif //CBOOKMANAGER_H


#ifndef CREADER_H
#define CREADER_H
#include "CBook.h"
#include "CUser.h"
using namespace std;
class CReader: public CUser
{
private:
bool Is_Existing;  ///true存在,false删除
bool Is_Borrowing;  ///true借过书,false没有借书
CBook brbook;     ///表示读者所借的图书
public:
CReader();               ///默认的构造函数
CReader(int id, string na);   ///构造函数,初始化读者信息
bool get_Existing();        ///用来获取删除标志
void set_Existing(bool);     ///用来设置删除标志
bool get_Borrowing();      ///用来获取读者借阅情况
void set_Borrowing(bool);   ///用来设置读者借阅情况
void setbrbook(CBook bt);  ///用来记录读者借书信息
CBook getbrbook(); ///用来获取读者借书信息
void show(); ///重写基类成员,显示读者的基本信息情况和借书情况
};


#endif //CREADER_H



#ifndef CREADERMANAGER_H
#define CREADERMANAGER_H
#include <vector>
#include <string>
#include "CReader.h"
using namespace std;
class CReaderManager
{
private:
vector <CReader> rdarray;// 存储读者信息
public:
CReaderManager();
~CReaderManager();
CReader getreader(int subscript);
void addreader(CReader reader);          //添加读者
int findreader(string name); //查找读者
int findreader(int code); //查找读者
int findreader(CBook book); //查找读者
void editreader(int subscript, CReader reader); //编辑读者信息
void editreader(int subscript, string name); //编辑读者信息
void editreader(int subscript, int code); //编辑读者信息
void editreader(int subscript, CBook book); //编辑读者信息
void editreader(int subscript, bool Is_Borrowing); //编辑读者信息
void delreader(int subscript);          //删除读者,读者如果借书要还书后才能删除
void listreaders();           //显示所有读者
void save(string filename = "readers.db"); // 保存到文件
void load(string filename = "readers.db"); // 从文件读取
};


#endif //CREADERMANAGER_H



#ifndef CUSER_H
#define CUSER_H


#include <string>
using namespace std;
class CUser
{
protected:
int code;      //表示用户编号;
string name;  //表示用户姓名
public:
CUser();   // 默认构造函数
CUser(int id, string na);   //构造函数,初始化用户信息
void setcode(int n);      //用来设置用户编号
int getcode();          //用来获取用户编号
void setname(string na);  //用来设置用户姓名
string  getname();        //用来获取用户姓名
void show();           //用来显示用户的基本信息
};


#endif //CUSER_H



///.cpp源文件

#include "CReader.h"
#include "CBook.h"
#include <string>
#include <iostream>
using namespace std;
CBook::CBook()
{
code = 0;
name = "unnamed";
Is_Stock = true;
Is_Existing = true;
}


CBook::CBook(int co, string na)
{
code = co;
name = na;
Is_Stock = true;
Is_Existing = true;
}


void CBook::setcode(int n)
{
code = n;
}


int CBook::getcode()
{
return code;
}


void CBook::setname(string na)
{
name = na;
}


string CBook::getname()
{
return name;
}


bool CBook::get_Stock()
{
return Is_Stock;
}


void CBook::set_Stock(bool is)
{
Is_Stock = is;
}


bool CBook::get_Existing()
{
return Is_Existing;
}


void CBook::set_Existing(bool is)
{
Is_Existing = is;
}


void CBook::show()
{


if (Is_Existing)
{
cout << "Ãû³Æ£º" << name << " ÊéºÅ£º" << code;
if (Is_Stock) cout << " ÔÚ¼Ü";
else cout << " ½è³ö";
cout << endl;
}
}



#include "CBookManager.h"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;


CBookManager::CBookManager() ///构造函数
{
}




CBookManager::~CBookManager()///析构函数
{
}


void CBookManager::addbook(CBook book)   ///添加图书    添加乱码问题???
{
bkarray.push_back(book);
}


int CBookManager::findbook(string name)      ///书名查找图书
{
for (int i = 0; i < (int)bkarray.size(); i++)
{
if (bkarray[i].getname() == name) return i;
}
return -1;
}


int CBookManager::findbook(int code)   ///编号查找图书
{
for (int i = 0; i < (int)bkarray.size(); i++)
{
if (bkarray[i].getcode() == code && bkarray[i].get_Existing() == true)
{
if (bkarray[i].get_Stock() == true)
return i;
else return -2;
}
}
return -1;
}


CBook CBookManager::getbook(int subscript) ///通过编号返回书的信息  **
{
return bkarray[subscript];
}


void CBookManager::editbook(int subscript, CBook book)  ///编辑图书
{
bkarray[subscript] = book;
}


void CBookManager::editbook(int subscript, int code)     ///编辑图书序号
{
bkarray[subscript].setcode(code);
}


void CBookManager::editbook(int subscript, string name) ///编辑图书名字
{
bkarray[subscript].setname(name);
}


void CBookManager::editbook(int subscript, bool Is_Stock)  ///编辑图书是否在架
{
bkarray[subscript].set_Stock(Is_Stock);
}


void CBookManager::delbook(int subscript)       ///删除图书
{
bkarray[subscript].set_Existing(false);
}


void CBookManager::listbooks()           ///显示全部图书
{
cout << "所有的图书为" << endl;
for (int i = 0; i < (int)bkarray.size(); i++)
{
if (bkarray[i].get_Existing())
bkarray[i].show();
}
}


void CBookManager::save(string filename)  /// 保存到文件
{
ofstream outfile(filename.c_str(), ios::binary);
if (!outfile.is_open())
{
cout << "Error opening file";
return;
}
int bksize = bkarray.size();
outfile.write((char*)(&bksize), sizeof(bksize));
for (int i = 0; i <bksize; i++)
outfile.write((char*)(&bkarray[i]), sizeof(CBook));
outfile.close();
}
void CBookManager::load(string filename)    /// 从文件读取
{
ifstream infile(filename.c_str(), ios::binary);
if (!infile.is_open())
{
cout << "Error opening file"<<endl;;
return;
}
bkarray.clear();
int bksize;
infile.read((char*)(&bksize), sizeof(bksize));
bkarray.reserve(bksize * 2);
CBook *bookarray = new CBook[bksize];
for (int i = 0; i < bksize; i++)
{
infile.read((char*)(&bookarray[i]), sizeof(CBook));
bkarray.push_back(bookarray[i]);
}
infile.close();
}


#include "CReader.h"
#include <iostream>
#include <string>
using namespace std;
CReader::CReader()
{
Is_Borrowing = true;
Is_Existing = true;
}


CReader::CReader(int id, string na) :CUser(id, na)
{
Is_Borrowing = true;
Is_Existing = true;
}


bool CReader::get_Existing()
{
return Is_Existing;
}


void CReader::set_Existing(bool is)
{
Is_Existing = is;
}


bool CReader::get_Borrowing()
{
return Is_Borrowing;
}


void CReader::set_Borrowing(bool is)
{
Is_Borrowing = is;
}


void CReader::setbrbook(CBook bt)
{
brbook = bt;
}


CBook CReader::getbrbook()
{
return brbook;
}


void CReader::show()
{
CUser::show();
if (brbook.get_Stock()==false)
cout << " 书名是" << brbook.getname() <<" 书号是"<<brbook.getcode()<< endl;
// cout << Is_Existing << endl;
}

#include "CReaderManager.h"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;




CReaderManager::CReaderManager()
{
}




CReaderManager::~CReaderManager()
{
}


CReader CReaderManager::getreader(int subscript)
{
return rdarray[subscript];
}
void CReaderManager::addreader(CReader reader)
{
rdarray.push_back(reader);
}


int CReaderManager::findreader(string name)
{
for (int i = 0; i < (int)rdarray.size(); i++)
{
if (rdarray[i].getname() == name) return i;
}
return -1;
}


int CReaderManager::findreader(int code)
{
for (int i = 0; i < (int)rdarray.size(); i++)
{
if (rdarray[i].getcode() == code) return i;
}
return -1;
}


int CReaderManager::findreader(CBook book)
{
for (int i = 0; i < (int)rdarray.size(); i++)
{
if (rdarray[i].getbrbook().getcode() == book.getcode() && rdarray[i].getbrbook().getname() == book.getname()) return i;
}
return -1;
}


void CReaderManager::editreader(int subscript, CReader reader)
{
rdarray[subscript] = reader;
}


void CReaderManager::editreader(int subscript, string name)
{
rdarray[subscript].setname(name);
}


void CReaderManager::editreader(int subscript, int code)
{
rdarray[subscript].setcode(code);
}


void CReaderManager::editreader(int subscript, CBook book)
{
rdarray[subscript].setbrbook(book);
}


void CReaderManager::editreader(int subscript, bool Is_Borrowing)
{
rdarray[subscript].set_Borrowing(Is_Borrowing);
}


void CReaderManager::delreader(int subscript)
{
rdarray[subscript].set_Existing(false);
}


void CReaderManager::listreaders()
{
cout << "所有的读者为" << endl;
for (int i = 0; i < (int)rdarray.size(); i++)
{
if (rdarray[i].get_Existing()) rdarray[i].show();
}
}


void CReaderManager::save(string filename)
{


ofstream outfile(filename.c_str(), ios::binary);  ///数据
if (!outfile.is_open())
{
cout << "Error opening file";
return;
}
int rdsize = rdarray.size();
outfile.write((char*)(&rdsize), sizeof(rdsize));///
for (int i = 0; i < rdsize; i++)
outfile.write((char*)(&rdarray[i]), sizeof(CReader));
outfile.close();
}
void CReaderManager::load(string filename)
{


ifstream infile(filename.c_str(), ios::binary);
if (!infile.is_open())
{
cout << "Error opening file";
return;
}
rdarray.clear();
int rdsize=rdarray.size();
infile.read((char*)(&rdsize), sizeof(rdsize));
rdarray.reserve(rdsize * 2);
CReader * readerarray = new CReader[rdsize];
for (int i = 0; i < rdsize; i++)
{
infile.read((char*)(&readerarray[i]), sizeof(CReader));
rdarray.push_back(readerarray[i]);
}
infile.close();
}


#include "CUser.h"
#include <string>
#include <iostream>
using namespace std;
CUser::CUser()
{


code = 0;
name = "unnamed";
}


CUser::CUser(int id, string na)
{
code = id;
name = na;
}


void CUser::setcode(int n)
{
code = n;
}


int CUser::getcode()
{
return code;
}


void CUser::setname(string na)
{
name = na;
}


string CUser::getname()
{
return name;
}


void CUser::show()
{
cout << "ÐÕÃû£º" << name << " ±àºÅ£º" << code << endl;
}










猜你喜欢

转载自blog.csdn.net/qq_42043984/article/details/81003492
今日推荐