Бібліотечна система
Бібліотечна система для управління книгами
|
Клас, що реалізує центральне сховище даних про книги Детальніше...
#include <Storage.hpp>
Загальнодоступні елементи | |
Storage () noexcept | |
Конструктор за замовчуванням | |
~Storage () | |
Деструктор | |
bool | addBook (std::unique_ptr< Book > book) |
Додає нову книгу до сховища | |
void | removeBook (std::string_view title) |
Видаляє книгу зі сховища за назвою | |
Book * | findBook (std::string_view title) const |
Здійснює лінійний пошук книги за назвою | |
const Book * | findBookIndexed (std::string_view title) const |
Здійснює індексований пошук книги за назвою | |
bool | saveToFile (const std::string &filename) const |
Зберігає колекцію книг у JSON файл | |
bool | loadFromFile (const std::string &filename) |
Завантажує колекцію книг з JSON файлу | |
const std::vector< std::unique_ptr< Book > > & | getBooks () const noexcept |
Повертає посилання на колекцію книг | |
bool | loadBooksFromJson (const std::string &filename) |
Завантажує книги з JSON файлу бази даних | |
void | setBestBookForAuthor (const std::string &authorName, const std::string &bookTitle) const |
Установлює кращу книгу для автора | |
template<typename Comparator > | |
void | mergeSortBooks (Comparator comp) |
Сортує книги за допомогою алгоритму Merge Sort. | |
void | sortByTitle () |
Сортує книги за назвою. | |
void | sortByNumPages () |
Сортує книги за кількістю сторінок. | |
void | sortByYearPublished () |
Сортує книги за роком видання. | |
Клас, що реалізує центральне сховище даних про книги
Реалізує патерн Singleton для забезпечення глобального доступу до сховища. Містить методи для додавання, видалення, пошуку та сортування книг, а також для роботи з файлами.
|
defaultnoexcept |
Конструктор за замовчуванням
Конструктор за замовчуванням.
Ініціалізує порожнє сховище книг.
|
defaultnoexcept |
Деструктор
Деструктор.
Очищає ресурси, виділені для зберігання книг.
bool Storage::addBook | ( | std::unique_ptr< Book > | book | ) |
Додає нову книгу до сховища
Додає книгу до сховища
book | Унікальний вказівник на об'єкт книги |
std::invalid_argument | якщо книга з такою назвою вже існує |
book | Вказівник на книгу для додавання (передається у власність) |
Немає |
Book * Storage::findBook | ( | std::string_view | title | ) | const |
Здійснює лінійний пошук книги за назвою
Знаходить книгу за назвою
title | Назва книги для пошуку |
BookNotFoundException | якщо книга не знайдена |
title | Назва книги для пошуку |
`BookNotFoundException` | Якщо книга не знайдена |
const Book * Storage::findBookIndexed | ( | std::string_view | title | ) | const |
Здійснює індексований пошук книги за назвою
Знаходить книгу за назвою з використанням індексу.
title | Назва книги для пошуку |
BookNotFoundException | якщо книга не знайдена |
title | Назва книги для пошуку. |
BookNotFoundException | - якщо книга з вказаною назвою не знайдена. |
|
inlinenoexcept |
Повертає посилання на колекцію книг
bool Storage::loadBooksFromJson | ( | const std::string & | filename | ) |
Завантажує книги з JSON файлу бази даних
Завантажує книги з JSON файлу бази даних у сховище.
filename | Шлях до файлу |
std::runtime_error | якщо не вдається відкрити файл |
InvalidDataException | якщо дані в файлі некоректні |
filename | Шлях до JSON файлу бази даних. |
nlohmann::json::exception | - при помилках парсингу JSON. |
std::ios_base::failure | - при неможливості відкрити або прочитати файл. |
Використовує внутрішню функцію loadBooksFromJsonDB()
для парсингу JSON. Книги додаються до сховища через addBook(). Повертає false, якщо не вдалося завантажити жодної книги.
bool Storage::loadFromFile | ( | const std::string & | filename | ) |
Завантажує колекцію книг з JSON файлу
Завантажує колекцію книг з JSON файлу у сховище.
filename | Шлях до файлу для завантаження |
std::runtime_error | при проблемах з відкриттям файлу |
InvalidDataException | при некоректному форматі даних |
filename | Шлях до JSON файлу з даними про книги. |
std::ios_base::failure | - при неможливості відкрити або прочитати файл. |
Перед завантаженням поточна колекція книг очищається. Кожен об'єкт Book створюється через метод fromJson(). Невалідні записи книг ігноруються.
|
inline |
Сортує книги за допомогою алгоритму Merge Sort.
Comparator | Тип компаратора для порівняння книг |
comp | Компаратор для порівняння книг (за замовчуванням — за назвою). |
void Storage::removeBook | ( | std::string_view | title | ) |
Видаляє книгу зі сховища за назвою
Видаляє книгу зі сховища за назвою.
title | Назва книги, яку потрібно видалити |
BookNotFoundException | якщо книга з вказаною назвою не знайдена |
title | Назва книги для видалення. |
BookNotFoundException | - якщо книга з вказаною назвою не знайдена. |
bool Storage::saveToFile | ( | const std::string & | filename | ) | const |
Зберігає колекцію книг у JSON файл
Серіалізує колекцію книг у JSON формат та зберігає у файл.
filename | Шлях до файлу для збереження |
std::runtime_error | при проблемах з відкриттям файлу |
filename | Шлях до файлу. |
nlohmann::json::exception,якщо | виникає помилка серіалізації. |
std::filesystem::filesystem_error,якщо | виникає помилка файлової системи. |
Формат JSON:
void Storage::setBestBookForAuthor | ( | const std::string & | authorName, |
const std::string & | bookTitle | ||
) | const |
Установлює кращу книгу для автора
Встановлює кращу книгу для вказаного автора.
authorName | Ім'я автора |
bookTitle | Назва книги |
authorName | Ім'я автора, для якого встановлюється краща книга. |
bookTitle | Назва книги, яку слід встановити як кращу. |
Шукає першу книгу автора у сховищі та встановлює вказану назву як його кращу книгу. Якщо автор не знайдений, нічого не робить.
void Storage::sortByNumPages | ( | ) |
Сортує книги за кількістю сторінок.
Використовує алгоритм сортування злиттям (mergeSortBooks
) з компаратором за кількістю сторінок.
void Storage::sortByTitle | ( | ) |
Сортує книги за назвою.
Використовує алгоритм сортування злиттям (mergeSortBooks
) з компаратором за назвою.
void Storage::sortByYearPublished | ( | ) |
Сортує книги за роком видання.
Використовує алгоритм сортування злиттям (mergeSortBooks
) з компаратором за роком видання.