- •1. Анализ задания и описание методов решения
- •2 Проектирование программного обеспечения
- •2.1 Проектирование графического интерфейса
- •2.2 Проектирование модуля сбора данных
- •3 Реализация программного обеспечения
- •3.1 Реализация структур данных
- •3.2 Реализация графического интерфейса
- •3.3 Реализация модуля сбора данных
- •4 Тестирование программного обеспечения
- •Список использованных источников
- •Приложение а Листинг программы
2.2 Проектирование модуля сбора данных
Данный модуль отвечает за получение информации о событиях и преобразует ее к формату, который будет обработан основным модулем (графический интерфейс). Модуль сбора данных будет реализован в виде отдельного модуля исходного кода, содержащего описание его интерфейса и реализации. Единая структура представления данных событиях будет описана именно в этом модуле. Также в этом модуле будет содержаться описание функции сбора данных о событиях в выбранном каталоге.
!!!!!Структура представления данных будет описывать структуру информации об одном событии. В этой структуре будут присутствовать поля наименования (описания) устройства, его класса и списка характеристик этого устройства. Так как данная структура должна быть доступна (видна) во всех модулях программы, то ее описание будет осуществляться в заголовочной части модуля сбора данных.
Интерфейс функции сбора данных будет описывать вызов функции сбора данных, формирующей список структур данных, описывающих события.
3 Реализация программного обеспечения
По заданию для реализации данного проекта для ОС Linux был выбран язык программирования C++. В качестве среды разработки был использован Qt.
Рассмотрим далее в этом разделе реализацию основных частей данного приложения.
3.1 Реализация структур данных
В предыдущем разделе отмечалось, что для взаимодействия модулей системы между собой необходимо обеспечить единую структуру хранения данных. Каждый процесс характеризуется следующими параметрами: имя файла, событие. Все эти характеристики являются текстовыми или преобразуемыми к ним. Описание этой структуры данных приведено в листинге 3.1.
Листинг 3.1 – Описание структуры данных событий
struct Watch {
std::string path;
bool in_move;
};
3.2 Реализация графического интерфейса
Графический интерфейс приложения реализован в виде окна, с помощью которого пользователь может взаимодействовать с программой. В окне располагается информация о событиях и кнопка «Выбрать директорию», которая дает право пользователю выбрать отслеживаемый каталог.
Функция сhange_dir_click отвечает за изменение директории
void change_dir_click() {
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::Directory);
dialog.setOption(QFileDialog::ShowDirsOnly, true);
int result = dialog.exec();
QString directory;
if (result) {
myModel->reset();
directory = dialog.selectedFiles()[0];
cur_dir->setText(directory);
dir = directory.toUtf8().constData();
tracker.change_dir(dir);
}
}
Функция Render отвечает за отображение модели
void render() {
if (!dir.empty()) {
auto recs = tracker.get_records();
myModel->add_events(recs);
}
}
Функция Reset отвечает за очистку модели
void reset() {
beginResetModel();
this->recs.clear();
endResetModel();
}
Функция rowCount отвечает за количество строк в таблице
int rowCount(const QModelIndex &parent) const {
if (parent.isValid())
return 0;
return recs.size();
}
Функция columnCount отвечает за количество колонок в таблице
int columnCount(const QModelIndex &parent) const {
if (parent.isValid())
return 0;
return 2;
}
Функция add_events отвечает за добавление оповещения о директориях в графический интерфейс
void add_events(table_records &events) {
beginInsertRows(QModelIndex(), recs.size(),
recs.size() + events.size() - 1);
recs.insert(recs.begin(), events.begin(), events.end());
endInsertRows();
}
На рисунке 3.1 представлен вид главного окна приложения.
Рисунок 3.1 – Главное окно приложения