- •Г осударственный комитет рф по высшему образованию
- •(Технический университет)
- •Содержание дипломного проекта:
- •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 Выводы
Алгоритм выделения отдельной ветви дерева
Задача этого алгоритма состоит в следующем. Пользователю предлагается полный список людей рассматриваемого им дерева. Из этого списка пользователь выбирает того человека, потомков которого он хочет увидеть. Потомки и линии, связывающие их с выбранным человеком, выделяются более ярким цветом.
Pис.1.3.3.3 Схема алгоритма рекурсивной процедуры Potomok(Id, pos).
Данный алгоритм показан на рис. 1.3.3.3 и осуществляется модулем программы SelFam.pas и процедурой DrawBranch, находящейся в модуле Pr1.pas. В общем алгоритме программы переход к рассматриваемому алгоритму происходит после просмотра генеалогического дерева.
Суть работы алгоритма:
Выбираем из предложенного списка нужного человека и запоминаем его идентификационный номер Id. Присваиваем идентификатору Idbranch значение true. Этот идентификатор будет показывать, что надо рисовать выделенную ветвь при отображении дерева. Процедура Potomok(Id,pos) вызывается рекурсивно, ее цель сформировать массив Mas, в котором будут находиться только те, кто является потомком выбранного человека. На первое место массива Mas заносится тот самый выбранный человек. В качестве входных параметров в процедуре Potomok(Id,pos) номер Id – тот, чьих потомков ищем, Pos – индекс в массиве Mas – место, куда записывается очередной найденный потомок.
Если у человека нет детей и сестер/братьев, то выходим из алгоритма.
Если есть сестры/братья, то проверяем одни ли у них родители. Родители одни – записываем найденного человека в массив Mas. После этого вызываем рекурсивно процедуру Potomok(Id,pos) уже для найденного человека. Так будет продолжаться, пока у найденных сестер/братьев будут находиться дети или их сестры /братья. Если таковых нет, то в массив заносится ребенок выбранного нами человека и вызывается процедура уже для него. Таким образом, в массиве Mas окажутся все потомки выбранного пользователем человека. Можно рисовать. Но в рисовании есть тоже некоторые особенности, которые выполняет процедура DrawBranch.
Процедура DrawBranch вызывается при рисовании дерева, если идентификатор Idbranch равен true. В этой процедуре почти так же, как и в DrawTree учитываются все особенности линий-связей. Все элементы массива Mas рисуются цветом, отличным от цвета всего дерева.
Так как в рассмотренном алгоритме основную функцию выполняет рекурсивно вызываемая процедура Potomok(Id,pos), то на рисунке 3.9 приведена схема алгоритма этой процедуры.
Алгоритм объединения деревьев.
Задача алгоритма заключается в объединении того дерева, с которым пользователь в данный момент работает с деревом, которое пользователь выберет из предложенного списка. Объединяются только те деревья, в которых есть общие люди. То есть если две персоны поженились и у них есть свои родословные, то их можно объединить.
Данный алгоритм показан на рис. 1.3.3.4 и осуществляется модулем программы Combine.pas.
Рассмотрю сам алгоритм.
На начальном этапе дерево, с которым мы работаем, находится в массиве PersonAr. В массив PersonAr1 считываем дерево, с которым будем объединять. Сравниваем два массива на предмет общих людей. Присваиваем флажку Id единичку, если общие люди есть. Затем делаем проверку на этот флажок, если не единица, то показываем форму fmSugest с предупреждением «В деревьях нет общих людей». Затем предлагается выбрать другое для объединения дерево или выйти из задачи объединения.
Общие люди в двух деревьях есть: дополняем массив PersonAr массивом PersonAr1, т.е. вторая половина массива PersonAr это массив PersonAr1. При записи меняем идентификаторы на соответствующие в массиве PersonAr. Получается, что в массиве два одинаковых элемента – в первой и второй половинах массива. В первой половине массива меняем ссылки общего человека на новые, те которые есть у этого человека во второй половине массива. Запись человека, который находится во второй половине массива, обнуляем. Все готово, чтобы начать рисование дерева.
нет
да
Рис.1.3.3.4 Схема алгоритма объединения деревьев
