Проект "Система управління бібліотекою" - це сучасна реалізація для управління сховищем книг, розроблений з використанням принципів об'єктно-орієнтованого програмування на C++.
- Демонстрація застосування ООП принципів у реальному проекті
- Створення зручного інструменту для управління бібліотекою
- Забезпечення високої продуктивності та надійності системи
- Реалізація сучасних підходів до розробки програмного забезпечення
-
Управління книгами:
- Додавання нових книг з детальною інформацією (назва, автор, ISBN, рік видання, кількість сторінок)
- Редагування існуючих записів
- Видалення книг з бібліотеки
- Перегляд детальної інформації про книгу
-
Пошук книг:
- Пошук за назвою книги
- Пошук за ім'ям автора
-
Сортування книг:
- Сортування за назвою книги (від А до Я)
- Сортування за роком видання (від старіших до новіших)
- Сортування за кількістю сторінок (від менших до більших)
-
Робота з авторами:
- Додавання нових авторів
- Редагування інформації про авторів
- Видалення авторів
- Перегляд списку книг конкретного автора
-
Збереження даних:
- Збереження даних у JSON форматі
- Завантаження даних з JSON файлу
-
Валідація даних:
- Перевірка коректності ISBN номерів
- Валідація дат видання
- Перевірка унікальності книг у бібліотеці
- Валідація формату вхідних даних
-
Звіти та статистика:
- Аналіз сатистики авторів
-
Інтерфейс користувача:
- Зручне текстове меню
- Інтуїтивна навігація
- Відображення статусних повідомлень
-
Додаткові функції:
- Імпорт даних з зовнішніх джерел
- Очистка та стандартизація книжкових даних
- Крос-платформова робота
- Використання стандарту C++20
- Модульна архітектура
- Використання бібліотеки nlohmann/json для роботи з JSON
- CMake як система збірки
- Інтеграція з сучасними інструментами розробки
- Автоматизована документація за допомогою Doxygen
- Комплексна система CI/CD
Структура проекту:
oop_cpp_coursework/
│
├── .gitignore # Вказує на навмисно невідстежувані файли, які Git повинен ігнорувати
├── .vscode/ # Файли конфігурації редактора VS Code (налагодження, завдання, налаштування)
│ ├── c_cpp_properties.json # Конфігурація розширення C/C++ (включення шляхів, компілятора)
│ ├── launch.json # Конфігурація запуску відладчика
│ ├── settings.json # Налаштування робочого простору (напр., асоціації файлів)
│ └── tasks.json # Конфігурації бігуна завдань (напр., основне завдання збірки)
│
├── CMakeLists.txt # Скрипт збірки CMake для проекту
├── LICENSE # Інформація про ліцензію проекту (ліцензія MIT)
├── README.md # Високорівневий опис проекту, налаштування та використання (українською мовою)
│
├── auxiliary_tools/ # Автономні C++ інструменти для попередньої обробки даних
│ ├── clean_ISBN.cpp
│ ├── cleaning_up_json.cpp
│ └── standardizing_book_IDs.cpp
│
├── data/ # Сховище даних для програми
│ ├── raw_data/ # Каталог для вихідних, необроблених даних (якщо такі є)
│ │ └── raw_book_db.json # Приклад файлу сирих даних
│ └── ready_for_use_data/ # Каталог для оброблених даних, що використовуються додатком
│ └── book_db.json # Основний файл бази даних книг у форматі JSON
│
├── guidelines/ # Вимоги до проекту (українською мовою)
│ ├── general_theses.md
│ └── initial_instructions.md
│
├── include/ # Заголовні файли (.hpp), що визначають класи та функції
│ ├── AbstractCollection.hpp # Абстрактний базовий клас для сутностей даних
│ ├── Author.hpp # Визначення класу Author
│ ├── Book.hpp # Визначення класу Book
│ ├── CustomExceptions.hpp # Користувацькі класи виключень
│ ├── Path.hpp # Визначає константи для шляхів до файлів даних
│ ├── SearchUtility.hpp # Шаблонна утиліта для пошуку/сортування колекцій
│ ├── Storage.hpp # Визначення класу Storage (основний контейнер даних)
│ └── Utils.hpp # Оголошення утилітних функцій (напр., завантаження JSON)
│
└── src/ # Вихідні файли (.cpp), що містять реалізації
├── Author.cpp # Реалізація класу Author
├── Book.cpp # Реалізація класу Book
├── Storage.cpp # Реалізація класу Storage
├── Utils.cpp # Реалізація службових функцій
└── main.cpp # Основна точка входу в додаток та логіка інтерфейсу користувача
nix-shell -p gcc cmake ninja nlohmann_json gdb pkg-config gnumake clang-tools --pure
# Чисте ізольоване середовище розробки з усіма необхідними залежностями
# Включає:
# - gcc: компілятор C++
# - cmake: система збірки
# - ninja: система збірки
# - nlohmann_json: бібліотека для роботи з JSON
# - gdb: відлагоджувач
# - pkg-config: утиліта для керування залежностями
# - gnumake: утиліта для збірки
# - clang-tools: додаткові інструменти для розробки (clang-format, clang-tidy)
sudo apt update
sudo apt install -y build-essential cmake ninja-build gdb pkg-config
sudo apt install -y nlohmann-json3-dev
sudo apt install -y clang-format clang-tidy
# Встановлення Homebrew, якщо ще не встановлено
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Встановлення необхідних інструментів
brew update
brew install cmake
brew install ninja
brew install gcc
brew install lldb
brew install pkg-config
brew install nlohmann-json
brew install clang-format
# Примітка: Рекомендується також встановити Xcode Command Line Tools:
xcode-select --install
# 1. Встановіть Visual Studio з підтримкою C++ або MinGW-w64
# https://visualstudio.microsoft.com/downloads/
# Виберіть компоненти:
# - MSVC v143 - VS 2022 C++ x64/x86 build tools
# - Windows 10/11 SDK
# - C++ CMake tools for Windows
# 2. Встановіть vcpkg
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat
./vcpkg integrate install
# 3. Встановіть необхідні пакети
vcpkg install ninja:x64-windows
vcpkg install nlohmann-json:x64-windows
vcpkg install pkg-config:x64-windows
vcpkg install gdb:x64-windows
- Клонувати репозиторій:
git clone https://github.com/OleksandrDreval/oop_cpp_coursework.git
cd library_management
- Створити та перейти до папки збірки:
mkdir build && cd build
- Запустити CMake:
cmake ..
- Зібрати проект:
cmake --build .
Для роботи з JSON-даними використовуйте інструменти з папки auxiliary_tools
:
clean_ISBN.cpp
- очистка ISBN номерівcleaning_up_json.cpp
- фільтрація JSON полівstandardizing_book_IDs.cpp
- стандартизація ідентифікаторів книг
Компіляція інструментів:
g++ -std=c++17 auxiliary_tools/назва_інструменту.cpp -o інструмент -Iinclude
Основний пайплайн збірки та тестування проекту. Включає компіляцію коду та запуск тестів.
Перевіряє відповідність коду стандартам форматування за допомогою clang-format.
Виконує статичний аналіз коду за допомогою clang-tidy та cppcheck.
Автоматично генерує документацію проекту за допомогою Doxygen. Включає кешування файлів Doxygen, встановлення Doxygen, перевірку Doxyfile, оновлення підмодулів, генерацію документації та її розгортання на GitHub Pages.
Перевіряє збірку проекту на різних операційних системах (Linux, Windows, macOS).
Автоматизує розгортання моделі звітів.
Блокує гілку моделі звітів для запобігання змін під час розгортання.
Виконує перевірку продуктивності коду.
Виконує статичний аналіз коду за допомогою clang-tidy та cppcheck.
Автоматично генерує документацію проекту за допомогою Doxygen. Включає кешування файлів Doxygen, встановлення Doxygen, перевірку Doxyfile, оновлення підмодулів, генерацію документації та її розгортання на GitHub Pages.
Перевіряє збірку проекту на різних операційних системах (Linux, Windows, macOS).
Автоматизує розгортання моделі звітів.
Блокує гілку моделі звітів для запобігання змін під час розгортання.
Виконує перевірку продуктивності коду.