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

Автор работы: Пользователь скрыл имя, 25 Мая 2013 в 12:57, курсовая работа

Описание работы

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

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

1. Постановка задачи 2
1.2. Глоссарий проекта 3
1.3. Анализ и определение требований 3
2. Проектирование программного продукта 6
2.1. Описание модели вариантов использования 6
2.1.1. Диаграмма вариантов использования 6
2.2. Описание модели анализа системы 6
2.2.1. Диаграммы деятельности 6
2.2.2. Диаграммы последовательностей и кооперации 8
2.2.3. Диаграммы состояний 9
2.2.4. Диаграмма классов 10
2.3. Описание модели реализации 12
2.3.1. Диаграмма компонентов 12
3. Процесс генерации программного кода 13
4. Описание программы 14
4.1. Общие сведения 14
4.2. Определение классов 14
5. Тестирование программы 16
Заключение 17
Список литературы 18

Файлы: 1 файл

course.docx

— 525.40 Кб (Скачать файл)

 

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

Переходы  между состояниями отражены на диаграмме  состояний.

 

2.2.4. Диаграмма классов

 

На диаграмме  классов были размещены следующие классы:

CPersona – класс, описывающий строку в таблице «Персона».

 

Атрибуты:

    • int id_persona; //код персоны
    • CString name; //имя
    • int gender; //пол
    • COleDateTime birthdate; //дата рождения
    • COleDateTime deathdate; //дата смерти
    • CString bio; //биография

 

Функции:

    • int GetId();  //возвращает идентификатор персоны
    • CString GetName(); //возвращает имя персоны
    • int GetGender(); //возвращает пол персоны
    • COleDateTime GetBirthdate(); //возвращает дату рождения персоны
    • COleDateTime GetDeathdate();//возвращает дату смерти персоны
    • CString GetBio(); //возвращает биографию персоны

 

CRelationship – класс, описывающий строку в таблице «Связь».

 

Атрибуты:

    • int id_relationship; //идентификатор связи
    • int pers1;  //идентификатор первой персоны
    • int pers2;  //идентификатор второй персоны
    • int variety;  //идентификатор типа связи
    • CString variety_name; //название типа связи

 

Функции:

    • int GetId();  //возвращает идентификатор связи
    • int GetPers1(); //возвращает идентификатор первой персоны
    • int GetPers2(); //возвращает идентификатор второй персоны
    • int GetVarietyNumb(); //возвращает идентификатор типа связи
    • CString GetVariety(); //возвращает название типа связи

 

Поскольку используется MFC-приложение с архитектурой «Документ-вид», в диаграмму классов были добавлены классы CGenealogicalTreeDoc и CGenealogicalTreeView.

 

CGenealogicalTreeDoc – класс документа.

 

Атрибуты:

//таблица персон

    • CTypedPtrArray<CObArray,CPersona*> PersonaTable();

//таблица связей

    • CTypedPtrArray<CObArray,CRelationship*> RelationshipTable();

 

Функции:

    • void AddPerson();  //добавить персону в базу
    • void AddRelationship(); //добавить связь в базу
    • void ChangePerson(); //отредактировать персону

//проверить возможность создания связи между указанными //персонами

    • bool CheckCorrectRelationship();

//проверить, есть ли связи между указанными персонами

    • bool CheckRelationshipExist(); 
    • void DeletePersona(); //удалить персону из базы
    • void DeleteRelationship(); //удалить связь из базы
    • void FindAllAncestors(); //рекурсивная функция поиска родителей
    • void FindAllDescendants(); //рекурсивная функция поиска детей

//рекурсивная функция поиска ближайших родственников

    • void FindAllRelatives();
    • void FindRelationship(); //рекурсивная функция поиска связей
    • void ShowAncestor(); //функция поиска предков
    • void ShowBrotherSister(); //функция поиска братьев и сестер
    • void ShowChild();  //функция поиска детей
    • void ShowDescendant(); //функция поиска потомков
    • vod ShowParent();  //функция поиска родителей
    • void ShowRelative();  //функция поиска родственников

//функция прослеживания связи между персонами

    • void TraceRelationship();

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

2.3. Описание модели реализации

2.3.1. Диаграмма компонентов

 

На диаграмме компонентов представлены компоненты данного проекта. Связи  обозначают зависимости между компонентами при компиляции, порядок подключения заголовочных файлов. Классы проекта логически объединены в соответствующие компоненты.

Компонент

Описанный класс

Persona.h/cpp

CPersona

Relationship.h/cpp

CRelationship

GenealogicalTreeDoc.h/cpp

CGenealogicalTreeDoc

GenealogicalTreeView.h/cpp

CGenealogicalTreeView

MFC

Библиотека MFC, подключенная к проекту


 

3. Процесс генерации программного кода

 

Была  выполнена генерация кода программы  с помощью IBM Rational Software Architect по инструкции по кодогенерации UML модели в C++.

В результате были получены *.h и *.cpp файлы для следующих классов из модели проектирования: CPersona, CRelationship, CGenealogicalTreeDoc, CGenealogicalTreeView. Сгенерированный код не был использован при написании программы.

 

4. Описание программы

4.1. Общие сведения

 

В качестве языка реализации проекта был  выбран C++, среда разработки – Microsoft Visual Studio 2008. Для удобства и облегчения разработки была использована библиотека MFC. Архитектура приложения – «Документ-вид».

Условно структуру программы можно представить  следующим образом:

    1. Интерфейсная часть. В ней реализован обмен информацией между системой и пользователем, ввод и вывод данных. Представлена классом вида CGenealogicalTreeView и несколькими классами диалоговых окон, не включенными в описание проекта.
    2. Функциональная часть. В ней реализована логика работы системы и хранение данных. Представлена классом документа CGenealogicalTreeDoc и классами, описывающими персону (CPersona) и связь (CRelationship).

4.2. Определение классов

 

Помимо  классов, описанных в модели анализа  UML-проекта, написанная программа содержит следующие классы:

persondlgClass – класс диалогового окна для ввода данных о новой персоне и редактирования данных об уже существующей персоне.

relationshipdlgClass – класс диалогового окна для ввода данных о новой связи.

CGenealogicalTreeApp – класс приложения.

CMainFrame –  класс главного окна-рамки.

CAboutDlg –  класс диалогового окна о выводе  сведений о программе.

 

4.3. Определение  структур хранения данных

 

Таблицы с данными реализованы средствами MFC-коллекций CTypedPtrArray. Объекты классов коллекций объявлены в классе документа CGenealogicalTreeDoc.

 

class CGenealogicalTreeDoc : public CDocument

{

// …

public:

//коллекция персон

CTypedPtrArray<CObArray,CPersona*> PersonaTable;

//коллекция связей

CTypedPtrArray<CObArray,CRelationship*> RelationshipTable;

// …

}

 

Для сохранения данных в файл на внешнем носителе использован механизм сериализации. Для поддержки этого механизма классы CPersona и CRelationship наследованы от MFC-класса CObject и в них переопределен метод Serialize().

 

5. Тестирование программы

 

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

 

 

Заключение

 

В ходе выполнения курсового проекта была разработана  модель в Rational Software Architect, ставшая основой для написания программы в среде Microsoft Visual Studio 2008 на языке C++.

Проект  не отвечает признаку успешного проекта  «написан в срок». Конечная система реализует все заданные заказчиком требования.

Реализованная программа может иметь практическое применение для составления семейных или иных не слишком сложных генеалогических деревьев.

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

 

 

 

 

Список  литературы

 

1. Вендров А.М., Малышко В.В. Объектно-ориентированный анализ и проектирование с использованием языка UML. М.: Издательский отдел факультета ВМиК МГУ, 2002

2. Леоненков А.В. Самоучитель UML 2. БХВ-Петербург, 2007 г. 

Приложения

Приложение 1. Диаграмма вариантов использования.

 

Приложение 2. Диаграмма деятельности для прецедента «Наполнение базы»

 

Приложение 3. Диаграмма деятельности для прецедента «Запрос к базе»

 

  Приложение 4. Диаграмма кооперации для прецедента «Наполнение базы»

 

Приложение 5. Диаграмма кооперации для прецедента «Запрос к базе»

 

Приложение  6. Диаграмма последовательности для прецедента «Наполнение базы»

 

 

Приложение 7. Диаграмма последовательности для прецедента «Запрос к базе»

 

 

Приложение 8. Диаграмма состояний системы

Приложение  9. Диаграмма классов.

 

 

Приложение  10. Диаграмма компонентов.

 

 
Приложение 11. Руководство пользователя.

 

При запуске приложения на экране отобразится главное окно программы.

 

 

Главное окно состоит из следующих областей:

  1. Список персон, входящих в генеалогическое дерево.
  2. Список связей между персонами.
  3. Панель элементов управления для запроса о прослеживании родственных связей.
  4. Поле вывода результатов запроса.
  5. Главное меню программы.

Для начала работы с деревьями надо или загрузить  ранее сохраненную базу данных (меню «Файл» → «Загрузить», в открывшемся  диалоговом окне выбрать файл базы с расширением «.gt»), или создать новое дерево вручную.

Чтобы создать  генеалогическое дерево, необходимо сначала внести в список персон всех людей-членов родословной. Добавить новую  персону можно либо через главное  меню («Правка» → «Добавить персону»), либо через контекстное меню списка персон. Затем в появившемся окне нужно заполнить данные о персоне  и нажать кнопку «ОК». Добавлять  персоны можно в произвольном порядке.

Если  в списке персон числится хотя бы две  персоны, между ними можно создать  родственную связь. Добавить новую  связь можно либо через главное  меню («Правка» → «Добавить связь»), либо через контекстное меню списка связей. Затем нужно ввести данные о связи и нажать кнопку «ОК». Добавлять связи можно так  же в произвольном порядке.

Записи  о персонах можно редактировать. Окно редактирования вызывается двойным  щелчком мыши по выбранной из списка персоне.

Также записи о персонах и связях можно удалять  из базы. Для удаления персоны нужно  выбрать пункт контекстного меню «Удалить». Для удаления связи нужно  выполнить двойной щелчок по нужной связи. Персоны, состоящие в связях, удалению не подлежат.

Когда база наполнена, можно выполнять запросы  на поиск тех или иных данных о  персонах. Все запросы, кроме одного, вызываются из контекстного меню списка персон. Запрос о прослеживании цепочки  родственных связей между двумя  персонами вызывается кнопкой «Проследить  связь» в главном окне программы, при этом в выпадающих списках  необходимо выбрать обе персоны, связь между которыми нужно найти. Результат выполнения запроса выводится  в поле вывода результатов запроса.

 

 

Если  дерево создавалось с нуля или  редактировалось, можно сохранить  изменения в базе. Диалог сохранения базы вызывается либо из меню «Файл» →  «Сохранить», либо нажатием сочетания  клавиш CTRL+S.

Для завершения работы с программой следует выбрать пункт «Выход»  в меню «Файл».

 

Приложение 12. Руководство программиста.

 

Проект  содержит следующие файлы:

    1. Папка Workspace – рабочее пространство IBM Rational Software Architect с UML-проектом.
    2. Папка GenealogicalTree – проект Visual Studio 2008, исходные коды программы.

Папка GenealogicalTree содержит:

Файлы определения  и реализации классов программы:

Информация о работе Генеалогическое дерево