ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.05.2021
Просмотров: 861
Скачиваний: 3
СОДЕРЖАНИЕ
Работа с переменными и массивами
Настройка компонента TStringGrid
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
Nmax=10; // Максимальная размерность массива
A : Mas2; // Объявление двумерного массива
B,Y : Mas1; // Объявление одномерных массивов
procedure TForm1.FormActivate(Sender: TObject);
{Процедура подготовки к началу работы}
N:=3; // Задание размерности массива
Edit1.Text:=IntToStr(N); // Вывод значения N в Edit1
{Задание числа строк и столбцов в таблицах}
{Ввод в левую верхнюю ячейку таблицы названия массива}
StringGrid1.Cells[0,0]:='Массив A:';
StringGrid2.Cells[0,0]:='Массив B:';
StringGrid3.Cells[0,0]:='Массив Y:';
{Заполнение верхнего и левого столбцов поясняющими подписями}
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
procedure TForm1.Button1Click(Sender: TObject);
{Процедура изменения размерности массива}
ShowMessage('Ошибочная запись числа '+Edit1.Text);
{Задание числа строк и столбцов в таблицах}
{Заполнение верхнего и левого столбцов поясняющими подписями}
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
procedure TForm1.BitBtn1Click(Sender: TObject);
{Заполнение массива А элементами из таблицы StringGrid1}
if StringGrid1.Cells[j,i]=' ' then
ShowMessage('Ошибка заполнения массива А');
A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
ShowMessage('Ошибочная запись числа '+StringGrid1.Cells[j,i]);
{Заполнение массива B элементами из таблицы StringGrid2}
if StringGrid2.Cells[0,i]=' ' then
ShowMessage('Ошибка заполнения массива В!');
B[i]:=StrToFloat (StringGrid2.Cells[0,i]);
ShowMessage ('Ошибочная запись числа '+StringGrid2.Cells[0,i]);
{Умножение массива А на массив В}
{Вывод результата в таблицу StringGrid3}
StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);
procedure TForm1.BitBtn2Click(Sender: TObject);
{Очищение всех ячеек таблиц перед очередным прогоном программы}
Создание приложений для работы с базами данных На ОСНОВЕ ТЕХНОЛОГИИ bde
Рис. 9.- Расположение компонентов на форме
Рис. 10.- Рабочее окно программы
Варианты заданий:
1. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 0, если все элементы k-го столбца матрицы нулевые, и значение 1 в противном случае.
2. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если элементы k–й строки матрицы упорядочены по убыванию, и значение 0 в противном случае.
3. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если k-я строка матрицы симметрична, и значение 0 в противном случае.
4. Задана матрица размером NxM. Определить k–количество “особых” элементов матрицы, считая элемент “особым”, если он больше суммы остальных элементов своего столбца.
5. Задана матрица размером NxM. Определить k – количество “особых” элементов матрицы, считая элемент “особым”, если в его строке слева от него находятся элементы, меньшие его, а справа – большие.
6. Дана матрица размером NxM. Упорядочить ее строки по возрастанию их наибольших элементов.
7. Для матрицы размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот.
8. В матрице размером NxM поменять местами строку, содержащую элемент с наибольшим значением со строкой, содержащей элемент с наименьшим значением.
9. Из матрицы n-го порядка получить матрицу порядка n-1 путем удаления из исходной матрицы строки и столба, на пересечении которых расположен элемент с наибольшим по модулю значением.
10. Дано два одномерных массива. Найти наименьшее среди тех элементов первого массива, которые не входят во второй массив.
лабораторная работа №
РАЗРАБОТКА ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ ПРОГРАММНОЙ СИСТЕМЫ
Цель лабораторной работы: приобрести практические навыки разработки оконного программного интерфейса, закрепить навыки отладки и документирования программного обеспечения.
Задачи лабораторной работы:
• Изучить наборы компонентов «Additional», «Win32» и «Dialogs».
• Отработать технологию передачи данных между окнами приложения.
• Научиться работать со стандартными диалогами Windows.
Указания по выполнению работы
Многооконное приложение в среде Delphi 7 представляет собой набор форм, взаимодействующих между собой и, как правило, с некоторым набором данных (которые хранятся в оперативной или дисковой памяти). Основная задача данной работы–изучить технологию передачи данных между несколькими формами.
Условным примером будет служить программа–ежедневник. Основные задачи:
− записать, удалить или отредактировать событие;
− просмотреть список событий.
Порядок выполнения работы:
1.Запустите Delphi7:Пуск\Программы\Borland Delphi 7\Delphi7.
2.Создайте новый проект. Сохраните его в новую папку на Вашем диске под именем Lab4.
3.На первой форме расположим главное меню приложения. На панели компонент Standard выберите компоненту TMainMenu и расположите ее на форме. Дважды нажмите на ней левую кнопку мыши. В меню верхнего уровня создайте два пункта: Файл и Событие. В меню Файл создайте подпункты Сохранить, Загрузить и Выход. В меню Событие создайте подпункты Добавить, Удалить и Корректировать (см. Рис. 1).
4.Нажмете два раза на подпункт Выход созданного главного меню. В открывшейся процедуре TForm1.N5Click напишите оператор close. Запросите у пользователя подтверждение на выход из программы, для этого обработайте событие закрытия формы (событие OnClose для формы Form1). Нажмите на событие OnClose в инспекторе объектов и далее клавишу F1. Изучите справку по событию OnClose и обратите внимание, что если возвращаемая переменная Action примет значение caNone, то форма не будет закрыта. Следовательно, если пользователь не подтвердит закрытие формы, то в обработчике события OnClose необходимо выполнить присвоение переменной Action значения caNone. Напишите обработчик. Результат–см. рис. 2.
Рис. 1. Создание главного меню приложения
Рис. 2. Процедура TForm1.FormClose
5.Запустите программу. Проверьте работу написанного вами обработчика, попробовав закрыть форму через главное меню окна или через меню Файл\Выход.
6.Отключите возможность пользовательского изменения размера экрана. Для этого у формы Form1 установите свойство BorderIcons\biMaximize в false и BorderStyle в bsSingle.
7.Создайте еще одну новую форму (File\New Form). Для первой формы (Form1) запишите в свойство Caption – Ежедневник (Фамилия Автора) рис.6.3., а для второй (Form2) – Просмотр Событий рис.4.
Рис. 3. Вид формы Form1
Рис. 4. Вид формы Form2
8.На панели компонент выберите дополнительные компоненты (закладка Additional). Разместите на форме Form2 компонент TBitBtn. Установите для его свойства Kind значение bkОК – это будет кнопка закрытия формы. Разместите на форме Form2 еще одну такую же кнопку. Установите для ее свойства Kind значение bkCancel – это будет кнопка отмены закрытия формы. Исправьте надпись на кнопке с «Cancel» на «Отмена».
9. Перейдите в конструкторе форм к форме Form1 и в главном меню нажмите на пункт Событие\Добавить. В процедуре TForm1.N6Click впишите оператор модального вызова второй формы:
Form2.ShowModal; (модальный вызов означает, что в данном приложении активным может быть только модально вызванное окно).
Здесь же, в тексте первого модуля (Unit1) перейдите выше в раздел Uses после зарезервированного слова implementation и допишите там: Unit2. Это необходимо для того, чтобы из первой формы мы могли вызывать вторую.
10.Отключите возможность пользовательского изменения размера и закрытия окна формы Form2 (скорректируйте свойства BorderIcons и BorderStyle у формы Form2).
11.Сохраните, запустите проект и проверьте его работу.
12.Разместите на форме Form1 компонент TStringGrid(набор компонент Additional). Установите для нее свойства ColCount–3, RowCount–1, FixedCols–0, FixedRows–0, DefaultRowHeight–16, Options\goRowSelect-true. Возможный вид формы приведен на рис. 3.
13.Сформируйте заголовок таблицы событий. Для этого в обработчике событий OnCreate формы Form1 (это событие генерируется при создании формы) запишите заголовок в таблицу следующими операторами:
StringGrid1.cells[0,0]:='Дата';
StringGrid1.cells[1,0]:='Время';
StringGrid1.cells[2,0]:='Событие';
14.Сохраните, запустите проект и проверьте его работу.
15. Разместите на форме Form2 компоненты (см. рис. 4.):
− две компоненты TLabel (надписи Время и Событие),
− TMemo,
−TMonthCalendar и TDateTimePicker (закладка Win32 панели компонент). При этом для TDateTimePicker в свойстве Kind установите значение dtkTime.
16. Скорректируйте процедуру TForm1.N6Click в модуле Unit1 следующим образом:
procedure TForm1.N6Click(Sender: TObject);
begin
if Form2.ShowModal=mrOK then
{Если Form2 закрыта кнопкой OK}
begin
StringGrid1.cells[0,StringGrid1.RowCount]:=
DateToStr(Form2.MonthCalendar1.Date);
{Получить дату из Form2}
StringGrid1.cells[1,StringGrid1.RowCount]:=
TimeToStr(Form2.DateTimePicker1.Time);
{Получить время из Form2}
StringGrid1.cells[2,StringGrid1.RowCount]:=
{Получить текст события из Form2}
Form2.Memo1.Text;
{Увеличить число строк в таблице}
StringGrid1.RowCount:=StringGrid1.RowCount+1;
StringGrid1.FixedRows:=1;
end;
end;
17.Сохраните, запустите проект и проверьте его работу. Ежедневник должен заполняться записями.
18.Организуйте удаление записей. Схема удаления представ-лена на Рис.5.
Рис. 5. Схема удаления строк
19.Зайдите в процедуру, вызываемую по нажатию пункта Событие\Удалить (TForm1.N7Click) и откорректируйте обработчик события следующим образом:
procedure
TForm1.N7Click(Sender: TObject);
var
i: integer;
begin
for
i:=StringGrid1.Row to StringGrid1.RowCount-1 do
StringGrid1.Rows[i]:=StringGrid1.Rows[i+1];
if
StringGrid1.RowCount>1
then
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;
20.Сохраните, запустите проект и проверьте его работу.
21.Следующий этап создания программы–коррекция событий в ежедневнике. Для этого перед вызовом формы Form2 необходимо присвоить начальные значения ее полям из редактируемой строчки. Далее–аналогично добавлению. Зайдите в процедуру, вызываемую по нажатию пункта Событие\Корректировать(TForm1.N8Click) и откорректируйте ее следующим образом:
procedure
TForm1.N8Click(Sender: TObject);
begin
if StringGrid1.Row<>0
then
{если в таблице более 1 строки}
begin
Form2.Memo1.Text:=
StringGrid1.cells[2,StringGrid1.Row];
Form2.MonthCalendar1.Date:=
StrToDate(StringGrid1.cells[0,StringGrid1.Row]);
Form2.DateTimePicker1.Time:=
StrToTime(StringGrid1.cells[1,StringGrid1.Row]);
if
Form2.ShowModal=mrOK then
{если Form2 закрыта кнопкой OK}
begin
StringGrid1.cells[0,StringGrid1.Row]:=
DateToStr(Form2.MonthCalendar1.Date);
StringGrid1.cells[1,StringGrid1.Row]:=
TimeToStr(Form2.DateTimePicker1.Time);
StringGrid1.cells[2,StringGrid1.Row]:=
Form2.Memo1.Text;
end;
end;
end;
22. Сохраните, запустите проект и проверьте его работу рис.6.
Рис. 6. Работа пункта меню Событие\Корректировать
23. Последний этап работы – научиться сохранять и считывать файлы.
Сохранять результаты работы будем в типизированный файл следующей структуры:
DateS -string [8] дата;
TimeS -string [5] время; 1 – е событие
EvenS -string [200] событие;
______________________________________________________________________________________________
DateS -string [8] дата;
TimeS -string [5] время; 2 – е событие и т.д.
EvenS -string [200] событие;
25.В начало модуля Unit1 в раздел Type после описания класса формы TForm1 добавьте описание типов записи и файла, как это показано на Рис. 6.7.
Рис. 7. Объявление типов записи и файла
26.Откройте закладку Диалоги (Dialogs) на панели компонент. Добавьте на форму Form1 два диалога: TSaveDialog и TOpenDialog.
27.Откройте процедуру, выполняемую по нажатию пункта Файл\Сохранить -TForm1.N3Click. Измените ее в соответствии с рис. 8.
28.Сохраните, запустите проект и проверьте его работу. Добавьте в ежедневник несколько событий и сохраните результат. Откройте созданный вами файл какой–либо программой просмотра (например, F3 в Far). Попробуйте найти фрагменты сохраненного вами события.
Рис. 8. Текст процедуры записи в файл
29.Откройте на редактирование процедуру, выполняемую по нажатию пункта Файл\Загрузить-TForm1.N4Click. Измените ее в соответствии с Рис.9.
30.Сохраните, запустите проект и проверьте его работу.
32.Для компоненты StringGrid1 формы Form1 выберите событие OnDblClick и из выпадающего списка выберите N8Click. Таким образом, по двойному нажатию на элемент списка будет происходить то же самое, что и при нажатии пункта меню Событие\Корректировать.
33.Сохраните, запустите проект и проверьте его работу.
Рис. 9. Процедура чтения событий из файла
Выполнение индивидуального задания
Разработайте программу (см. табл. 1). Обязательная особенность заданий–возможность сохранения и загрузки результатов работы.
Таблица 1
Варианты заданий к лабораторной работе
№ |
Наименование варианта |
Задание |
1. |
Библиотека |
Вести список книг в библиотеке (номер, наименование, автор, число экземпляров, число выданных экземпляров), при выдаче и приеме книг корректировать соответствующие значения. |
2. |
Видеотека |
Вести список видеокассет в видеотеке (номер, наименование, режиссер, жанр, главные актеры, выдана ли на руки и если да, то кому), при выдаче и приеме кассет корректировать соответствующие значения. |
3 |
Учет доходов и расходов физического лица |
Список доходов/расходов (вид–доход/расход, наиме-нование, сумма, дата). Программа должна считать общую сумму доходов и расходов, а также их разницу. |
4 |
Учет разрешений на сдачу экзаменов в деканате |
Список лиц, которым выданы разрешения (номер разрешения, дата, дата сдачи, ФИО, группа, предмет). В списке при возврате разрешения должна фиксироваться оценка и дата сдачи. Программа должна считать средний балл по списку. |
5. |
Картотека граждан |
Список физических лиц (ФИО, адрес, номер паспорта (если есть), кем и когда выдан). Программа должна выдавать списки по гражданам с паспортом и без, корректировать список при выдаче паспорта. |
6. |
Картотека автомагазина |
Список автомобилей (номер, марка, цена, продан или нет, кому и когда, сумма сделки). Программа должна выдавать списки проданных и непроданных автомобилей, с указанием сумм. |
7. |
Картотека угнанных автомобилей |
Список автомобилей (номер, марка, дата угона, дата обнаружения, место угона, место обнаружения). Программа должна выдавать списки угнанных и найденных автомобилей с вычислением отношения угнано / найдено. |
8 |
Путевые листы |
Программа должна вести список выданных путевых листов (номер листа, ФИО водителя, номер машины, дата, маршрут – откуда и куда, протяженность в км, груз). Программа должна выдавать список листов за дату, список листов с протяженностью более заданной, определять общую протяженность пробега всех автомобилей за день. |
9 |
Отдел кадров |
Список работников (ФИО, номер контракта, даты начала и окончания контракта, оклад, стаж, уволен – да / нет). При увольнении выбор должен осуществляться из списка. Программа должна определять работников с истекшей датой контракта, вычислять ежемесячную потребность в заработной плате, выдавать общий список сотрудников. |
10. |
Регистратура |
Программа должна вести список направлений к врачу (ФИО больного, дата, время, ФИО врача, посетил–да/нет). Программа должна выдавать списки больных, которые не посетили врачей в определенную даты, определять общее число больных в определенную дату. |
ЛАБОРАТОРНАЯ РАБОТА №
Создание приложений для работы с базами данных На ОСНОВЕ ТЕХНОЛОГИИ bde
Цель лабораторной работы: приобрести практические навыки организации взаимодействия программного приложения Delphi с однотабличной базой данных.
Реляционные базы данных. Основные понятия и определения
Базы данных используют тогда, когда есть необходимость в обработке большого объема данных.
Реляционная база данных - это набор таблиц, процедур и др. объектов, поддерживающих ее работу. Таблица имеет имя – идентификатор, по которому на нее можно сослаться.
Пример таблицы данных о сотрудниках Pers представлен в табл. 1.
Таблица 1.
Таблица данных о сотрудниках Pers
Номер |
Отдел |
Фамилия |
Имя |
Отчество |
Год рождения |
Пол |
Характеристика |
Фотография |
Num |
Dep |
Fam |
Nam |
Par |
Year_b |
Sex |
Charact |
Photo |
1 |
Бухгалтерия |
Иванов |
Иван |
Иванович |
1950 |
м |
… |
… |
2 |
Цех 1 |
Петров |
Петр |
Петрович |
1960 |
м |
… |
… |
3 |
Цех 2 |
Сидоров |
Сидор |
Сидорович |
1955 |
м |
… |
… |
4 |
Цех 1 |
Иванова |
Ирина |
Ивановна |
1961 |
ж |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
Столбцы таблицы соответствуют характеристикам объектов – полям. Каждое поле характеризуется именем и типом хранящихся данных. Имя поля–это идентификатор, который используется в различных программах для манипуляции данными. Как и любой идентификатор, имя поля может состоять только из латинских букв, только из одного слова и т.д.(строка 2 в таблице).
Тип поля характеризует тип хранящихся в поле данных. Это могут быть строки, числа, булевы значения, большие тексты (например, характеристики сотрудников), изображения (фотографии сотрудников) и т.п.
Каждая строка таблицы соответствует одному из объектов. Она называется записью и содержит значения всех полей, характеризующих данный объект.
При построении таблиц баз данных важно обеспечить непротиворечивость информации. Обычно это делается введением ключевых полей–обеспечивающих уникальность каждой записи. Ключевым может быть одно или несколько полей. В приведенном примере можно было бы сделать ключевыми совокупность полей Fam, Nam, Par. Но в этом случае нельзя было бы заносить в таблицу сведения о полных однофамильцах, у которых совпадают фамилия, имя и отчество. Поэтому в таблицу введено первое поле Num–номер, которое можно сделать ключевым, обеспечивающим уникальность каждой записи.
При работе с таблицей пользователь или программа как бы скользит курсором по записям. В каждый момент времени есть некоторая текущая запись, с которой и ведется работа. Записи в таблицах данных могут располагаться без какого-либо порядка, просто в последовательности их ввода (появления новых сотрудников). Но когда таблицы предъявляются пользователю, они должны быть упорядочены. Пользователь может захотеть просматривать их в алфавитном порядке, или рассортированными по отделам, или по возрасту и т.п.