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

Головний модуль програми управління бібліотекою Детальніше...

#include <algorithm>
#include <format>
#include <iomanip>
#include <iostream>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <thread>
#include <vector>
#include "AbstractCollection.hpp"
#include "Author.hpp"
#include "Book.hpp"
#include "CustomExceptions.hpp"
#include "Path.hpp"
#include "SearchUtility.hpp"
#include "Storage.hpp"
#include "Utils.hpp"
#include "ftxui/component/component.hpp"
#include "ftxui/component/screen_interactive.hpp"
#include "ftxui/dom/elements.hpp"
#include "ftxui/screen/screen.hpp"
Діаграма включених заголовочних файлів для main.cpp:

Класи

struct  SortingKeyPressContext
 Контекст для обробки подій клавіатури у меню сортування. Детальніше...
 

Функції

void displayAuthorInfo (const std::string &authorName, const Storage &library, Elements &resultsElements)
 Відображає інформацію про автора в результатах UI.
 
void displayAuthorStats (const std::string &authorName, const Storage &library, Elements &resultsElements)
 Відображає статистику по конкретному автору в результатах UI.
 
void displayGeneralStats (const Storage &library, Elements &resultsElements)
 Відображає загальну статистику авторів в результатах UI.
 
void printAuthors (const std::vector< Author > &authors)
 Виводить інформацію про авторів у консоль.
 
template<typename T >
void searchAndDisplayEntities (const std::vector< std::unique_ptr< T > > &entities, const std::string &keyword)
 Шаблонна функція для пошуку та відображення сутностей.
 
int getMenuChoice ()
 Відображає головне меню програми.
 
void handleAuthorStats (const Storage &library)
 Обробляє статистику авторів.
 
void handleFocusChange (const Component &inputTitle, const Component &inputISBN, const Component &inputPublisher, const Component &inputNumPages, const Component &inputYearPublished, const Component &buttonAdd, const Component &buttonBack)
 Змінює фокус між полями введення та кнопками у формах FTXUI.
 
Element renderBookForm (const Component &inputTitle, const Component &inputISBN, const Component &inputPublisher, const Component &inputNumPages, const Component &inputYearPublished, const Component &buttonAdd, const Component &buttonBack)
 Відображає форму додавання нової книги
 
void handleAddBook (Storage &library)
 
Elements render_single_book (const Book *book, int index)
 Створює елементи для відображення інформації про одну книгу
 
void handleShowAllBooks (const Storage &library)
 Відображає пагінований список усіх книг у бібліотеці
 
void displayBookInfo (const Book *book)
 Виводить детальну інформацію про книгу у консоль
 
void processAuthors (const Book *book, const std::string &authorName, bool &found)
 Шукає книги за автором та виводить результати
 
void handleRemoveBook (Storage &library)
 Видаляє книгу з бібліотеки за назвою
 
std::vector< std::unique_ptr< Author > > collectAllAuthors (const Storage &library)
 Збирає всіх авторів з усіх книг у бібліотеці
 
void processBookSearch (const std::string &title, const Storage &library, Color &resultColor, bool &showResult, Elements &resultElements)
 Обробляє пошук книги та заповнює елементи результатів.
 
void handleSearchBooks (const Storage &library)
 Обробляє інтерфейс користувача для пошуку книг.
 
void handleBestBookLogic (const std::string &authorName, const std::string &bookTitle, std::string &resultMessage, Color &resultColor, bool &showResult, const Storage &library)
 Обробляє логіку встановлення "кращої" книги для автора.
 
ftxui::Element renderBestBookElements (const ftxui::Component &inputAuthorNameComp, const ftxui::Component &inputBookTitleComp, const ftxui::Component &buttonSetComp, const ftxui::Component &buttonBackComp, bool showResultParam, const std::string &resultMessageParam, ftxui::Color resultColorParam)
 Рендерить елементи інтерфейсу для встановлення "кращої" книги автора.
 
void handleBestBookSelection (const Storage &library)
 Встановлює кращу книгу для вказаного автора
 
void renderAuthorInfo (const std::string &authorName, const Storage &library, Elements &elements)
 Рендерить елементи UI для відображення інформації про автора.
 
void handleAuthorInfo (const Storage &library)
 Переглядає інформацію про автора
 
void processAuthorBook (const Book *book, const Author *author, Elements &authorElements, bool &hasBooks)
 Перевіряє, чи книга належить автору, і додає її до списку
 
Elements renderAuthorBooks (const Author *author, const Storage &library)
 Створює елементи для відображення інформації про книги автора
 
bool hasAuthor (const Book *book, const Author *author)
 Перевіряє, чи вказаний автор є одним з авторів даної книги.
 
template<typename CreateBookElementsFunc >
void processFoundBook (const Book *book, Elements &authorElements, bool &hasBooks, CreateBookElementsFunc createBookElements)
 Обробляє знайдені книги автора та додає їх до елементів для відображення
 
bool processBookForAuthor (const Book *book, const Author *author, Elements &authorElements, bool &hasBooks, const std::function< Elements(const Book *)> &createBookElements, std::set< std::string, std::less<> > &uniqueBooks, int &totalBooks)
 Обробляє книгу для пошуку та додає її до результатів, якщо вона відповідає критеріям
 
void renderSearchResults (const Storage &library, const std::string &authorName, Elements &resultsElements)
 Рендерить результати пошуку книг за автором.
 
void processAuthorSearchResults (const std::string &authorName, Elements &resultsElements, const Storage &library, bool &showResults)
 Обробляє пошук книг за автором та заповнює результати
 
void handleSearchByAuthor (const Storage &library)
 Обробляє пошук книг за автором з використанням FTXUI.
 
void performSortingAction (Storage &library, int choice, std::string &statusMessage, Color &statusColor)
 Виконує сортування книг за обраним критерієм
 
bool handleSortingKeyPress (SortingKeyPressContext &context, const Event &event)
 Обробляє події клавіатури для меню сортування.
 
int getSortingMenuChoice (Storage &library)
 Відображає меню вибору критерію сортування та отримує вибір користувача.
 
void handleSortingMenu (Storage &library)
 Обробляє вибір сортування з підменю.
 
void handleButtonSelectAction (const std::string &authorName, bool &showResults, Elements &resultsElements, const Storage &library, int selected)
 Обробляє дію вибору пункту в меню інформації та статистики авторів.
 
bool handleAuthorStatsKeyEvent (const int &selected, const std::string &authorName, bool &showResults, Elements &resultsElements, const Storage &library, const Event &event)
 Обробляє події клавіатури для меню статистики авторів
 
void handleAuthorStatsAndInfo (const Storage &library)
 Обробляє меню інформації та статистики авторів з використанням FTXUI.
 
void addAuthorInfoToResults (const Author *author, const Storage &library, Elements &resultsElements)
 Додає інформацію про автора до елементів для відображення
 
int calculateTotalPagesForAuthor (const Author &author, const Storage &library)
 Обчислює загальну кількість сторінок для автора
 
void calculateAuthorStats (const Author *author, const Storage &library, int &totalBooks, int &totalPages, std::vector< std::string > &bookTitles)
 Обчислює статистику для автора (кількість книг, сторінок, назви книг)
 
void addBookTitlesToStats (const std::vector< std::string > &bookTitles, Elements &authorStats)
 Додає список книг автора до елементів для відображення
 
void handleSaveToFile (const Storage &library)
 Обробляє збереження бібліотеки у файл.
 
void handleLoadFromFile (Storage &library)
 Обробляє інтерактивне завантаження бібліотеки з файлу за допомогою FTXUI.
 
int main ()
 

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

Головний модуль програми управління бібліотекою

Реалізує інтерфейс користувача для роботи з бібліотекою книг:

  • Додавання/видалення книг
  • Пошук та сортування
  • Робота з авторами
  • Збереження/завантаження даних

Опис функцій

◆ addAuthorInfoToResults()

void addAuthorInfoToResults ( const Author author,
const Storage library,
Elements &  resultsElements 
)

Додає інформацію про автора до елементів для відображення

Аргументи
authorВказівник на автора
libraryПосилання на бібліотеку
resultsElementsЕлементи для відображення

◆ addBookTitlesToStats()

void addBookTitlesToStats ( const std::vector< std::string > &  bookTitles,
Elements &  authorStats 
)

Додає список книг автора до елементів для відображення

Аргументи
bookTitlesСписок назв книг
authorStatsЕлементи для відображення

◆ calculateAuthorStats()

void calculateAuthorStats ( const Author author,
const Storage library,
int &  totalBooks,
int &  totalPages,
std::vector< std::string > &  bookTitles 
)

Обчислює статистику для автора (кількість книг, сторінок, назви книг)

Аргументи
authorВказівник на автора
libraryПосилання на бібліотеку
totalBooksЛічильник книг автора
totalPagesЛічильник сторінок автора
bookTitlesСписок назв книг автора

◆ calculateTotalPagesForAuthor()

int calculateTotalPagesForAuthor ( const Author author,
const Storage library 
)

Обчислює загальну кількість сторінок для автора

Аргументи
authorАвтор
libraryБібліотека
Повертає
Загальна кількість сторінок

◆ collectAllAuthors()

std::vector< std::unique_ptr< Author > > collectAllAuthors ( const Storage library)

Збирає всіх авторів з усіх книг у бібліотеці

Аргументи
libraryКонстантне посилання на об'єкт сховища книг
Повертає
Вектор унікальних вказівників на об'єкти Author

Проходить по всіх книгах у бібліотеці та додає їх авторів до результуючого вектора. Кожен автор зберігається як окремий об'єкт у купі за допомогою unique_ptr.

Нотатки
Функція створює нові копії авторів, а не повертає посилання на існуючі об'єкти

◆ displayAuthorInfo()

void displayAuthorInfo ( const std::string &  authorName,
const Storage library,
Elements &  resultsElements 
)

Відображає інформацію про автора в результатах UI.

Відображає інформацію про автора

Аргументи
authorNameІм'я автора для відображення.
libraryПосилання на об'єкт бібліотеки.
[out]resultsElementsЕлементи FTXUI для додавання результатів.

Функція шукає автора за іменем, збирає його книги та форматує інформацію для відображення.

Аргументи
authorNameІм'я автора
libraryПосилання на бібліотеку
resultsElementsЕлементи для відображення

◆ displayAuthorStats()

void displayAuthorStats ( const std::string &  authorName,
const Storage library,
Elements &  resultsElements 
)

Відображає статистику по конкретному автору в результатах UI.

Відображає статистику по конкретному автору

Аргументи
authorNameІм'я автора для статистики.
libraryПосилання на об'єкт бібліотеки.
[out]resultsElementsЕлементи FTXUI для додавання результатів.

Функція обчислює та форматує статистику (кількість книг, сторінок) для вказаного автора.

Аргументи
authorNameІм'я автора
libraryПосилання на бібліотеку
resultsElementsЕлементи для відображення

◆ displayBookInfo()

void displayBookInfo ( const Book book)

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

Аргументи
bookВказівник на об'єкт книги для відображення (може бути nullptr)

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

  • Заголовок "Книга знайдена"
  • Назва книги
  • Список авторів (якщо є) у форматі "Ім'я Прізвище"
  • Повідомлення "Автори не вказані" якщо авторів немає
    Нотатки
    Якщо book == nullptr, функція нічого не виводить

◆ displayGeneralStats()

void displayGeneralStats ( const Storage library,
Elements &  resultsElements 
)

Відображає загальну статистику авторів в результатах UI.

Відображає загальну статистику авторів

Аргументи
libraryПосилання на об'єкт бібліотеки.
[out]resultsElementsЕлементи FTXUI для додавання результатів.

Функція обчислює та форматує загальну статистику (кількість унікальних авторів, середня кількість книг/сторінок на автора).

Аргументи
libraryПосилання на бібліотеку
resultsElementsЕлементи для відображення

◆ getMenuChoice()

int getMenuChoice ( )

Відображає головне меню програми.

Меню містить наступні опції:

  • Додати нову книгу.
  • Показати всі книги.
  • Пошук книги.
  • Пошук книг за автором.
  • Сортувати книги за назвою.
  • Зберегти бібліотеку у файл.
  • Завантажити бібліотеку з файлу.
  • Встановити кращу книгу автора.
  • Статистика авторів.
  • Видалити книгу із сховища.
  • Переглянути інформацію про автора.
  • Вихід.
    Повертає
    Ціле число, що відповідає вибору користувача (0 для виходу).

◆ getSortingMenuChoice()

int getSortingMenuChoice ( Storage library)

Відображає меню вибору критерію сортування та отримує вибір користувача.

Аргументи
libraryПосилання на об'єкт бібліотеки.

◆ handleAuthorInfo()

void handleAuthorInfo ( const Storage library)

Переглядає інформацію про автора

Аргументи
libraryПосилання на об'єкт бібліотеки

Виконує наступні дії:

  1. Запитує у користувача ім'я автора
  2. Шукає книги автора
  3. Виводить інформацію про автора та список написаних ним книг
    Обробка виняткових ситуацій
    BookNotFoundExceptionЯкщо книга з вказаною назвою не знайдена
    Нотатки
    Використовує метод getBooksByAuthor() для отримання книг автора

◆ handleAuthorStats()

void handleAuthorStats ( const Storage library)

Обробляє статистику авторів.

Аргументи
libraryПосилання на об'єкт бібліотеки.

Формула розрахунку: [ \text{Середнє} = \frac{\sum_{i=1}^{n} \text{books}_i}{n} ]

◆ handleAuthorStatsAndInfo()

void handleAuthorStatsAndInfo ( const Storage library)

Обробляє меню інформації та статистики авторів з використанням FTXUI.

Аргументи
libraryПосилання на об'єкт бібліотеки.

◆ handleAuthorStatsKeyEvent()

bool handleAuthorStatsKeyEvent ( const int &  selected,
const std::string &  authorName,
bool &  showResults,
Elements &  resultsElements,
const Storage library,
const Event &  event 
)

Обробляє події клавіатури для меню статистики авторів

Аргументи
selectedВибір пункту меню
authorNameІм'я автора
showResultsПрапорець відображення результатів
resultsElementsЕлементи результатів
libraryБібліотека
eventПодія клавіатури
Повертає
true, якщо подія оброблена

◆ handleBestBookLogic()

void handleBestBookLogic ( const std::string &  authorName,
const std::string &  bookTitle,
std::string &  resultMessage,
Color &  resultColor,
bool &  showResult,
const Storage library 
)

Обробляє логіку встановлення "кращої" книги для автора.

Ця функція виконує перевірку вхідних даних (ім'я автора та назва книги) і намагається встановити вказану книгу як "кращу" для даного автора в бібліотеці. Вона оновлює повідомлення про результат, його колір та прапорець відображення результату на основі успішності операції або виникнення помилок.

Аргументи
authorNameІм'я автора, для якого встановлюється краща книга.
bookTitleНазва книги, яку потрібно встановити як кращу.
resultMessageПосилання на рядок, який буде містити повідомлення про результат операції.
resultColorПосилання на колір, який буде використаний для відображення повідомлення про результат.
showResultПосилання на булевий прапорець, який вказує, чи потрібно відображати результат.
libraryКонстантне посилання на об'єкт сховища (бібліотеки), в якому відбувається оновлення.
Нотатки
Якщо authorName або bookTitle порожні, встановлюється повідомлення про помилку.
Обробка виняткових ситуацій
BookNotFoundExceptionЯкщо книга не знайдена або не належить вказаному автору під час виклику library.setBestBookForAuthor.

◆ handleBestBookSelection()

void handleBestBookSelection ( const Storage library)

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

Аргументи
libraryПосилання на об'єкт бібліотеки

Виконує наступні дії:

  1. Запитує у користувача ім'я автора
  2. Запитує назву книги, яку слід встановити як кращу
  3. Викликає метод setBestBookForAuthor() для оновлення даних
    Нотатки
    Якщо автор не знайдений або книга не належить автору, нічого не робить

◆ handleButtonSelectAction()

void handleButtonSelectAction ( const std::string &  authorName,
bool &  showResults,
Elements &  resultsElements,
const Storage library,
int  selected 
)

Обробляє дію вибору пункту в меню інформації та статистики авторів.

Аргументи
authorNameІм'я автора.
[out]showResultsПрапорець для відображення результатів.
[out]resultsElementsЕлементи FTXUI для додавання результатів.
libraryПосилання на об'єкт бібліотеки.
selectedІндекс обраного пункту меню.

Викликає відповідні функції для відображення інформації, статистики автора або загальної статистики.

◆ handleFocusChange()

void handleFocusChange ( const Component &  inputTitle,
const Component &  inputISBN,
const Component &  inputPublisher,
const Component &  inputNumPages,
const Component &  inputYearPublished,
const Component &  buttonAdd,
const Component &  buttonBack 
)

Змінює фокус між полями введення та кнопками у формах FTXUI.

Аргументи
inputTitleКомпонент поля введення для назви книги.
inputISBNКомпонент поля введення для ISBN.
inputPublisherКомпонент поля введення для видавця.
inputNumPagesКомпонент поля введення для кількості сторінок.
inputYearPublishedКомпонент поля введення для року видання.
buttonAddКомпонент кнопки "Додати".
buttonBackКомпонент кнопки "Повернутися".

Використовується для навігації по формі за допомогою клавіші Enter.

◆ handleLoadFromFile()

void handleLoadFromFile ( Storage library)

Обробляє інтерактивне завантаження бібліотеки з файлу за допомогою FTXUI.

Функція створює та відображає повноекранний інтерфейс користувача, що дозволяє користувачеві ввести назву файлу для завантаження. Після натискання кнопки "Завантажити" виконується спроба завантажити дані бібліотеки з вказаного файлу. Відображається повідомлення про успіх або помилку завантаження. Користувач може повернутися до попереднього меню за допомогою кнопки "Повернутися".

Аргументи
libraryПосилання на об'єкт Storage, в який буде завантажено дані бібліотеки.

◆ handleRemoveBook()

void handleRemoveBook ( Storage library)

Видаляє книгу з бібліотеки за назвою

Аргументи
libraryПосилання на об'єкт сховища книг

Виконує наступні дії:

  1. Запитує у користувача назву книги для видалення
  2. Викликає метод removeBook() сховища
  3. Виводить повідомлення про успішне видалення або помилку
    Обробка виняткових ситуацій
    BookNotFoundExceptionЯкщо книга з вказаною назвою не знайдена
    Нотатки
    Обробляє виняток BookNotFoundException, виводячи повідомлення про помилку

◆ handleSaveToFile()

void handleSaveToFile ( const Storage library)

Обробляє збереження бібліотеки у файл.

Ця функція створює інтерактивний екран, який дозволяє користувачеві ввести назву файлу для збереження поточної бібліотеки. Вона відображає поле вводу, кнопку "Зберегти" та кнопку "Повернутися". Після спроби збереження відображається повідомлення про успіх або помилку.

Аргументи
libraryПосилання на об'єкт Storage, що містить дані бібліотеки для збереження.

◆ handleSearchBooks()

void handleSearchBooks ( const Storage library)

Обробляє інтерфейс користувача для пошуку книг.

Ця функція створює інтерактивний екран FTXUI, який дозволяє користувачеві ввести назву книги для пошуку в бібліотеці. Вона відображає поле введення, кнопки "Пошук" та "Назад", а також результати пошуку.

Аргументи
libraryПосилання на об'єкт сховища (бібліотеки), в якому здійснюється пошук.

◆ handleSearchByAuthor()

void handleSearchByAuthor ( const Storage library)

Обробляє пошук книг за автором з використанням FTXUI.

Аргументи
libraryПосилання на об'єкт бібліотеки

◆ handleShowAllBooks()

void handleShowAllBooks ( const Storage library)

Відображає пагінований список усіх книг у бібліотеці

Аргументи
libraryКонстантне посилання на об'єкт сховища книг

◆ handleSortingKeyPress()

bool handleSortingKeyPress ( SortingKeyPressContext context,
const Event &  event 
)

Обробляє події клавіатури для меню сортування.

Аргументи
contextСтруктура контексту, що містить необхідні дані.
eventПодія клавіатури.
Повертає
true, якщо подія була оброблена, false інакше.

◆ handleSortingMenu()

void handleSortingMenu ( Storage library)

Обробляє вибір сортування з підменю.

Аргументи
libraryПосилання на об'єкт бібліотеки.

◆ hasAuthor()

bool hasAuthor ( const Book book,
const Author author 
)

Перевіряє, чи вказаний автор є одним з авторів даної книги.

Перевіряє, чи містить книга вказаного автора.

Аргументи
bookВказівник на об'єкт книги.
authorВказівник на об'єкт автора.
Повертає
true, якщо автор є одним з авторів книги; false в іншому випадку.

Ця функція перевіряє список авторів, пов'язаних з книгою, щоб визначити, чи є серед них вказаний автор, порівнюючи їхні ім'я та прізвище.

Аргументи
bookВказівник на об'єкт книги, яку потрібно перевірити.
authorВказівник на об'єкт автора, якого потрібно знайти.
Повертає
true, якщо книга має вказаного автора; false в іншому випадку.

◆ performSortingAction()

void performSortingAction ( Storage library,
int  choice,
std::string &  statusMessage,
Color &  statusColor 
)

Виконує сортування книг за обраним критерієм

Аргументи
libraryПосилання на бібліотеку
choiceВибір користувача (1-3)
statusMessageПовідомлення про статус
statusColorКолір повідомлення

◆ printAuthors()

void printAuthors ( const std::vector< Author > &  authors)

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

Аргументи
authorsВектор авторів для відображення.

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

  • Якщо вектор порожній: "Автор не вказаний".
  • Для кожного автора: "Ім'я Прізвище".

◆ processAuthorBook()

void processAuthorBook ( const Book book,
const Author author,
Elements &  authorElements,
bool &  hasBooks 
)

Перевіряє, чи книга належить автору, і додає її до списку

Аргументи
bookВказівник на книгу
authorВказівник на автора
authorElementsЕлементи для відображення
hasBooksПрапорець наявності книг

◆ processAuthors()

void processAuthors ( const Book book,
const std::string &  authorName,
bool &  found 
)

Шукає книги за автором та виводить результати

Аргументи
bookВказівник на книгу для перевірки
authorNameІм'я або прізвище автора для пошуку
[in,out]foundПрапорець, що вказує чи був знайдений хоча б один результат

Функція:

  • Перевіряє наявність автора у книзі (з урахуванням часткового збігу)
  • При першому збігу виводить заголовок списку знайдених книг
  • Виводить назву кожної відповідної книги
  • Оновлює прапорець found при знаходженні збігу @complexity O(m), де m - кількість авторів у книзі
    Див. також
    Author::searchByName()

◆ processAuthorSearchResults()

void processAuthorSearchResults ( const std::string &  authorName,
Elements &  resultsElements,
const Storage library,
bool &  showResults 
)

Обробляє пошук книг за автором та заповнює результати

Аргументи
authorNameІм'я автора для пошуку
resultsElementsЕлементи для відображення результатів
libraryПосилання на бібліотеку
showResultsПрапорець для відображення результатів

◆ processBookForAuthor()

bool processBookForAuthor ( const Book book,
const Author author,
Elements &  authorElements,
bool &  hasBooks,
const std::function< Elements(const Book *)> &  createBookElements,
std::set< std::string, std::less<> > &  uniqueBooks,
int &  totalBooks 
)

Обробляє книгу для пошуку та додає її до результатів, якщо вона відповідає критеріям

Аргументи
bookВказівник на книгу
authorВказівник на автора
authorElementsЕлементи для відображення
hasBooksПрапорець наявності книг
createBookElementsФункція для створення елементів книги
uniqueBooksМножина унікальних ідентифікаторів книг
totalBooksЛічильник знайдених книг
Повертає
true, якщо книга була оброблена, false - якщо ні

◆ processBookSearch()

void processBookSearch ( const std::string &  title,
const Storage library,
Color &  resultColor,
bool &  showResult,
Elements &  resultElements 
)

Обробляє пошук книги та заповнює елементи результатів.

Аргументи
titleНазва книги для пошуку.
libraryПосилання на об'єкт бібліотеки.
[out]resultColorКолір для повідомлення про результат.
[out]showResultПрапорець для відображення результату.
[out]resultElementsЕлементи FTXUI для додавання результатів.

◆ processFoundBook()

template<typename CreateBookElementsFunc >
void processFoundBook ( const Book book,
Elements &  authorElements,
bool &  hasBooks,
CreateBookElementsFunc  createBookElements 
)

Обробляє знайдені книги автора та додає їх до елементів для відображення

Параметри шаблона
CreateBookElementsFuncТип функції для створення елементів книги
Аргументи
bookВказівник на книгу
authorElementsЕлементи для відображення
hasBooksПрапорець наявності книг
createBookElementsФункція для створення елементів книги

◆ render_single_book()

Elements render_single_book ( const Book book,
int  index 
)

Створює елементи для відображення інформації про одну книгу

Аргументи
bookВказівник на книгу
indexІндекс книги у списку
Повертає
Елементи для відображення

◆ renderAuthorBooks()

Elements renderAuthorBooks ( const Author author,
const Storage library 
)

Створює елементи для відображення інформації про книги автора

Аргументи
authorВказівник на автора
libraryПосилання на бібліотеку
Повертає
Елементи для відображення

◆ renderAuthorInfo()

void renderAuthorInfo ( const std::string &  authorName,
const Storage library,
Elements &  elements 
)

Рендерить елементи UI для відображення інформації про автора.

Аргументи
authorNameІм'я автора.
libraryПосилання на об'єкт бібліотеки.
[out]elementsЕлементи FTXUI для додавання інформації.

Шукає автора та форматує його інформацію разом зі списком книг для відображення.

◆ renderBestBookElements()

ftxui::Element renderBestBookElements ( const ftxui::Component &  inputAuthorNameComp,
const ftxui::Component &  inputBookTitleComp,
const ftxui::Component &  buttonSetComp,
const ftxui::Component &  buttonBackComp,
bool  showResultParam,
const std::string &  resultMessageParam,
ftxui::Color  resultColorParam 
)

Рендерить елементи інтерфейсу для встановлення "кращої" книги автора.

Ця функція створює та повертає ftxui::Element, який представляє собою візуальний інтерфейс для взаємодії з користувачем при встановленні кращої книги. Вона включає поля для введення імені автора та назви книги, кнопки дії, а також опціонально відображає повідомлення про результат операції.

Аргументи
inputAuthorNameCompКомпонент ftxui для введення імені автора.
inputBookTitleCompКомпонент ftxui для введення назви книги.
buttonSetCompКомпонент ftxui для кнопки "Встановити".
buttonBackCompКомпонент ftxui для кнопки "Назад".
showResultParamБулевий прапорець, що вказує, чи потрібно відображати повідомлення про результат.
resultMessageParamРядок, що містить повідомлення про результат операції.
resultColorParamКолір для відображення повідомлення про результат.
Повертає
ftxui::Element, що представляє собою візуальний інтерфейс для встановлення кращої книги.

◆ renderBookForm()

Element renderBookForm ( const Component &  inputTitle,
const Component &  inputISBN,
const Component &  inputPublisher,
const Component &  inputNumPages,
const Component &  inputYearPublished,
const Component &  buttonAdd,
const Component &  buttonBack 
)

Відображає форму додавання нової книги

Аргументи
inputTitleПоле введення назви книги
inputISBNПоле введення ISBN
inputPublisherПоле введення видавця
inputNumPagesПоле введення кількості сторінок
inputYearPublishedПоле введення року публікації
buttonAddКнопка "Додати"
buttonBackКнопка "Повернутися"
Повертає
Елемент для відображення форми

◆ renderSearchResults()

void renderSearchResults ( const Storage library,
const std::string &  authorName,
Elements &  resultsElements 
)

Рендерить результати пошуку книг за автором.

Аргументи
libraryПосилання на об'єкт бібліотеки.
authorNameІм'я автора, за яким здійснювався пошук.
[out]resultsElementsЕлементи FTXUI для додавання результатів.

Збирає всіх авторів, знаходить книги, що відповідають пошуковому запиту, та форматує їх для відображення.

◆ searchAndDisplayEntities()

template<typename T >
void searchAndDisplayEntities ( const std::vector< std::unique_ptr< T > > &  entities,
const std::string &  keyword 
)

Шаблонна функція для пошуку та відображення сутностей.

Параметри шаблона
TТип сутності (Book/Author).
Аргументи
entitiesВектор сутностей для пошуку.
keywordКлючове слово для фільтрації.
Обробка виняткових ситуацій
Nothing.@complexity O(n), де n - кількість сутностей.