Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы Delphi / Лабораторная работа 7

.doc
Скачиваний:
27
Добавлен:
17.04.2015
Размер:
52.74 Кб
Скачать

Лабораторная работа № 7

Класс TList

Класс TList используется в качестве основы для создания списков общего назначения. Кроме того, TList можно использовать как класс-контейнер для хранения в списках объектов любого типа. В большинстве случаев, чтобы использовать класс TList, необходимо создать два собственных класса: один – для элементов, предназначенных для хранения в списке, а другой – для самого списка.

Упражнение. Напишите приложение, позволяющее создавать список телефонных абонентов.

Решение. Создайте новый проект. Сохраните новое приложение в папке PhoneBook – файл модуля под именем Main.pas, файл проекта – PhoneBook.dpr.

1 этап. Создадим визуальный интерфейс приложения

Поместите на форму семь компонентов Label, четыре Edit, два SpinEdit, один Button и один MaskEdit (Addition).

Измените значения свойства Caption компонентов Label, Form1 и Button1 в соответствии с рис. 1, очистите свойство Text компонентов Edit, свойства Name компонент установите следующим образом:

Компонент

Свойство

Значение

Form1

Name

MainF

Edit1

Name

LastNameEdt

Edit2

Name

NameEdt

Edit3

Name

PatronymicEdt

Edit4

Name

StreetEdt

SpinEdit1

Name

HouseSE

SpinEdit2

Name

FlatSE

Button1

Name

AddBtn

MaskEdit1

Name

PhoneME

AutoSelect

False

EditMask

!00-00-00;1;_

Свойство EditMask используют, чтобы обеспечить ввод данных в соответствии с заданной маской. Если пользователь вводит не совместимые с заданной маской символы, MaskEdit игнорирует их.

Для ввода номера телефона используется маска: !00-00-00;1;_

Маска состоит из трех полей, разделенных символом точка с запятой. Первая часть определяет собственно маску. Для построения маски используются специальные символы:

!

Поле заполняется слева направо

0

Цифра (0-9) или знак (+/-) обязательны

_

Автоматически вставляет пробел в указанной позиции

>

Все символы справа от указанной позиции переводятся в верхний регистр

<

Все символы слева от указанной позиции переводятся в нижний регистр

, : ; / - ( )

Разделители

L

Буква обязательна

Примечание. Другие символы, используемые для создания маски, можно посмотреть в справочной системе Delphi.

Таким образом, поле телефон определен как шестизначный номер, цифры которого разбиваются по парам, и будут заполняться слева направо.

Вторая часть маски определяет, сохранять ли не вводимые символы как данные. Значение параметра, равное нулю, показывает, что свойство Text для примера содержит 6 символов (не вводимые символы (в примере – «-») не сохраняются). Любое другое значение параметра заставляет сохранять не водимые символы в свойстве Text (для примера свойство Text будет содержать 8 символов). В примере параметр равен единице, не вводимые символы будут сохраняться в свойстве Text.

Третья часть определяет символ, который определяет поля маски, которые необходимо заполнить. В примере – это символ «_».

2 этап. Создание программного кода

Предположим, что длина полей LastName (фамилия), Name (имя), Patronymic (отчество) не превосходит 25 символов, а Street (улица) – 40 символов. Измените свойства MaxLength компонетов Edit в соответствии с введенными ограничениями.

Опишем новый тип:

PMyList = ^AList;

AList = record

LastName: string[25];

Name: string[25];

Patronymic: string[25];

Street: string[40];

House: integer;

Flat: integer;

Phone: string[8];

End;

Для решения поставленной задачи необходимо описать переменные:

Var MyList: TList; {для хранения введенных записей}

ARecord: PMyList; {для формирования полей одной записи}

Опишем последовательность действий по добавлению элементов в список:

* первоначальные действия:

MyList := TList.Create; {выделение памяти под объект MyList}

* действия при добавлении каждого элемента:

New(ARecord); {выделяем место под запись}

with Arecord^ do begin {заполняем поля записи}

LastName:=LastNameEdt.text;

Name:=NameEdt.text;

Patronymic:= PatronymicEdt.text;

Street:=StreetEdt.text;

House:=HouseSE.value;

Flat:=FlatSE.value;

Phone:= PhoneME.text;

end;

MyList.Add(ARecord); {добавляем запись в объект MyList}

* действия по освобождению памяти:

MyList.free;

Задания для самостоятельного выполнения

I. Модификации:

  1. При добавлении элементов в список возможны различные исключительные ситуации. Напишите обработчики необходимых исключительных ситуаций.

  2. Дополните приложение кнопками для перемещения по записям списка.

  3. Сохранить список в файле.

  4. Опишите процедуру поиска записей по фамилии и вывода найденных записей в диалоговое окно.

  5. Добавить в список абонента, сохранить изменения в файле.

  6. Удалить абонента из списка, сохранить изменения в файле.