Skip to content

VSCRM/LibCode-2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 LibCode-2

Курсова робота (2 курс)

📖 Огляд

Цей проєкт є курсовою роботою, розробленою на мові програмування C++ 20 з використанням бази даних PostgreSQL. Система призначена для автоматизації бібліотечного фонду міста та забезпечує ефективне управління бібліотечними ресурсами: книгами, читачами, статистикою відвідуваності тощо.

Інтерфейс розроблено для двох типів користувачів: бібліотекарів, які здійснюють основну діяльність з обробки даних, та адміністраторів, які мають повний доступ до функцій керування системою.


🛠 Технології

Назва Призначення
C++ 20 Основна мова програмування
🐘 PostgreSQL Система управління базами даних
💻 Visual Studio 2026 Середовище розробки
🔄 Git Система керування версіями
🔗 Libpqxx Бібліотека для роботи з PostgreSQL — github.com/jtv/libpqxx
FTXUI Бібліотека для створення консольного інтерфейсу — github.com/ArthurSonzogni/FTXUI

🗄 Встановлення PostgreSQL

  1. Завантаж PostgreSQL з офіційного сайту: 👉 postgresql.org/download/windows

  2. Під час встановлення запам'ятай пароль користувача postgres — він знадобиться далі.

  3. Після встановлення додай шлях до bin у системні змінні:

    • Знайди шлях, наприклад: D:\Programs\Postgres\bin
    • Відкрий: Пуск → Змінні середовища → Змінні середовища системи
    • У розділі Системні змінні знайди PathРедагуватиСтворити
    • Встав шлях і натисни OK у всіх вікнах

🗃 Відновлення бази даних

Файл бекапу знаходиться у папці database/ репозиторію.

Відкрий PowerShell і виконай по черзі:

# 1. Створити базу даних
psql -U postgres -c 'CREATE DATABASE "Library"'

# 2. Перейти до папки з бекапом (вкажи свій шлях до репо)
cd "D:\Dокументи\Мої програми\Курсова 2\database"

# 3. Відновити базу даних з бекапу

	# Відновлення з SQL
psql -U postgres -d "library" -f "library.sql"

	# Відновлення з дампу
pg_restore -U postgres -d "library" -c "library.dump"

При виконанні команд система може запитати пароль користувача postgres.


⚙️ Налаштування підключення до БД

Перед збіркою відкрий файл main.cpp і знайди рядок:

std::make_shared<PostgresFactory>("dbname=library user=postgres password=admin1");

Заміни admin1 на свій пароль від PostgreSQL:

std::make_shared<PostgresFactory>("dbname=library user=postgres password=ТУТ_ТВІЙ_ПАРОЛЬ");

🚀 Встановлення та розгортання

Для збірки проєкту на Windows рекомендується використовувати менеджер пакетів vcpkg, встановлений на диск D: для уникнення конфліктів із правами доступу на системному диску.

1. Налаштування vcpkg

Відкрийте PowerShell (Адміністратор) та виконайте:

# Створення робочої директорії
d:
mkdir D:\Programs
cd D:\Programs

# Клонування та збірка менеджера пакетів
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat

# Налаштування системних змінних оточення
[System.Environment]::SetEnvironmentVariable("VCPKG_ROOT", "D:\Programs\vcpkg", "User")
[System.Environment]::SetEnvironmentVariable("VCPKG_DEFAULT_BINARY_CACHE", "D:\Programs\vcpkg\archives", "User")

2. Встановлення залежностей

.\vcpkg install ftxui:x64-windows
.\vcpkg install libpqxx:x64-windows

3. Інтеграція з Visual Studio

.\vcpkg integrate install

⚙️ Налаштування Visual Studio

Перевірте наступні параметри у властивостях проєкту:

  • Стандарт мови: Project Properties → General → C++ Language Standard → ISO C++20 Standard (/std:c++20)
  • Платформа: переконайтеся, що обрано архітектуру x64

🏗 Архітектура

Проєкт побудований на трирівневій архітектурі (інтерфейс → логіка → доступ до БД) та використовує наступні патерни проєктування:

Патерн Клас(и) Призначення
Abstract Factory PostgresFactory, IDBConnect, IDBOutput Створення об'єктів для підключення до PostgreSQL
Adapter ResultAdapter Конвертація pqxx::result у формат PostgresOutput
Factory Method MenuCreator, AdminMenu, LibrarianMenu Динамічне створення меню залежно від ролі
Singleton Logger Централізоване логування подій
Facade ApplicationCoordinator Координація взаємодії між компонентами
Decorator ConsoleUtilsDecorator Стилізація консольного виведення
Proxy AuthorizationProxy Контроль доступу та логування авторизації

🗂 Структура проєкту

Курсова 2/
│
├── database/
│   ├── library.dump                     # бінарний дамп БД (pg_restore)
│   └── library.sql                      # SQL-дамп БД (текстовий, для psql)
│
├── Library/                             # вихідний код застосунку (C++)
│   ├── AdminMenu.cpp / .h               # меню адміністратора
│   ├── ApplicationCoordinator.cpp / .h  # Facade — координація застосунку
│   ├── Authorization.cpp / .h           # авторизація (запит до users у БД)
│   ├── AuthorizationProxy.cpp / .h      # Proxy — обмеження часу входу 07:00–16:00
│   ├── ConsoleUtils.cpp / .h            # консольний UI (FTXUI): форми, меню
│   ├── ConsoleUtilsDecorator.cpp / .h   # Decorator — стилізація/кольори виводу
│   ├── ExtendFeatures.cpp / .h          # логіка адмін-функцій (бібліотеки, бібліотекарі, addUser)
│   ├── IAddOperations.h                 # інтерфейс операцій додавання
│   ├── IApplicationCoordinator.h        # інтерфейс координатора застосунку
│   ├── IAuthorization.h                 # інтерфейс авторизації
│   ├── IBaseOperations.h                # інтерфейс базових операцій читання
│   ├── IConsoleUtils.h                  # інтерфейс консольного UI
│   ├── IDBConnect.h                     # інтерфейс підключення до БД
│   ├── IDBFactory.h                     # інтерфейс Abstract Factory для БД
│   ├── IDBOutput.h                      # інтерфейс форматування/виводу результатів
│   ├── IMenu.h                          # інтерфейс меню (пункти + обробка вибору)
│   ├── IMenuCreator.h                   # інтерфейс Factory Method для меню
│   ├── IUserContext.h                   # інтерфейс контексту поточного користувача
│   ├── LibrarianMenu.cpp / .h           # меню бібліотекаря
│   ├── Library.vcxproj                  # проєкт Visual Studio (MSBuild)
│   ├── Library.vcxproj.filters          # групування файлів у Solution Explorer
│   ├── Library.vcxproj.user             # локальні (не git) налаштування запуску VS
│   ├── log.txt                          # журнал подій застосунку (генерується під час роботи)
│   ├── Logger.cpp / .h                  # Singleton — журналювання дій
│   ├── main.cpp                         # точка входу (entry point)
│   ├── MainFeatures.cpp / .h            # логіка функцій бібліотекаря (книги, читачі, візити)
│   ├── MenuCreator.cpp / .h             # Factory Method — створення меню за роллю
│   ├── PostgresConnect.cpp / .h         # обгортка з'єднання pqxx::connection
│   ├── PostgresFactory.h                # Abstract Factory — фабрика PostgreSQL-об'єктів
│   ├── PostgresOutput.cpp / .h          # форматування та запис результатів у output.txt
│   ├── ResultAdapter.cpp / .h           # Adapter — pqxx::result → PostgresOutput
│   └── UserContext.h                    # зберігає логін/роль поточного користувача
│
├── .gitattributes                       # налаштування git (line endings тощо)
├── .gitignore                           # ігноровані git файли/папки
├── 2.png                                # Use-Case діаграма проєкту
├── Запити.txt                           # чернетка SQL-запитів, використаних у роботі
├── Курсова 2.sln                        # файл рішення Visual Studio (відкриває весь проєкт)
├── LICENSE.txt                          # текст ліцензії MIT
└── README.md                            # цей файл

📝 Функціонал

👤 Бібліотекар

Головне меню бібліотекаря містить такі пункти:

  • Information about books — перегляд повного переліку книг (назва, автор, жанр, видавництво, рік, ISBN) на основі JOIN з таблицями book_details, book_authors, authors
  • Information about readers — перегляд читачів та їхньої категорії (JOIN з category_details, categories)
  • Information about visits — перегляд історії відвідувань (JOIN таблиць visits, readers, libraries, books)
  • Most popular books — рейтинг книг за кількістю видач (GROUP BY + COUNT + ORDER BY)
  • Add book — додавання нової книги; автор створюється автоматично, якщо ще не існує в БД; жанр, видавництво, рік і ISBN — необов'язкові
  • Add reader — додавання читача з вибором категорії: школяр, студент, дошкільник або науковець, кожна з яких має власний набір додаткових полів (заклад, спеціальність, номер школи, назва садочка, галузь дослідження)
  • Add visit — реєстрація видачі книги читачеві у конкретній бібліотеці (форма з випадаючими списками наявних читачів, бібліотек і книг)
  • Exit — вихід із системи

🔧 Адміністратор

Головне меню адміністратора містить такі пункти:

  • Information about libraries — перелік усіх бібліотек фонду
  • Information about librarians — перелік бібліотекарів з прив'язкою до конкретної бібліотеки та графіком роботи (дні й години зміни)
  • Add user — створення нового облікового запису системи (логін, пароль, роль); для ролі бібліотекаря додатково вказуються ПІБ, бібліотека та графік роботи
  • System statistics — відкриває системний журнал (log.txt) у Блокноті для перегляду історії дій і подій застосунку
  • Log out — вихід із системи

⚙️ Системні можливості

  • Авторизація з розмежуванням прав доступу — після входу роль користувача (admin/librarian) визначається запитом до БД, і система формує відповідне меню
  • Обмеження часу доступу (Proxy)AuthorizationProxy дозволяє авторизацію лише в проміжку з 07:00 до 16:00; поза цим вікном спроба входу відхиляється, а подія фіксується в журналі
  • JOIN-запити до БД — усі звітні розділи (книги, читачі, відвідування, статистика) будуються на JOIN-запитах до кількох пов'язаних таблиць
  • Автоматичне збереження результатів — вивід будь-якого звітного запиту форматується (PostgresOutput + ResultAdapter) і записується у файл output.txt, який одразу відкривається в Блокноті
  • Журналювання дій системи — усі ключові події (вхід, помилки SQL, створення об'єктів, дії користувача) фіксуються з таймстампом у log.txt через Singleton Logger
  • Розширюваність на інші СУБД — доступ до БД абстраговано через Abstract Factory (IDBFactory, IDBConnect, IDBOutput), тож підключення нової СУБД не вимагає змін у бізнес-логіці

⚠️ Примітка: функції автоматичного відкриття output.txt та log.txt у Блокноті (CreateProcessW/notepad.exe) реалізовані лише для Windows. На інших платформах ці дії пропускаються з відповідним записом у журналі.


📊 Use-Case діаграма

Use-Case


📦 Готовий білд (Release)

Не хочеш збирати проєкт самостійно? У розділі Releases доступний готовий білд для Windows x64.

⚠️ Важливо: застосунок — не один файл. Library.exe динамічно лінкується з бібліотеками libpqxx і PostgreSQL, тож для запуску потрібні всі файли разом, з тієї самої папки x64/Release:

Файл Призначення
Library.exe сам застосунок
pqxx.dll обгортка libpqxx для роботи з PostgreSQL
LIBPQ.dll клієнтська бібліотека PostgreSQL (libpq)
libssl-3-x64.dll OpenSSL — шифрування з'єднання до БД
libcrypto-3-x64.dll OpenSSL — криптографічні примітиви
Library.pdb символи налагодження (необов'язковий, для дебагу)

Завантаж усі файли з релізу в одну папку — без .dll застосунок не запуститься (Windows видасть помилку про відсутню бібліотеку).

  1. Встанови PostgreSQL та віднови базу даних — див. розділи 🗄 Встановлення PostgreSQL та 🗃 Відновлення бази даних вище.
  2. Завантаж усі файли релізу (Library.exe + .dll, перелічені вище) з останнього релізу в одну папку.
  3. Запусти Library.exe. Якщо пароль користувача postgres відрізняється від того, що зашитий у білд (admin1), підключення до БД завершиться помилкою — у такому разі зібери проєкт самостійно, змінивши пароль у main.cpp (див. ⚙️ Налаштування підключення до БД).
  4. Вхід у систему дозволений лише з 07:00 до 16:00 — це навмисне обмеження (AuthorizationProxy), а не помилка застосунку.
  5. Файли log.txt та output.txt створюються поруч із .exe під час роботи програми.

👨‍💻 Автор

Кручкевич Богдан Вікторович

📜 Ліцензія

Цей проєкт ліцензовано під MIT License. Детальніше дивіться у файлі LICENSE.

About

Console library fund management system using C++20 + PostgreSQL. Separation of administrator/librarian rights, FTXUI-interface, 7 design patterns (Abstract Factory, Adapter, Proxy, Facade, Decorator, Singleton, Factory Method).

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages