Skip to content

OleksandrDreval/oop_cpp_coursework

Repository files navigation

Система управління бібліотекою на C++

C++ CI/CD Pipeline Code Style Verification CodeQL Advanced Cross-Platform Compatibility Documentation Build Pages build deployment Performance Check Static Code Analysis

Опис проекту

Проект "Система управління бібліотекою" - це сучасна реалізація для управління сховищем книг, розроблений з використанням принципів об'єктно-орієнтованого програмування на C++.

Основні цілі проекту:

  • Демонстрація застосування ООП принципів у реальному проекті
  • Створення зручного інструменту для управління бібліотекою
  • Забезпечення високої продуктивності та надійності системи
  • Реалізація сучасних підходів до розробки програмного забезпечення

Основні функціональності:

  1. Управління книгами:

    • Додавання нових книг з детальною інформацією (назва, автор, ISBN, рік видання, кількість сторінок)
    • Редагування існуючих записів
    • Видалення книг з бібліотеки
    • Перегляд детальної інформації про книгу
  2. Пошук книг:

    • Пошук за назвою книги
    • Пошук за ім'ям автора
  3. Сортування книг:

    • Сортування за назвою книги (від А до Я)
    • Сортування за роком видання (від старіших до новіших)
    • Сортування за кількістю сторінок (від менших до більших)
  4. Робота з авторами:

    • Додавання нових авторів
    • Редагування інформації про авторів
    • Видалення авторів
    • Перегляд списку книг конкретного автора
  5. Збереження даних:

    • Збереження даних у JSON форматі
    • Завантаження даних з JSON файлу
  6. Валідація даних:

    • Перевірка коректності ISBN номерів
    • Валідація дат видання
    • Перевірка унікальності книг у бібліотеці
    • Валідація формату вхідних даних
  7. Звіти та статистика:

    • Аналіз сатистики авторів
  8. Інтерфейс користувача:

    • Зручне текстове меню
    • Інтуїтивна навігація
    • Відображення статусних повідомлень
  9. Додаткові функції:

    • Імпорт даних з зовнішніх джерел
    • Очистка та стандартизація книжкових даних
    • Крос-платформова робота

Технічні особливості:

  • Використання стандарту 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           # Основна точка входу в додаток та логіка інтерфейсу користувача

Кроки встановлення:

Для NixOS:

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)

Для Linux (Ubuntu/Debian):

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

Для macOS (з використанням Homebrew):

# Встановлення 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

Для Windows:

# 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

Збірка проекту:

  1. Клонувати репозиторій:
git clone https://github.com/OleksandrDreval/oop_cpp_coursework.git
cd library_management
  1. Створити та перейти до папки збірки:
mkdir build && cd build
  1. Запустити CMake:
cmake ..
  1. Зібрати проект:
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

CI/CD Workflows

C++ CI/CD Pipeline

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

Code Style Verification

Перевіряє відповідність коду стандартам форматування за допомогою clang-format.

Static Code Analysis

Виконує статичний аналіз коду за допомогою clang-tidy та cppcheck.

Documentation Build

Автоматично генерує документацію проекту за допомогою Doxygen. Включає кешування файлів Doxygen, встановлення Doxygen, перевірку Doxyfile, оновлення підмодулів, генерацію документації та її розгортання на GitHub Pages.

Cross-Platform Compatibility

Перевіряє збірку проекту на різних операційних системах (Linux, Windows, macOS).

Deploy Reporting Model

Автоматизує розгортання моделі звітів.

Lock Reporting Model Branch

Блокує гілку моделі звітів для запобігання змін під час розгортання.

Performance Check

Виконує перевірку продуктивності коду.

Static Code Analysis

Виконує статичний аналіз коду за допомогою clang-tidy та cppcheck.

Documentation Build

Автоматично генерує документацію проекту за допомогою Doxygen. Включає кешування файлів Doxygen, встановлення Doxygen, перевірку Doxyfile, оновлення підмодулів, генерацію документації та її розгортання на GitHub Pages.

Cross-Platform Compatibility

Перевіряє збірку проекту на різних операційних системах (Linux, Windows, macOS).

Deploy Reporting Model

Автоматизує розгортання моделі звітів.

Lock Reporting Model Branch

Блокує гілку моделі звітів для запобігання змін під час розгортання.

Performance Check

Виконує перевірку продуктивності коду.

About

An object-oriented book management system (library) in C++

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •