Пожалуйста, добавьте сюда свое ФИО
Вам предоставлены частичные реализации следующих структур:
- Author - автор книг (поля: полное имя, возраст и биологический пол);
- Book - книга (поля: название, содержание, авторы, издательство, жанр);
- BookStore - книжный магазин (поля: название магазина, хранилище книг, размеры хранилища).
Необходимо реализовать следующие функции и методы.
- Конструктор от 3 аргументов с инициализацией полей объекта
full_name
,age
иsex
.
-
Конструктор от 5 аргументов с инициализацией полей объекта
title
,content
,genre
,publisher
иauthors
. -
Метод добавления автора в список авторов книги
bool AddAuhor(const Author&)
.- Необходимо реализовать проверку на наличие дубликатов по имени автора.
- При обнаружении автора с одинаковым именем метод не должен добавлять нового автора в
список авторов и вернуть значение
false
. - При отсутствии дубликатов, новый автор добавляется в конец списка и возвращается значение
true
.
-
Функция изменения объема хранилища книг
Status resize_storage(Book *&, int size, int new_capacity)
.- Необходимо провести валидацию аргументов и в случае обнаружения некорректных значений вернуть соответствующий
статус (
см. перечисление
ResizeStorageStatus
). - При успешной валидации аргументов, необходимо выделить новый участок памяти под хранилище нового объема (capacity).
- Все элементы из старого хранилища в количестве равном размеру хранилища (size) требуется скопировать в новое хранилище.
- Память, выделенная под старое хранилище, необходимо высвободить.
- При успешном измении объема хранилища требуется вернуть значение
ResizeStorageStatus::SUCCESS
.
- Необходимо провести валидацию аргументов и в случае обнаружения некорректных значений вернуть соответствующий
статус (
см. перечисление
-
Конструктор от 1 аргумента с инициализацией полей объекта
name
,storage_capacity
и выделением памяти под хранилище с изначальным объемомkInitStorageCapacity
. -
Деструктор.
- Требуется высвободить память, выделенную под хранилище и установить корректные размеры и объем хранилища.
-
Метод добавления книги в магазин
void AddBook(const Book&)
.- Необходимо следить за текущим количеством книг в хранилище и его объемом. В случае, когда кол-во книг сравнялось с
объемом хранилища, следует увеличить размер хранилища при помощи метода
resize_storage_internal
, передав в него аргумент - новый объем хранилища. - Советуется увеличивать объем на небольшое значение (например, на значение
kCapacityCoefficient
). - В случае возникновения ошибки при изменении размера хранилища, метод должен просто завершиться.
- Элементы добавляются в конец списка.
- Необходимо следить за текущим количеством книг в хранилище и его объемом. В случае, когда кол-во книг сравнялось с
объемом хранилища, следует увеличить размер хранилища при помощи метода
Разница между capacity
и size
:
capacity
- кол-во всех ячеек памяти, выделенных под массив.size
- кол-во элементов в массиве.
size = 0;
capacity = 3
int arr = new int[capacity]{}; // [nullptr, nullptr, nullptr]
// здесь size = 0, capacity = 3
// добавляем элементы в "конец"
arr[0] = 3; // здесь size = 1, capacity = 3
arr[1] = 7; // size = 2, capacity = 3
См. подробнее на StackOverflow.
-
Все тесты должны пройти успешно:
- для этого разрешается вносить изменения только в файлы, указанные в инструкции ниже
-
GitHub Actions должен показывать зеленый маркер, сообщая о том, что все тесты пройдены успешно:
- красный маркер означает, что некоторые (или все) тесты провалились
- Совет 1: можно кликнуть на красный маркер, чтобы узнать какой тест провалился (или почему программа не скомпилировалась)
- Совет 2: если результаты тестов не обновляются, то следует сообщить об этом преподавателю
- Добавьте свое ФИО в файл
README.md
(файл, который Вы сейчас читаете). - Приведите решения к заданиям в файлах:
Остальные файлы изменять нельзя!
Структура проекта:
src
- папка с исходным кодом программы.include
- папка с заголовочными файлами программы, необходима для предоставления интерфейса (API) для тестирования кода.tests
- Unit-тесты для проверки работоспособности кода.contrib
- папка со сторонними библиотеками.CMakeLists.txt
- главный файл системы автоматизации сборки проекта.
Импортируйте CMake проект в среду разработки (см. инструкции в Google Classroom).
Команада для клонирования репозитория в терминале:
git clone --recurse-submodules https://github.com/Algorithms-and-Data-Structures-2021/<название репозитория>
Для запуска всех тестов запустите исполняемый файл run_tests
.
Запуск программы также можно осуществить через исполняемый файл main
(см. на картинке).
-
Решения будут оценены лишь в том случае, если программа компилируется:
- если код не компилируется, то оценочные тесты не будут запущены
-
Результирующие баллы высчитываются при каждом новом коммите (до установленного дедлайна)
-
Дедлайн установлен в Google Classroom (за дополнительными вопросами обратитесь к преподавателю)