readme.md

База данных с соединением клиент-сервер

Данный проект демонстрирует работу трех модулей: база данных (Modules/DB), парсер (Modules/Parse) и сервер (Modules/Server).

Установка

Для работы программы требуются следующие библиотеки: boost (boost::asio), bison и flex. Для сборки используется cmake и make. Используется стандарт c++11. Если вы используете дистрибутив ubuntu или debian, то установка весьма проста:

sudo apt-get install flex bison cmake libboost-all-dev

Далее программу нужно собрать. Перейдите в директорию с проектом и выполните:

mkdir build && cd build
cmake ..
make

Модули

База данных

Работа над дипломным проектом на тему : «Разработка информационной системы для формирования экологической культуры обучающихся на примере Частного образовательного учреждения высшего образования «Московский университет имени С.Ю. Витте» началась с формирования базы данных студентов. Для хранения используется формат CSV, данные загружаются в память и хранятся в объекте std::set, который представляет из себя самобалансирующееся дерево. У объекта базы данных прописаны основные запросы для работы с ней. Они реализуют обертку над методами объекта std::set. Для хранения данных используется объект Student, который хранит поля first_name (Имя), last_name (Фамилия), group (Группа) и course (Курс), settled (Поселен ли студент), city (Город). Для генерации примера базы данных написан генератор. Для запуска используйте команду:

./generator students.csv

или

./generator students.csv 1000

Число задает количество записей.

Парсер

Парсер выполнен с использованием программ flex и bison и способен распозновать корректные для него скрипты. Скрипт состоит из команд, разделенных точками с запятой. Каждая команда начинается с операции (select, insert, delete), далее идут параметры (first_name, last_name, group, settled, city) со своими значениями указанными через =. То есть для того, чтобы получить всех студентов из группы 210, нужно написать:

select group = 210;

Пробельные символы игнорируются. Для того, чтобы вывести всех, вместо параметров указывается ключевое слово all:

select all;

Insert требует всех параметров, в связи с чем insert all; работать не будет. Delete работает аналогично select.

delete all;
delete group=210 first_name = Изя;

Для того, чтобы запустить парсер, используйте команду:

./parser students.csv test_simple.dbq

Где test_simple.dbq представляет из себя простой скрипт:

select all;

Сервер

Сервер реализован с применением boost::asio. Сервер является асинхронным и способен поддерживать несколько подключений. Для остановки сервера просто напишите stop в консоли. Сервер для каждого подключения создает свой интерпретатор, загружает туда запрос и возвращает клиенту ответ. Клиент подключается к серверу и отправляет запрос (Запрос отправляется только тогда, когда ввод закончен. В консоли это Ctrl+D, для файла это EOF). Как только запрос отправлен, программа ловит ответ и завершает работу. Для того, чтобы протестировать сервер и клиент, запустите сначала сервер:

./server students.csv 4444

А потом клиент:

./client 127.0.0.1 4444

В клиент можно сразу передать файл скрипта:

./client 127.0.0.1 4444 < test_simple.dbq
Конвейеры
0 успешных
0 с ошибкой