- •Г осударственный комитет рф по высшему образованию
- •(Технический университет)
- •Содержание дипломного проекта:
- •1. Специальная часть. Разработка программного обеспечения «Хроника моего рода».
- •2. Технологическая часть. Технология разработки программных систем.
- •Постановка задачи………………………………………………………………..
- •Введение.
- •3. Организационно-экономическая часть. Расчет затрат на разработку программного продукта.
- •4. Производственно-экологическая часть. Анализ воздействия вредных факторов на оператора эвм.
- •4.1. Введение ……………………………………………………………………………… 94
- •1.1 Техническое задание
- •Назначение разработки
- •1.1.2 Технические требования
- •1.1.3 Технико-экономические показатели
- •1.1.4 Стадии и этапы разработки
- •1.2 Эскизный проект
- •1.2.1 Постановка задачи
- •1.2.1.1 Назначение системы
- •1.2.1.2 Общая структура системы
- •1.2.1.3 Требования к программному обеспечению комплекса
- •1.2.1.4 Требования к составным частям программного комплекса
- •Основные требования к экранной форме "Генеалогическое дерево":
- •Основные требования к экранной форме «Ввод информации»:
- •Основные требования к экранной форме «Справка»:
- •Основные требования к защите программного продукта:
- •1.2.2 Обзор аналогичных программных продуктов, имеющихся на рынке
- •Р ис. 1.2.2.1 Главное окно программы GenoPro.
- •1.2.3 Выбор языка программирования
- •1.3. Технический проект
- •Общий алгоритм работы программы
- •Алгоритм ввода и хранения информации
- •1.3.3 Проектирование создания дерева и способов работы с ним
- •1.3.3.1 Методика построения генеалогического дерева
- •Алгоритм отображения дерева
- •Алгоритм выделения отдельной ветви дерева
- •Pис.1.3.3.3 Схема алгоритма рекурсивной процедуры Potomok(Id, pos).
- •Алгоритм объединения деревьев.
- •Рабочий проект
- •1.4.1 Общий вид программного продукта
- •Инсталляция программного комплекса
- •1.4.3 Защита программного продукта
- •1.4.4 Разработка программы
- •Тестирование надежности программного продукта
- •1.4.6 Зависимость размера файлов родословных и машинного времени построения генеалогического дерева от количества персон.
- •1.5 Выводы
Алгоритм отображения дерева
Вначале приведены общепринятые принципы построения деревьев (рис. 1.3.3.2.1). При построении генеалогического дерева сейчас придерживаются некоторых стандартных простых условных обозначений и правил.
Мужчины всегда изображаются в виде квадратов, женщины - в виде окружностей.
Графически изображаемые связи между членами родословной бывают только трех видов: "мужья-жены", "дети-родители" и "братья-сестры".
Ваши супруги, братья и сестры (в т.ч. двоюродные и троюродные) всегда изображаются на одном горизонтальном уровне с Вами (т.е. в одном поколении). Разница в возрасте не играет никакой роли.
Ваши дети изображаются на горизонтальном уровне ниже Вашего, а Ваши родители - на горизонтальном уровне выше Вашего. То же самое относится к детям и родителям всех Ваших братьев и сестер.
Все поколения нумеруются сверху вниз римскими цифрами, а все индивидуумы в каждом поколении - слева направо арабскими цифрами. Это позволяет обозначить каждого человека личным идентификационным номером (например - III:15, что означает 15-й индивидуум в третьем поколении).
Родословное древо выглядит красиво и наглядно, но оно не может дать подробную информацию об упоминаемых в нем личностях.
Рис. 1.3.3.2.1 Общепринятый принцип построения деревьев
В общем алгоритме программы рис.1.3.1 этот этап записан как просмотр дерева. На рис. 1.3.3.2.2 графически показан алгоритм, использованный для визуализации дерева. В программе данные алгоритмы реализованы в модуле Pr1.pas. Главный алгоритм состоит из двух процедур CreateMas и DrawTree, включающих в себя еще процедуры.
Рис. 1.3.3.2.2 Общий алгоритм рисования дерева
На рисунках 1.3.3.2.3 и 1.3.3.2.4 алгоритмы процедур CreateMas и DrawTree представлены подробнее.
CreateMas формирует массив pArPok, который будет удобен для осуществления визуализации генеалогического дерева. На том этапе, когда пришел этап рисования дерева, данные находятся в одномерном массиве записей PersonAr. Данные поступают в массив из файла *.tre. На месте * обычно записывается фамилия родословной. Процедура CreateMas включает в себя еще процедуры: CreateArpok, SortArpok, FormXY, SizePanel.
CreateArpok: создаем двумерный массив pArPok из массива PersonAr таким образом, чтобы на каждой строке массива находились люди одного поколения. Причем первой строчке массива соответствует самое старшее поколение людей, последней –самое младшее.
Рис. 1.3.3.2.3 Схемы алгоритма процедуры Рис. 1.3.3.2.4 Схема алгоритма процедуры создания двумерного рисования дерева (DrawTree).
массива (CreateMas).
SortArpok: проводим сортировку массива pArPok так, чтобы в каждой строке массива записи, соответствующие мужу и жене, находились рядом. Это будет в дальнейшем удобно для рисования самих узлов, отображающих этих людей и связей между ними.
FormXY: формируются координаты каждого узла-человека. В каждой записи есть поля xp и yp. До этого момента этим координатам присвоены нули. Затем эти поля записи равны тем координатам экрана, на местах которых будут находится узлы дерева – кружочки или квадратики.
SizePanel: рассчитываются получившиеся размеры рисунка дерева.
После выполнения этих процедур корректируются координаты узлов дерева в соответствии с размерами рисунка дерева и экрана. Массив сформирован должным образом. Далее алгоритм переходит к процедуре DrawTree.
Процедура DrawTree осуществляет непосредственно рисование самого дерева. Сначала рисуются узлы дерева. Если персона женского пола, то рисуется розовый кружочек, мужского пола – голубой квадратик. Далее прорисовываются горизонтальные линии-связи, соединяющие мужа и жену, затем вертикальные линии-связи, соединяющие родителей и их детей. Рисование связи мама-папа, не находящихся в браке, но имеющих общих детей, отображается горизонтально пунктирной линией. Эта линия будет чуть ниже, чем линия, соединяющая мужа и жену. Это линия выполняется следующим блоком алгоритма. Далее выполняется линия-связь мама-ребенок или папа-ребенок, т.е. известен только один родитель. Если муж и жена находятся в разных поколениях, то эта связь – кривая линия. Более подробно все эти блоки рисования будут рассмотрены ниже – в рабочем проекте.
