Некоммерческое акционерное общество

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра компьютерных технологий 

 

 

 

 

ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ 

Методические указания к выполнению лабораторных работ для студентов

всех форм обучения специальностей 5В070300 – Информационные системы и 5В070400 – Вычислительная техника и программное обеспечение (часть 3)

 

 Алматы 2011

СОСТАВИТЕЛИ: Конуспаева А.Т., Байжанова Д.О., Рахимжанова З.М. Визуальное программирование. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальностей 5В070300 – Информационные системы и 5В070400 – Вычислительная техника и программное обеспечение (часть 3). - Алматы: АУЭС, 2011. - 33 с.

 

Методические указания составлены в соответствии с требованиями  квалификационной характеристики специалиста, Государственных стандартов, типовой программы курса. Они составлены с учетом активизации процесса изучения основ курса, закреплению лекционного курса и являются подготовкой к проведению лабораторных работ.

Методические указания предназначены для студентов всех форм обучения специальностей 5В070300 – Информационные системы и 5В070400 – Вычислительная техника и программное обеспечение.

Библиография – 19 названий. 

 

Рецензент: канд. физ.-мат. наук, доцент Б. М. Шайхин.

 

 

Печатается по плану издания некоммерческого акционерного общества «Алматинский университет энергетики и связи» на 2011 г.

 

 

© НАО «Алматинский университет энергетики и связи», 2011 г.

 

9 Лабораторная работа. Работа с массивами чисел. Графические построения

 

Цель работы: знакомство с компонентами StringGrid, PaintBox, использование их в визуальных приложениях, установка логических связей между ними, практика написания программного кода.

Методические указания к выполнению лабораторной работы

Компонент StringGrid предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. Класс TStringGrid является прямым потомком класса TDrawGrid, от которого им унаследовано большинство свойств и методов. У данного класса появляется лишь несколько новых свойств.

Cells [ACol,    ARow:    Integer]  определяет содержимое ячейки с координатами (ACol, ARow);

Cols [Index:    Integer] содержит все строки колонки с номером Index;

Objects    [ACol,    ARow:    Integer] обеспечивает доступ к объекту, связанному с ячейкой (ACol, ARow);

  Rows [Index:    Integer] содержит все строки столбца с номером Index.

Компонент PaintBox используется для графических построений, вычерчивания графических линий и фигур. Основным объектом компонента является Canvas (холст), на котором строятся все графические примитивы.

Задание

Разработать приложение для построения графа по заданной матрице.

Решение

Создайте новое приложение и сохраните его в новой папке. Разместите на форме Компоненты StringGrid  из закладки «Дополнительно», компонент PaintBox  из закладки «Система», компоненты Button, Label, Edit из закладки «Стандартные» как показано на рисунке:

 

 

Измените свойства Caption формы на «Построение графа», Label1 на «Введите число вершин графа», Button1 на «Построить граф», очистите свойство Text компонента Edit1. Установите свойтва компонента StringGrid1:

1) RowCount (количество строк)– 100;

2) ColCount (количество столбцов)– 100;

3) FixedCols (номер самой верхней строки)– 0;

4) FixedRows (номер самого левого столбца)– 0;

5) DefaultColWidth (ширина столбцов)– 24;

6) DefaultRowHeight (высота строк) – 24.

 

 

Для написания кода программы, следует объявить глобальные переменные:

 

 

В обработчике события OnClick кнопки «Построить граф» наберите следующий программный код:

procedure TForm1.Button1Click(Sender: TObject);

var b,c:integer;

a: array [0..100,0..100] of integer;

x,y: array [0..100] of integer;

begin

randomize;

n:=StrToInt(Edit1.Text);

for i:=0 to n-1 do

for j:=i to n-1 do

begin

a[i,j]:=random(2);

a[j,i]:=a[i,j];

a[i,i]:=0;

StringGrid1.Cells[i,j]:=IntToStr(a[j,i]);

StringGrid1.Cells[j,i]:=IntToStr(a[i,j]);

StringGrid1.Cells[i,i]:='0';

end;

b:=PaintBox1.ClientWidth;

c:=trunc(b/2)-5;

PaintBox1.Canvas.Brush.Color:=clRed;

PaintBox1.Canvas.Pen.Color:=clRed;

Paintbox1.Canvas.Ellipse(c-5,1,c+5,11);

x[0]:=c; y[0]:=6;

for i:=1 to n-1 do

begin

x[i]:= trunc(c+c*sin(6.28*i/n));

y[i]:=trunc(c-c*cos(6.28*i/n));

Paintbox1.Canvas.Ellipse(x[i]-5,y[i]-5,x[i]+5,y[i]+5);

end;

for i:=0 to n-1 do begin

for j:=0 to n-1 do begin

if a[i,j]=1 then begin

PaintBox1.Canvas.MoveTo(x[i],y[i]);

PaintBox1.Canvas.LineTo(x[j],y[j]);

end; end; end;

PaintBox1.Canvas.Brush.Color:=clBtnFace;

for i:=0 to n-1 do

PaintBox1.Canvas.TextOut(x[i]+5,y[i]-5,'A'+IntToStr(i+1));

end;

Для получения фокуса ввода компонентом Edit1 при запуске приложения в обработчике события OnActivate формы

 

 

наберите код:

Edit1.SetFocus;

Далее следует набрать программный код обработчика события OnClick кнопки «Очистить»:

Edit1.Text:='';

PaintBox1.Canvas.Brush.Color:=clBtnFace;

PaintBox1.Canvas.Pen.Color:=clBtnFace;

PaintBox1.Canvas.Rectangle(0,0, PaintBox1.Width,PaintBox1.Height);

for i:=0 to 100 do

for j:=0 to 100 do

StringGrid1.Cells[j,i]:='';

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

 

 

Закройте проект и среду программирования.

 

10 Лабораторная работа. Разработка приложения с компонентами

 

Цель работы: научиться применять класс TString в разработках приложений. Знакомство с основными свойствами и методами данного класса.

Методические указания к выполнению лабораторной работы

Ход выполнения

1 Открытие среды программирования Delphi: Пуск-> Все программы->Borland Delphi 7.

2 Поместить компонент TabSet1  (список закладок) со страницы Win3.1 под компонентом Notebook1 . Сделать эти компоненты одинаковыми по ширине.

 

Приложение «Блокнот» 

3 В правую часть формы из закладки «Стандартные» расположить на форме компонент Panel1 . На нем расположить из закладки «Стандартные» компонент для комментариев – Label1 , однострочный редактор - компонент Edit1 ,  3 компонента Button  - Button1, Button2, Button3.

4 Установить в свойствах Инспектора объектов свойства компонентов следующим образом:

 

Компонент

Свойство

Значение

Panel1

Caption

‘’

Label1

Caption

Введите сообщение

Editl

Name

RecordEdit

Editl

Text

‘’

Button1

Name

AddBtn

Button1

Caption

Добавить

Button2

Name

ChangeBtn

Button2

Caption

Изменить

Button3

Name

DeleteBtn

Button3

Caption

Удалить

5 Справа, в нижней части формы, под контейнером Panel1, расположить из закладки «Стандартные» 2 компонента Button  - Button4, Button5.

6 Изменить свойства компонентов следующим образом:

 

Компонент

Свойство

Значение

Button4

Name

ClearBtn

Button4

Caption

Очистить

Button5

Name

CloseBtn

Button5

Caption

Закрыть

 

7 Создать страницы компонента NoteBook1. Для этого в инс­пекторе объектов найти свойство Pages (страницы); щелкну­ть на кнопке с тремя точками для открытия диало­гового окна редактирования значений выбранного свойства. Используя диалоговое окно, создать 12 страниц, каждая из которых называется именем, соответствующим месяцу года. Для редактирования названия первой страницы воспользоваться кнопкой Edit, для добавления очередной страницы - кнопкой Add. Значение Help context можно оставить без изменения (это свойство используется при вызове контекст­но-зависимой справочной системы приложения), так как при­ложение не содержит справочной системы. Для завершения со­здания списка страниц нажмите на кнопку Close.

8 Положить на каждую страницу компонента Notebook1 ком­понент ListBox (окно списка) для размещения записей на каж­дый месяц. Для этого необходимо выполнить следующую последовательность действий.

8.1 Установить свойство ActivePage (активная страница) компо­нента NoteBook1 в значение, равное 'Январь'. Щелкнуть на вы­бранной странице объекта NoteBook1. В палитре компонентов на странице «Стандартные» (Standard) выбрать компонент ListBox1 и поместить (щелкнуть) в компонент NoteBook1. Свойство Align компонета ListBoxl установить в AlClient. Скопировать компонент ListBox1 в буфер обмена (щелкнуть на объекте ListBoxl и выполнить коман­ду Edit/Copy).

8.2 На вторую страницу блокнота поместить компонент Listbox2. Установить свойство ActivePage (активная страница) компонента NoteBookl в значение, равное 'Февраль’. Щелкнуть на компо­ненте Notebookl (для активизации этой страницы блокнота). Поместите копию компонента ListBoxl на страницу блокнота, выполнив команду Edit/Paste.

8.3 Повторить эту операцию для оставшихся 10 страниц блокнота. Таким образом, для каждого месяца года существует свой компонент ListBox: для января — ListBoxl, для февраля — ListBox2 и т. д.

9 Необходимо создать закладки в TabSet1 и син­хронизировать их со страницами блокнота. Для этого использу­ется свойство Tabs компонента TabSet1, предоставляющее список имен закладок. Список закладок соответству­ет списку страниц блокнота (Pages). Создать следующий обра­ботчик события:

Procedure TNoteBook1.FormCreate(Sender: TObject);

begin TabSet1.Tabs:=NoteBook1.Pages;

{Cкопировать содержимое свойства Pages компонента NoteBook1 в свойство Tabs компонента TabSet1, т. е. создать закладки в TabSet1}

TabSet1.TabIndex:=NoteBookl.PageIndex;

{В соответствии с тем, какая страница блокнота активна во время проектирования (свойство ActivePage), активной будет закладка с тем же именем (номером)}

end;

 

10 Используя свойства UnSelectedColor, SelectedColor, BackgroundColor, DitherBackground, StartMargin, EndMargin компо­нента TabSet1, изменить внешний вид закладок.

11 Создать обработчик события OnClick для кнопки 'Доба­вить'. После щелчка на кнопке содержимое окна редактирова­ния (RecordEdit) будет добавляться в список на странице блок­нота. Для операций со строками у компонента ListBox имеется свойство Items, принадлежащее классу TStrings. Чтобы доба­вить строку в список, используется метод Add этого класса. Обработчик со­бытия будет выглядеть следующим образом:

1-й способ

procedure TNoteBook1.AddBtnClick(Sender:  TObject);

begin

if RecordEdit.Text <>' '  then begin

case NoteBook1.PageIndex of

{Для того чтобы поместить запись в список на страницу блокнота, выбрать компонент ListBox по номеру страницы блокнота}

0: ListBox1.Items.Add(RecordEdit.Text);

1: ListBox2.Items.Add(RecordEdit.Text);

2 : ListBox3.Items.Add(RecordEdit.Text);

3: ListBox4.Items.Add(RecordEdit.Text);

4; ListBox5.Items.Add(RecordEdit.Text);

5: ListBox6.Items.Add(RecordEdit.Text);

6: ListBox7.Items.Add(RecordEdit.Text) ;

7: ListBox8.Items.Add(RecordEdit.Text);

8: ListBox9.Items.Add(RecordEdit.Text);

9: ListBox10.Items.Add(RecordEdit.Text);

10: ListBox11.Items.Add(RecordEdit.Text);

11: ListBox12.Items.Add(RecordEdit.Text);

end;

RecordEdit. Text: =' ' ;                                    {введенный текст затираем}

end;

end;

 

Процедура получилась довольно громоздкой, ее можно опи­сать по-другому.

 

2-й способ

В Object Pascal определена функция: function FindComponent(const AName:  string):  TComponent; которая возвращает ссылку на компонент, имя которого задано параметром функции AName.

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

procedure TNoteBook1.AddBtnClick(Sender:  TObject);

var TempComponent TListBox;    {введем вспомогательную переменную}

begin

TempComponent :=TListBox<FindComponent(ListBox1+ IntToStr (Notebook1. PageIndex+l) );

{TListBox(<KOMПОHЕHT>) используется для преобразования к типу TListBox}

if RecordEdit.Text :=' then TempComponent. Items.Add (RecordEdit.Text); RecordEdit.Text: = ' ' ;  end;

 

Строки записываются на одну страницу блокнота потому, что закладки Tabset1 не синхронизированы со страницами NoteBook1, т. е. при выборе закладки соответствующая страни­ца блокнота не активизируется.

Чтобы устранить этот недостаток необходимо создать обработчик собы­тия OnClick закладок:

procedure TNoteBookl.TabSet1Click(Sender: TObject);

begin

NoteBook1.PageIndex:=TabSet1.TabIndex; {страница блокнота и страница набора закладок должны совпадать}

end;

12 Сохранить проект. Проверить правильность ра­боты приложения.

 

11 Лабораторная работа. Разработка приложения с несколькими формами

 

Цель работы: приобретение навыков работы с компонентами Timer, ProgressBar, Image, RichEdit, SpeedButton, BitBtn, использования их в визуальных приложениях, работы с файлами, практика написания программного кода.

Методические указания к выполнению лабораторной работы

Компонент Timer относится к невизуальным компонентам. Невизуальные компоненты представляют собой, как прави­ло, компоненты, с помощью которых осуществляется доступ к системным ресурсам. Они отображаются только во время конст­руирования интерфейса, но не видны во время работы приложе­ния. Компонент Timer обеспечивает генерацию последовательности событий OnTimer. Основные свойства компонента:

Intervalпериод генерации события OnTimer, задается в миллисекундах.

Enabled – разрешение работы. Разрешает (значение True) или запрещает (значение False) генерацию события OnTimer.

Задание

Разработайте приложение с несколькими формами – макет электронного учебника.

Ход выполнения работы

Создайте новое приложение и сохраните в новой папке.

На форме разместите компоненты Image, Label, ProgressBar, 2 компонента Timer как показано на рисунке:

 

 

В свойстве Picture компонента Image1 щелкните кнопкой мыши на , откроется диалоговое окно для загрузки рисунка:

 

 

Нажмите на кнопку «Загрузить», в открывшемся окне найдите какой-нибудь рисунок

 

 

и нажмите кнопку «Открыть». Установите свойство Stretch компонента Image в True. Измените свойство Caption компонента Label на «Технология программирования».

 

 

Установите свойство Interval компонента Timer1 -  5000, Timer2 – 50. Измените свойство формы BorderStyle на bsNone.

Добавьте в приложение еще 3 формы: в меню Файл/Создать/Форма.

В разделе Interface окна кода добавьте модули Unit2, Unit3, Unit4:

 

 

В обработчике события OnClick  компонента Timer1 наберите код:

form1.Hide;                       {скрытие 1-формы}

form2.show;                      {показ 2-формы}

timer1.Free;                       {удаление Timer1}

timer2.Free;                       {удаление Timer2}

На 2-форме расположите компонент Label и 3 компонента SpeedButton, как показано на рисунке:

 

 

Измените свойство Caption метки Label1  и кнопок согласно следующему рисунку, установите свойство Flat в true кнопок SpeedButton:

 

 

Измените свойство 2-формы BorderStyle на bsNone. Подключите модули 3-й и 4-й форм в разделе Interface 2-формы:

 

 

Заранее подготовьте файлы в формате RTF: «1.rtf», «2.rtf» с лекциями и лабораторными работами

В обработчиках событий кнопок наберите программные коды:

1) на кнопку «Лекции»:

Form2.Hide;

Form3.Show;

Form3.RichEdit1.Lines.LoadFromFile(‘с:\1.rtf’);

2) на кнопку «Лабораторные работы»:

Form2.Hide;

Form4.Show;

Form4.RichEdit1.Lines.LoadFromFile(‘c:\2.rtf’);

3) на кнопку «Выход»:

Application.Terminate;

 

 

Очистите свойство Lines компонента RichEdit1 и измените название кнопки.

 

 

На кнопку «Содержание» наберите код:

Form3.Hide;

Form2.Show;

Подключите модуль 2-формы для возврата к ней:

 

 

Аналогично оформите 4-формы.

Сохраните  и запустите проект. Проверьте правильность работы приложения.

При запуске 1-форма выглядит следующим  образом:

 

 

2-форма:

 

 

3-форма:

 

 

4-форма:

 

 

Закройте приложение и среду программирования.

 

Задание на самостоятельную работу

Разработать электронный учебник с тестовой системой.

 

12 Лабораторная работа. Разработка баз данных

Цель работы: знакомство с компонентами создания баз данных и работы с базами данных.

Методические указания к выполнению лабораторной работы

Ход выполнения

1 Открытие среды программирования Delphi: Пуск-> Все программы->Borland Delphi 7.

2 Компоненты, используемые для связи с базами данных. Компоненты для работы с БД расположены в библиотеке компонентов на страницах Data Access и Data Con­trols. Существует три типа компонентов, каждый из которых вы­полняет специфическую роль. Компоненты Table и Query служат в качестве интерфейса между физической таблицей на диске и остальной частью при­ложения. Эти компоненты обладают методами, которые откры­вают, закрывают, считывают, дополняют и выполняют другие манипуляции с дисковыми файлами. Компонент DataSource является интерфейсной прокладкой между компонентами, непосредственно связывающимися с БД и воспринимающимися данными компонентами, такими, как, DBGrid, DBImage и другими. Большинство из воспринимающихся данными компонентами являются просто расширениями стандартных компонентов, ко­торые знают, как получить информацию от DataSource.

2.1 Компонент Table

Основой архитектуры доступа к наборам данных является базовый класс TDataSet, который содержит абстрактное представление записей и полей набора данных, инкапсулирующее управление, навигацию и манипулирование наборам данных. Некоторые методы класса TDataSet могут быть переопределены с целью создания компонента, подключаемого к определенному физическому формату данных. Исходя из этого, класс TBDEDataSet определен как производный от класса TDataSet и является основным классом источников данных; он вводит такие концепции, как BDE-базы данных и сеансы.

TDataSet

TDBDataSet

TTable        TQuerty

Класс TTable представляет структуру и данные, содержащи­еся в таблице базы данных, знает, как обрабатывать индексы и применять специальные приемы, связанные с поддержкой от­ношений двух таблиц типа один ко многим. Класс TQuery — набор данных, содержащий информацию, возвращенную в ре­зультате выполнения SQL-запроса.

Основные свойства класса TTable, унаследованные от TData­Set:

AutoCalcFields - определяет, когда вызвано событие OnCalcField;

Active - определяет, открыт или нет набор данных;

FieldDefs - список имен полей из набора данных.

Свойство DatabaseName, унаследованное классом ТТаblе от TDBDataSet, определяет псевдоним базы данных, содержащей таблицу, либо имя каталога, в котором находятся файлы таб­лиц.

Основные свойства компонента ТТаblе, унаследованные от TBDEDataSet: Filter - выражение для отбора данных;

         Filtered - значение True выполняет фильтрацию данных в соответствии с выражением, определенным свойством Filtered;

FilterOptions - определяет, является ли фильтрование нечувствительным и разрешаются или нет частичные сравнения.

Основные свойства компонента ТТаble:

MasterSource - определяет источник данных для связи с другой таблицей;

DataSource - выбирает источник данных;

DefaultIndex - определяет, нужно ли сортировать данные в таблице;

         Exclusive - определяет доступ к используемой таблице при одновременном обращении к ней нескольких приложений;

         IndexDefs - содержит информацию об индексах таблицы;

IndexFieldNames - составляет список индексов для таблицы;

IndexFields - поля текущего индекса;

         TableName - таблицы, доступные в данной базе данных;

         ТаbleТуре - тип таблицы.

Методы ТТаblе:

CreateTable - создание таблицы;

         Append - добавление новой записи в конец таблицы;

         Delete - удаление записи, на которой стоит курсор;

         DeleteTable - удаление таблицы;

         Edit - перевод таблицы в режим редактирования записей;

         FieldByName - обращение к значению поля записи по имени;

         FindFirst - установка курсора на первую запись таблицы, соответствующей условию отбора;

         First - установка курсора на первую запись таблицы;

         Insert - перевод таблицы в режим вставки новой записи;

         Next - перемещение курсора на следующую запись;

         Post - перевод таблицы в режим завершения редактирования.

2.2 Компонент DataSource и компоненты отображения данных

Класс TDataSource обеспечивает канал связи, по которому компоненты доступа к данным могут подключаться к компо­нентам отображения данных.

Свойство State отображает текущее состояние связанного с ним набора данных, т. е. режима, в котором находится таблица (вставки, редактирования, и др.).

Свойство DataSet используется для указания компонента, содержащего набор данных.

3 Создайте приложение для просмотра таблицы biolife.db

3.1 1-й способ. Для отображения данных воспользуемся компонентом DBGrid. Создайте новое приложение и сохраните его в папке BioLife_l. Файл модуля - под именем Main.pas, файл проекта — BioLife_l.dpr.

3.1.2 Из палитры компонентов страницы Data Access перенесите на форму компонентов Table и DataSource. Для отображения данных используем компонент TDBGrid со страницы Data Cont­rol.

3.1.3 Подготовка компонентов к отображению данных.

3.1.3.1 Установите свойство DataSource компонента DBGrid1 в зна­чение DataSource1 (в выпадающем списке этого свойства пере­числены все имеющиеся на форме источники данных).

3.1.3.2 Для связи компонентов DataSource1 и Table1 определите зна­чение свойства DataSet компонента DataSource1 равным Table1.

3.1.3.3 Присвойте свойствам компонента Table1 следующие значе­ния:

DataBaseName – DBDemos

TableName - biolife.db

Active - True

Примечание. Установка свойств компонента Table производится только в указанном порядке: DataBase, TableName, Active. Перед из­менением имени набора данных (имени таблицы) свойству Active при­свойте значение False. В результате будет получено приложение.

3.1.3.4 Запустите проект. Убедитесь, что полосы прокрутки позволяют просматривать все поля и записи таблицы.

4 2-й способ. Для отображения данных воспользуемся компо­нентами со страницы DataControl таким образом, чтобы дан­ные отображались не в таблице, а в отдельных полях на форме.

4.1 Создайте новое приложение, сохраните файлы проекта в папке BioLife_2 файл модуля под именем Main.pas, файл про­екта — BioLife_2.dpr.

4.2 Положите на форму четыре компонента DBEdit, четыре компонента Label и по одному компоненту DBImage, DBMemo, DataSource, Table. Выделите компоненты воспро­изведения данных и установите значение свойства DataSource в DataSource1.

4.3 Установите значения свойств компонентов следующим образом:

 

Компонент

Свойство

Значение

DataSource1

DataSet

Table1

Table1

DataBaseName

DBDEMOS

Table1

TableName

Biolife.db

Table1

Active

True

DBEdit1

DataField

Category

DBEdit2

DataField

Common_Name

DBEdit3

DataField

Length (cm)

DBEdit4

DataField

Length_In

DBMemo1

DataField

Notes

DBImage1

Stretch

True

DBImage1

DataField

Graphic

 

4.4 Свойству Caption компонентов Label присвойте значение, равное свойству DataField соответствующего компонента DBEdit.

4.5 Для навигации по таблице используется компонент DBNavigator со страницы DataControl.

4.5.1 Положите на форму компонент DBNavigator.

Компонент объединяет в себе ряд кнопок:

NbFirst - перемещение к первой записи;

NbPrior - перемещение к предыдущей записи;

NbNext - перемещение к следующей записи;

         NbLast - перемещение к последней записи;

         NbInsert - вставка новой записи в место, указанное курсором;

         NbDelete - удаление текущей записи;

         NbEclit - редактирование текущей записи;

         NbPost - внесение изменений после редактирования в БД;

NbCancel - отмена результатов редактирования или добавления новой записи;

NbRefresh - очистка буфера, связанного с набором данных.

Примечание. Для перемещения по записям таблицы можно воспо­льзоваться методами компонента Table - First (на первую запись), Next (на следующую запись), Last (на последнюю запись), Pred (на предыдущую запись). Для определения начала и конца набора данных используются свойства EOF и BOF.

Для связи навигатора с набором данных установите свойство DataSource компонента DBNavigator в DataSource1.

Для просмотра таблицы biolife необходимы кнопки NbFirst, NbPrior, NbNext, NbLast. Удалите лишние кнопки навигатора, изменив значение свойства VisibleButtons (установите значение False для всех кнопок, кроме необходимых для работы прило­жения).

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

5 Чтобы грамотно оформить приложение, работающее с БД, необходимо добавить соединение с набором данных в момент начала работы и разорвать его в момент окончания.

5.1 Установите значение свойства Active компонента Table в False.

5.2 Создайте обработчик события OnCreate формы:

procedure TForm1.FormCreate (Sender: TObject);

begin

Table1.Active := true;

end;

5.3 В обработчике события OnDestroy формы напишите:

procedure TForm1.FormDestroy (Sender: TObject);

begin

Table1.Active := false;

end;

5.4 Запустите приложение. Убедитесь, что ниче­го не изменилось в функционировании приложения.

6 3-й способ. Использование редактора полей. Отображение данных на форме в отдельных полях можно сделать автоматически.

6.1 Создайте новое приложение, сохраните файлы приложения в каталоге BioLife_3, файл проекта под именем Main.pas, файл проекта — BioLife_3.dpr.

Положите на форму компоненты DataSource и Table.

6.2 Измените значения свойств так же, как и при выполнении первого и второго способов.

6.3 Выполните двойной щелчок левой кнопкой мыши на компо­ненте Table1, появится редактор полей. Щелкни­те правой кнопкой мыши и выберите из всплывающего меню Add all Fields.

6.4 В Инспекторе объектов измените свойство DisplayLabel каж­дого поля на значение, соответствующее заголовку, например, Notes — описание. Из всплывающего меню выберите Select all. Перетащите поля на форму, в результате чего автоматически создаются компоненты, отображающие данные.

6.5 Положите на форму DBNavigator для перемещения по запи­сям таблицы.

6.6 Создайте приложение «Employees» для просмотра таблицы Employee базы данных DBDEMOS. Исполь­зуя фильтрацию данных,

a)      отобразите только тех работников, у которых зарплата больше 40000;

b)     отобразите записи, поле EmpNo которых является дву­значным числом;

c)      выведите всех сотрудников, чьи фамилии начинаются на букву «L».

6.6.1 Создайте новый проект. Сохраните файлы проекта в папке Employee.

6.6.2 Разработайте интерфейс приложения одним из трех описан­ных выше способов.

6.6.3 Запустите приложения, обратите внимание на количество отображаемых записей.

6.6.4 Фильтрация определяется свойствами Filter, Filtered,
FilterOptions компонента Table.

В свойство Filter введите условие:

Salary'40000',

так как нужно выбрать тех работников, у которых зарплата больше 40000.

6.6.5 Свойство Filtered установите в True.

6.6.6 Запустите приложение.

6.6.7 При записи условий можно использовать операции отноше­ния

(>, <, =, >=, <=,<>) и логические операции (and, or, not).

Например, фильтр

(FirstName =  'M*')   and  {Salary >  '40000')

будет выводить людей, у которых имя начинается на букву «М» и зарплата больше 40000.

            6.6.8 Процедура ApplyRange позволяет установить фильтр, который ограничивает диапазон записей для просмотра, используя индексированное поле. В таблице Employee.db первое поле EmpNo является ключе­вым. Воспользуемся им для фильтрации данных. Положите на форму кнопку «Фильтр», создайте обработчик события OnClick кнопки, в теле которого опишите такую после­довательность действий. Вызовите процедуру

SetRangeStart и установите начала диа­пазона, используя свойство Fields:

Table1.SeyRangeStart;

Table1.Fields[0].AsInteger:=10; {самое маленькое двузначное число)

6.6.9 По умолчанию свойство Fields содержит значения строково­го типа. Свойство AsInteger позволяет преобразовать значение поля записи к целочисленному значению. Похожие свойства преобразуют значения полей к логическому (AsBoalean), веще­ственному (AsFloat) и формату даты (AsDate).

Вызовите процедуру SetRangeEnd и установите начала диа­пазона, используя свойство Fields:

Table1.SeyRanqeEnd;

Table1.Fields[0].AsInteger:=99;  {самое большое двузначное число}

6.6.10 Вызовите команду ApplyRange для выполнения фильтра:

Table1.ApplyRange;

6.6.11 Положите на форму кнопку «Отменить фильтр». Чтобы от­менить результаты вызова ApplyRange, используйте метод CancelRange:

Tabe1l.CancelRange;

6.6.12 Запустите приложение. Проверьте, отфильтрованы ли записи в соответствии с поставленным условием.

6.6.13 Фильтрация при помощи события OnFilterRecord. Событие OnFilterRecord позволяет устанавливать фильтры на неключевых полях. Создадим обработчик события OnFilteredRecord компонента Table1:

procedure TForm1.Table1FilterRecord (DataSet: TDataSet; var Accept: Boolean); begin

accept: = (table1 ['LastName']>=’L*’ ) and (table1 ['LastName']<’M*') ;

end;

Примечание. Для обращения к полю записи также можно восполь­зоваться способом, описанным выше:

accept := (table1.Fields [1] .AsStrings  >=  'L*')   and (table1.Fields[1].AsString 'M*');

6.6.14 Положите на форму компонент CheckBox. Измените свойство Caption на “Фильтр”. Установка флажка будет приводить к фильтрованию записей, отмена флажка — к сбросу фильтра. Создайте обработчик OnClick компонента CheckBox:

procedure TForm1.CheckBox1Click (Sender: TObject);

begin

Table1.Filtered:=CheckBox1.Checked;

end;

6.6.15 Запустите приложение. Сколько записей таб­лицы Employee отображается?

7 Создание баз данных с помощью Database Desktop. Для работы со структурой таблиц баз данных в Delphi испо­льзуется программа Database Desktop, которая поставляется вместе с Delphi. DataBase Desktop - это программа-утилита, являющаяся своеобразным текстовым редактором для таблиц баз данных. Она позволяет создавать, редактировать и изме­нять структуру таблиц баз данных.

7.1 Выполните команду Пуск\ Программы\ Borland Delphi 7\ Database Desktop. Создайте таблицу базы данных СУБД Para­dox7.

Реляционная база данных состоит из нескольких таблиц, каждая из которых имеет свою структуру. Структура таблицы базы данных задается следующими свойствами:

- список полей, их тип и размер;

          - наличие ключевых полей;

- наличие проверочных шаблонов для ввода данных;

- выбор национальной азбуки;

- наличие вторичных индексов;

          - существование специальных ссылок к другой таблице.

Все это можно задать в главном окне программы Database Desktop.

Каждое поле таблицы определяется именем (Field Name), содержащим до 25 символов, и типом (Туре).

Тип полей определяется форматом базы данных. Типы полей таблицы Paradox представлены в следующей таблице.

 

Обозна­чение

Тип

Значение

Размер

Описание

А

Alpha

 

1..255

Строковый

N

Number

-10307> to 10308

 

Вещественный

$

Money

 

 

Денежный

S

Short

-32768..32767

 

Короткое целое

I

Long Integer

-2147483648 .. 2147483647

 

Длинное целое

#

BCD

 

0..32

Поле двоично-десятичного кода

D

Data

 

 

Даты

T

Time

 

 

Время

@

TimeStamp

 

 

Время и Дата

M

Memo

 

1..240

Текст

F

Formatted Memo

 

0..240

Форматированные тексты

G

Graphic

 

 

Графический

О

OLE

 

 

Содержат объекты, размещенные в таблице из других приложений Windows, которые поддерживают стандарт OLE

L

Logical

 

 

Логический

+

Autoincrement

 

 

Содержат целое значение, которое увеличивается на единицу при каждой новой записи в таблицу

В

Binary

 

0..240

Содержит данные, которые Paradox не может интерпретировать (например, звуковые)

Y

Bytes

 

1..255

Содержит данные, которые Paradox не может не только интерпретировать, но и читать

 

Для некоторых типов необходимо задавать размер (Size). Например, для строкового типа Alpha размер — это число символов.

Первичный ключ (Key) — это поле, которое содержит дан­ные, однозначно определяющие каждую запись в таблице. Клю­чевые поля должны быть отмечены символом '*'. Двойной щел­чок мыши (или клавиша пробел) ставит или удаляет этот значок.

В правой части окна задаются свойства таблицы (Table Properties):

Validity Checks (контроль правильности). Это свойство определяет, какие данные можно вводить в текущее поле, а какие — нет. Способ определения зависит от типа условия — Re­quired Field (обязательное поле), Minimum Value (минимальное значение), Maximum Value (максимальное значение), Default Value (значение по умолчанию) и Picture (шаблон).

Table Lookup (связанные таблицы). Наличие ссылочной таб­лицы позволяет ограничить значения, которые можно вводить в поле главной таблицы, значениями, которые содержатся в первом поле ссылочной таблицы.

Secondary Indexes (вторичные индексы). Вторичный индекс - это справочная таблица, которая определяет логический поря­док записей в физической таблице на диске.

Referential Integrity (справочная целостность) обеспечивает связи между данными отдельных таблиц.

Password Security (защита паролем) позволяет задавать для таблицы или полей таблицы пароли.

Table Language (выбор языка данных таблицы).

Dependent Tables (зависимые таблицы) позволяет просмот­реть список зависимых таблиц, связанных на уровне ссылок Referential Integrity.

После оформления структуры таблицы необходимо сохра­нить таблицу, выполнив щелчок на кнопке Save as....

Для открытия таблицы используется команда File/Open.../ Table.

Команда Table/EditData переводит таблицу в режим редак­тирования записей.

Команда Table/Info Structure позволяет просмотреть струк­туру таблицы, a Table/Restructure — изменить структуру таб­лицы.

7.2 Создайте приложение «Автостоянка». Это приложение отображает работу нескольких автостоянок. Автомобили могут приезжать или уезжать с какой-либо авто­стоянки. Все изменения фиксируются в БД.

7.2.1 Создайте каталог CarPark. Написание приложения начнем с разработки базы данных.

7.2.2 Создайте подкаталог BD каталога CarPark для хранения таблиц базы данных.

7.2.3 Таблица autostation.db предназначена для хранения инфор­мации о стоянках:

 

 

Название поля

Тип (размер)

Первичный ключ

Номер автостоянки

NAutostation

Alpha (5)

*

Количество мест

Seats

Short

 

Количество занятых мест

BuzySeats

Short

 

 

7.2.4. В таблицу ncars.db будем записывать информацию об авто­мобилях, находящихся на стоянках:

 

 

Название поля

Тип (размер)

Первичный ключ

Номер машины

NumberCar

Alpha (10)

*

Номер автостоянки

NAutostation

Alpha(5)

 

 

7.2.5 Разработка визуального интерфейса приложения. Положите на форму по два компонента Table, DataSource, DBGrid.

 

7.2.6 Установите значения свойств следующим образом:

 

Компонент

Свойство

Значение

Table1

Name

ParkTbl

 

DataBaseName

...\CarPark\DB

 

TableName

autostation.db

 

Active

True

Table2

Name

CarsTbl

 

DataBaseName

...\CarPark\DB

 

TableName

ncars.db

 

Active

True

DataSource1

Name

ParkDsc

 

DataSet

--                                            ^

ParkTbl

DataSource2

Name

CarsDsc

 

DataSet

CarsTbl

DBGrid1

Name

ParkDbg

 

DataSource

ParkDsc

DBGrid2

Name

CarsDbg

 

DataSource

CarsDsc

 

7.2.7 Сохраните файл модуля под именем Main.pas, файл проекта — CarPark.dpr. Запустите приложение. Убедитесь, что данные таблиц отображены на форме.

7.3 Для определения взаимоотношения типа один-ко-многим меж­ду таблицами autostation.db и ncars.db воспользуемся свойст­вом «связанные курсоры».

Запустите DataBase DeskTop и создайте для таблицы ncars.db вторичный индекс по полю NAutostation:

- откройте таблицу ncars.db;

- выполните команду Table/ Restructure...;

- измените свойство таблицы SecondaryIndexes. Для этого щелкните на кнопке Define, в левом столбце выберите поле NAutostation и переместите его в правый столбец;

- щелкните на кнопке ОК;

- в диалоговом окне Save Index As установите имя в ByNAutostation;

- сохраните таблицу и закройте DataBase Desktop.

         7.4 Измените значения следующих свойств компонента CarsTbl:

MasterSource – ParkDsc

MasterFields - Autostation

IndexName - ByNAutostation

7.5 Запустите приложение. Как влияет измене­ние значений свойств компонента CarsTbl на отображение дан­ных?

7.6 Внесите изменения в данные таблицы Cars.db.

Примечание. Для добавления новой записи нажмите кнопку Insert, для удаления записи - Ctrl+Delete, для редактирования - F2.

7.7 Дополним приложение возможностью аудита автостоянки: по прибытии машины в приложение вводится номер машины и номер автостоянки (в TEdit2); если свободные места на выбран­ной автостоянке есть, запись добавляется в БД, иначе выводит­ся сообщение, что мест нет. После освобождения машиной мес­та на автостоянке соответствующая запись удаляется.

7.7.1 Положите на форму по два компонента Label, Edit и Button. В первый компонент Edit будем заносить номер автостоянки, во второй — номер автомобиля. После щелчка на первой кноп­ке машина добавляется в БД, на второй — удаляется.

7.7.2 Измените значения свойств Name компонентов следующим образом:

Editl - NAutostationEdt

Edit2 - NCarEdt

Button1 - ArriveBtn

Button2 - LeaveBtn

7.7.3 Установите значения свойств Caption компонентов.

7.7.4 Для определения количества свободных мест создайте вы­числяемое поле. Выделите компонент ParkTbl.

Правой кнопкой мыши вызовите контекстное меню и выбе­рите редактор полей (Fields Editor).

Добавьте в редактор полей все поля таблицы: вызовите контекстное меню редактора полей и выполните команду Add fields (добавить поля). В появившемся диалоговом окне щелк­ните на кнопке ОК.

Для добавления нового поля еще раз вызовите контекстное меню и выполните команду New field (новое поле). В диалого­вом окне создания нового поля установите свойства поля:

Name - FreeSeats

Type - integer

Size - 0

Field type - Calculated

7.7.5 Создайте обработчик события OnCalcFields компонента ParkTbl:

procedure TForm1.ParkTblCalcFields (DataSet: TDataSet);

begin

ParkTblFreeSeats.Value  := ParkTblSeats.Value -ParkTblBuzySeats.Value;

end;

7.7.6 Создайте обработчик события OnClick компонента ArriveBtn.

Для определения наличия свободных мест на стоянке воспользуемся возможностью поиска записи по ключевому полю (NAutostation). Если номер стоянки введен верно и на ней есть свободные места, то занимаем одно из свободных мест, а в таб­лицу CarsTbl вносим номер машины. Если свободных мест нет, то выводится сообщение об отсутствии свободных мест.

procedure TForm1.AriveBtnClick (Sender: TObject);

begin

ParkTbl.SetKey;

{переключение таблицы в режим поиска по ключевому полю}

try

ParkTbl.FieldByName('NAutostation') .AsString:= NAutostationEdt.Text;

{установка значения для поиска}

if not ParkTbl.GotoKey then raise EDataBaseError.create(' ')

{ParkTbl.GotoKey — осуществляет поиск; если искомая запись не найдена, возбуждаем исключительную ситуацию}

if ParkTblFreeSeats.Value=0 then begin

{если свободных мест нет, вывод сообщения и удаление из NAutuatationEdl номера выбранной автостоянки}

MessageDlg( 'Извините, мест нет. Выберите другую автостоянку', mtInformation, [mbOk], 0);

NAutostationEdt.Text:='';

end

else begin {если свободные места на стоянке есть}

ParkTbl.Edit; {переключение в режим редактирования записей}

ParkTblBuzySeats.Value:= ParkTblBuzySeats.Value+1;

{увеличение счетчика занятых мест}

ParkTbl.Post;

CarsTbl.Insert;

{переключение таблицы Cars.db в режим вставки новой записи} CarsTbl.FieldByName(‘NumberCar’).AsString := NCarEdt.Text;

CarsTbl.FieldByName ('NAutostation ').AsString : =NAutostationEdt.Text;

CarsTbl.Post;

end

except

on EDataBaseError do

begin

MessageDlg('Номер автостоянки введен неверно, mtError, [mbOk], 0) ;

NAutostationEdt.Text:=’’;

end;

end;

end;

7.7.7 Запустите приложение. Добавьте автомашину на стоянку, где есть свободные места, и туда, где их нет.

 


Список литературы

 

1.         Иванова Г.С. Технология программирования. - М.: Изд-во МГТУ им. Н.Э.Баумана, 2002.

2.         Аляев Ю.А., Козлов О.А. Алгоритмизация и языки программирования Pascal, C++, Visual Basic: Учебно-справочное пособие. – М.: Финансы и статистика, 2007.

3.         Иванова Г.С. Основы программирования. - М.: Изд-во МГТУ им. Н.Э.Баумана, 2009.

4.         Терехов А.Н. Технология программирования. – М.: БИНОМ.  Лаборатория знаний, Интернет-университет информационных технологий - Intuit.ru, 2006.

5.         Вендров А.М. CASE-технологии. Современные методы и средства проектирования информационных систем. - М.: Финансы и статистика, 1998.

6.         Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989.

7.         Тассел Д. Ван. Стиль, разработка, эффективность, отладка и испытание программ. – М.: Мир, 2005.

8.         Соммервиль И. Инженерия программного обеспечения. - М.: Изд-во Вильямс, 2002.

9.         Кантор М. Управление программными проектами. Практическое руководство по разработке успешного программного обеспечения. - М.: Вильямс, 2002.

10.    Бахман П., Френцель М., Ханцшманн К и др. Программные системы. – М.: Мир, 1998.

11.    Фаулер М., Скотт К. UML в кратком изложении. Применение стандартного языка объектного моделирования. – М.: Мир, 1999.

12.    Буч Г., Рамбо Д., Джекобсон А. Язык UML. Руководство пользователя. – М.: ДМК Пресс, 2001.

13.    Кватрани Т. Rational Rose 2000 и UML. Визуальное моделирование. - М.: ДМК Пресс, 2001.

14.    Мандел Т. Разработка пользовательского интерфейса. – М.: ДМК Пресс, 2001.

15.    Канер С., Фолк Д., Нгуен Е.К. Тестирование программного обеспечения. - Киев: «ДиаСофт», 2008.

16.    Гримм С.Дж. Как писать руководства для пользователей. – М.: Радио и связь, 1985.

17.    Ашарина И.В. Основы программирования на языках С и С++.- М.: Горячая линия - Телеком, 2009.

18.    Попов В.Б. Основы информационных и телекоммуникационных технологий. Программные средства информационных технологий. – М.: Финансы и статистика, 2008.

19.    Архангельский А.Я. Язык Pascal и основы программирования в Delphi. – М.: ЗАО Бином, 2004.

 

Содержание 

9 Лабораторная работа. Работа с массивами                                                   3

10 Лабораторная работа. Разработка приложения с компонентами               7

11 Лабораторная работа. Разработка приложения с несколькими формами  11

12 Лабораторная работа. Разработка баз данных                                            18

Список литературы                                                                                          31

 

Сводный план 2011 г. поз. 268