Разработать программу на чистом С (VS 2019) с оптимальным хранением в памяти с использованием АВЛ дерева/деревьев. Программа реализует простую базу данных, которая хранит набор книг из онлайн-библиотеки и предоставляет пользователю удобный консольный интерфейс взаимодействия.
Каждая книга описывается следующими полями:
- Название книги.
- Автор/Авторы.
- Год выпуска.
- Издательство.
- Оценка читателей.
- Цена книги.
Допускается использование различных служебных полей (к примеру, внутреннего идентификатора книги).
Программа должна поддерживать ряд операций, а именно:
- Добавление книги.
- Удаление книги.
- Редактирование книги (всех полей целиком или выборочно).
- Поиск по любому из полей (за исключением краткого описания) по всей базе данных.
- Сортировка по любому из полей (за исключением краткого описания) по всей базе данных.
- Сохранение БД в файл (формат хранение выбрать самостоятельно).
- Загрузка БД из файла.
- Вывод информации о книгах.
Требования:
- Книги могут описаны как на русском языке, так и на английском.
- Использование наиболее оптимального дерева для реализации программы с комментариями.
- В случае отсутствия ключей запуска "-a/--add, -f/--find, -s/--sort, -r/--remove, -e/--edit, -p/--print" программа запускает интерактивный режим работы, который выводит соответствующее меню с поддерживаемыми операциями.
- В случае отсутствия ключа --output сохранение происходит во входной файл.
- В случае некорректного ввода программа выводит справку.
- Максимальный объем входного файла — 64 Мб.
- Ключи могут задаваться в разном порядке.
- При компиляции программы не должно быть никаких предупреждений от компилятора (для удобства можно использовать ключи компиляции /Wall, /WX для Visual Studio; -Wall -pedantic для GCC).
- Программа может запускаться из консоли и поддерживать обработку ключей:
а. -h/--help — ключ для вывода справки.
b. -i/--input — ключ для передачи пути к файлу базы данных.
c. -p/--print — ключ для вывода информации книгах, после вывода программа завершает работу.
d. -a/--add — ключ для добавления книги.
e. -r/--remove — ключ для удаления книги.
f. -e/--edit — ключ редактирования книги.
g. -f/--find — ключ для поиска книги по заданному критерию.
h. -s/--sort — ключ для сортировки по заданному полю.
i. -o/--output — ключ для передачи пути к выходному файлу базы данных.