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

Клас, що представляє книгу в бібліотечній системі Детальніше...

#include <Book.hpp>

Схема успадкувань для Book
Діаграма зв'язків класу Book:

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

 Book ()
 Конструктор за замовчуванням
 
 Book (std::string_view title, std::string_view bookId)
 Конструктор з базовими параметрами
 
 Book (std::string_view title, std::string_view bookId, std::string_view isbn, std::string_view publisher, int numPages, int yearPublished)
 Конструктор з усіма параметрами
 
void addAuthor (const Author &author)
 Додає автора до списку авторів книги
 
std::string getTitle () const noexcept
 Отримує назву книги
 
const std::vector< Author > & getAuthors () const noexcept
 Отримує список авторів книги
 
void setTitle (std::string_view newTitle)
 Встановлює нову назву книги
 
void display () const override
 Виводить детальну інформацію про книгу у консоль @override.
 
double calculateStat () const noexcept override
 Обчислює статистичні дані про книгу @override.
 
bool search (const std::string &keyword) const override
 Виконує пошук за ключовим словом
 
void fromJson (const nlohmann::json &jsonData)
 Завантажує дані книги з JSON об'єкту
 
std::string getISBN () const noexcept
 Отримати ISBN книги
 
std::string getPublisher () const noexcept
 Отримати видавця книги
 
int getNumPages () const noexcept
 Отримати кількість сторінок
 
int getYearPublished () const noexcept
 Отримати рік видання
 
void setISBN (std::string_view newISBN) noexcept
 Встановити новий ISBN.
 
void setPublisher (std::string_view newPublisher) noexcept
 Встановити нового видавця
 
void setNumPages (int newNumPages) noexcept
 Встановити нову кількість сторінок
 
void setYearPublished (int newYearPublished) noexcept
 Встановити новий рік видання
 
void setAuthors (const std::vector< Author > &authors) noexcept
 Встановити новий список авторів
 
bool setBestBookForAuthor (const std::string &authorName, const std::string &bookTitle)
 Встановлює найкращу книгу для автора
 
- Загальнодоступні елементи успадковано з AbstractCollection
 AbstractCollection (std::string_view id, std::string_view name)
 Конструктор з параметрами
 
virtual ~AbstractCollection ()=default
 Віртуальний деструктор
 
std::string getId () const noexcept
 Отримує унікальний ідентифікатор колекції
 
std::string getName () const noexcept
 Отримує назву колекції
 
virtual void setId (std::string_view newId) noexcept
 Встановлює новий ідентифікатор колекції
 
void setName (std::string_view newName) noexcept
 Встановлює нову назву колекції
 

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

static std::optional< BookcreateFromJson (const nlohmann::json &item)
 Створює книгу з JSON даних
 

Детальний опис

Клас, що представляє книгу в бібліотечній системі

Реалізує всі необхідні операції для роботи з книгою:

  • Зберігання основних даних
  • Валідація вхідних параметрів
  • Взаємодія з авторами
  • Робота з JSON форматом
Інваріант
  • ISBN має відповідати формату ISBN-13
  • Кількість сторінок не може бути від'ємною (m_numPages >= 0)
  • Рік видання не може бути меншим за 1455 (m_yearPublished >= 1455)

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

◆ Book() [1/3]

Book::Book ( )

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

Післяумови
Всі поля ініціалізуються значеннями за замовчуванням:
  • Назва: ""
  • ISBN: ""
  • Видавець: ""
  • Кількість сторінок: 0
  • Рік видання: 1455

    Ініціалізує всі поля значеннями за замовчуванням:

  • ID: "0"
  • Назва: порожній рядок
  • ISBN: порожній рядок
  • Видавець: порожній рядок
  • Кількість сторінок: 0
  • Рік видання: 0

◆ Book() [2/3]

Book::Book ( std::string_view  title,
std::string_view  bookId 
)

Конструктор з базовими параметрами

Конструктор з базовими параметрами.

Аргументи
titleНазва книги (не може бути пустою)
bookIdУнікальний ідентифікатор у форматі "BK-XXXXXX"
Обробка виняткових ситуацій
InvalidDataExceptionЯкщо назва пуста
Аргументи
titleНазва книги.
bookIdІдентифікатор книги.

Ініціалізує книгу з переданою назвою та ID. Інші поля залишаються порожніми або нульовими.

◆ Book() [3/3]

Book::Book ( std::string_view  title,
std::string_view  bookId,
std::string_view  isbn,
std::string_view  publisher,
int  numPages,
int  yearPublished 
)

Конструктор з усіма параметрами

Аргументи
titleНазва книги (не може бути пустою)
bookIdУнікальний ідентифікатор у форматі "BK-XXXXXX"
isbnISBN-13 (має відповідати формату)
publisherНазва видавництва
numPagesКількість сторінок (>= 0)
yearPublishedРік видання (>= 1455)
Обробка виняткових ситуацій
InvalidDataExceptionЯкщо:
  • назва пуста
  • кількість сторінок < 0
  • рік видання < 1455
  • ISBN не відповідає формату
Аргументи
titleНазва книги
bookIdУнікальний ідентифікатор книги
isbnISBN книги (13 цифр)
publisherНазва видавництва
numPagesКількість сторінок (≥1)
yearPublishedРік видання (≥1455)
Обробка виняткових ситуацій
InvalidDataExceptionЯкщо:
  • numPages < MIN_PAGES
  • yearPublished < MIN_YEAR_PUBLISHED

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

◆ addAuthor()

void Book::addAuthor ( const Author author)

Додає автора до списку авторів книги

Додає автора до книги

Аргументи
authorОб'єкт автора для додавання
Післяумови
Автор додається до внутрішнього списку m_authors
Аргументи
authorОб'єкт автора для додавання
Нотатки
Одночасно додає посилання на книгу до списку робіт автора

◆ calculateStat()

double Book::calculateStat ( ) const
overridevirtualnoexcept

Обчислює статистичні дані про книгу @override.

Обчислює статистичну інформацію про книгу

Повертає
Кількість авторів книги (тип double для уніфікації)
Кількість авторів книги (у вигляді дійсного числа double)

Реалізує AbstractCollection.

◆ createFromJson()

std::optional< Book > Book::createFromJson ( const nlohmann::json &  item)
static

Створює книгу з JSON даних

Метод для створення об'єкта Book з JSON даних

Аргументи
itemJSON об'єкт
Повертає
std::optional<Book> (пусте значення при помилці)
Аргументи
itemJSON об'єкт, що містить дані книги
Повертає
std::optional<Book> Об'єкт книги або std::nullopt у разі помилки
Обробка виняткових ситуацій
nlohmann::json::exceptionУ разі проблем з парсингом JSON
Нотатки
Якщо Book Id відсутній, генерується тимчасовий ідентифікатор
Викликає Author::processJsonData для обробки даних автора

◆ display()

void Book::display ( ) const
overridevirtual

Виводить детальну інформацію про книгу у консоль @override.

Виводить повну інформацію про книгу у стандартний вивід

Формат виводу:

  1. Ідентифікатор книги
  2. Повна назва
  3. ISBN
  4. Видавець
  5. Кількість сторінок
  6. Рік видання
  7. Список авторів (у форматі "Ім'я Прізвище")

    Формат виводу:

  • ID книги
  • Назва
  • ISBN
  • Видавець
  • Кількість сторінок
  • Рік видання
  • Список авторів (або повідомлення про їх відсутність)

Реалізує AbstractCollection.

◆ fromJson()

void Book::fromJson ( const nlohmann::json &  jsonData)

Завантажує дані книги з JSON об'єкту

Аргументи
jsonDataВхідний JSON об'єкт
Обробка виняткових ситуацій
InvalidDataExceptionЯкщо:
  • Відсутня обов'язкова назва

Завантажує дані з JSON об'єкту

Аргументи
jsonDataJSON об'єкт

Обробляє поля:

  • Title (обов'язкове)
  • Book Id (опціональне)
  • ISBN13
  • Publisher
  • Number of Pages
  • Year Published
  • Author
Обробка виняткових ситуацій
InvalidDataExceptionЯкщо відсутня назва
Аргументи
jsonDataJSON об'єкт з даними книги
Обробка виняткових ситуацій
InvalidDataExceptionЯкщо:
  • Відсутня назва книги
  • Некоректні числові значення (наприклад, для кількості сторінок)

    Обробляє наступні поля JSON:

  • Title (обов'язкове)
  • Book Id (опціональне)
  • ISBN13
  • Publisher
  • Number of Pages
  • Year Published
  • Author

◆ getAuthors()

const std::vector< Author > & Book::getAuthors ( ) const
inlinenoexcept

Отримує список авторів книги

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

◆ getISBN()

std::string Book::getISBN ( ) const
inlinenoexcept

Отримати ISBN книги

Повертає
ISBN книги

◆ getNumPages()

int Book::getNumPages ( ) const
inlinenoexcept

Отримати кількість сторінок

Повертає
Кількість сторінок

◆ getPublisher()

std::string Book::getPublisher ( ) const
inlinenoexcept

Отримати видавця книги

Повертає
Видавець книги

◆ getTitle()

std::string Book::getTitle ( ) const
inlinenoexcept

Отримує назву книги

Повертає
Константний рядок з назвою книги

◆ getYearPublished()

int Book::getYearPublished ( ) const
inlinenoexcept

Отримати рік видання

Повертає
Рік видання

◆ search()

bool Book::search ( const std::string &  keyword) const
overridevirtual

Виконує пошук за ключовим словом

Виконує пошук ключового слова у полях книги

Аргументи
keywordКлючове слово для пошуку @override
Повертає
true, якщо ключове слово знайдено в:
  • Назві книги
  • ISBN
  • Назві видавництва
  • Іменах авторів
Нотатки
Пошук нечутливий до регістру
Аргументи
keywordРядок для пошуку
Повертає
true - якщо знайдено збіг у будь-якому полі

Пошук виконується без урахування регістру у наступних полях:

  • Назва
  • ISBN
  • Видавець
  • Імена авторів @complexity O(n), де n - кількість авторів

Реалізує AbstractCollection.

◆ setAuthors()

void Book::setAuthors ( const std::vector< Author > &  authors)
inlinenoexcept

Встановити новий список авторів

Аргументи
authorsНові автори

◆ setBestBookForAuthor()

bool Book::setBestBookForAuthor ( const std::string &  authorName,
const std::string &  bookTitle 
)
inline

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

Аргументи
authorNameІм'я автора
bookTitleНазва книги
Повертає
true якщо автор знайдений та книга встановлена

◆ setISBN()

void Book::setISBN ( std::string_view  newISBN)
inlinenoexcept

Встановити новий ISBN.

Аргументи
newISBNНовий ISBN

◆ setNumPages()

void Book::setNumPages ( int  newNumPages)
inlinenoexcept

Встановити нову кількість сторінок

Аргументи
newNumPagesНова кількість сторінок

◆ setPublisher()

void Book::setPublisher ( std::string_view  newPublisher)
inlinenoexcept

Встановити нового видавця

Аргументи
newPublisherНовий видавець

◆ setTitle()

void Book::setTitle ( std::string_view  newTitle)
inline

Встановлює нову назву книги

Аргументи
newTitleНова назва книги (не може бути пустою)
Післяумови
Оновлює внутрішнє поле m_title та ім'я в AbstractCollection

◆ setYearPublished()

void Book::setYearPublished ( int  newYearPublished)
inlinenoexcept

Встановити новий рік видання

Аргументи
newYearPublishedНовий рік видання

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