Разработка программы "Генеалогическое дерево"

Страницы работы

Содержание работы

Федеральное министерство по образованию.

Сибирский государственный индустриальный университет

Кафедра Информационных технологий.

Пояснительная записка к курсовой работе по теме:

 “Генеалогическое древо ”

Выполнил: ст.гр. ИСП-07

 Яковец Д.А.

Проверил: ст. преподаватель

Климов В. Ю.

Новокузнецк 2009г.


1.  Введение

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

3.  Особенности реализации

4.  Используемые алгоритмы

5.  Интерфейс

6.  Вывод

7.  Приложение


1.  Введение

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

Достоинства:

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

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

Недостатки:

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

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


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

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

Информация о человеке должна состоять из ряда обязательных свойств, таких как:

1.  Фамилия (Текущая)

2.  Фамилия (Первая)

3.  Имя

4.  Отчество

5.  Дата рождения

6.  Дата смерти

7.  Место рождения

8.  Место смерти

9.  Комментарии

В программе должно быт визуальное представление связей между людьми:

1.  Родители: возможность прикрепления, удаления информации о родителе (отца, матери)

2.  Брак: возможность устанавливать брачные связи между 2-я людьми. В данной связи должны указываться параметры:

2.1. Фамилия в браке

2.2.  Дата регистрации

2.3.  Дата развода

2.4.  Комментарии

3.  Дети: возможность прикрепления, удаления информации о ребенке

4.  Братья  / Сестры

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

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

1.  Фамилия

2.  Имя

3.  Отчество

4.  Пол

5.  Наличие родителей

6.  Наличие брака

7.  Наличие детей

8.  Наличие братьев или сестер

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

Так же должны быть возможность графического представления выбранного человека по 4-е уровня:

1)  Родители

2)  Братья / Сестра

3)  Браки

4)  Дети


3. Особенности реализации

1.  Структура класса человека (TPeople):

Family: string; – Фамилия (текущая)

FamilyFirst: string; - Фамилия (первая)

Name: string; - Имя

Patronymic: string; - Отчество

Sex: Boolean; - Пол. Если значение true то мужчина, а если false то женщина

Father: TPeople; - Ссылка на отца

Mother: TPeople; - Ссылка на мать

Childrens: TObjectList;  - Список ссылок на детей

Marriages: TObjectList; - Список ссылок на браки

procedure AddChildren(People: TPeople); -  Добавление Дитя(People)

procedure DeleteChildren(People: TPeople);  - Удалить Дитя(People)

function getBrothers(): TObjectList; - Получить список всех Братье/Сестер

function getChildrens(): TObjectList; - Получить список всех Детей

2.  Структура класса брака (TMarriage):

Family: string; - Фамилия в браке

Husband: TPeople; - Ссылка на мужа

Wife: TPeople; - Ссылка на жену

3.  Структура класса менеджера (TManager):

Peoples: TObjectList; - Список всех людей

Marriages: TObjectList; - Список всех браков

function ValidateFilter(RFilter: TRFilter; People: TPeople): Boolean; - Возвращает true, если человек People проходит параметры фильтра.

procedure Save(PFiles: string); - Сохранение всей структуры в файл

procedure Load(PFiles: string);  - Загрузка всей структуры из файла

function AddPeople(RPeople: TRPeople): TPeople; - Добавление человека

procedure DeletePeople(People: TPeople); - Удаление человека

function AddMarriage(RMarriage: TRMarriage): TMarriage; - Добавление Брака

procedure DeleteMarriage(Marriage: TMarriage); - Удаление Брака

procedure Clear();  - Удаление всех людей и браков


Взаимодействие классов происходит через основной класс TManager. Он является связующем звеном, с помощью которого можно управлять классами  TPeople и TMarriage. В результате такой реализации взаимодействия структуры данных, мы имеем сильно сниженные затраты на память и процесс обработки объектов структуры.

Рисунок 1. UML диаграмма классов структуры данных генеалогическим деревом

 


         
Для  сохранения всей динамической структуры в файл имеется рад вспомогательных типов данных:

1.  TRManager

2.  TRSLPeople

3.  TRSLMarriage

Данные типы приведены в приложении на странице №15-16

Сохраненный файл имеет сведущую структуру:

4 байта

Количество элементов TRSLPeople

TRManager

4 байта

Количество элементов TRSLMarriage

1067 байт

TRSLPeople

...

1067 байт

563 байт

TRSLMarriage

...

563 байт

Рисунок 2. Структура фалов


4.Используемые алгоритмы

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

Теперь перейдем, непосредственно, к этапам алгоритма сохранения:

Фрагмент кода приведен в приложении на странице №21

1.  Создаем файл

2.  Создаем запись RManager типа TRManager, для записи в нее количества людей и браков. Что позволит в дальнейшем правильно сформировать файл.

3.  В начала файла записывает блок, состоящий из записи RManager.

4.  Перебирая всех людей, записываем последовательно их в файл. Причем вместо ссылок на TPeople устанавливаем численное значение (это порядковый номер в списке Peoples класса TManager).

5.  Перебирая все браки, записываем последовательно их в файл. Причем вместо ссылок на TPeople устанавливаем численное значение (это порядковый номер в списке Peoples класса TManager).

6.  Закрываем файл.

Рисунок 3. UML диаграмма деятельности сохранения структуры данных в файл


Процесс загрузки ничем не уступает по своей реализации к процессу сохранения по своей универсальности и оптимизированности:

Фрагмент кода приведен в приложении на странице №22

1.  Открываем файл

2.  Создаем запись RManager типа TRManager, для записи в нее количества людей и браков. Что позволит в дальнейшем правильно сформировать файл.

3.  В начала файла записывает блок, состоящий из записи RManager.

Похожие материалы

Информация о работе