Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ol / ol / Пояснительная записка_oll.doc
Скачиваний:
32
Добавлен:
16.04.2013
Размер:
4 Мб
Скачать

1.3.3 Проектирование создания дерева и способов работы с ним

1.3.3.1 Методика построения генеалогического дерева

Основная часть работ дипломного проекта связана с созданием и визуализацией генеалогического дерева. В результате введенной информации должно получится наглядное представление этой информации.

Существуют различные подходы к построению генеалогических деревьев. Это и использование формата GEDCOM, и использование обходов бинарных и n-нарных деревьев. В проекте использован следующий подход.

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

TPerson = record

Id: integer;

pol: string[3];

MotherId: integer;

FatherId: integer;

Fam: string[80];

Name: string[50];

PatronName: string[80];

Husbend: integer;

Sist_Broth: integer;

Children: integer;

pok: integer;

date_born: string[16];

place_born:string[80];

date_death:string[16];

place_death:string[80];

cause_death:string[20];

e_mail: string[50];

home_page: string[50];

another: string[50];

id_death:boolean;

xp, yp: integer;

end;

Необходимо пояснить, что информация о людях, необходимая для осуществления визуализации генеалогического дерева, хранится в одномерном массиве PersonAr. Одному элементу этого массива соответствует запись.

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

Первое поле записи – идентификационный номер человека, Id. Следующие поля - идентификационные номера отца и матери, MotherId и FatherId. Получается, всегда есть ссылка на родителей человека. Значит, есть вся необходимая информация для того, чтобы восстановить вверх нисходящее генеалогическое дерево. Поле Husbend - идентификационный номер супруга. По нему узнаем информацию о людях, находящихся слева и справа в дереве от рассматриваемого человека с номером Id. Теперь рассмотрю поля Sist_Broth и Children. Благодаря последним идентификационным номерам есть ссылки на сестру/брата и на детей. Следовательно, можно восстановить нижнюю часть генеалогического дерева. Есть некоторая особенность у полей Sist_Broth и Children: если у человека есть несколько сестер/братьев, то человек с идентификационным номером Sist_Broth в своем поле Sist_Broth хранит ссылку на следующего сестру/брата. Так будет продолжаться до тех пор, пока не найдутся все сестры/братья, т.е. у последнего человека поле Sist_Broth будет равно нулю, ссылки ни на кого больше не будет.

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

Id

MotherId

FatherId

Husbend

Sist_Broth

Children

Рис. 1.3.3.1 Структура записи элемента массива

Соседние файлы в папке ol