Практикум по дисциплине Структуры и алгоритмы обработки данных
.pdf
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
Кафедра математической кибернетики и информационных технологий
Волков М.М.
ПРАКТИКУМ
(лабораторные работы № 1,2,3,4,5,6)
по дисциплине
СТРУКТУРЫ И АЛГОРИТМЫ ОБРАБОТКИ ДАННЫХ
для направления подготовки 09.03.01
Москва 2016
План УМД на 2016/17 уч.г.
ПРАКТИКУМ
по дисциплине
СТРУКТУРЫ И АЛГОРИТМЫ ОБРАБОТКИ ДАННЫХ
Составитель М.М. Волков
Издание утверждено советом факультета ИТ. Протокол № 6 от 17.03.2016
2
Введение Общие сведения
В ходе данного лабораторного практикума рассматривается создание мобильных приложений и серверной части для них. Мобильные устройства и сервер можно рассматривать, как связанную систему. Система состоит из сервера, расположенного в облачной инфраструктуре, и мобильных клиентов. В качестве мобильных устройств используются смартфоны работающие на базе операционной системы Android.
Рис. 1 Схема взаимодействия компонентов системы
Взаимодействие клиента с сервером
Передача данных между сервером и клиентами происходит при помощи
REST API.
REST (Representational state transfer) – это стиль архитектуры про-
граммного обеспечения для распределенных систем, таких как World Wide Web, который, как правило, используется для построения веб-служб. Системы, поддерживающие REST, называются RESTful-системами. В общем случае REST является интерфейсом управления информацией.
Каждая единица информации однозначно определяется URL – это значит, что URL, по сути, является первичным ключом для единицы данных. Т.е. например, третья книга с книжной полки будет иметь вид /book/3, а 35 страница в этой книге — /book/3/page/35. Не имеет значения, в каком формате находятся данные по адресу /book/3/page/35 – это может быть и HTML, и отсканированная копия в виде jpeg-файла, и документ Microsoft
Word.
Управление информацией сервиса основывается на протоколе передачи данных. Наиболее распространенный протокол HTTP. Для HTTP действие над данными задается с помощью методов: GET (получить), PUT (добавить, заменить), POST (добавить, изменить, удалить), DELETE (удалить). Таким образом, действия CRUD (Create-Read-Updtae-Delete) могут выпол-
3
няться как со всеми четырьмя методами, так и только с помощью GET и
POST.
Вот как это будет выглядеть на примере: GET /book/ — получить список всех книг GET /book/3/ — получить книгу номер 3
PUT /book/ — добавить книгу (данные в теле запроса) POST /book/3 – изменить книгу (данные в теле запроса)
DELETE /book/3 – удалить книгу
Использование REST для построения Web-сервисов. Для каждой единицы информации (info) определяется пять действий. А именно: GET /info/ (Index) – получает список всех объектов. Как правило, это упрощенный список, т.е. содержащий только поля идентификатора и названия объекта, без остальных данных. GET /info/{id} (View) – получает полную информацию о объекте. PUT /info/ или POST /info/ (Create) – создает новый объект. Данные передаются в теле запроса без применения кодирования, даже urlencode. В PHP тело запроса может быть получено таким способом:
function getBody() {
if (!isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = file_get_contents("php://input"); return $HTTP_RAW_POST_DATA;
}
POST /info/{id} или PUT /info/{id} (Edit) – изменяет данные с идентификатором {id}, возможно заменяет их. Данные так же передаются в теле запроса, но в отличие от PUT здесь есть некоторый нюанс. Дело в том, что POST-запрос подразумевает наличие urldecoded-post-data. Т.е. если не применять кодирования – это нарушение стандарта.
DELETE /info/{id} (Delete) – удаляет данные с идентификатором {id}.
4
Список лабораторных работ
1.Установка серверной инфраструктуры, среды разработки мобильных приложений.
2.Создание базы данных на сервере, написание скрипта получения данных из базы.
3.Создание базового мобильного приложения; элементы управления; получение GPS координат.
4.Получение информации с сервера, отображение в в виде списка. Получить и отобразить в мобильном приложении информацию в со-
ответствии с вариантами второй лабораторной работы. 5. Передача информации на сервер
Передать на сервер информацию в соответствии с вариантами второй лабораторной работы, добавить передачу изображения.
6. Обмен информацией между двумя смартфонами.
Организовать передачу данных между двумя смартфонами через промежуточное звено – сервер.
5
Возможные варианты заданий для курсового проектирования
1.Задача получения данных с сервера – получить с сервера список данных в виде JSON массива. В массиве могут встречаться ссылки на изображения. Отобразить данные на экране.
2.Получить с сервера список точек, которые необходимо посетить, и сделать фото. В мобильном приложении реализовать ведение в сторону точки.
3.Получить с сервера список точек, которые необходимо посетить, и сделать фото. В мобильном приложении реализовать ведение в сторону точки. Сделать фото в нужную сторону, в приложении использовать встроенный в смартфон компас.
4.Передать на сервер координаты (широта, долгота) точки, которую необходимо посетить.
5.Передать на сервер координаты (широта, долгота) точки, которую необходимо посетить, передать фото из данной точки.
6.Получить с сервера координаты и фото с точки. Найти, в каком направлении сделано фото, с помощью встроенного в телефон компаса и сверить с информацией на сервере.
7.Два смартфона передают на сервер свои координаты. Получить с сервера координаты и найти друг друга.
8.Два смартфона передают на сервер свои координаты. Получить с сервера координаты и найти друг друга. Посчитать время, за которое был выполнен поиск.
9.Задача хранения данных – разработать программу с графическим интерфейсом для хранения и изменения данных о результатах сессии. Предусмотреть ввод информации о студентах – фото, ФИО, группа, оценки.
6
Лабораторная работа № 1
План работы
1.Установка и настройка локального сервера Apache.
2.Установка и настройка PHP интерпретатора.
3.Установка локального сервера баз данных MySQL.
4.Настройка файла httpd.conf.
5.Настройка PHP интерпретатора.
6.Тестирование PHP интерпретатор.
7.Тестирование связку с сервером баз данных MySQL.
8.Установка phpMyAdmin.
Варианты
1.Создать на сервере таблицу для хранения информации о точках на карте (Широта, Долгота, Название).
2.Создать на сервере таблицу для хранения информации о книгах (Название, Автор, Издательство, Год, Город).
3.Создать на сервере таблицу для хранения информации о студентах (ФИО, Группа, Курс, Факультет).
4.Создать на сервере таблицу для хранения информации об автомобилях (Марка, Модель, Мощность, Тип кузова).
5.Создать на сервере таблицу для хранения информации о городах (Название, Страна, Население).
6.Создать на сервере таблицу для хранения информации о странах (Название, Континент, Форма правления).
7.Создать на сервере таблицу для хранения информации о преподавателях (ФИО, Кафедра, Предметы, Науч. степень).
8.Создать на сервере таблицу для хранения информации о фильмах (Название, Режиссер, Жанр, Год).
9.Создать на сервере таблицу для хранения информации об операциях на АЗС (Дата, Топливо, Цена, Количество, Колонка).
10.Создать на сервере таблицу для хранения информации о телефонных звонках (Исходящий номер, Входящий номер, Дата, Длительность).
11.Создать на сервере таблицу для хранения информации о почтовых отправлениях (Адрес отправителя, Адрес адресата, Дата, Почтовое отделение).
12.Создать на сервере таблицу для хранения информации о товарах (Наименование, Цена, Шкаф, Полка).
13.Создать на сервере таблицу для хранения информации о продуктах (Название, Сорт, Цена, Количество).
14.Создать на сервере таблицу для хранения информации о музыкальных группах (Название, Жанр, Страна, Год основания).
7
15.Создать на сервере таблицу для хранения информации о музыкальных композициях (Название, Исполнитель, Длительность, Жанр).
16.Создать на сервере таблицу для хранения информации о банках (Название, Капитализация, Город, КПП).
17.Создать на сервере таблицу для хранения информации о предпринимателях (ФИО, Город, Дата рождения, ИНН).
18.Создать на сервере таблицу для хранения информации о музыкальных альбомах (Название, Исполнитель, Год, Количество композиций).
19.Создать на сервере таблицу для хранения информации о программах (Платформа, Тип, Лицензия, Разработчик).
20.Создать на сервере таблицу для хранения информации о языках программирования (Название, Назначение, Год, Создатель).
21.Создать на сервере таблицу для хранения информации о футбольных командах (Название, Страна, Тренер, Лига).
22.Создать на сервере таблицу для хранения информации о самолётах (Название, Вместимость, Мощность, Тип).
8
Лабораторная работа № 2
Создание базы данных на сервере, написание скрипта получения данных из базы
Задача: Создать на сервере базу данных и таблицу в этой базе. Подключиться к базе данных при помощи скрипта на php.
Вывод данных из таблицы
<?
$hostname = "localhost"; //хост БД $username = "root"; //логин БД $password = "root"; //пароль БД $dbName = "c1272"; //название БД
//Таблицы БД $table = "data"; ?> <?
require_once "db_var.php"; /* Создаем соединение */
$link = mysql_connect($hostname, $username, $password) or die (mysql_error());
mysql_set_charset('utf8',$link);
/* Выбираем базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die (mysql_error());
/* Составляем запрос для извлечения данных из полей */
$query = "SELECT id, Latitude, Longitude, URL, Flag, Data, Defect FROM $table";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */ $res = mysql_query($query) or die(mysql_error());
/* Выводим данные из таблицы */ //$json_data = array
('id'=>1,'name'=>"ivan",'country'=>'Russia',"office"=>array("yandex","
management"));
//echo json_encode($json_data);
$seaLevel=0; //echo "{";
$stack = array(); $count=0;
/* Цикл вывода данных из базы конкретных полей */ while ($row = mysql_fetch_array($res)) {
$json_data = array ('id'=>$row['id'],'Latitude'=>$row['Latitude'],'Longitude'=>$row['Longi tude'],'Altitude'=>$seaLevel,'URL'=>$row['URL'],'Type'=>$row['Defect'], 'Date'=>$row['Data'],'Done'=>$row['Flag']);
array_push($stack, $json_data); $count++;
}
echo json_encode(array('defectCount'=>$count,'defects'=>$stack));
/* Закрываем соединение */ mysql_close();
?>
9
Лабораторная работа № 3
Создание базового мобильного приложения, элементы управления, получение GPS координат
Задача: Создать мобильное приложение, получающее GPS координаты и выводящее их на экран.
ВonCreate определяем TextView-компоненты и получаем LocationManager, через который и будем работать.
ВonResume привязываем слушателя с помощью метода requestLocationUpdates. На вход передаем:
- тип провайдера: GPS_PROVIDER или NETWORK_PROVIDER;
- минимальное время (в миллисекундах) между получением данных. Я укажу здесь 10 секунд, мне этого вполне хватит. Если хотите получать координаты без задержек – передавайте 0. Но учитывайте, что это только минимальное время. Реальное ожидание может быть дольше; - минимальное расстояние (в метрах). Т.е. если ваше местоположение изменилось на
указанное количество метров, то вам придут новые координаты; - слушатель, объект locationListener, который рассмотрим ниже.
ВonPause отключаем слушателя методом removeUpdates.
locationListener – слушатель, реализует интерфейс LocationListener с методами: onLocationChanged – новые данные о местоположении, объект Location. Здесь мы вызываем свой метод showLocation, который на экране отобразит данные о местоположении.
onProviderDisabled – указанный провайдер был отключен юзером. В этом методе вызываем свой метод checkEnabled, который на экране обновит текущие статусы провайдеров.
onProviderEnabled – указанный провайдер был включен юзером. Тут также вызываем checkEnabled. Далее методом getLastKnownLocation (он может вернуть null) запрашиваем последнее доступное местоположение от включенного провайдера и отображаем его. Оно может быть вполне актуальным, если вы до этого использовали какое-либо приложение с определением местоположения.
onStatusChanged – изменился статус указанного провайдера. В поле status могут быть значения OUT_OF_SERVICE (данные будут недоступны долгое время),
TEMPORARILY_UNAVAILABLE (данные временно недоступны), AVAILABLE (дан-
ные доступны). В этом методе мы просто выводим новый статус на экран.
Провайдеры включаются и отключаются в настройках системы. Тем самым, просто определяется доступен ли провайдер для получения от него координат. Чуть позже увидим, как можно отправить юзера в эти настройки. Программное включение/выключение провайдеров через стандартные методы недоступно.
Далее идут свои методы.
showLocation на вход берет Location, определяет его провайдера методом getProvider и отображает координаты в соответствующем текстовом поле.
10
