Автоматизация работы с базами данных
тестовые примеры
Так как входные данные могут формироваться только самой программой, то, если не будет вмешательство в содержимое файла Rab.dat, данные будут всегда корректно считываться из файла. Если файл будет отсутствовать в каталоге, из которого запущена программа, или просто-напросто файл не будет найден (необходимо учитывать переменные окружения ОС – команда path), то программа сама
создаст пустой файл. Все вводимые значение в процессе выполнения программы анализируется на корректность ввода. Таким образом, практически исключено возникновение ошибочных ситуаций. Единственно, в программе не учтены возможные ошибки работы с динамической памятью, так как предполагается использование программы для небольшого количества работников. Данные ситуации потенциально могут возникать при выделении динамической памяти процедурой New. Тогда перед выделением можно функцией MaxAvail определить размер самого большого свободного участка динамической памяти, если он больше размера компоненты дерева (111 Бт), тогда использовать процедуру New.
При тестировании программы вводились различные данные и выполнялись различные операции пользователя. В ходе тестирования были выявлены и устранены различные ошибки. Для выявления ошибок также использовались стандартные средства отладки среды Turbo Pascal.
Приведем пример одного из тестовых примеров. Вводились следующие данные (значения остальных полей не указаны, так как не имеют принципиального значения в данном примере):
Таблица 1. Вводимы данные
Fio |
num |
Иванов Иван |
50 |
Сидоров Сидор |
33 |
Петров Петр |
100 |
Иванова Иванна |
25 |
Сидорова Сидора |
44 |
Петрова Петра |
75 |
Баночкин Федор |
77 |
Рис. 5. Двоичное дерево поиска, полученное в результате ввода указанных данных
По результатам ввода было построено следующее дерево (о структуре дерево можно судить по порядку последующего считывания из файла при повторном запуске программы).
6. Текст программы
Пользовательский модуль – файл Trees.pas
{Модуль работы с двоичным деревом поиска - динамической структурой}
Unit trees;
{Интерфейсная часть модуля - описание объектов, доступных
для программы, к которой подключается модуль}
INTERFACE
Uses
Crt; {подключение библиотеки Crt для работы с консолью}
Type
{Описание типа компоненты дерева и указателя на компоненту
стандартное описание для динамических структур}
pTree = ^Tree; {указатель на компоненту}
Tree = record {описание компоненты с полями:}
fio : string[40]; {ФИО}
num : word; {табельный номер}
pol : char; {пол}
dat : string[10]; {дата рождение}
dol : string[40]; {должность}
left, right : pTree {указатели на поддеревья}
end; {размер - SizeOf(Tree) = 111 Bt}
{Описание типа компоненты типизированного файла полностью
соответствует структуре компоненты дерева за исключением
указателей на поддеревья для связи в структуре}
CompF = record
fio : string[40];
num : word;
pol : char;
dat : string[10];
dol : string[40];
end;
{подпрограммы, доступные из модуля}
Procedure print(v : pTree);
Procedure add(var x : CompF; var p : pTree);
Procedure del(x : word; var p : pTree);
{Часть реализации модуля - содержит описание подпрограмм
как объявленных в интерфейсной части так и для внутреннего
пользования (локальные в рамках модуля)}
IMPLEMENTATION
{Процедура вывода содержимого компоненты двоичного дерева поиска.}
procedure print(v : pTree);
{формальный параметр - указатель на компоненту}
begin {для организации паузы}
if WhereY > 20 then {анализируем текущее строку}
begin {расположения курсора, если > 20}
readkey; {организуем ожидание нажатия любой клавиши}
clrscr {и очищаем экран}
end;
with v^ do {организуем вывод на экран}
begin
writeln('Фамилия: ',fio);
writeln('табельный номер:',num);
writeln('Пол: ',pol);
writeln('Дата рождения: ',dat);
writeln('Должлость: ',dol);
writeln
end;
end;
{Рекурсивная процедура добавления компоненты в двоичное дерево поиска.}
{Метод - поиск по дереву поиска по ключу и добавление компоненты-листа.}
Procedure add(var x : CompF; var p : pTree);
{формальные параметры: запись с данными о работнике и указатель на корень}
begin
if p = nil then {указатель = nil}
begin {добавление комоненты - листа}
new(p); {заказ области в динамической памяти}
Move(x,p^,SizeOf(CompF)); {копирование значений полей в компоненту}
with p^ do {компоненты - лист => нет поддеревьев}
begin
left := nil;
right := nil;
end;
end
else {указатель <> nil}
if x.num < p^.num then {табельный номер<}
add(x,p^.left) {рекурсивный вызов для левого поддерева}
else
if x.num > p^.num then {табельный номер>}
add(x,p^.right) {рекурсивный вызов для правого поддерева}
else {табельные номера одинаковы - ошибка}
begin
writeln(#13#10'Ошибка! Такой номер уже есть!');
readkey
end
end;
{Рекурсивная процедура удаления компоненты из двоичного дерева поиска.}
{Метод - поиска по дереву узла; если лист или имеет одно поддерево, то
удаление с восстановлением связей; если два поддерева - поиск в левом
поддереве крайнего правого узла, его удаление с предварительной записью
его данных в удаляемый узел}
Procedure del(x : word; var p : pTree);
{формальные параметры: табельный номер и указатель на корень}
var
{локальные переменные:}
q : pTree; {указатель на удаляемую вершину}
d : char; {для организации запроса удаления}
{рекурсивная локальная процедура для организации поиска крайнего
правого узла в левом поддереве в случае удаления узла с двумя
поддеревьями}
procedure delt(var r : pTree);
{формальный параметр: указатель на компоненту}
begin
if r^.right <> nil then {движение в правые поддеревья}
delt(r^.right)
else
begin {крайний правый узел}
move(r^,q^,SizeOf(CompF)); {копируем данные в удаляемый}
q := r; {запоминаем для высвобождения}
r := r^.left {сохраняем связь с левым поддеревом}
end
end;
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности