Автор работы: Пользователь скрыл имя, 01 Октября 2013 в 14:34, курсовая работа
Требуется разработать программную систему для поддержки генеалогических деревьев.
Система хранит сведения о персонах (Ф.И.О., пол, дата рождения, дата смерти, биография) и о родственных связях между ними. Связи бывают только трех видов: «мужья-жены», «дети-родители» и «братья-сестры». Система обеспечивает возможность добавления данных о новых персонах и родственных связях, изменение введенных данных и удаление ненужных данных. Система следит за непротиворечивостью вводимых данных. Например, недопустимо, чтобы человек был собственным предком или потомком.
Разработанная модель должна содержать схему базы данных для хранения генеалогических деревьев.
1. Постановка задачи 3
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
Приложения 19
Поскольку выполнение запросов и поиск информации в базе системой с точки зрения пользователя выполняется мгновенно (при небольших объемах базы данных, однако на большие объемы данный проект не рассчитан), при проектировании было принято, что при выполнении запросов система не меняет состояния.
Переходы между состояниями отражены на диаграмме состояний.
На диаграмме классов были размещены следующие классы:
CPersona – класс, описывающий строку в таблице «Персона».
Атрибуты:
Функции:
CRelationship – класс, описывающий строку в таблице «Связь».
Атрибуты:
Функции:
Поскольку используется MFC-приложение с архитектурой «Документ-вид», в диаграмму классов были добавлены классы CGenealogicalTreeDoc и CGenealogicalTreeView.
CGenealogicalTreeDoc – класс документа.
Атрибуты:
//таблица персон
//таблица связей
Функции:
//проверить возможность создания связи между указанными //персонами
//проверить, есть ли связи между указанными персонами
//рекурсивная функция поиска ближайших родственников
//функция прослеживания связи между персонами
Атрибуты и функции класса CGenealogicalTreeView в проекте не рассмотрены, т.к. это класс, обеспечивающий ввод-вывод данных пользователем, который не несет реализации алгоритмов функционирования системы. По этой же причине опущены прочие классы реальной программы и нкоторые атрибуты и функции выше описанных классов.
На диаграмме компонентов
Компонент |
Описанный класс |
Persona.h/cpp |
CPersona |
Relationship.h/cpp |
CRelationship |
GenealogicalTreeDoc.h/cpp |
CGenealogicalTreeDoc |
GenealogicalTreeView.h/cpp |
CGenealogicalTreeView |
MFC |
Библиотека MFC, подключенная к проекту |
Была выполнена генерация кода программы с помощью IBM Rational Software Architect по инструкции по кодогенерации UML модели в C++.
В результате были получены *.h и *.cpp файлы для следующих классов из модели проектирования: CPersona, CRelationship, CGenealogicalTreeDoc, CGenealogicalTreeView. Сгенерированный код не был использован при написании программы.
В качестве языка реализации проекта был выбран C++, среда разработки – Microsoft Visual Studio 2008. Для удобства и облегчения разработки была использована библиотека MFC. Архитектура приложения – «Документ-вид».
Условно
структуру программы можно
Помимо классов, описанных в модели анализа UML-проекта, написанная программа содержит следующие классы:
persondlgClass – класс диалогового окна для ввода данных о новой персоне и редактирования данных об уже существующей персоне.
relationshipdlgClass – класс диалогового окна для ввода данных о новой связи.
CGenealogicalTreeApp – класс приложения.
CMainFrame – класс главного окна-рамки.
CAboutDlg –
класс диалогового окна о
4.3. Определение структур хранения данных
Таблицы
с данными реализованы
class CGenealogicalTreeDoc : public CDocument
{
// …
public:
//коллекция персон
CTypedPtrArray<CObArray,
//коллекция связей
CTypedPtrArray<CObArray,
// …
}
Для сохранения данных в файл на внешнем носителе использован механизм сериализации. Для поддержки этого механизма классы CPersona и CRelationship наследованы от MFC-класса CObject и в них переопределен метод Serialize().
По итогам статистического тестирования программа работает корректно и адекватно реагирует на действия пользователя, выдавая верные результаты запросов. В качестве эталонной базы данных использовалась база с генеалогическим деревом следующей структуры:
В ходе выполнения курсового проекта была разработана модель в Rational Software Architect, ставшая основой для написания программы в среде Microsoft Visual Studio 2008 на языке C++.
Проект не отвечает признаку успешного проекта «написан в срок». Конечная система реализует все заданные заказчиком требования.
Реализованная
программа может иметь
Дальнейшее развитие системы может включать в себя расширение сроков существования рода (существующее ограничение – 14.09.1752 – 31.12.9999), более строгую проверку непротиворечивости создаваемых связей, улучшение алгоритмов поиска информации в базе данных, добавление графической визуализации деревьев.
1. Вендров А.М., Малышко В.В. Объектно-
2. Леоненков
А.В. Самоучитель UML 2. БХВ-Петербург,
2007 г.
Приложение
11. Руководство пользователя.
При запуске приложения на экране отобразится главное окно программы.
Главное окно состоит из следующих областей:
Для начала работы с деревьями надо или загрузить ранее сохраненную базу данных (меню «Файл» → «Загрузить», в открывшемся диалоговом окне выбрать файл базы с расширением «.gt»), или создать новое дерево вручную.
Чтобы создать генеалогическое дерево, необходимо сначала внести в список персон всех людей-членов родословной. Добавить новую персону можно либо через главное меню («Правка» → «Добавить персону»), либо через контекстное меню списка персон. Затем в появившемся окне нужно заполнить данные о персоне и нажать кнопку «ОК». Добавлять персоны можно в произвольном порядке.
Если в списке персон числится хотя бы две персоны, между ними можно создать родственную связь. Добавить новую связь можно либо через главное меню («Правка» → «Добавить связь»), либо через контекстное меню списка связей. Затем нужно ввести данные о связи и нажать кнопку «ОК». Добавлять связи можно так же в произвольном порядке.
Записи о персонах можно редактировать. Окно редактирования вызывается двойным щелчком мыши по выбранной из списка персоне.
Также записи о персонах и связях можно удалять из базы. Для удаления персоны нужно выбрать пункт контекстного меню «Удалить». Для удаления связи нужно выполнить двойной щелчок по нужной связи. Персоны, состоящие в связях, удалению не подлежат.
Когда база наполнена, можно выполнять запросы на поиск тех или иных данных о персонах. Все запросы, кроме одного, вызываются из контекстного меню списка персон. Запрос о прослеживании цепочки родственных связей между двумя персонами вызывается кнопкой «Проследить связь» в главном окне программы, при этом в выпадающих списках необходимо выбрать обе персоны, связь между которыми нужно найти. Результат выполнения запроса выводится в поле вывода результатов запроса.
Если дерево создавалось с нуля или редактировалось, можно сохранить изменения в базе. Диалог сохранения базы вызывается либо из меню «Файл» → «Сохранить», либо нажатием сочетания клавиш CTRL+S.
Для завершения работы с программой следует выбрать пункт «Выход» в меню «Файл».
Проект содержит следующие файлы:
Папка GenealogicalTree содержит:
Файлы определения и реализации классов программы: