Разработка проекта «Телефонный справочник» средствами Delphi 7.0
Оценка 5

Разработка проекта «Телефонный справочник» средствами Delphi 7.0

Оценка 5
doc
07.05.2020
Разработка проекта «Телефонный справочник» средствами Delphi 7.0
13. Разработка проекта «Телефонный справочник» средствами Delphi 7.0.doc

Практическая работа № 5

 

Тема: Разработка проекта «Телефонный справочник» средствами Delphi 7.0.

Новые объекты: многостраничный блокнот, комбинированный список. Создание новых окон и стандартных диалогов. Работа с Файлами записей в Object Pascal.

Цель работы: Создать программу для работы с базой данных телефонным справочником, сформированным в виде файла записей. В каждой записи определены поля: фамилия и имя (строки длиной по 20 символов каждая), адрес и номер телефона (строки длиной 100 и 15 символов соответственно). Необходимо реализо­вать следующие операции: создание и удаление записи, сохране­ние и считывание файла записей с диска, редактирование, поиск и сортировку данных в алфавитном порядке, просмотр записей и навигацию по базе.

Ознакомиться с новыми объектами: многостраничным блокно­том (PageControl), страницей блокнота (TabSheet), комбиниро­ванным списком (ComboBox), диалоговым окном (AboutBox), ста­ндартными диалогами открытия и сохранение файлов (OpenDialog и SaveDialog).

Теоретические сведения. Многостраничный блокнот (PageControl) находится на особом виде формы Tabbed Pages (об­ъект PagesDlg, заголовок "Tabbed Notebook Dialog"). Форму соз­дают командами File => New...=> Закладка Forms => Tabbed Pages => Ok. После её создания ненужную форму "Forml" в случае не­обходимости можно удалить с помощью кнопки is (Remove unit) окна менеджера проекта (Project Manager). Вызов окна менеджера проекта осуществляется командами View => Project Manager. В данной работе активизацию объектов PageControl и PagesDlg мо­жно осуществлять с помощью инспектора объектов. Свойства объ­екта PagesDlg совпадают со свойствами обычной формы Form. Ра­ссмотрим новые свойства блокнота PageControl:

Свойство

Описание свойства

Примеры значений

ActivePage

Имя активной страни­цы

TabSheet

MultiLine

Возможность размещать закладки страниц в не­сколько строк

True (закладки в не­сколько строк), False (за­кладки в одну строку)

Свойства отдельной страницы блокнота (объекта TabSheet) аналогичны описанным в предыдущих разделах.

Объект ComboBox предназначен для создания выпадающего списка. Его новые свойства такие:

Свойство

Описание свойства

Примеры значений

DropDownCount

Количество строк в выпадающем списке, которые видимы без использования полос прокручивания

7; 3

 

Sorted

Сортировка списка по алфавиту

True (список сортируется), False (не сортируется)

Style

Стиль оформления и использование списка

csOwnerDrawVariable (за­данный программистом), csDropDown (стандартный)

Стандартные диалоги открытия (объект OpenDialog) и со­хранение файлов (объект SaveDialog), - это невидимые на форме объекты, ^предназначенные для создания стандартных в Windows 9х окон: "Open file" и "Save File as" - в момент вызова их из про­граммного кода проекта командой OpenDialogl. Execute или SaveDialogl.Execute. Имя выбранного файла возвращается в программу свойством FileName этих объектов.

Ход работы

1.       Загрузите среду визуального программирования Delphi.

2.      Откройте новую форму с многостраничным блокнотом.

File => New-..^Закладка Forms => Tabbed Pages => Ok.

3.      Выделите и удалите клавишей Delete панель (Panel) с кноп­ками Ok, Cancel и Help в нижней части открытой формы.

4.      Поменяйте заголовок формы с «Tabbed Notebook Dialog» на «Телефонный справочник» и поменяйте стиль границы окна (BorderStyle) на Sizeable (способный менять размер).

Для этого сначала в окне Object Inspector в списке компонен­тов текущей формы выберите объект PagesDlg (окно формы с многостраничным блокнотом). Только теперь можно поменять его заголовок и стиль.

5.      Выделите (щелкнув внутри страницы мышью) и удалите (Delete) третью страницу блокнота TabSheetS.

Будьте внимательны и не удалите весь многостраничный блок-пот - объект PageControll. В случае необходимости Вы можете отказаться от неправильного действия командой Edit => Undelete. Добавить новую страницу в блокнот можно командой New Page контекстного меню объекта PageControl (блокнот) или TabSheet (страница блокнота).

6.      Замените заголовки (свойство Caption) первой и второй страниц блокнота (объектов TabSheetl и TabSheet2) на «Список всех записей» и «Редактирование и поиск записей» соответственно.

7.       Заполните   обе   страницы   формы   визуальными   объектами так, как это показано на рис. 16 и рис. 17.

Для создания объекта Комбинированный Список воспользуй­тесь кнопкой И (ComboBox) на закладке Standard палитры ком­понентов. Кнопки «Предыдущий» «Следующий» называются ButtomlButtom4 соответственно. Очистите поля свойства Text объектов Editl - EditS и ComboBoxl. Установите свойство Style объекта ComboBoxl в csDropDownList (выпадающий список). За­дайте такие значения свойств объекта StringGridl:

Свойство

Значения

ColCount

4

FixedCols

0

RowCotmt

100

FixedRows

1

Options = goEditing

True

 

 

 

 

 


8. Сохраните выполненную на данный момент форму в своей папке.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9.   С помощью мыши задайте ширину столбцов таблицы, на­ пример так, как показано на рис. 16.

Для этого мышью передвиньте границу между двумя столбца­ми в первой (серой) строке таблицы StringGridl. He допускайте появления горизонтальной полосы прокручивания в таблице.

10. Добавьте на форму главное меню и введите названия его команд, как показано на рис. 16 и рис. 17.

Для того, чтобы провести линию-разделитель, между команда­ми меню «Записать в файл» и «Конец» создайте дополнительный пункт с заголовком «-» (символ «минус»).

Замечание. Подменю «А->Я» и «Я->А» команды «Упорядо­чить по алфавиту» создают с помощью комбинации клавиш Ctrl-Кстрелка вправо или используют контекстное меню Create Submenu этой команды. Удаление ненужной команды выполняют клавишей Delete.

 

 

 

 

 

11. Создайте окно формы «О программе» (см. рис. 18).

Прибавьте к проекту новое окно формы типа About box (File => New... => Закладка Forms => About box => Ok). Поменяйте тексты и заголовок формы, указав свою фамилию, например, так, как показано на рис. 18. Поменяйте изображения в окне по своему усмотрению, сменив свойство Picture объекта Programlcon (см. п. 13 практической работы № 1).

Рис. 17


     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 18


 

 

12. Запрограммируйте команду «О программе» главного меню окна «Телефонный справочник» так, чтобы в момент ее вы­полнения на экране появлялось только что спроектирован­ное окно.

В заготовку процедуры обработки этой команды введите строку для вызова метода Show (показать) объекта AboutBox:

AboutBox. Show

13. Запрограммируйте кнопку Ok окна «О программе».

Для этого возвратитесь к форме «О программе» и в процедуре OKButtonClick кнопки Ok введите команду закрытия активной формы:

Close

Замечание. Окно формы «О программе» находится под други ми окнами Delphi.

14. Удалите ненужную пустую форму Forml из проекта.

Для этого вызовите менеджер проекта командой View  Project Manager (см. рис. 19). Выделите строку со значением Forml в поле Form и нажмите клавишу Delete. He сохраняйте эту форму (No). Закройте окно менеджера проекта.

Рис. 19

 

15. Запрограммируйте команду Файл => Выход главной формы.

16. Сохраните работу и запустите проект на выполнение.

Убедитесь в правильности работы закладок, комбинированного списка, наличия возможности редактировать поля таблицы и пе­ремещаться по ним с помощью полосы прокручивания. Вызовите окно «О программе» и закройте его клавишей Ok. Закончите ра­боту командой Файл => Выход.

17. Опишите глобальные переменные и типы данных програм­мы: тип записи телефонного справочника (info), файл запи­сей (F), переменную типа info (r) и целую переменную коли­чества записей (N).

Для этого перед разделом реализации implementation добавьте такие команды:

info = record {Тип записи}                                                      

familia, imja : string[20];

adres : string[100];                                                                       

tel : string[15];

end;

{Эта строка уже есть в заготовке модуля}
var PagesDIg : TPagesDlg;
К : file of info;        {Файл записей}
г : info;                   {Одна запись}

N : integer;

{Количество записей}

18. Добавьте   на   форму  два   объекта   -   стандартные   диалоги Windows для открытия и сохранения файлов.

Кнопки   (OpenDialog) и   (SaveDialog) находятся на заклад­ке Dialogs панели компонентов Delphi. На рис. 16 и 17 эти объек­ты расположены в правом верхнем углу формы.

19. Запрограммируйте процедуры открытия и сохранения фай­лов    телефонного    справочника    (команды   главного    меню «Прочитать из файла» и «Записать в файл»).

procedure TPagesDlg.N3Click(Sender: Tobject); {Здесь N3 - номер команды «Прочитать из файла», у Вас может быть другой номер}

 var i : integer;

begin

{Выполнение стандартного диалога «Open file»}

 if OpenDialogl.Execute then begin

{F — название выбранного диалогом файла

 (свойство FileName объекта OpenDialogl)}

 AssignFile(F, OpenDialogl .FileName);

Reset(F);

N := 0;       {Читаем с начала файла}

{Считываем все записи из файла}

while not eof(F) do

begin

{В переменную r считываем текущую запись}

Read(F, r);

{Фамилия - в первый столбец таблицы}

 StringGridl.Cells, N+l] := r.familia; {Имя - во второй столбец таблицы} StringGridl.Cellsfl, N+l] := r.imja; {Адрес - в третий столбец таблицы] StringGridl.Cells[2, N+l] := r.adres; (Телефон — в четвертый столбец таблицы} StringGridl.Cells[3, N+l] := r. tel; N := N + 1;      {Увеличиваем общее число записей N} end;

CloseFile(F);       {Закрываем файл}

{Описанная ниже процедура заполняет поля редактирования второй страницы формы}

NewEdit(ComboBox1);

{Описанная ниже процедура заполняет комбинированный список второй страницы формы}

NewComboBox;

end

end;

procedure TpagesDlg.N4Click(Sender: TObject); {Здесь N4 - номер команды «Записать в файл», у Вас может быть другой номер}

var i : integer;

begin

if SaveDialogl.Execute then

begin

AssignFile(F, SaveDialogl.FileName);

Rewrite(F);

i:=l;

while StringGridl.Cells[3, i] <> " do

begin

r.familia := StringGridl.Cells[0, i];

 r.imja := StringGridl.Cells[l, i];

r.adres := StringGridl.Cells[2, i];

 r.tel := StringGridl.Cells[3, i];

Write(F, r);

i := i + 1;

end;

CloseFile(F); end

end;

20. Напишите процедуру создания формы.

В окне инспектора объектов активизируйте объект PagesDlg (окно формы с многостраничным блокнотом) и дважды щелкните в строке OnCreate (МоментСоздания) закладки Events этого объ­екта. Сформируйте процедуру создания главной формы програм­мы:

procedure TpagesDlg.FormCreate(Sender: TObject);

begin

{Заполняем заголовок таблицы}

 StringGridl.cells[0, 0] := 'Фамилия';

StringGridl.Cellsfl, 0] := 'Имя';

StringGridl.cells[2, 0] := 'Адрес';

StringGridl.cells[3, 0] := 'Телефон';

{Создаем пустую строку в комбинированном списке}

ComboBox1. Items. Add(«);

{Активизируем эту строку на случай создания нового справочника}

 ComboBoxl.Itemlndex:=0;

end;

21. Напишите    процедуру   заполнения    полей    редактирования
NewEdit.

Вызов этой процедуры осуществляется, в частности, в момент выбора фамилии для поиска, то есть в момент смены активной строки в комбинированном списке. Поэтому для инициализации заготовки этой процедуры активизируйте на закладке Events окна Object Inspector объекта ComboBoxl строку OnChange (МоментЗа-мены) и в правом столбце укажите название процедуры реакции на это событие: NewEdit. Дважды щелкните мышью на введенном названии и заполните заготовку этой процедуры следующим обра­зом:

procedure TPagesDlg.NewEdit(Sender: Tobject);

var i : integer;

begin

{i - номер строки данных в таблице}

 i := ComboBoxl.Itemlndex + 1;

if i > 0 then

begin

{Для значащих позиций комбинированного списка}

Editl.Text := StringGridl.Cells[O, i];

{копируем данные i-го записи с}

Edit2.Text := StringGridl.Cells[l, i];

{первой страницы форты в}

Edit3.Text := StringGridl.Cells[2, i];

{соответствующие поля на второй странице}

Edit4.Text := StringGridl.Cells[3, i];

end

end;

22. Напишите процедуру заполнения комбинированного списка
NewComboBox.

Сначала к описанию типа класса (объекта) TPagesDlg (много страничной формы) в разделе interface добавьте декларацию:

type

{Эта запись уже есть в заготовке модуля}

 TPagesDlg = class(TForm)

{Необходимо вставить}

 procedure NewComboBox;

В раздел implementation добавьте описание этой процедуры:

procedure TPagesDlg.NewComboBox;

var i, j : integer;

begin

{Запоминаем активную позицию комбинированного списка }

j := ComboBoxl.Itemlndex;     

{Очищаем комбинированный список}

ComboBox1. Clear;

for i := 1 to N do          {Для всех N записей...}

{В обновленный комбинированный список добавляем

все фамилии из первого столбца таблицы}

ComboBoxl...Items.Add(StringGridl.Cells[0, I]);

{Переходим на  позицию j}

ComboBoxl.Itemlndex := j;

end;

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

24.   Запрограммируйте команду главного меню  «Сохранить из­менения в списке записей».

procedure TPagesDlg.N6Click(Sender: Tobject); {Здесь N6 - номер • ганды «Записать в файл», у Вас может быть другой}

 var i : integer;

begin

{Определяем номер активной записи}

 i := ComboBoxl.Itemlndex + 1;

if PageControll.ActivePage=TabSheet2 then

begin        {Если активная вторая страница}

 StringGridl.Cells[0, i ] := Editl.Text;

{то вносим изменения в первую }

 StringGridl.Cells[l, i]   = Edit2.Text;

StringGridl.Cells[2, i]  = EditS.Text;

StringGridl.Cells[3, i]  = Edit4.Text;

end

{Иначе —  вносим изменения во вторую страницу]

else NewEdit(ComboBoxl);

(В обоих случаях обновляем комбинированный список)

NewComboBox;

end;

25. Запрограммируйте кнопку перехода на предыдущую запись
«Предыдущий».

procedure TpagesDlg.ButtonlClick(Sender: Tobject);

begin

 if ComboBoxl.Itemlndex = 0 then

(Зацикливаем список)

 ComboBoxl.Itemlndex := N-l

else

{В середине списка показатель уменьшается на единицу} ComboBoxl.Itemlndex := ComboBoxl.Itemlndex - 1;

{Обновляем панель «Найдена запись»}

NewEdit(ComboBox1);

end;

26. Аналогично запрограммируйте кнопку «Следующий».

Программный код созданной процедуры запишите в отчет.

27. Сохраните программу и убедитесь в правильности ее работы.

Запустите программу, считайте с диска файл телефонного спра­вочника, выберите какую-то фамилию в комбинированном списке и поменяйте ее в поле редактирования «Фамилия». Убедитесь в том, что синхронные изменения происходят и в комбинированном списке. Сохраните изменения и используйте кнопки «Предыдущий» и «Следующий» для навигации по записям, убе­дитесь в зацикливании списка. Удалите одну запись кнопкой «Стереть», сохраните изменения и перейдите на первую страницу. Отредактируйте данные в таблице, сохраните справочник в файле на диске, просмотрите окно «О программе», закончите работу с программой.


Практическая работа № 5 Тема:

Практическая работа № 5 Тема:

Свойства отдельной страницы блокнота (объекта

Свойства отдельной страницы блокнота (объекта

Для этого сначала в окне Object

Для этого сначала в окне Object

Сохраните выполненную на данный момент форму в своей папке

Сохраните выполненную на данный момент форму в своей папке

Создайте окно формы «О программе» (см

Создайте окно формы «О программе» (см

Запрограммируйте команду «О программе» главного меню окна «Телефонный справочник» так, чтобы в момент ее вы­полнения на экране появлялось только что спроектирован­ное окно

Запрограммируйте команду «О программе» главного меню окна «Телефонный справочник» так, чтобы в момент ее вы­полнения на экране появлялось только что спроектирован­ное окно

Убедитесь в правильности работы закладок, комбинированного списка, наличия возможности редактировать поля таблицы и пе­ремещаться по ним с помощью полосы прокручивания

Убедитесь в правильности работы закладок, комбинированного списка, наличия возможности редактировать поля таблицы и пе­ремещаться по ним с помощью полосы прокручивания

FileName объекта OpenDialogl )}

FileName объекта OpenDialogl )}

StringGridl.Cells[0, i]; r

StringGridl.Cells[0, i]; r

Вызов этой процедуры осуществляется, в частности, в момент выбора фамилии для поиска, то есть в момент смены активной строки в комбинированном списке

Вызов этой процедуры осуществляется, в частности, в момент выбора фамилии для поиска, то есть в момент смены активной строки в комбинированном списке

В раздел implementation добавьте описание этой процедуры: procedure

В раздел implementation добавьте описание этой процедуры: procedure

StringGridl.Cells[3, i] = Edit4

StringGridl.Cells[3, i] = Edit4
Скачать файл