РАЗРАБОТКА ПРИЛОЖЕНИЙ ДЛЯ ОБРАБОТКИ СТРУКТУР ДАННЫХ СРЕДСТВАМИ C++ BUILDER - Студенческий научный форум

VI Международная студенческая научная конференция Студенческий научный форум - 2014

РАЗРАБОТКА ПРИЛОЖЕНИЙ ДЛЯ ОБРАБОТКИ СТРУКТУР ДАННЫХ СРЕДСТВАМИ C++ BUILDER

Огородников А.С. 1
1Томский Политехнический Университет, Институт Кибернетики, кафедра Прикладной Математики
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Аннотация

В данной работе представлена разработка классов, позволяющих отображать картографическую информацию о системах дорог, связывающих между собой населённые пункты (города и посёлки). Предусмотрены элементы навигации по карте.

Ключевые слова: класс, наследник, метод класса, конструктор, деструктор, объектно-ориентированное программирование, модульное программирование, визуальные компоненты, обработчик события, концептуальная модель, карта, маршрут, координаты, навигация по карте.

Условие задачи

Введение

  1. Основная часть

    1. Постановка задачи

    2. Анализ и исследование задачи, построение модели

    3. Разработка классов

    4. Формализация расчетов

      1. Алгоритмы методов класса

      2. Алгоритмы, обеспечивающие функциональность приложения

Введение

Геоинформационные системы — системы, предназначенные для сбора, хранения, анализа и графической визуализации пространственных данных и связанной с ними информации о представленных в ГИС объектах. Другими словами, это инструменты, позволяющие пользователям искать, анализировать и редактировать цифровые карты, а также дополнительную информацию об объектах.

Географические Информационные Системы прочно вошли в нашу жизнь. Известно, что лишь 15% всей информации не имеет территориальной привязки, а это значит, что остальные 85% – это информация, которая тем или иным образом связана с ГИС.

Геоинформационные системы позволяют максимально точно учитывать площади различных участков и координаты объектов. Использование ГИС значительно облегчает и делает гораздо более эффективной деятельность людей в самых различных сферах. Особо можно подчеркнуть важность ГИС для деятельности, связанной с управлением. Они облегчают процесс обеспечения и поддержания правопорядка и высокого уровня безопасности, а также применяются во многих областях деятельности.

Реализация геоинформационных проектов, создание ГИС в широком смысле слова, включает этапы:

  • предпроектные исследования:

    • изучение требований пользователя,

    • изучение функциональных возможностей используемых программных средств ГИС,

    • технико-экономическое обоснование,

    • оценку соотношения «затраты/прибыль»;

  • системное проектирование ГИС:

    • стадию пилот-проекта,

    • разработку ГИС;

    • тестирование на небольшом территориальном фрагменте или тестовом участке, прототипирование- создание опытного образца(прототипа);

  • внедрение ГИС;

  • эксплуатацию и использование.

Научные, технические, технологические и прикладные аспекты проектирования, создания и использования ГИС изучаются геоинформатикой.

Геоинформатика – наука, технология и производственная деятельность по научному обоснованию, проектированию, созданию, эксплуатации и использованию географических информационных систем, по разработке геоинформационных технологий, по приложению ГИС для практических и научных целей.

Основные задачи геоинформатики

Создание баз геоданных (геокодирование) и управление ими

  • Анализ и моделирование геоданных

  • Разработка программного обеспечения для первых двух задач

Постановка задачи

Требуется разработать класс, позволяющий отображать картографическую информацию о системах дорог, связывающих между собой географические объекты двух видов: населенные пункты (города и поселки) и архитектурные сооружения (здания/дома). Предусмотреть элементы навигации по карте.

Анализ и исследование задачи, модели

Поскольку при разработке приложения используется технология проектно-ориентированного программирования, на начальном этапе разработки решения задачи требуется определиться с физическим объектом.

В качестве физического объекта в представленной задаче является физическая карта, представленная множеством населенных пунктов. Для отдельного пункта в данной задаче наиболее подходят для выделения данные свойства:

  • название,

  • координаты на карте.

Конечной целью задачи является вывод информации о выбранном маршруте.

Выдача результатов производится в виде списка населенных пунктов и расстояния между ними, а также изображение выбранного маршрута.

Информационная модель, которая описывает отдельный населённый пункт «Множества населенных пунктов» целесообразно описать структурой, которая содержит:

  • название пункта - включает в себя до 15 символов,

  • координаты на карте задаются двумя вещественными значениями.

Выделение информационного объекта

Математическим объектом в данной задаче является «Список населенных пунктов» с параметрами: названием и координатами (x;y).

Анализ технических и программных средств

Для реализации приложения наиболее рационально использовать среду C++ Builder, поскольку это позволит разработать интерфейс и реализовать функционирующие расчетные формулы.

Разработка математической модели

Математическая модель – система отношений формул, уравнений, неравенств, которые отражают основные свойства объекта. Для решения поставленной задачи возможно использование векторной алгебры как математической модели для вычисления расстояния между городами, что позволило бы облегчить решение. Применимыми к данной задаче является формула нахождения длины векторы, у которого заданы начало и конец: , где - координаты точки A, а - координаты точки B. В нашем случае роль точек A и B будут играть координаты городов на карте.

Разработка требований к приложению

Требования к приложению следующие: пользователю предоставляется возможность:

  • Выбрать карту, с которой планирует работать.

  • Посмотреть координаты городов, находящихся на карте.

  • Выбрать маршрут из выпадающего списка.

  • Посмотреть информацию о выбранном маршруте.

  • Изучить карту маршрута.

  • Отредактировать (если понадобится) информацию о маршруте

  • Сохранить в файл информацию о маршруте

Разработка концептуальной модели пользовательского интерфейса

Концептуальная модель: первый важный шаг в проектировании пользовательского интерфейса. В процессе разработки пользовательского интерфейса абстрактные концепты концептуальной модели переводятся в конкретные представления и действия пользователя. Для достижения оптимальных результатов пользовательский интерфейс проектируется после разработки концептуальной модели. Сценарии при этом могут быть переписаны на уровне пользовательского интерфейса.

Вопрос.

Ответ.

Для кого создается программный продукт?

Любитель географии, или, к примеру, для путешественника. Это может быть школьник, студент, офисный работник. В общем, человек любого возраста, любого образования.

Какими знаниями обладает пользователь?

Тут возможны несколько вариантов: программой может пользоваться человек как с высшим образование, так и человек, не имеющий никакого образования.

Цели. Для чего проектируется программный продукт?

Целью работы является программа, которая будет показывать нужную пользователю информацию, будет удобной в использовании.

Для получения информации в целом о стране, городе или посёлки. О достопримечательностях, а также о системах дорог, которые связывают различные географические объекты.

Какие проблемы есть сейчас у пользователей?

Информация не организована. Чтобы получить интересующую информацию, пользователь должен посещать различные сайты в интернете, тратить своё личное время. Также возможно отсутствие нужной информации.

Как пользователи представляют себе данные, которыми будет управлять программа?

Список географических карт со стандартными объектами.

Возможные ситуации, возникающие при использования конкретного сценария

В списке отсутствует нужная карта, город (посёлок). Нет информации о географическом объекте. Отсутствует информация о системах дорог, связывающих населённые пункты, а также может отсутствовать информация о разрушениях некоторых объектов, в результате нештатных ситуаций (к примеру: землетрясения, обвалы дорог и т.п.)

Какая информация может понадобиться участникам сценария для достижения их целей?

Информация о городе (посёлке), информацию о географических объектах, координаты, наименования., информация о дорогах связывающих населённые пункты.

Что пользователь хочет получить на выходе (решение задачи). В каком виде?

Информацию об объектах, расположенных на данном участке карты, также координаты этих физических объектов, информацию о дороге, которая связывает между собой 2 или более городов, посёлков (архитектурных сооружений)

Объекты: карта, страна, список населённых пунктов, архитектурные сооружения, дороги.

Действия: просмотреть карту; добавить карту; удалить карту; получить информацию о системах дорог, выбрать маршрут, просмотреть координаты, просмотреть справочную систему(о программе, об авторе).

Рис.1. Концептуальная схема пользовательского интерфейса программы.

Разработка информационной модели объектов.

На этапе разработки концептуальной модели интерфейса приложения были выделены следующие объекты: города, маршруты, координаты.

Номер

Наименование маршрута

Координаты 1-го города

Координаты 2-го города

1

London-Nottingham

371 397

308 378

2

London-Liverpool

371 397

226 237

3

London-Oxford

371 397

305 376

4

London-Bristol

371 397

237 397

5

London-Leeds

371 397

291 205

6

London-Cambridge

371 397

376 339

7

London-York

371 397

307 385

8

Nottingham-Liverpool

308 278

226 237

9

Nottingham-Oxford

308 278

305 376

10

Nottingham-Bristol

308 278

237 397

11

Nottingham-Leeds

308 278

391 205

12

Nottingham-York

308 278

307 385

13

Nottingham-Cambridge

308 278

376 339

14

York-Liverpool

307 385

226 237

15

York-Oxford

307 385

305 376

16

York-Bristol

307 385

237 397

17

York-Leeds

307 385

291 205

18

York-Cambridge

307 385

376 339

19

Liverpool-Oxford

226 237

305 376

20

Liverpool-Bristol

226 237

237 397

21

Liverpool-Leeds

226 237

291 205

22

Liverpool-Cambridge

226 237

376 339

23

Oxford-Bristol

305 376

237 397

24

Oxford-Leeds

305 376

291 205

25

Oxford-Cambridge

305 376

237 339

26

Bristol-Leeds

237 397

291 205

27

Bristol-Cambridge

237 397

376 339

28

Leeds-Cambridge

391 205

376 339

Разработка классов

Для решения задачи на машине нужно перейти от математической модели к программной модели. Такой программной моделью может являться класс. Из описания математического объекта, очевидно, что в поля класса следует поместить массив населенных пунктов, где каждый населенный пункт описывается названием и координатами.

Поскольку для описания отдельного населенного пункта требуется использовать разнородные данные, целесообразно объединить эти данные в одну структуру. Назовем эту структуру именем InfoMap. Интерфейс структуры:

Интерфейс структуры Town:

struct InfoMap

{

AnsiString NamePunkt; // Наименование населённого пункта

Coord PlacePunkt; // координаты

};

И тогда математический объект «Список населенных пунктов» можно будет представить массивом структур типа InfoMap. Такой массив структур характеризуется наименованием (назовем InfoMapNamePunkt) и количеством городов (FCount). Эти две характеристики будут определять поля класса. Также следует упомянуть о переменной, используемой для чтения имени файла (MainNameFile).

Модель поведения - совокупность методов, необходимых для решения, набора задач, определенного в классе. В нашем случае класс должен предоставлять пользователям возможности решать задачи, заявленные в условии:

  • отображать информацию о маршруте;

  • определять координаты;

  • извлекать данные из файла и записывать результаты в файл.

Сформулированные выше возможности будут определять поведение объектов класса и должны быть заложены в методы класса.

Естественно, что кроме заявленных выше методов любой класс, как и другой класс, должен иметь несколько конструкторов и деструктор.

При проектировании классов будем исходить из предположения, что задача со временем может претерпевать изменения, связанные с возрастанием и изменением запросов пользователя. Поэтому необходимо будет предусмотреть механизм, который бы позволял мобильно изменять интерфейсы классов, не затрагивая их реализацию. С этой целью имеет смысл сразу проектировать семейства классов.

Проектируя семейство классов, распределим, какие методы будут реализованы в базовом классе и какие из них будут абстрактными; сколько необходимо потомков и каким набором методов и свойств они должны обладать.

В рамках поставленной задачи целесообразно выделить семейство из трех классов. В базовый класс (назовем его TMap) поместить методы, общие для перечисленных задач, в класс – наследник первой очереди (TCalc) поместить методы решения этих перечисленных задач. В таком представлении два класса будут мобильными, то есть они практически без исправлений могут компилироваться под любой системой программирования: и для C++, и для различных операционных систем.

Описание базового класса

Исходя из вышеизложенного, в базовый класс целесообразно включить следующие методы: три конструктора, деструктор, функция для чтения информации о городах и свойства. Интерфейс базового класса представлен на листинге 2.

Интерфейс базового класса:

class TMap

{

protected: //передать потомкам следующие параметры

InfoMap *InfoMapNamePunkt; //список городов

int FCount; //кол-во городов

AnsiString MainNameFile; //для чтения имени файла

public:

TMap(); //конструктор без параметров

TMap(AnsiString NameFile); //конструктор "привязать к файлу и взять информацию из файла"

~TMap(){}; //деструктор

void PutInfo (TComboBox* aCmb); //функция для вывода информации о городах

__property AnsiString MNF={ read = MainNameFile, write = MainNameFile};

};

Описание методов базового класса

  1. Конструктор без параметров:

TMap ();

Он не имеет параметров. В нем поля класса инициализируются нулевыми значениями.

Алгоритм:

  1. Обнуляется список городов

  2. Обнуляется количество городов

  3. Обнуляется переменная для имени файла

  4. Обнуляется указатель на массив

Описание конструктора представлено на листинге 3.

Конструктор без параметров:

TMap::TMap()

{

NamePunkt=NULL;

FCount=NULL;

MainNameFile=NULL;

}

  1. Конструктор «создать массив по числу городов»:

TMap(int NewCount);

Имеет один входной параметр – число городов. В конструкторе отводится память под массив структур.

Описание конструктора представлено на листинге 4.

Листинг 4. Конструктор «создать массив по числу»

TTowns::TTowns(int NewCount)

{

FCount = NewCount;

TownName = new Town[FCount];

a = new int[FCount];

}

3. Функция, выводящая структурную информацию в ComboBox.

void TTowns::GetInfo(TComboBox*aLisb);

Имеет один входной параметр – указатель на ComboBox. В алгоритме функции используются следующие вспомогательные переменные: aList – для считывания всей информации из файла, Word – для чтения очередного слова, Str[100] – для чтения очередной строки, Ptr – вспомогательная переменная для считывания очередной строки, Size – для вычисления длины строки.

Решение поставленной задачи сводится к выполнению следующих шагов:

  1. описываются вспомогательные переменные

  2. определяется количество пунктов – поле FCount

  3. отводится память под массив структур

  4. выполняется цикл по числу пунктов. В цикле:

    1. считывается очередная строка

    2. копируется строка из переменной типа AnsiString в переменную типа Char

    3. определяется длины строки

    4. добавляется символ пробела и символ окончания строки и перехода на следующую

    5. выделяется первое слово

    6. помещается это слово в структуру

    7. выделяется второе слово

    8. помещается это слово в структуру

    9. выделяется третье слово

    10. помещается это слово в структуру

  5. помещение в ComboBox городов

 

Просмотров работы: 2510