Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中创建一个简单的图书库系统+; 我试图在C++中创建一个简单的图书库系统,但是从第一个类我遇到了一些设计程序。_C++_Oop - Fatal编程技术网

在C+中创建一个简单的图书库系统+; 我试图在C++中创建一个简单的图书库系统,但是从第一个类我遇到了一些设计程序。

在C+中创建一个简单的图书库系统+; 我试图在C++中创建一个简单的图书库系统,但是从第一个类我遇到了一些设计程序。,c++,oop,C++,Oop,这是我的LittleBooks class.h文件(假设只是一个草稿) 所以。。。哪种选择更好 谢谢 我会通过思考一个真正的图书馆是如何工作的来解决这个问题 你可以去图书馆找到某位作者的书。 你可以去图书馆找到有特定名字的书 每本书本身都是一个不同的对象,有一个固定的名称和作者 因此,我将其建模为单个Library对象,其中包含多个Book对象 Library界面允许您添加一本书、查找具有给定名称的所有书、查找给定作者的所有书等 Book界面允许您查找一本书的名称和作者 图书馆将不得不管理一批藏

这是我的LittleBooks class.h文件(假设只是一个草稿)

所以。。。哪种选择更好


谢谢

我会通过思考一个真正的图书馆是如何工作的来解决这个问题

你可以去图书馆找到某位作者的书。
你可以去图书馆找到有特定名字的书

每本书本身都是一个不同的对象,有一个固定的名称和作者

因此,我将其建模为单个
Library
对象,其中包含多个
Book
对象

Library
界面允许您添加一本书、查找具有给定名称的所有书、查找给定作者的所有书等

Book
界面允许您查找一本书的名称和作者

图书馆将不得不管理一批藏书。我会尝试利用STL来收集我的书,因为这应该是你第一次去C++中的数据结构资源。 A允许您存储键/值对。
类似于书的名称或作者-您希望用来查找书籍的东西

值是书本身

在这个特定的例子中,我会选择一个,因为这允许使用多个相同的
。这是因为你可以从同一个作者那里得到多本书,你也可以得到多本同名的书

我想搜索一个
multimap
per
key
,所以这里我有2个-一个用于键入名称的书籍,一个用于键入作者的书籍

multimap
有一个成员函数,允许我们使用同一个键查找所有值

它返回两个迭代器,用指定的键描述一系列值

然后,您可以向
类添加额外的接口,该类允许您将所有书籍保存到一个文件中,或从一个文件等加载它们

如下所示:

书: 图书馆:
类库
{
使用BookMap=std::multimap;
公众:
void loadFromFile(const std::string和filename);
void saveToFile(const std::string和filename);
void addBook(std::string name,std::string author)
{
auto book=std::make_shared(std::move(name),std::move(author));
_图书按图书名称放置(图书->名称(),图书);
_图书由作者提供。放置(图书->作者(),图书);
}
std::pair findByName(const std::string&name)
{
按名称返回。相等范围(名称);
}
std::pair findbyauther(const std::string&author)
{
按作者返回图书。相等范围(作者);
}
私人:
图书地图(BookMap)(books)(按书名);;
图书地图(BookMap)(books)作者(books);;
}

我会通过思考一个真正的库是如何工作的来解决这个问题

你可以去图书馆找到某位作者的书。
你可以去图书馆找到有特定名字的书

每本书本身都是一个不同的对象,有一个固定的名称和作者

因此,我将其建模为单个
Library
对象,其中包含多个
Book
对象

Library
界面允许您添加一本书、查找具有给定名称的所有书、查找给定作者的所有书等

Book
界面允许您查找一本书的名称和作者

图书馆将不得不管理一批藏书。我会尝试利用STL来收集我的书,因为这应该是你第一次去C++中的数据结构资源。 A允许您存储键/值对。
类似于书的名称或作者-您希望用来查找书籍的东西

值是书本身

在这个特定的例子中,我会选择一个,因为这允许使用多个相同的
。这是因为你可以从同一个作者那里得到多本书,你也可以得到多本同名的书

我想搜索一个
multimap
per
key
,所以这里我有2个-一个用于键入名称的书籍,一个用于键入作者的书籍

multimap
有一个成员函数,允许我们使用同一个键查找所有值

它返回两个迭代器,用指定的键描述一系列值

然后,您可以向
类添加额外的接口,该类允许您将所有书籍保存到一个文件中,或从一个文件等加载它们

如下所示:

书: 图书馆:
类库
{
使用BookMap=std::multimap;
公众:
void loadFromFile(const std::string和filename);
void saveToFile(const std::string和filename);
void addBook(std::string name,std::string author)
{
auto book=std::make_shared(std::move(name),std::move(author));
_图书按图书名称放置(图书->名称(),图书);
_图书由作者提供。放置(图书->作者(),图书);
}
std::pair findByName(const std::string&name)
{
按名称返回。相等范围(名称);
}
std::pair findbyauther(const std::string&author)
{
按作者返回图书。相等范围(作者);
}
私人:
图书地图(BookMap)(books)(按书名);;
图书地图(BookMap)(books)作者(books);;
}

您的
图书
对象只能容纳一本书。因此,我应该使用另一个类或其他东西来存储图书对象?“我应该使用数据成员作为作者和标题,还是只使用下面的函数更新文件?”不,这太可怕了。它将您的
书籍
类与控制台中的输入紧密耦合。提供getter/setter函数来封装私有数据,并从外部使用这些函数
#ifndef BOOKS_H
#define BOOKS_H

#include <string>

class Books
{
public:
    Books();
    ~Books() {};
    void createBook();
    //void getBook();


private:
    std::string mBookName;
    std::string mBookAuthor;
    int mId;
};
#endif 
void Books::createBook()
{
    std::string bookAuthor;
    std::string bookName;

    std::cout << "Enter the book Author\n";
    std::getline (std::cin, bookAuthor);
    //write to file bookAuthor
    std::cout << "Enter the book name\n";
    std::getline (std::cin, bookName);
    //write to file bookName
    mId++;
   //write to file mId;

}
int main()
{
   Book newBook;
   //some code to ask to user to enter an option to add a new book
   newBook.createBook();
   //rest of the code
   return 0;
}
class Book
{
public:
    Book(std::string author, std::string name)
        : _author(std::move(author))
        , _name(std::move(name))
    {}

    const std::string& author() const { return _author; }
    const std::string& name() const { return _name; }

private:
    const std::string _author;
    const std::string _name;
};
class Library
{
    using BookMap = std::multimap<std::string, std::shared_ptr<Book>>;

public:
    void loadFromFile(const std::string& filename);
    void saveToFile  (const std::string& filename);

    void addBook(std::string name, std::string author)
    {
        auto book = std::make_shared<Book>(std::move(name), std::move(author));

        _books_by_name.emplace(book->name(), book); 
        _books_by_author.emplace(book->author(), book); 
    }

    std::pair<BookMap::const_iterator, BookMap::const_iterator> findByName(const std::string& name)
    {
        return _books_by_name.equal_range(name);
    }

    std::pair<BookMap::const_iterator, BookMap::const_iterator> findByAuthor(const std::string& author)
    {
        return _books_by_author.equal_range(author);
    }

private:
    BookMap _books_by_name;
    BookMap _books_by_author;
}