10. Работа с записями
Запись – это набор данных, который может содержать поля разных типов и определяется ключевым словом – Record. Имeна полей отделяются от имени записи точкой. Например, запись текущей даты можно определить следующим образом:
Type TDate=Record
D:1..31;
M:1..12;
Y:1900..2200;
End;
Здесь D, M и Y определяются диапазонами значений и соответствуют дню, месяцу и году. Теперь определим, например, запись типа анкеты сотрудника:
Type TAnketa=Record
Number:integer; // Порядковый номер
FIO:String[80]; // Фамилия, имя и отчество
DR:TDate; // День рождения
MR:String[50]; // Место рождения
Dolg:String[40]; // Должность
Oklad:Longint; // Оклад
End;
Чтобы не писать каждый раз имя записи и отделять его от поля точкой, можно использовать ключевое слово With с указанием имени записи. Затем в блоке Begin можно работать прямо с полями этой записи. Рассмотрим пример ввода полей записи для массива анкет сотрудников. Будем считать, что приведенные выше типы записей уже определены как глобальные типы. Определим глобальный массив таких записей и текущее число записей. На форме поля записей будут вводиться через элементы TEdit, здесь же будут присутствовать две кнопки – для ввода новой записи и для упорядочения записей по фамилиям сотрудников. Введенные записи будут отображаться в компоненте Memo1, а результат упорядочения – в Memo2:
// Определение глобальных констант и переменных
Const nmax=20; // Максимальное число записей
Var n:integer; // Текущее число записей
Ar:array[1..nmax] of TAnketa; // Массив записей
// Определение обработчиков событий
// Обработчик создания формы
Procedure TForm1.FormCreate(Sender: TObject);
begin
n:=0; // Зануляем число записей
Memo1.Clear; // Очищаем текстовые редакторы
Memo2.Clear;
end;
// Обработчик нажатия кнопки «Добавить запись»
procedure TForm1.Button1Click(Sender: TObject);
begin
Inc(n); // Наращиваем число записей
With Ar[n] do Begin
Number:=StrtoInt(Edit1.Text);
Fio:=Edit2.Text; // Определение текущей записи анкеты
Dr.D:=StrtoInt(Edit3.Text);
Dr.M:=StrtoInt(Edit4.Text);
Dr.Y:=StrtoInt(Edit5.Text);
Mr:=Edit6.Text;
Dolg:=Edit7.Text;
Oklad:=StrtoInt(Edit8.Text);
End;
Memo1.Clear; // Очищаем поле Memo1
For i:=1 to n do With Ar[i] do Begin // Заново выводим все записи в Memo1.
Memo1.Add(’n=’+InttoStr(Number)+’ Fio=’+FIO+’ D=’+InttoStr(Dr.D)+
’ M=’+InttoStr(Dr.M)+’ Y=’+InttoStr(Dr.Y)+’ Mr=’+Mr+’ Dolg=’+Dolg+
’ Oklad=’+InttoStr(Oklad));
end;
end;
// Обработчик нажатия кнопки «Сортировать»
procedure TForm1.Button2Click(Sender: TObject);
Var i,j,imin:Integer; // Внутренние переменные
Rt,Rmin:Tanketa; // Внутренние записи
Begin
// Сортировка записей по фамилии методом последовательного
// поиска минимального значения
For i:=1 to n-1 do do Begin
Rmin:=Ar[i];
Imin:=i;
For j:=i+1 to n do Begin
If Ar[j].FIO
Rmin:=Ar[j];
Imin:=j;
End;
If imin<>I then Begin
Rt:=Ar[i]; // Перестановка imin и i–й записей
Ar[i]:=Rmin;
Ar[imin]:=Rt;
End;
End;
End;
Memo2.Clear; // Вывод массива упорядоченных записей в Memo2
For i:=1 to n do With Ar[i] do Begin
Memo1.Add(’n=’+InttoStr(Number)+’ Fio=’+FIO+’ D=’+InttoStr(Dr.D)+
’ M=’+InttoStr(Dr.M)+’ Y=’+InttoStr(Dr.Y)+’ Mr=’+Mr+’ Dolg=’+Dolg+
’ Oklad=’+InttoStr(Oklad));
end;
end;
end.
Записи могут иметь вариантную часть, которая похожа на оператор Case.
В общем виде такая запись определяется так:
Type тип записи = record
Поле–1: Тип–1;
...
Поле–n: Тип–n;
case переменная условия выбора: перечисляемый тип of
Значение–1: (вариант полей 1);
...
Значение–K: (вариант полей K);
end;
Например, одна и та же память, выделяемая целой переменной длиной 4 байта, может быть разбита на отдельные 4 переменные, каждая из которых занимает в памяти 1 байт:
Type Tvar=(FourByte, OneByte);
Tr=Record
Case Tvar of
FB:Integer;
B1,B2,B3,B4:Byte;
End;
End;
Var R:Tr;
Теперь в программе можно использовать поле R.FB как переменную длиной 4 байта, а можно, например, использовать только младший байт из этой записи – R.B1.
- Программирование в среде Delphi
- Программирование в среде Delphi
- 1. История развития вычислительной техники, системы счисления и единицы информации.................................................7
- 2. Структура персонального компьютера и операционные системы.........................................................................13
- 3. Основы алгоритмизации и работа в delphi..........................18
- 4. Базовые элементы delphi...................................................................26
- 5. Стандартные функции и подпрограммы................................30
- 6. Операторы delphi......................................................................................33
- 7. Операторы циклов....................................................................................35
- 18. Выделение памяти под объект и прародитель всех классов – tobject..........................................................................................84
- 19. Обработка исключительных ситуаций................................87
- 20. Основные классы и общие свойства компонентов...93
- 26. Технология com.....................................................................................129
- 1. История развития вычислительной техники, системы счисления и единицы информации
- 1.1. История развития вычислительной техники
- 1.2. Системы счисления
- 1.3. Единицы информации
- 2. Структура персонального компьютера и операционные системы
- 2.1. Структура персонального компьютера.
- 2.2. Операционные системы
- 3. Основы алгоритмизации и работа в delphi
- 3.1. Основы программирования
- 3.2. Программирование в среде Delphi
- 4. Базовые элементы delphi
- 4.1. Алфавит среды Delphi
- 4.2. Константы
- 4.3. Переменные
- 4.4. Основные типы переменных
- 4.5. Операции над переменными и константами
- 5. Стандартные функции и подпрограммы
- 5.1. Математические функции
- 5.2. Функции преобразования
- 5.3. Дополнительные системные подпрограммы и функции
- 6. Операторы delphi
- 6.1. Оператор присваивания
- 6.2. Оператор безусловной передачи управления
- 6.3. Условный оператор if
- 6.4. Оператор разветвления Case
- 6.5. Составной оператор
- 7. Операторы циклов
- 7.1. Оператор цикла For
- 7.2. Оператор цикла Repeat
- 7.3. Оператор цикла While
- 8. Работа с массивами
- 9. Работа со строками
- 9.1. Процедуры работы со строками
- 9.2. Функции работы со строками
- 10. Работа с записями
- 11. Процедуры и функции
- 12. Модуль unit
- 13. Работа со множествами
- 14. Работа с файлами
- 14.1. Текстовые файлы
- 14.2. Типированные файлы
- 14.3. Нетипированные файлы
- 15. Работа с файлами и каталогами
- 16. Динамические переменные и структуры данных
- 16.1. Динамические переменные
- 16.2. Работа со стеком
- 16.3. Работа со списками или очередями
- 16.4. Работа с деревьями
- 17. Основы объектно–ориентированного программирования
- 17.1. Объекты и классы
- 17.2. Области видимости класса
- 17.3. Свойства (Property) и инкапсуляция
- 17.4. Методы, наследование и полиморфизм
- 17.5. События (Events)
- 18. Выделение памяти под объект и прародитель всех классов – tobject
- 18.1. Выделение памяти под объект
- 18.2. Описание класса tObject
- 18.3. Операторы приведения типов классов
- 19. Обработка исключительных ситуаций
- 19.1. Два вида оператора Try
- 19.2. Программное создание исключительной ситуации
- 19.3. Основные исключительные ситуации
- 20. Основные классы и общие свойства компонентов
- 20.1. Класс tList
- 20.2. Класс tStrings
- 20.3. Общие свойства компонентов
- 21. Графические возможности delphi
- 21.1. Класс Tcanvas
- 21.2. Классы тGгарhic и тРicture
- 21.3. Классы tFont, tPen и tBrush
- 21.4. Работа с изображениями
- 22. Визуальные компоненты delphi
- 22.1. Компонент tBitBtn
- 22.2. Компоненты tDrawGrid и tStringGrid
- 22.3. Компонент tPageControl
- 22.4. Компонент tTimer
- 22.5. Компонент tGauge
- 22.6. Компонент tСolorGrid
- 23. Стандартные диалоговые окна и типовые диалоги
- 23.1. Стандартные диалоговые окна
- 23.2. Типовые диалоги
- 24. Форма, приложение и глобальные объекты
- 24.1. Форма и ее свойства
- 24.2. Объект Application
- 24.3. Глобальные объекты
- Объект ClipBoard
- Объект Screen
- Объект Printer
- 25. Межпрограммное взаимодействие
- 25.1. Обмен сообщениями
- 25.2. Динамический обмен данными
- 25.3. Совместное использование общей памяти
- 25.4. Каналы
- 25.5. Сокеты
- 26. Технология com
- 26.1. Интерфейс
- 27. Технология автоматизации
- 27.1. Основы ole Automation
- 27.2. Примеры использования серверов автоматизации
- 27.3. Компоненты ActiveX
- 28. Динамические библиотеки
- 28.1. Создание dll
- 28.2. Использование dll
- 28.3. Пример написания dll
- 29. Работа с базами данных
- 29.1. Основные определения
- 29.2. Взаимодействие приложения на Delphi с базами данных
- 29.3. Компоненты взаимодействия с базами данных
- If adoTable1.Locate(’fio,stag’,varArrayOf([’Иванов’,’10’]),[])Then …;
- 29.4. Работа с локальной базой данных
- 30. Основы языка sql
- 30.1. Составные части sql
- 30.2. Команда select
- 30.3. Пример использования запросов в Delphi
- 31. Создание собственных компонентов
- 32. Работа с реестром
- 33. Перспективы программирования в delphi
- Литература
- 220013, Минск, п.Бровки, 6