Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ЛАБОРАТОРНАЯ РАБОТА № 7_1
Изучение класса TList .
Приложение, позволяющее создавать список абонентов телефонного узла.
Требования к знаниям:
Назначение, методы и особенности класса TList
Класс TList
Класс TList используется в качестве основы для создания списков общего назначения. Кроме того, TList можно использовать как класс-контейнер для хранения в списках объектов любого типа. В большинстве случаев, чтобы использовать класс TList, необходимо создать два собственных класса: один для элементов, предназначенных для хранения в списке, а другой для самого списка.
Задание: Напишите приложение, позволяющее создавать список абонентов телефонного узла.
1. Создайте новый проект. Сохраните новое приложение в папке PhoneBook файл модуля под именем Main.pas, файл проекта PhoneBook.dpr.
1-й этап. Создадим визуальный интерфейс приложения (см.рисунок)
Поместите на форму семь компонентов Label, четыре Edit, два SpinEdit, один Button и один MaskEdit (Addition) и один StatusBar,
Измените значения свойства Caption компонентов Label, Forml и Buttonl в соответствии с рисунком.
Очистите свойство Text компонентов Edit, свойства Name компонентов установите следующим образом:
Компонент |
Свойство |
Значение |
Form1 |
Name |
MainF |
Edit1 |
Name |
LastNameEdt |
Edit2 |
Name |
NameEdt |
Edit3 |
Name |
PatronymicEdt |
Edit4 |
Name |
StreetEdt |
SpinEdit1 |
Name |
HouseSE |
SpinEdit2 |
Name |
FlatSE |
Buttonl |
Name |
AddBtn |
MaskEdit1 |
Name |
PhoneME |
|
AutoSelect |
False |
|
EditMask |
!00-00-00;1;_ |
StatusBarl |
Panels[0].Text |
Количество записей |
|
Panels[0].Width |
110 |
|
Panels[l].Text |
|
|
Panels[l].Width |
30 |
|
Panels[2].Text |
Номер |
|
Panels[2].Width |
38 |
|
Panels[3].Text |
|
Свойство 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 в соответствии с введенными ограничениями.
Опишем два новых типа:
type
PMyList = ^AList;
AList = record
LastName: string[25];
Name: string[25];
Patronymic: string[25];
Street: string[40];
House: integer;
Flat: integer;
Phone: string[8];
end;
В разделе private описания класса TMainF опишите переменные:
MyList: TList; {для хранения введенных записей}
ARecord: PMyList; {для формирования полей одной записи}
Yk: Integer; {указатель перемещения по записям MyList}
При запуске приложения создадим объект MyList типа TList:
procedure TMainF.FormCreate (Sender: TObject);
begin
MyList := TList.Create; {выделение памяти под объект MyList}
Yk:=-1;
end;
При завершении работы с приложением освободим память, выделенную под объект MyList:
procedure TMainF.FormDestroy(Sender: TObject);
begin
MyList.Free;
end;
Для добавления записи опишем обработчик события OnClick кнопки Добавить:
procedure TMainF.AddBtnClick(Sender: TObject);
begin
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}
inc (yk) ; {увеличиваем значение указателя}
StatusBar1.Panels[1].Text:=IntToStr(MyList.Count);
{отображаем количество записей в панели статуса}
StatusBar1.Panels[3].Text:=IntToStr(yk+1);
{отображаем номер отображаемой записи в панели статуса}
end;
Задания для самостоятельного выполнения
1. Дополните приложение PhoneBook
a) кнопками для перемещения по записям списка;
Примечание. Для обращения к полям записи воспользуйтесь операторами: ARecord:=MyList[yk] ; with ARecord^ do ...
b) сохраните список записей телефонной книги в файле;
c) при запуске приложения считайте данные из файла;
d) процедурой поиска записей в телефонной книге по фамилии и вывода найденных записей в диалоговое окно;
e) функцией добавления абонента в список, сохраните внесенные изменения в файле;
f) процедурой удаления абонента из списка, сохраните изменения в файле.
Примечание. Для удаления записи из списка необходимо выполнить следующую последовательность операторов:
ARecord := MyList.Items[В];
{В это номер удаляемой записи}
Dispose(ARecord);
PAGE 1