- •Министерство образования украины
- •Введение
- •Порядок выполнения контрольной работы
- •Cодержание пояснительной записки
- •Контрольная работа № 8 массивы записей
- •Варианты
- •Запросы:
- •Запросы:
- •Запросы:
- •Запросы:
- •Запросы:
- •Запросы:
- •КонтрольныЕ вопросы
- •Контрольная работа № 9 файлы записей (типизированные файлы)
- •КонтрольныЕ вопросы
- •Контрольная работа № 10 динамическая обработка файлов записей
- •КонтрольныЕ вопросы
- •Список использованной и рекомендуемой литературы
- •Приложение 1 пример выполнения контрольной работы № 8
- •П.1.1. Структура записи «товар»
- •П.1.2. Структура базы данных «товаРы»
- •П.1.3. Листинг программы Work8.Pas
- •П.1.4. Описание программы и алгоритмов Описание главной программы
- •Алгоритм выполнения функции MainMenu
- •1: InputRecord; {Создать массив записей}
- •Описание процедурTopT и EndT
- •Описание процедурыInputFields(var Rec: RecType)
- •Описание процедуры OutputRec(rec: RecType)
- •Описание процедурыInputRecord
- •Описание процедурыOutRecord (MaxElem :integer)
- •Описание процедурыZapros1
- •Описание процедуры KeyRec
- •Алгоритм выполнения процедурыChangeDel (flag: boolean)
- •Алгоритм выполнения процедуры AddRecord
- •ПрИложение 2 пример выполнения контрольной работы № 9
- •П.2.1. Структура базы данных «товаРы»
- •П.2.2. Листинг модуля input.Pas
- •П.2.3. Листинг модуля File_Rec.Pas
- •П.2.4. Листинг программы Work9.Pas
- •{Главная программа}
- •ПрИложение 3 пример выполнения контрольной работы № 10
- •Листинг программы Work10.Pas
- •{Главная программа}
- •ПрИложение 4 Расширенные ascii - коды
- •Продолжение табл. П.4.1.
- •Приложение 5 особенности реализации текстового вывода (модуль crt)
- •П.5.1. Пример использования переменной TextAttr
- •П.5.2. Демонстрационный пример
- •Приложение 6 распределение оперативной памяТи
- •П.6.1. Карта памяти программ на Turbo Pascal
- •П.6.2. Монитор кучи
- •П.6.2.1. Освобождение памяти
- •П.6.2.2. Список свободных блоков
- •П.6.2.3. Переменная HeapError
- •П.6.3. Примеры динамических структур данных п.6.3.1. Работа с указателями
- •П.6.3.2. Проверка возможности размещения записи в куче
- •П.6.3.3. Организация очереди
- •П.6.3.4. Организация списка
- •П.6.3.5. Организация стека
- •© Голубь Надежда Григорьевна, кириленко Елена Георгиевна основы программированИя и алгоритмические языки
П.1.4. Описание программы и алгоритмов Описание главной программы
Сначала очищается экран, затем в цикле REPEAT - UNTIL выводится главное меню через обращение к функции MainMenu. Условие выхода из цикла - MainMenu = TRUE.
Алгоритм выполнения функции MainMenu
Эта функция реализует главное меню в программе. Передвигая курсор (стрелки ??) по строкам меню, выбираем необходимый режим работы. В начальном положении курсор находится в начале первой строки. Коррекция положения курсора при его перемещении вниз или вверх по строкам меню реализуется с помощью процедуры UpDown.
В бесконечном цикле REPEAT...UNTIL FALSE анализируется код нажатой клавиши (Ch), если он равен #32 (код клавиши пробел) или #13 (код клавиши ENTER), то в зависимости от того, на какой строке находится курсор (номер строки запоминается в переменной I, число выводимых строк меню равно 8), управление передается следующим процедурам, используя оператор CASE:
case i of
1: InputRecord; {Создать массив записей}
2: OutRecord(MaxElem); {Вывести данные на экран}
3: Zapros1; {Вычислить общее количество товаров за определенный год}
4: KeyRec; {Вывести содержимое записи по ключу}
5: AddRecord; {Добавить запись}
6: ChangeDel(true); {Изменить запись}
7: ChangeDel(false); {Удалить запись}
8: begin
Mainmenu := true;
exit;
end;
Если курсор находится на 8 строке и нажата клавиша ENTER или пробел, функция Mainmenu получает значение true, управление передается в основную программу и программа завершает свою работу.
Алгоритм выполнения процедурыUpDown (var Vari: integer; Im: byte)
Процедура реализует коррекцию положения курсора при его движении по строкам меню (стрелки ?? ). Через переменную Im в процедуру передается число выведенных строк на экран (в нашем случае 8), переменная VarI фиксирует строку, на которой находится курсор, - GotoXY (1,VarI).
В этой процедуре обрабатываются расширенные ASCII-коды клавиш (см. Прил. 4).
Если курсор движется вверх (т.е. нажимаем клавишу ? - код #72) и находится на первой строке (vari=1), то переменной vari присваивается значение im. Тем самым, курсор перемещается на последнюю строку экрана.
Иначе номер строки уменьшается на единицу и курсор передвигается вверх на одну строку.
Аналогично, если курсор находится в последней строке меню и движется вниз (код клавиши ? #80 и переменная vari равна Im), переменной vari присваивается значение 1 (курсор перемещается в первую строку меню).
Иначе значение переменной vari увеличивается на единицу (vari := vari+1) и курсор передвигается вниз.
Описание процедурTopT и EndT
Процедуры выводят верхнюю или нижнюю часть «шапки» базы данных, для чего используются стандартные операторы вывода. Рамка таблицы выводится с помощью символов псевдографики (см. Табл. П.6.3. «кодировка символов по стандарту ASCII» - [5]).
Описание процедурыInputFields(var Rec: RecType)
Процедура осуществляет ввод значения элементов полей записи Rec. Переменным Rec.naimt, Rec.stoimt, Rec.kolt, Rec.dmg.year, Rec.dmg.month, Rec.dmg.day присваиваются значения. Корректность вводимых значений обеспечивается следующими процедурами:
Procedure InputReal(Var R: Real; Width: Byte; Inv: String) контролирует ввод вещественных данных R (ширина поля Width) с проверкой на допустимый символ и со строкой приглашения Inv;
Procedure InputNumber(Var Number: Real; NumberMin, NumberMax: LongInt; Width: Byte; Inv: String) контролирует ввод целочисленных данных Number (ширина поля Width) с проверкой диапазона [NumberMin .. NumberMax] и со строкой приглашения Inv;
Procedure InputString(Var S: String; LenNaimt: byte; Inv: String) контролирует ввод строки символов S с проверкой количества введенных символов [1..LenNaimt] и со строкой приглашения Inv.
Все эти процедуры предварительно выводят максимальное количество возможных позиций для данного поля цветом Color на фоне Fon (процедура OutPutString).