- •Пояснительная записка
- •1.5. Требования к программной документации
- •1.6. Стадии этапа разработки
- •1.7. Порядок контроля и приемки.
- •2. Разработка логической модели
- •2.1. Словарь данных.
- •2.5. Алгоритмы процессов.
- •Поток данных: Запрос1 Хранилище: Семья
- •Поток данных: Ответ1
- •Поток данных: Ответ1
- •Поток данных: Имя2
- •Поток данных: Имя Файла Хранилище: Семья Поток данных: Данные
- •Поток данных: Имя
- •Хранилище: Семья
- •3. Разработка физической модели.
- •3.1. Проектные решения.
- •3.2. Структура представления основных данных.
- •3.2.1. Виды родственных связей.
- •3.2.2. Структура дерева.
- •3.2.3. Формат файла.
- •3.3. Разработанные классы.
- •3.3.1 Описание классов.
- •3.3.2. Взаимосвязь классов.
- •3.3.3. Динамическое поведение объектов.
- •Приложение Пример формата файла
- •Приложение: Описание интерфейса (на правах руководства пользователя)
- •Текст разработанной программы.
2.5. Алгоритмы процессов.
Процесс 1.1.1 : «Поиск имени и определение пути».
Входные данные:
Поток данных: Запрос1 Хранилище: Семья
Выходные данные:
Поток данных: Ответ1
Алгоритм:
if (Семья не пуста)
{
запомнить позицию хвоста
запомнить позицию головы
while (голова не ровна хвостуl)
{
сохранить имя текущего человека
if (сравнить это имя с имя1) сохранить указатель
перейти на следующего человека
}
переместиться к хвосту
запомнить имя человека в хвосте
if (сравнить это имя с имя1) сохранить указатель
}
//определение пути
-------------------------
CPerson *p;
if (имя2=текущему имени) вернуть указатель на текущую персону
if ((есть отец) && (не пришли только что от отца))
{
внести в ответ1 1
увеличить число чисел в ответе1 на 1
вызвать функцию Поиска пути для этой персоны
if (найден путь) вернуть переданный указатель
}
if ((есть супруг/а) && (не пришли только что от этой персоны))
{
if (женского пола) внести в ответ1 5
else внести в ответ1 4
увеличить число чисел в ответе1 на 1
вызвать функцию Поиска пути для этой персоны
if (найден путь) вернуть переданный указатель
}
if ((есть ребенок 1) && (не пришли только что от этой персоны))
{
if (женского пола) внести в ответ1 3
else внести в ответ1 2
увеличить число чисел в ответе1 на 1
вызвать функцию Поиска пути для этой персоны
if (найден путь) вернуть переданный указатель
}
if ((есть ребенок 2) && (не пришли только что от этой персоны))
{
if (женского пола) внести в ответ1 3
else внести в ответ1 2
увеличить число чисел в ответе1 на 1
вызвать функцию Поиска пути для этой персоны
if (найден путь) вернуть переданный указатель
}
if ((есть ребенок 3) && (не пришли только что от этой персоны))
{
if (женского пола) внести в ответ1 3
else внести в ответ1 2
увеличить число чисел в ответе1 на 1
вызвать функцию Поиска пути для этой персоны
if (найден путь) вернуть переданный указатель
}
в случае не удачи вернуть ноль
-----------------------------------------
Процесс 1.1.2 : «Обработка пути».
Входные данные:
Поток данных: Ответ1
Хранилище: Таблица связей
Выходные данные:
Поток данных: Ответ2
Алгоритм:
индекс для прохода по массиву Ответ1=0
while(число в Ответ1 не 0)
{
следующему числу от текущего в ответе1
= значение из Хранилище: Таблица связей с
индексом (текущее значение Ответ1, следующее значение)
увеличить индекс в ответе1
}
ответ2= ответ1 в текущей позиции.
Процесс 1.1.3 : «Обработка».
Входные данные:
Поток данных: Ответ2
Хранилище: Связь
Выходные данные:
Поток данных: Связь
Алгоритм:
if (Ответ2=0) связь ="Связь не найдена";
else связь= Хранилище: Связь с индексом(Ответ2)
Процесс 1.1.4 : «Вывод дерева».
Входные данные:
Поток данных: Имя1
Алгоритм:
запомнить позицию хвоста
запомнить позицию головы
while (голова не ровна хвостуl)
{
создать новый корень с именем текущего человека
if (мужчина) s="Пол: мужской";
else s="Пол: женский";
создать ответвление с названием s
if (есть отец)
{
s="Отец: ";
s+=получить имя отца;
создать ответвление с названием s
}
if (женат/замужем)
{
if (мужчина) s="Супруга: ";
else s="Супруг: ";
s+=получить имя супруга;
создать ответвление с названием s
}
if (есть ребенок 1)
{
if (мужчина) s="Сын: ";
else s="Дочь: ";
s+=получить имя ребенка;
создать ответвление с названием s
}
if (есть ребенок 2)
{
if (мужчина) s="Сын: ";
else s="Дочь: ";
s+=получить имя ребенка;
создать ответвление с названием s
}
if (есть ребенок 3)
{
if (мужчина) s="Сын: ";
else s="Дочь: ";
s+=получить имя ребенка;
создать ответвление с названием s
}
перейти на следующего человека
}
переместиться к хвосту
повторить операцию
Процесс 1.2.1.1. : «Найти».
Входные данные: