- •Дипломный проект
- •Задание на выполнение дипломного проекта
- •Список использованных сокращений
- •Введение Ут.
- •Ут. Ут. 1. Аналитическая часть
- •1.1 Обзор и сравнительный анализ существующего по
- •1.9 Подведение итогов анализа программ
- •2. Проектная часть
- •2.1 Программная реализация
- •2.2 Среда разработки
- •2.3 Создание первого проекта
- •2.4 Изучение составляющих проекта
- •2.5 Реализация «ping» в Android
- •2.6 Разработка пользовательского интерфейса основного экрана
- •2.7 Разработка интерфейса добавления/изменения узла
- •2.8 Разрабо тка возможности удаления узла
- •2.8 Разработка возможности сохранения карты
- •2.9 Разработка возможности загрузки карты
- •2.10 Реализация «быстрого пинга»
- •2.11 Реализация «консоли»
- •2.12 Реализация сканера сети
- •2.13 Подведение итогов разработки программы
- •3. Экономическая часть
- •3.1 Определение трудоемкости работ
- •3.2 Расчет затрат
- •3.3 Расчет эксплуатационных затрат
- •3.3 Расчет окупаемости проекта
- •3.4 Итоги экономических расчетов
- •Заключение
- •Список использованных источников
2.7 Разработка интерфейса добавления/изменения узла
Узел содержит данные:
Имя устройства;
Адрес устройства;
Максимальное время ожидания ответа;
Комментарий;
Включение звукового и визуального предупреждения о потере связи;
Выбор отображения узла на карте сети
Окно добавления или изменения сети состоит из:
TextView – текстовое поле;
EditText – поле для ввода информации;
CheckBox – флаг, имеет состояние вкл. или выкл.;
Spinner – выпадающее меню для выбора изображения;
Button – кнопка для подтверждения или отмены.
При условии если устройство изменяется, данная форма выглядит следующим образом (Рисунок 2.21).
Рисунок 2.21 Изменение свойств узла
Поля заполняются из свойств редактируемого узла. Каждое поле сопровождается пояснением. Если создается новый узел, то поля будут пустыми и с подсказками (Рисунок 2.22).
Над узлами можно выполнять действия (Рисунок 2.23):
Изменять свойства;
Дублировать на карте сети;
Очищать от линий;
Добавлять новую линию.
Рисунок 2.22 Добавление нового узла
Рисунок 2.23 Действия, применяемые к узлу
2.8 Разрабо тка возможности удаления узла
При удалении узла требуется не только удалить его из массива узлов, но и очистить связи (линии, соединяющие его с другими узлами).
array_devices.remove(selected_dev); // удаление узла с выбранным номером.
array_devices.trimToSize(); // Задается значение емкости, равное действительному количеству элементов.
Удаление связей можно реализовать удалением всех линий, у которых одна из точек – удаляемый узел, а так как массив узлов изменен, необходимо изменить все точки, у которых значение больше порядкового номера удаленного узла.
for(int i = 0; i<array_lines_start.size();i++) //для всех линий
{
if (array_lines_start.get(i)==selected_dev | array_lines_end.get(i)=
=selected_dev) //проверка на связь линии с удаляемым элементом
{
array_lines_start.remove(i); //удаление начальной точки
array_lines_end.remove(i); //удаление конечной точки
i--; //сдвиг текущего идентификатора элемента во избежание ошибки
}
}
array_lines_start.trimToSize();// Задается значение емкости, равное действительному количеству элементов
array_lines_end.trimToSize();// Задается значение емкости, равное действительному количеству элементов
for(int i = 0; i<array_lines_start.size();i++) //для каждой линии
{
if (array_lines_start.get(i)>selected_dev) //если идентификатор начала линии больше удаленного узла
{
array_lines_start.set(i,array_lines_start.get(i)-1); //присвоить предыдущее значение идентификатора узла
}
if (array_lines_end.get(i)>selected_dev) //если идентификатор конца линии больше удаленного узла
{
array_lines_end.set(i,array_lines_end.get(i)-1); //присвоить предыдущее значение идентификатора узла
}
}
2.8 Разработка возможности сохранения карты
Для возможности загружать различные карты сети или отдельные её участки (если сеть большая) имеется возможность сохранить характеристики узлов в файл для последующей загрузки в используемом устройстве или в другом. Данные записываются в файл в место, указанное пользователем с помощью разработанного интерфейса взаимодействия с системой памяти устройства. Интерфейс имеет удобную навигацию и не раздражающие глаза цветовую палитру (Рисунок 2.24).
Рисунок 2.24 Окно сохранения карты сети
Интерфейс сохранения имеет в заголовке путь к текущей папке, далее содержимое данной папки с разделением на файлы и подпапки, название для файла и кнопку «сохранить».
Доступ к файловой системе предоставляет класс java.io.File.Для получения списка файлов в выбранной папке используется функция:
java.io.File.listFiles() – возвращает массив объектов java.io.File.
setTitle(f.toString()); //установление заголовка страницы в виде пути к папке
if (!f.canRead()) //проверка наличия доступа к чтению содержимого
{
results.clear(); //нет доступа – очистка списка файлов/папок
}
Else //есть доступ
{
File[] files = f.listFiles(); //получение списка файлов, находящихся в папке
results.clear(); //очистка предыдущих результатов
for (int i = 0; i< files.length; i++) //формирование списка имен файлов
{
fileList.add(files[i].getPath().substring(files[i].getPath().lastIndexOf("/")+1);
//добавление имени файла в список
}
Collections.sort(fileList, String.CASE_INSENSITIVE_ORDER); //сортировка по имени файла
}
Полученные файлы нужно разделить на файлы и подпапки, папка определяется возможностью получения её содержимого как списка файлов, в противном случае присваивается идентификатор файла.
for (int i = 0; i< fileList.size(); i++) //операция выполняется для всех файлов папки
{
File mFile
= new
File(f+"/"+fileList.get(i));
//формируется файл для получения
содержимого
File[] files1 = mFile.listFiles(); //получение содержимое папки
if (null!=files1) //список файлов получен, следовательно это папка
isFileFolder.add(true); //добавление идентификатора папки
else
isFileFolder.add(false); //добавление идентификатора файла
}
А для отображения полученных элементов используется объект пользовательского интерфейса ListView.Он позволяет вывести список элементов с возможностью пролистывать его и обрабатывать нажатия на элементы.
При нажатии на элемент списка необходимо определить тип файла, если это папка то текущее местоположение должно смениться на новое, если это не используемый программой файл, то ничего не будет изменено. Если файл это карта сети следует перезаписать содержимое (при подтверждении пользователем)
if (isFileFolder.get(position)) //если выбранный файл папка – переход
{
String newFolder = fileList.get(position); //получение имени папки
fileList.clear(); //очищение списка текущих файлов
isFileFolder.clear(); //очищение идентификаторов текущих папок
fileList.add("..."); //добавление перехода в родительскую папку
folder = folder+"/"+newFolder; // путь к новой папке
ListDir(new File (folder)); //заполнение списка файлов и папок а также вывод на экран
}
else if (fileList.get(position).endsWith(".map"))//проверка на то что файл имеет расширение для карт сети
{
String mFile = folder+"/"+fileList.get(position); //установка пути к файлу
Func.SaveMyMap(mFile, run.array_devices,
run.array_lines_start, run.array_lines_end, run.BasicXY);//сохранение
данных
в
файл с
использованием
ранее разработанной
функцией
mySaveMap.this.finish(); //закрытие окна
}
Состав файла, хранящего карту сети можно разделить на 3 типа строк:
Строка, начинающаяся с $Basic: хранит данные о смещении всех элементов относительно координат 0;0;
Строка, начинающаяся с $Device: хранит характеристики отдельно взятого узла, в формате: $Device:<имя>;;<сетевой адрес>;;<статус>;;<координаты по Х>;;<координаты по Y>;;<время ответа>;;<звуковое и визуальное предупреждение>;;<комментарий>;
Строка, начинающаяся с $Line: хранит номера соединяемых элементов.
Все изображения для папок, файла-карты программы и для всех остальных файлов были нарисованы в редакторе векторной графики Inkscape.
