СОДЕРЖАНИЕ
1. Постановка и анализ задачи
2. Разработка логической схемы данных
4. Основные алгоритмы
4.1 Описание алгоритма
4.2 Блок-схема алгоритма
5. Программная реализация
5.1 Выбор среды разработки программы
5.2 Работа с таблицами
5.3 Работа с графикой
5.4 Разработка интерфейса
5.5 Некоторые особенности алгоритмов
5.6 Тестирование
6. Описание программы
7. Инструкция по установке
8. Руководство пользователя
8.1 Главное меню
8.2 Панель быстрых кнопок
8.3 Вкладка "Таблица"
8.4 Вкладка "План"
9. Контрольный пример
Заключение
Список литературы
Приложение
Задача: разработать программу информационной поддержки создания плана местности.
Исходные данные: Windows98, система описания точек плана местности с возможностью легкой модификации, возможность графического представления плана, построение маршрутов, оценка длины маршрута, вывод информации на экран и печать.
Назначение программы – она позволяет рисовать на карте маршруты, оценивать их длину и расстояния, что может понадобиться пользователям как в личных целях (например, туристам), так и при проведении геодезических работ, работ по прокладке кабеля и трубопровода и т.д. и т.п.
Рассмотрим это задание по пунктам.
Так как мы создаем план местности, подразумевается, что координаты точки плана местности задаются в виде широты и долготы, те в градусах. При этом мы должны учитывать, что широта подразделяется на северную и южную, каждя от 0 до 90 градусов; а долгота – на западную и восточную, от 0 до 180 градусов.
Кроме координат пользователю может понадобиться: номер маршрута, чтобы осуществить рисование нескольких маршрутов, тип объекта, находящегося в данной точке, а также какие-либо дополнительные комментарии.
При таком раскладе систему описания точек плана лучше всего представить в виде таблицы, где каждая запись будет содержать обе координаты, тип объекта, номер маршрута и комментарии. При этом "возможность легкой модификации" по отношению к таблице обеспечить более просто, чем, скажем, по отношению к файлу.
Но для оценки длины маршрута, так как там вычисляется длины отрезков, удобнее будет использовать еще одну таблицу.
И можно будет ввести еще таблицу, в которую будет заноситься перечень типов объектов, чтобы пользователю было удобнее их вносить в главную таблицу.
Возможность графического представление плана означает, что пользователь должен увидеть результат работы программы на экране, либо в распечатанном виде, те должно быть наличие экранного интерфейса, чтобы пользователю было удобнее работать с такой программой.
Так же для удобства работы с графическим представлением плана необходимо реализовать возможность его масштабирования. А для наглядности можно добавить вывод на рисунок названий объектов и расстояний.
Учитывая в качестве операционной системы Windows98 и наличие экранного интерфейса, а также работу с таблицами и графикой, на мой взгляд для разработки программы больше подходит среда С++ Builder 5.
В программе для хранения данных используются таблицы: одна основная, с которой работает пользователь, и две вспомогательных, с данными которых оперирует программа.
Все таблицы хранятся в формате таблиц ParadoxDatabase, в файлах с расширением *.db.
Главная таблица состоит из шести полей со следующими характеристиками:
ID – идентификатор записи. Это поле является ключевым – то есть по нему сортируются данные в таблице. Тип – автоинкремент. Поле ID доступно только для чтения. При создании таблицы его значение равно единице, и будет увеличиваться на единицу при каждом создании новой записи. Удаление записи не изменяет значения поля ID других записей.
Latitude – содержит значение широты текущей точки на карте в формате чисел с плавающей точкой, на которые накладывается ограничение в виде области допустимых значений от –90 до 90. Положительные числа соответствуют северной широте, отрицательные – южной.
Longitude - – содержит значение долготы текущей точки на карте в формате чисел с плавающей точкой, на которые накладывается ограничение в виде области допустимых значений от –180 до 180. Положительные числа соответствуют восточной долготе, отрицательные – западной.
ObjectType – поле типа–"строка". В нем указывается тип объекта, находящегося в данной точке.
Course – поле типа "целое число". Содержит номер маршрута, к которому принадлежит данная точка.
Comments – поле типа "строка", отведено для комментариев.
Ввод значений в поля Latitude, Longitude и Course обязательно.
Вспомогательная таблица ObjectTable, хранящаяся в фале objects.db, содержит перечень типов объектов, ее присутствие в каталоге программы обязательно. Данные из этой таблицы заносятся вполе со списком, с помощью которого пользователь легко может занести нужный тип объекта в главную таблицу, не набирая его вручную. В программе возможно добавление типа объекта в таблицу, удалить тип или очистить всю таблицу. В явном виде ObjectTable не отображается.
Она имеет следующие поля:
Object_ID – идентификатор записи. Тип поля – автоинкремент.
ObjectType – тип объекта.
Вспомогательная таблица RasstTable также находится в каталоге программы в файле Rasst.db. Она используется программой в процессе рисования плана: в нее заносится индекс маршрута и расстояния его отрезков. Пользователь может посмотреть содержимое этой таблицы, отключив флажок "Скрыть таблицу расстояний".
Эта таблица содержит поля:
Course – номер маршрута. Тип поля – целое число.
Distance – расстояние, в километрах. Тип поля – число с плавающей точкой.
На рис.2.1 показана схема данных в виде таблиц и связей между ними.
Рис.2.1. Схема данных.
3. СТРУКТУРНАЯ СХЕМА ПРОГРАММЫ
Основные функции, которые необходимо реализовать в нашей программе, следуют из постановки и анализа задачи:
1)Отображение данных пользователя в виде таблицы и работа с ней.
2)Добавления и удаления типов объектов.
3)Графическое представление плана с возможностью масштабирования.
4)Работа с файлами и вывод результатов на печать.
5)Удобный пользовательский интерфейс.
Ниже приведена функциональная структурная схема программы, изображенная в виде основных модулей и связей между ними. Она наглядно представляет реализацию вышеперечисленных требований в программе.
Рис. 3.1. Функциональная структура программы.
Главной частью программы является модуль управления и формирования интерфейса. Он представляет собой главную форму, на которой находятся элементы управления, позволяющие осуществлять остальные функции, а также формирующие пользовательский интерфейс.
Основным является алгоритм построения изображения по данным из главной таблицы, реализованный в виде метода plandraw().
Ниже приведены его блок-схема и описание.
Если не активирована вкладка, на которой находится наше изображение плана, мы ее активируем.
Далее активируем кнопки увеличения масштаба и установки масштаба по умолчанию.
Подготавливаем таблицу расстояний, очистив ее от предыдущих записей.
Устанавливаем параметры фона (цвет) и рисуем его, затем устанавливаем параметры пера (толщина линии и стиль), от которых будет зависеть отображение линий маршрута на рисунке. В начале толщина линии равна единице – для рисования координатной сетки.
С помощью свойства таблицы RecordCount находим количество строк в главной таблице.
Устанавливаем указатель текущей записи на первую, и организуем цикл прохода по всем записям таблицы, в котором подсчитываем количество маршрутов.
Далее организуем цикл рисования каждого маршрута, в котором количество повторений определяется ранее подсчитанным количеством маршрутов.
В самом начале цикла осуществляем подготовку для отображения масштаба – переменной масштаба присваиваем коэффициент увеличения (в целых единицах), для обеих полос прокрутки определяем максимальную величину, которая зависит от степени увеличения и размеров рисунка.
Если номер маршрута равен нулю, тогда выполняется условие рисования координатной сетки – меридианов и параллелей. Сначала выполняется цикл рисования меридианов – мы проходим от 0 до 360 градусов с шагом, зависящим от степени увеличения (15, 6, 3, или 1 градусов), причем возле каждого меридиана подписывается соответствующий ему градус долготы (восточная долгота – со знаком "+", западная – со знаком "-"). Нулевой меридиан изображается черным цветом. Аналогичные действия осуществляются и в цикле рисования параллелей, единственное отличие – цикл проходит от 0 до 180 градусов. Со знаком "+" обозначается северная широта, со знаком "-" - южная.
Меняем толщину линии на 2, для изображения линий маршрутов.
Создаем три массива, в которые будем заносить индексы записей текущего маршрута и координаты. Далее организуем цикл, в котором проходим по записям таблицы и для текущего маршрута заполняем эти массивы. Причем в массивы координат заносят уже отмасштабированные величины. В этом же цикле подсчитываем количество точек маршрута.
В следующем цикле сортируем содержимое массива индексов, чтобы потом нарисовать точки маршрутов в том порядке, в котором они находятся в таблице.
Задаем цвет линии в зависимости от номера маршрута. И организуем цикл, рисующий линии.
В цикле рисования линий проделываем следующее: учитывая позиции лент прокрутки, вычисляется положение окна по отношению к карте, и относительно этого положения вычисляются координаты точки в окне. Если у нас первое прохождение, то мы просто перемещаем курсор в точку с вычисленными координатами, если нет, и флажок рисования линий включен, – рисуем линию от предыдущей точки до этой. Если флажок отключен, на карте ставятся только точки.