Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Описание и структура программы






 

Программа должна иметь модульную структуру, представленную на рисунке 3.

 

 

* – Данные процедуры должны быть для типов первой и второй записи.

** – pobl и al – указатели на предшествующие объекты, необходимы для работы с однонаправленными кольцевыми списками.

 

Рисунок 3 – Структура программы

Выполнение программы должно начинаться с инициализации, то есть подготовки для работы с базой данных. Для этого необходимо из файла с именем Name1, хранящего общие сведения по базе данных, сформировать общий список, а из файла с именем Name2, хранящего основные данные конкретной базы, сформировать основной список.

 

Имя общей базы Name1 инициализируется в модуле Data, а имя основной базы Name2 определяется из записи, хранящей общие сведения (поле Name).

 

Если файлы не существуют, т.е. база данных пуста, то её необходимо создать.

 

После загрузки базы, необходимо изобразить меню, выбрать режим работы и выполнить его. Завершение работы с базой предполагает, при необходимости, сохранение изменений.

 

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

 

Для удобства имеет смысл определить матрицу характеристик списков (Sp), представленную на рисунке 4. Элемент матрицы – указатель на характеристики кольцевого списка.

 

список база текущий исходный сортированный документ
общая Sp[1, 1] Sp[1, 2] Sp[1, 3] Sp[1, 4]
основная Sp[2, 1] Sp[2, 2] Sp[2, 3] Sp[2, 4]

Рисунок 4 – матрица характеристик списков

Sp[nb, ns] – элемент матрицы,

где nb – номер строки, определяет номер базы:

nb=1 – общая база,

nb=2 – основная база;

ns – номер столбца, определяет назначение списка:

ns=1 – текущий список,

ns=2 – исходный список,

ns=3 – список для сортировки,

ns=4 – список для результатов.

 

В начале работы программы все списки должны быть проинициализированы.

 

 

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

 

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

- имя базы (Name);

- файл, хранящий информацию базы (F);

- характеристика кольцевого списка данных для обработки соответствующей базы (B);

- количество байтов, отводимых под запись данных соответствующей базы (size);

- признак изменений в базе (fl).

 

Эти характеристики базы должны передаваться в качестве параметров в обслуживающие подпрограммы. Чтобы уменьшить список передаваемых параметров, определим структуру записи (код базы), состоящую из полей- указателей на соответствующую характеристику базы (тип tKod). Структура записи, хранящей характеристику базы, представлена в таблице 3.1.

 

Таблица 3.1

 

Имя поля Тип Назначение
pName ^string Указатель, хранящий адрес имени базы
pF ^file Указатель, хранящий адрес файла базы
pB ^pObj Указатель, хранящий адрес указателя начала кольцевого списка
pSize ^word Указатель, хранящий адрес длины буфера под данные соответствующей базы
pfl ^byte Указатель, хранящий адрес изменений в базе

 

 

В программе необходимо определить и проинициализировать матрицу кодов (МК), каждый элемент которой типа tKod (рисунок 5).

 

список база текущий исходный сортированный документ
общая МК[1, 1] МК[1, 2] МК[1, 3] МК[1, 4]
основная МК[2, 1] МК[2, 2] МК[2, 3] МК[2, 4]

Рисунок 5 – матрица кодов

 

МК[nb, ns] – элемент матрицы,

где nb – номер базы (nb=1, 2);

ns – назначение списка (ns=1, 2, 3, 4).

 

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

 

Например, для инициализации элемента МК[1, 1] необходимо выполнить следующие действия:

MK[1, 1].pName: =@Name1;

MK[1, 1].pF: =@F1;

MK[1, 1].pB: =@Sp[1, 1];

MK[1, 1].pSize: =@Size1;

MK[1, 1].pfl: =@fl1,

где @ - операция взятия адреса.

 

В основную программу входят подпрограммы, описание которых приведено в таблице 3.2.

 

Таблица 3.2

 

Подпрограмма Назначение
Load(Kod, Add) Загрузка данных базы или создание базы при её отсутствии
Make(Kod, Add) Создание нового списка с последующим сохранением в файле
Inc(Kod, ReadZ, kl, Comp)   или   Inc(Kod, ReadZ, kl, Comp, pobl) Функция, выполняющая ввод нового данного, добавление его в список. Возвращает адрес нового элемента списка. Для однонаправленного кольца через pobl функция возвращает адрес объекта, предшествующего новому.
Add1 Добавление нового данного в общую базу и последующим созданием для него основной базы
Add2 Добавление нового данного в основной список с последующим изменением переменной kol в соответствующей записи данных общего списка
Veiw(Name, nb) Просмотр заданной базы
ViewSp(nb, ns) Просмотр соответствующего списка
MENU_1 Режимы работы с общей базой
MENU_2 Режимы работы с основной базой
Формальные параметры
Имя Тип Назначение
Kod tKod Запись, характеризующая базу с полями-указателями (тип tKod определяется в модуле mType)
Add prt Параметр-процедура, определяющий подпрограмму добавления
nb byte Номер базы
ns Номер списка
pobl pobj Указатель на предшествующий объект
ReadZ prt2 Процедура ввода записи данных
Comp prt6 Процедура сравнения двух записей по ключу
       

 

Поскольку процедуры Add1 и Add2 будут передаваться в качестве фактических параметров в подпрограммы Make и Load, то описание этих процедур должны заключаться в директивы {$F+} и {$F-}.

 

Список глобальных переменных, используемых в программе, приведен в таблице 3.3.

 

Таблица 3.3

 

Имя Тип Назначение Описано в модуле Инициали- зация
Name1 string[20] Имя общей базы mType Data
Name2 Имя основной базы  
Sp array[1..2, 1..4] of pobj; Матрица характеристик кольцевого списка Основная программа
МК array[1..2, 1..4] of tKod; Матрица кодов базы Основная программа
pob1 pobj Указатель на текущий объект общего списка  
pob2 Указатель на текущий объект основного списка  
pd1 pZap1 Указатель на данные текущего объекта общего списка Data  
pd2 pZap2 Указатель на данные текущего объекта основного списка  
size1 word Количество байт, отводимых под данное соответствующей базы Data
size2
F1 File Файл, хранящий общие сведения Основной модуль  
F2 Файл, хранящий основные сведения  
fl1 byte Признак изменения в общей базе  
fl2 Признак изменения в основной базе  

 

Взаимосвязь модулей приведена в таблице 3.4.

 

Таблица 3.4

 

Модуль Подключаемые модули Типы и переменные, определяемые в модулях
тип глобальные переменные
Основная программа mType Docum   F1, F2, fl1, fl2
StrData Spisok    
JOB Data StrData    
Data   tZap1 = record... end tZap2 = record... end pZap1 = ^tZap1 pZap2 = ^tZap2 pd1 pd2 size1 size2
Docum JOB tZapd1 = record... end tZapd2 = record... end pZapd1 = ^tZapd1 pZapd2 = ^tZapd2  
Spisok      
mType   pObj Obj tKod prt prt1 prt2 prt3 prt4 prt5 prt6 prt7 Name1 Name2 Sp MK pob1 pob2

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.