Бібліотечна система
Бібліотечна система для управління книгами
Завантаження...
Пошук...
Нічого не знайдено
Клас Storage

Клас, що реалізує центральне сховище даних про книги Детальніше...

#include <Storage.hpp>

Загальнодоступні елементи

 Storage () noexcept
 Конструктор за замовчуванням
 
 ~Storage ()
 Деструктор
 
bool addBook (std::unique_ptr< Book > book)
 Додає нову книгу до сховища
 
void removeBook (std::string_view title)
 Видаляє книгу зі сховища за назвою
 
BookfindBook (std::string_view title) const
 Здійснює лінійний пошук книги за назвою
 
const BookfindBookIndexed (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 для забезпечення глобального доступу до сховища. Містить методи для додавання, видалення, пошуку та сортування книг, а також для роботи з файлами.

Застереження
Клас не є потокобезпечним. Для використання у багатопоточному середовищі необхідно застосовувати додаткові механізми синхронізації.

Конструктор(и)

◆ Storage()

Storage::Storage ( )
defaultnoexcept

Конструктор за замовчуванням

Конструктор за замовчуванням.

Післяумови
Створює порожнє сховище книг

Ініціалізує порожнє сховище книг.

◆ ~Storage()

Storage::~Storage ( )
defaultnoexcept

Деструктор

Деструктор.

Післяумови
Звільняє всі ресурси, виділені для зберігання книг

Очищає ресурси, виділені для зберігання книг.

Опис методів компонент

◆ addBook()

bool Storage::addBook ( std::unique_ptr< Book book)

Додає нову книгу до сховища

Додає книгу до сховища

Аргументи
bookУнікальний вказівник на об'єкт книги
Повертає
true - книга успішно додана, false - якщо виникла помилка
Обробка виняткових ситуацій
std::invalid_argumentякщо книга з такою назвою вже існує
Аргументи
bookВказівник на книгу для додавання (передається у власність)
Повертає
true - книга успішно додана, false - книга вже існує або досягнуто ліміт
Обробка виняткових ситуацій
Немає
Нотатки
Генерує унікальний ID для нової книги у форматі BK-XXXXXX

◆ findBook()

Book * Storage::findBook ( std::string_view  title) const

Здійснює лінійний пошук книги за назвою

Знаходить книгу за назвою

Аргументи
titleНазва книги для пошуку
Повертає
Неконстантний вказівник на знайдену книгу
Обробка виняткових ситуацій
BookNotFoundExceptionякщо книга не знайдена
Аргументи
titleНазва книги для пошуку
Повертає
Вказівник на знайдену книгу
Обробка виняткових ситуацій
`BookNotFoundException`Якщо книга не знайдена
Нотатки
Використовує лінійний пошук по колекції

◆ findBookIndexed()

const Book * Storage::findBookIndexed ( std::string_view  title) const

Здійснює індексований пошук книги за назвою

Знаходить книгу за назвою з використанням індексу.

Аргументи
titleНазва книги для пошуку
Повертає
Константний вказівник на знайдену книгу
Обробка виняткових ситуацій
BookNotFoundExceptionякщо книга не знайдена
Аргументи
titleНазва книги для пошуку.
Повертає
Константний вказівник на знайдену книгу.
Обробка виняткових ситуацій
BookNotFoundException- якщо книга з вказаною назвою не знайдена.

◆ getBooks()

const std::vector< std::unique_ptr< Book > > & Storage::getBooks ( ) const
inlinenoexcept

Повертає посилання на колекцію книг

Повертає
Константне посилання на вектор книг

◆ loadBooksFromJson()

bool Storage::loadBooksFromJson ( const std::string &  filename)

Завантажує книги з JSON файлу бази даних

Завантажує книги з JSON файлу бази даних у сховище.

Аргументи
filenameШлях до файлу
Повертає
true якщо завантаження успішне
Обробка виняткових ситуацій
std::runtime_errorякщо не вдається відкрити файл
InvalidDataExceptionякщо дані в файлі некоректні
Аргументи
filenameШлях до JSON файлу бази даних.
Повертає
true - якщо завантаження пройшло успішно, false - у разі помилки.
Обробка виняткових ситуацій
nlohmann::json::exception- при помилках парсингу JSON.
std::ios_base::failure- при неможливості відкрити або прочитати файл.

Використовує внутрішню функцію loadBooksFromJsonDB() для парсингу JSON. Книги додаються до сховища через addBook(). Повертає false, якщо не вдалося завантажити жодної книги.

◆ loadFromFile()

bool Storage::loadFromFile ( const std::string &  filename)

Завантажує колекцію книг з JSON файлу

Завантажує колекцію книг з JSON файлу у сховище.

Аргументи
filenameШлях до файлу для завантаження
Повертає
true - операція успішна, false - помилка
Обробка виняткових ситуацій
std::runtime_errorпри проблемах з відкриттям файлу
InvalidDataExceptionпри некоректному форматі даних
Аргументи
filenameШлях до JSON файлу з даними про книги.
Повертає
true - якщо завантаження пройшло успішно, false - у разі помилки.
Обробка виняткових ситуацій
std::ios_base::failure- при неможливості відкрити або прочитати файл.

Перед завантаженням поточна колекція книг очищається. Кожен об'єкт Book створюється через метод fromJson(). Невалідні записи книг ігноруються.

◆ mergeSortBooks()

template<typename Comparator >
void Storage::mergeSortBooks ( Comparator  comp)
inline

Сортує книги за допомогою алгоритму Merge Sort.

Параметри шаблона
ComparatorТип компаратора для порівняння книг
Аргументи
compКомпаратор для порівняння книг (за замовчуванням — за назвою).
Післяумови
Книги в сховищі відсортовані за вказаним компаратором

◆ removeBook()

void Storage::removeBook ( std::string_view  title)

Видаляє книгу зі сховища за назвою

Видаляє книгу зі сховища за назвою.

Аргументи
titleНазва книги, яку потрібно видалити
Обробка виняткових ситуацій
BookNotFoundExceptionякщо книга з вказаною назвою не знайдена
Аргументи
titleНазва книги для видалення.
Обробка виняткових ситуацій
BookNotFoundException- якщо книга з вказаною назвою не знайдена.
Післяумови
Всі індекси книг, що йдуть після видаленої, оновлюються.

◆ saveToFile()

bool Storage::saveToFile ( const std::string &  filename) const

Зберігає колекцію книг у JSON файл

Серіалізує колекцію книг у JSON формат та зберігає у файл.

Аргументи
filenameШлях до файлу для збереження
Повертає
true - операція успішна, false - помилка
Обробка виняткових ситуацій
std::runtime_errorпри проблемах з відкриттям файлу
Аргументи
filenameШлях до файлу.
Повертає
true, якщо збереження успішне; false у випадку помилки.
Обробка виняткових ситуацій
nlohmann::json::exception,якщовиникає помилка серіалізації.
std::filesystem::filesystem_error,якщовиникає помилка файлової системи.

Формат JSON:

[
{
"Title": "string",
"Book Id": "BK-XXXXXX",
"ISBN13": "string",
"Publisher": "string",
"Number of Pages": "integer",
"Year Published": "integer",
"Author": "string"
}
]

◆ setBestBookForAuthor()

void Storage::setBestBookForAuthor ( const std::string &  authorName,
const std::string &  bookTitle 
) const

Установлює кращу книгу для автора

Встановлює кращу книгу для вказаного автора.

Аргументи
authorNameІм'я автора
bookTitleНазва книги
authorNameІм'я автора, для якого встановлюється краща книга.
bookTitleНазва книги, яку слід встановити як кращу.

Шукає першу книгу автора у сховищі та встановлює вказану назву як його кращу книгу. Якщо автор не знайдений, нічого не робить.

◆ sortByNumPages()

void Storage::sortByNumPages ( )

Сортує книги за кількістю сторінок.

Післяумови
Книги в сховищі відсортовані за кількістю сторінок.

Використовує алгоритм сортування злиттям (mergeSortBooks) з компаратором за кількістю сторінок.

Післяумови
Книги в сховищі відсортовані за кількістю сторінок. @complexity O(N log N), де N - кількість книг.

◆ sortByTitle()

void Storage::sortByTitle ( )

Сортує книги за назвою.

Післяумови
Книги в сховищі відсортовані за назвою.

Використовує алгоритм сортування злиттям (mergeSortBooks) з компаратором за назвою.

Післяумови
Книги в сховищі відсортовані за назвою. @complexity O(N log N), де N - кількість книг.

◆ sortByYearPublished()

void Storage::sortByYearPublished ( )

Сортує книги за роком видання.

Післяумови
Книги в сховищі відсортовані за роком видання.

Використовує алгоритм сортування злиттям (mergeSortBooks) з компаратором за роком видання.

Післяумови
Книги в сховищі відсортовані за роком видання. @complexity O(N log N), де N - кількість книг.

Документація цих класів була створена з файлів: