Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Лабораторная работа №4 Вариант 1 Система управления библиотекой с использованием C++ и SQL Разработать приложение на C++, которое взаимодействует с базой данных PostgreSQL для управления библиотекой. Программа должна поддерживать функционал добавления, удаления, изменения, поиска и аналитических запросов, а также работу с индексами и транзакциями. Задание Часть 1: Основные операции с базой данных  Создание базы данных Создайте базу данных с именем library.  Таблицы базы данных Для базы данных создайте следующие таблицы:  Таблица authors o id — уникальный идентификатор автора (целое число). o name — имя автора (строка). o birth_year — год рождения (целое число).  Таблица books o id — уникальный идентификатор книги (целое число). o title — название книги (строка). o author_id — идентификатор автора (целое число, внешний ключ на таблицу authors). o publication_year — год издания книги (целое число). o genre — жанр книги (строка).  Таблица users o id — уникальный идентификатор пользователя (целое число). o name — имя пользователя (строка). o registration_date — дата регистрации пользователя (дата).  Таблица borrowed_books o user_id — идентификатор пользователя (целое число, внешний ключ на таблицу users). o book_id — идентификатор книги (целое число, внешний ключ на таблицу books). o borrow_date — дата взятия книги (дата). o return_date — дата возврата книги (дата). Часть 2: Индексы и транзакции  Добавление индексов o Индекс на поле name таблицы authors. o Индекс на поле title таблицы books. o Индекс на поле borrow_date таблицы borrowed_books.  Транзакции: Все операции, включая добавление, изменение и удаление записей, должны быть выполнены в рамках транзакций. При возникновении ошибки транзакция должна откатываться. Часть 3: Реализация C++ программы  Классы и полиморфизм Разработайте классы, представляющие таблицы базы данных: o Класс Author для работы с таблицей authors. o Класс Book для работы с таблицей books. o Класс User для работы с таблицей users. o Класс BorrowedBook для работы с таблицей borrowed_books. Используйте наследование для создания типов книг (например, FictionBook, NonFictionBook).  Шаблонный класс Создайте шаблонный класс Pair, который будет хранить пару значений ("Автор и количество книг").  Меню пользователя: Программа должна поддерживать текстовое меню с возможностью выбора различных операций: o Добавить автора. o Добавить книгу. o Добавить пользователя. o Зарегистрировать заём книги.  Выполнить аналитические запросы o Список книг, написанных определённым автором. o Количество пользователей, зарегистрировавшихся за последний год. o Список книг, выданных за последние 30 дней. o Топ 3 самых популярных книг по количеству заёмов.  Работа с файлами: Программа должна вести журнал всех операций (добавление, удаление, аналитические запросы) в файл log.txt. Часть 4: Реализация аналитических запросов  Запросы o Список всех книг определённого автора. o Количество пользователей, зарегистрировавшихся за последний год. o Список книг, выданных за последние 30 дней. o Топ 3 самых популярных книги (по количеству заёмов). Часть 5: Реализация работы с транзакциями Работа с транзакциями: Каждая операция добавления, удаления или обновления данных должна выполняться в транзакции. В случае возникновения ошибки (например, при нарушении целостности данных) транзакция должна быть откатана. Используйте соответствующие функции библиотеки libpqxx для работы с транзакциями. Пример реализации на C++ Подключение к базе данных: Используйте библиотеку libpqxx для взаимодействия с базой данных PostgreSQL. Реализуйте методы для подключения к базе данных, выполнения SQLзапросов и обработки ошибок. Пример использования Код для добавления записи в таблицу authors void addAuthor(const std::string& name, int birth_year) { try { pqxx::work txn(conn); txn.exec("INSERT INTO authors (name, birth_year) VALUES (" + txn.quote(name) + ", " + txn.quote(birth_year) + ")"); txn.commit(); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; } } Пример для выполнения аналитического запроса void getTopBooks() { try { pqxx::work txn(conn); pqxx::result res = txn.exec("SELECT title, COUNT(*) AS borrow_count FROM books " "JOIN borrowed_books ON books.id = borrowed_books.book_id " "GROUP BY title ORDER BY borrow_count DESC LIMIT 3"); for (const auto& row : res) { std::cout << "Book: " << row["title"].c_str() << ", Borrowed: " << row["borrow_count"].as() << std::endl; } } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; } } Ожидаемые результаты  Создание базы данных и таблиц с использованием SQL-запросов  Реализация C++ программы с поддержкой всех операций: добавление авторов, книг, пользователей, регистрация заёмов и аналитические запросы  Работа с транзакциями и индексами для обеспечения целостности данных и оптимизации запросов  Ведение логов в файл log.txt для отслеживания всех операций. Примечания Используйте объектно-ориентированный подход для создания классов, работающих с различными сущностями базы данных. Все операции с базой данных должны выполняться в транзакциях. Для аналитических запросов используйте SQL агрегатные функции, такие как COUNT(), GROUP BY, ORDER BY.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors