Файл: Практическая работа БД.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 26.05.2021

Просмотров: 851

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

практическая работа № 7

Работа с переменными и массивами

Работа с массивами

Компонент TStringGrid

Порядок выполнения задания

Настройка компонента TStringGrid

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

Nmax=10; // Максимальная размерность массива

Type

Mas1 = array[1..Nmax] of extended; {Объявление типа одномерного массива вещественных чисел размерностью Nmax}

Mas2 = array[1..Nmax,1..Nmax] of extended; {Объявление типа двумерного массива вещественных чисел размерностью Nmax*Nmax}

Var

Form1: TForm1;

A : Mas2; // Объявление двумерного массива

B,Y : Mas1; // Объявление одномерных массивов

N,i,j : integer;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);

{Процедура подготовки к началу работы}

begin

N:=3; // Задание размерности массива

Edit1.Text:=IntToStr(N); // Вывод значения N в Edit1

{Задание числа строк и столбцов в таблицах}

StringGrid1.ColCount:=N+1;

StringGrid1.RowCount:=N+1;

StringGrid2.RowCount:=N+1;

StringGrid3.RowCount:=N+1;

{Ввод в левую верхнюю ячейку таблицы названия массива}

StringGrid1.Cells[0,0]:='Массив A:';

StringGrid2.Cells[0,0]:='Массив B:';

StringGrid3.Cells[0,0]:='Массив Y:';

{Заполнение верхнего и левого столбцов поясняющими подписями}

for i:=1 to N do

begin

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

{Процедура изменения размерности массива}

begin

try

N:=StrToInt(Edit1.Text);

except

ShowMessage('Ошибочная запись числа '+Edit1.Text);

Edit1.SetFocus;

Exit;

end;

{Задание числа строк и столбцов в таблицах}

StringGrid1.ColCount:=N+1;

StringGrid1.RowCount:=N+1;

StringGrid2.RowCount:=N+1;

StringGrid3.RowCount:=N+1;

{Заполнение верхнего и левого столбцов поясняющими подписями}

for i:=1 to N do

begin

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

{Процедура расчета вектора Y}

var

s: extended;

begin

{Заполнение массива А элементами из таблицы StringGrid1}

for i:=1 to N do

for j:=1 to N do

begin

if StringGrid1.Cells[j,i]=' ' then

begin

ShowMessage('Ошибка заполнения массива А');

Exit;

end;

try

A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

except

ShowMessage('Ошибочная запись числа '+StringGrid1.Cells[j,i]);

Exit;

end;

end;

{Заполнение массива B элементами из таблицы StringGrid2}

for i:=1 to N do

begin

if StringGrid2.Cells[0,i]=' ' then

begin

ShowMessage('Ошибка заполнения массива В!');

Exit;

end;

try

B[i]:=StrToFloat (StringGrid2.Cells[0,i]);

except

ShowMessage ('Ошибочная запись числа '+StringGrid2.Cells[0,i]);

Exit;

end;

end;

{Умножение массива А на массив В}

for i:=1 to N do

begin

s:=0;

for j:=1 to N do

s:=s+A[i,j]*B[i];

Y[i]:=s;

{Вывод результата в таблицу StringGrid3}

StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);

end;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

{Очищение всех ячеек таблиц перед очередным прогоном программы}

for i:=1 to N do

begin

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

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

for j:=1 to N do

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

end;

end;

end.

Индивидуальные задания

лабораторная работа №

ЛАБОРАТОРНАЯ РАБОТА №

Создание приложений для работы с базами данных На ОСНОВЕ ТЕХНОЛОГИИ bde

Порядок выполнения задания

Рис. 9.- Расположение компонентов на форме

3.Компоненту DBNavigator1:

4.Компоненту DBGrid1:

Рис. 10.- Рабочее окно программы

Компонент DBNavigator служит для управления записями таблицы (перемещение, добавление, удаление). При этом все изменения сохраняются в таблице MainData.DB (свойству Store Defs присвойте значение True).

3.Компоненту DBGrid2:

Можно не менять свойство SQL компонента Query1, а изменить обработчик события для Form1 следующим образом:

end;

Создание параметризованного запроса

Индивидуальные задания

Варианты задач

Индивидуальные задания

Варианты задач

лабораторная работа №

Индивидуальные задания

Варианты задач

TQuery и параметры

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

Написание программы


Первый пример программы

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

Пример Изготовим приложение, у которого в заголовке окна находится текст «Моя первая программа», а в окне располагается надпись «Привет, Delphi!».

1) Чтобы изменить заголовок окна, щелкните мышью по форме Form1, расположенной в окне формы. Затем в инспекторе объектов на вкладке Properties (свойства) найдите свойство Caption, которое задает заголовок окна информирующий пользователя о названии программы. По умолчанию значением данного свойства является название Form1. Щелкните мышью по этому значению и введите с клавиатуры новое название — «Моя первая программа». Сделанное изменение сразу отобразится в окне формы, но исходный текст файла модуля Unit1.pas не изменится.

2) Чтобы проверить результат сделанного изменения, отправьте проект на компиляцию и выполнение, нажав клавишу F9.

3) Чтобы разместить в окне надпись «Привет, Delphi!», нуж­но в палитре компонентов, расположенной в главном окне системы Delphi, на вкладке Standard (стандартные ком­поненты) найти компонент Label (метка), щелкнуть по нему мышью, а затем щелкнуть мышью по форме Form1 в окне формы. В результате этих действий на форме появится компонент Labell. При этом изменится и исход­ный текст файла модуля Unit1.pas: в описании класса TForm1 появится описание объекта, который програм­мист поместил на форму, имеющее вид Label1: TLabel.

4) О помощью инспектора объектов замените значение по умолчанию Label1 его свойства Caption на «Привет, Delphi!». Сделанное изменение сразу отобразится в окне формы.

5) Проверьте результаты компиляции и выполнения про­граммы, нажав клавишу F9.

6) Сохраните текущее состояние проекта в папке Project1 командой File | Save Project As... главного меню Delphi.


Замечание.

Название компонента Label может сбить читателя, зна­комого с понятием метки, которое используется во многих языках программирования (в том числе и в Паскале) для организации переходов. Компонент Label никакого отношения к переходам на метки не имеет. Он используется в Delphi исключительно для создания надписей.

Задание

Поэкспериментируйте немного с приложением Project 1. Попробуйте изменить атрибуты шрифта, который при­меняется по умолчанию для отображения в окне над­писи «Привет, Delphi!». Используйте, например, шрифт Tahoma, сделайте надпись красной и более крупной. Это­го легко добиться, меняя с помощью инспектора объек­тов значение свойства Font компонента Label 1.

О братите внимание, что в диалоговом окне для выбо­ра шрифта должен присутствовать кириллический на­бор символов для выбранного шрифта.










Рис. 1.1. Первый пример программы



Второй пример программы


Пример. Изготовим приложение, у которого в заголовке окна находится текст «Моя вторая программа», в окне располагаются надпись «Привет, Delphiи кнопка. За основу нового приложения возьмем проект Project 1.


  1. Откройте проект Project1.dpr, сделав в «Проводнике» Windows двойной щелчок мышью на этом файле либо воспользовавшись командой File | Open Project.. главного меню Delphi.

  2. Создайте на компьютере папку с именем Project2 и сохраните в ней текущее состояние проекта под именем Project2. Используйте для этого команду File / Save Project As... главного меню Delphi.

  3. Чтобы результаты компиляции также сохранялись в папке Project2, измените настройки Delphi, указав папку Project2 в качестве Output directory и Unit output directory.

  4. Измените заголовок окна. Для этого щелкните мышью по форме Form1, затем в инспекторе объектов на вкладке Properties найдите свойство Caption и укажите текст «Моя вторая программа» в качестве значения даны свойства.

5) Поместите на форму кнопку Button1. Для этого в па­литре компонентов на вкладке Standard найдите компо­нент Button (кнопка), щелкните по нему мышью, а затем щелкните мышью по форме Form1. В результате этих действий на форме появится компонент Button1. При этом изменится и исходный текст файла модуля Unit1.pas: и описании класса TForm1 появится описание объекта, Который программист поместил на форму, имеющее вид Button1: TButton.

6)C помощью инспектора объектов замените значение по умолчанию Button1 его свойства Caption на «Удалить надпись». Для такой надписи на кнопке не хватит места, Поэтому нужно сделать кнопку покрупнее. Удобнее всего использовать для этого мышь. Сначала нужно выделить кнопку, щелкнув по ней мышью. У кнопки появится пря­моугольная окантовка с точками. Ухватившись за одну из них мышью, можно менять размер кнопки.

7) Создайте для этой кнопки обработчик события OnClick, которое происходит, когда пользователь программы щелкает по кнопке Button1 мышью. Для этого нужно в инспекторе объектов перейти на вкладку Events (события) и сделать двойной щелчок мышью на пустом поле, находящемся справа от названия события OnClick. В этом поле появится надпись Button1Click, а в текст файла модуля Unit1.pas система Delphi вставит заготовку для обработчика данного события, имеющую вид

procedure TForml.ButtonlClick(Sender: TQbject);

begin

end;

Помимо этого, Delphi скопирует заголовок данного обработчика в описание класса TForm1, делая его доступны другим частям приложения. Заметьте, что заголовок обработчика содержит квалификатор TForm1, позволяющий компилятору определить, что данный обработчик связан с кнопкой, расположенной на форме Form1. А вот у копии заголовка, которая содержится в описании класса TForm1, такого квалификатора нет, поскольку он подразумевается по умолчанию.

    1. Поместите между операторными скобками begin и еnd оператор Label1.Caption:=". Такой оператор в Паскале называется оператором присваивания. Его правая часть для свойства Caption должна содержать строку символов, окаймленную апострофами. В рассматриваемом примере он в качестве значения свойства Caption компонента Label1 задает пустую строку — текст, который не содержит ни одного символа. Это и обеспечит удаление надписи из окна, когда пользователь щелкнет по данной кнопке во время выполнения программы.

    2. Проверьте результаты компиляции и выполнения программы, нажав клавишу F9.


10) Сохраните текущее состояние проекта в папке Project2 командой File | Save Project As... главного меню Delphi




Замечания.

  1. Обратите внимание на следующий важный факт. Размещая в окне компонент Label1, мы создаем экземпляр объекта, принадлежащего классу TLabel. Его имя программист может использовать в программном коде. Оно определяется значением свойства Label1.Name, которое можно задать в инспекторе объектов. Что же касается текста, расположенного на этом экземпляре, то он опре­деляется значением свойства Label1.Caption.

2) Аналогично обстоит дело и с кнопкой. Размещая в окне компонент Button1, мы создаем экземпляр объекта класса TButton. Его имя программист может использовать н программном коде. Оно определяется значением свой­ства Buttonl.Name, а текст, расположенный на этом эк­земпляре, определяется значением свойства Button1.Caption.









Рис. 2.1. Второй пример программы

Продолжите работу с приложением Project2. Сделайте так, чтобы надпись «Привет, Delphiизначально отсутствовала в окне. Разместите в окне две кнопки с текстами «Удалить надпись» и «Восстановить надпись» и со­здайте для каждой из них обработчик события OnClick. Убедитесь, что программа работает правильно.

























практическая работа № 7

Работа с переменными и массивами


Цель практической работы: изучить свойства компонента TStringGrid. Написать программу с использованием массивов.

Переменные.

Каждая переменная относится к некоторому типу даны, который указывается при ее объявлении (описании).

Все переменные должны быть описаны. Никакая переменная не может быть описана более одного раза. Описание переменной должно предшествовать ее использованию.

Каждая переменная имеет уникальное имя. В качестве имени переменной можно использовать только идентификатор.

Пример описания пременных:

Var I, J1, J2: integer; {целые}

A, B, C: extended; {вещественные }

Ch1, Ch2: char; {символьные}

S0: string {строковые}

B_1, B_2: boolean{булевские}

Для описания Символьных переменных используется стандартный тип данных Char(от англ. Character - символ). Значением символьной переменной являются символьные константы.

Для описания строковых переменных используется стандартный тип данных string (строка символов). Значениями строковых переменных, являются строковой переменной, называется элементами строки.

К элементам строки можно обращатся как к переменным с индексами. Синтаксис такого обращения показан в следующем примере:

Var S: string; {строковая переменная}

S:=’мама’;

S[1]:=’п’;

S[3]:=’п’; {теперь S= ‘папа’}

Переменные с индексами описывать не нужно, т.к. вся необходимая компилятору информация уже содержится в описаниях строковых переменных, которые их порождают.



Работа с массивами

Массив - упорядоченный набор однотипных элементов, объединенных под одним именем. Каждый элемент массива обозначается именем, за которым в квадратных скобках следует один или несколько индексов, разделенных запятыми, например: a[1], bb[i], c12[i,j*2], q[1,1,I*j-1].. В качестве индекса можно использовать любые порядковые типы за исключением LongInt.


Тип массива или сам массив определяются соответственно в разделе типов (Type) или переменных (Var) с помощью ключевого слова Array следующим образом:

array [описание индексов] of <тип элемента массива>;

Примеры описания массивов:

Const

N=20; // Задание максимального значения индекса;

Type

TVector=array[1..N] of real; // Описание типа одномерного массива вещественных чисел;

Var

a: TVector; // Амассив типа Tvector;

Ss: array[1..10] of integer; // Ss – одномерный массив из десяти целых чисел;

Y:array[1..5,1..10] of char; // Y – двумерный массив символьного типа.

Элементы массивов могут использоваться в выражениях так же, как и обычные переменные, например:

F:=2*a[3]+a[ss[I]+1]*3;

A[n]:=1+sqrt(abs(a[n-1]));


Компонент TStringGrid

При работе с массивами ввод и вывод информации на экран удобно организовывать в виде таблиц. Компонент TStringGrid предназначен для отображения информации в виде двумерной таблицы, каждая ячейка которой представляет собой окно однострочного редактора (аналогично окну TEdit). Доступ к информации осуществляется с помощью свойства Cells[ACol, ARow: Integer]: string, где ACol, Arow-индекс элемента двумерного массива. Свойства ColCount и RowCount устанавливают количество столбцов и строк в таблице, а свойства FixedCols и FixedRows задают количество столбцов и строк фиксированной зоны. Фиксированная зона выделена другим цветом, и в нее запрещен ввод информации с клавиатуры.

Порядок выполнения задания

Задание: создать программу для определения вектора , где А - квадратная матрица размерностью NxN, а Y, B – одномерные массивы размерностью N. Элементы вектора Y определяются по формуле . Значения N вводить в компонент TEdit, А и B - в компонент TStringGrid. Результат, после нажатия кнопки типа TBitBtn, вывести в компонент TStringGrid.

Панель диалога приведена на рис. 1.

Настройка компонента TStringGrid

Для установки компонента TStringGrid на форму необходимо на странице Additional меню компонентов щелкнуть мышью по пиктограмме . После этого щелкните мышью в нужном месте формы. Захватывая кромки компонента отрегулируйте его размер. В инспекторе объектов значения свойств ColCount и RowCount установите 2(две строки и два столбца), а FixedCols и FixedRows установите 1(один столбец и одна строка с фиксированной зоной). Т.к. компоненты StringGrid2 и StringGrid3 имеют только один столбец, то у них: ColCount=1, RowCount=2, FixedCols=0 и FixedRows=1. По умолчанию в компонент TStringGrid запрещен ввод


















а)












б)

Рис. 1- Активная форма программы

а) работа программы без возникновения ошибки

б) работа программы при возникновении ошибки

(обработка исключительной ситуации)

информации с клавиатуры, поэтому необходимо свойство Options goEditing для компонентов StringGrid1 и StringGrid2 установить в положение True.

Текст программы выглядит следующим образом.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Buttons;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;


StringGrid3: TStringGrid;

Edit1: TEdit;

Label1: TLabel;

Button1: TButton;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

Nmax=10; // Максимальная размерность массива

Type

Mas1 = array[1..Nmax] of extended; {Объявление типа одномерного массива вещественных чисел размерностью Nmax}

Mas2 = array[1..Nmax,1..Nmax] of extended; {Объявление типа двумерного массива вещественных чисел размерностью Nmax*Nmax}

Var

Form1: TForm1;

A : Mas2; // Объявление двумерного массива

B,Y : Mas1; // Объявление одномерных массивов

N,i,j : integer;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);

{Процедура подготовки к началу работы}

begin

N:=3; // Задание размерности массива

Edit1.Text:=IntToStr(N); // Вывод значения N в Edit1

{Задание числа строк и столбцов в таблицах}

StringGrid1.ColCount:=N+1;

StringGrid1.RowCount:=N+1;

StringGrid2.RowCount:=N+1;

StringGrid3.RowCount:=N+1;

{Ввод в левую верхнюю ячейку таблицы названия массива}

StringGrid1.Cells[0,0]:='Массив A:';

StringGrid2.Cells[0,0]:='Массив B:';

StringGrid3.Cells[0,0]:='Массив Y:';

{Заполнение верхнего и левого столбцов поясняющими подписями}

for i:=1 to N do

begin

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

{Процедура изменения размерности массива}

begin

try

N:=StrToInt(Edit1.Text);

except

ShowMessage('Ошибочная запись числа '+Edit1.Text);

Edit1.SetFocus;

Exit;

end;

{Задание числа строк и столбцов в таблицах}

StringGrid1.ColCount:=N+1;

StringGrid1.RowCount:=N+1;

StringGrid2.RowCount:=N+1;

StringGrid3.RowCount:=N+1;

{Заполнение верхнего и левого столбцов поясняющими подписями}

for i:=1 to N do

begin

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

{Процедура расчета вектора Y}

var

s: extended;

begin

{Заполнение массива А элементами из таблицы StringGrid1}

for i:=1 to N do

for j:=1 to N do

begin

if StringGrid1.Cells[j,i]=' ' then

begin

ShowMessage('Ошибка заполнения массива А');

Exit;

end;

try

A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

except

ShowMessage('Ошибочная запись числа '+StringGrid1.Cells[j,i]);

Exit;

end;

end;

{Заполнение массива B элементами из таблицы StringGrid2}

for i:=1 to N do

begin

if StringGrid2.Cells[0,i]=' ' then

begin

ShowMessage('Ошибка заполнения массива В!');

Exit;

end;

try

B[i]:=StrToFloat (StringGrid2.Cells[0,i]);

except

ShowMessage ('Ошибочная запись числа '+StringGrid2.Cells[0,i]);

Exit;

end;

end;

{Умножение массива А на массив В}

for i:=1 to N do

begin

s:=0;

for j:=1 to N do

s:=s+A[i,j]*B[i];

Y[i]:=s;

{Вывод результата в таблицу StringGrid3}

StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);

end;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

{Очищение всех ячеек таблиц перед очередным прогоном программы}

for i:=1 to N do

begin

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

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

for j:=1 to N do

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

end;

end;

end.

Индивидуальные задания

Во всех заданиях скалярные переменные вводить с помощью компонента TEdit с соответствующим пояснением в виде компонента TLabel. Скалярный результат выводить в виде компонента TLabel. Массивы представлять на форме в виде компонентов TStringGrid, в которых 0-й столбец и 0-ю строку использовать для отображения индексов массивов. Вычисления выполнять, после нажатия кнопки типа TВutton или TBitBtn.