
- •Прикладное программирование
- •Часть 1
- •Прикладное программирование
- •Часть 1
- •1. Информация о дисциплине
- •1.1. Предисловие
- •1.2. Содержание дисциплины и виды учебной работы
- •1.2.2. Перечень видов практических занятий и контроля
- •2. Рабочие учебные материалы
- •2.1. Рабочая программа (220 часов) Введение
- •Раздел 1. Технология программирования
- •Раздел 2. Ввод данных
- •Раздел 3. Управляющие окна
- •Раздел 4. Развитые компоненты
- •Раздел 5. Основные понятия субд
- •Раздел 6. Программирование баз данных
- •6.1. Невизуальные компоненты для построения бд
- •Раздел 7. Основные приёмы программирования бд
- •Раздел 8. Развитые приёмы программирования бд
- •Раздел 9. Интерфейс прикладного программирования api
- •Заключение
- •2.2. Тематический план изучения дисциплины
- •Тематический план для студентов заочной формы обучения
- •Структурно-логическая схема дисциплины «Прикладное программирование»
- •2.4. Временной график изучения дисциплины при использовании информационно-коммуникационных технологий
- •2.5. Практический блок
- •2.5.1. Практические занятия
- •2.5.2. Лабораторный практикум
- •2.5.2.1. Лабораторные работы для очной формы обучения
- •2.5.2.2. Лабораторные работы для очно-заочной формы обучения
- •2.5.2.3. Лабораторные работы для заочной формы обучения
- •2.6. Балльно-рейтинговая система оценки знаний
- •3. Информационные ресурсы дисциплины
- •3.1. Библиографический список
- •Опорный конспект Введение
- •Раздел 1. Технология программирования
- •1.1. Основная тенденция технологии программирования
- •Раздел 2. Ввод данных
- •2.1. Организация надежного ввода
- •2.2. Обработка строк
- •2.3. Средства группирования компонентов
- •Раздел 3. Управляющие окна
- •3.1. Управление выбором
- •3.2. Диалоговые окна
- •3.3. Многострочные окна
- •Раздел 4. Развитые компонеты
- •4.1. Работа с данными типа DateTime
- •4.2. Работа с двумерными массивами
- •4.3. Компоненты навигаторов.
- •4.4. Использование указателей
- •Раздел 5. Основные понятия субд
- •5.1. Общие сведения о базах данных (бд)
- •5.2. Концепция управления бд из среды Builder
- •5.3. Файлы и индексы
- •Раздел 6. Программирование баз данных
- •6.1. Невизуальные компоненты для построения бд
- •6.2. Навигация по нд
- •6.3. Доступ к полям нд
- •6.4. Визуальные компоненты для работы с бд
- •Раздел 7. Основные приёмы программирования бд
- •7.1. Сортировка, фильтрация и редактирование нд
- •7.2.Организация надежного ввода данных в бд
- •Раздел 8. Развитые приёмы программирования бд
- •8.1. Построение связей между таблицами бд
- •8.2. Работа с изображениями.
- •Раздел 9. Интерфейс прикладного программирования api
- •9.1 Встраивание звука
- •9.2. Вызов других приложений
- •Заключение
- •3.3. Глоссарий (краткий словарь основных терминов и положений)
- •3.4. Технические средства обеспечения дисциплины
- •3.5. Методические указания к выполнению лабораторных работ
- •3.5.1. Лабораторные работы, семестр 1
- •Работа 1.1. Проектирование программного проекта.
- •Вспомогательный теоретический материал Основная тенденция технологии программирования
- •Компонент ActionList
- •Связь пунктов меню Main Menu1 с действиями ActionList
- •Связь действий ActionList с изображениями ImageList
- •Кнопки быстрого доступа
- •Всплывающие подсказки
- •Использование стандартных действий
- •10 Правил технологии программирования
- •Работа 1.2. Надёжный ввод
- •Работа 1.3. Контейнеры
- •Работа 1.4. Компоненты выбора
- •Работа 1.5. Диалоги
- •Работа 1.6. Многострочные окна
- •Работа 1.7. Определение даты и временного интервала.
- •Работа 1.8. Обработка двумерных массивов.
- •Работа 1.9. Работа с каталогами и файлами.
- •3.5.2. Лабораторные работы, семестр 2
- •Работа 2.1. Начальное создание базы данных
- •Вспомогательный теоретический материал Общие сведения о базах данных
- •Концепция управления бд из среды Builder
- •Средство dbe (Database Borland Engine – машина Borland управления базой данных)
- •Альяс базы данных
- •Поля файла бд
- •Набор данных таблицы бд
- •Управление наборами данных в среде Builder
- •Модуль данных DataModule
- •Файлы и индексы
- •Содержание работы
- •Работа 2.2. Сортировка набора данных, русификация заголовков
- •Работа 2.3. Организация надежного ввода
- •//Проверка полей Panel2 - только для режима замены
- •Работа 2.4. Ввод данных посредством вспомогательных словарей.
- •Работа 2.5. Связи таблиц типа 1:1 и 1:n
- •Работа 2.6. Поля синхронного просмотра типа Lookup
- •Работа 2.7. Поиск и фильтрация
- •Работа 2.8. Особенности сохранения изображений в бд
- •Работа 2.9. Встраивание звука
- •Работа 2.10. Вызов других приложений
- •Методические указания к практическим занятиям
- •Заключение
- •4. Блок контроля освоения дисциплины
- •Часть 1, первый семестр – контрольная работа, зачёт.
- •Часть 1, второй семестр – курсовой проект, экзамен.
- •4.1. Задание на контрольную работу и методические указания к её выполнению
- •Вниманию студентов, обучающихся с элементами дот.
- •Задание на курсовой проект и методические указания к его выполнению
- •Этапы работы над курсовым проектом
- •4.3. Текущий контроль Тренировочные тесты
- •4.4. Итоговый контроль Вопросы к зачёту, семестр 1
- •Вопросы к экзамену, семестр2
Работа 2.7. Поиск и фильтрация
[1], с.588-591, 611-615
Цель: Изучение способов построения фильтров
Результат: Получить интерфейс, аналогичный рис. 118.
Рис. 118. Организация фильтров
Последовательность действий.
Установите на интерфейсе группу управляющих компонентов в соответствии с рис. 118.
Для ComboBox1 выберите событие OnChange (при изменении) и запишите обработчик, создающий фильтр, например:
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{ tSpisok->Filtered=true;
tSpisok->Filter= "(Gorod='"+ComboBox1->Text+"')";
}
Постройте обработчик щелчка по кнопке «Снять фильтр», записав в нём команду:
tSpisok->Filtered=false
Скомпилируйте и выполните программу и убедитесь в правильности построенного фильтра.
Самостоятельно разберитесь в других методах построения фильтров:
способом прямого перебора записей таблицы и отбора тех строк, которые отвечают условию фильтрации;
методом SetRange.
Организуйте быстрый поиск по полю «ФИО»: когда в окне поиска с пульта вводится очередная буква запроса на поиск, курсор в таблице автоматически устанавливается на первую запись, в которой напечатанный запрос входит как подстрока (рис. 119).
Если окно запроса имеет имя edPoisk, то процедура поиска может быть записана так:
void __fastcall TForm1::edPoiskChange(TObject *Sender)
{ TLocateOptions Regim; //тип переменной Regim объявлен как TLocateOptions,
//который используется только в функции поиска Locate
Regim<<loPartialKey; //loPartialKey системное значение режима –
//"Поиск по частичному совпадению значения поля"
tSpisok->Locate("FIO",Trim(edPoisk->Text),Regim); // запрос на поиск по
//частичному совпадению строки запроса
}
Рис. 119. Быстрый поиск – ввод первой буквы
Когда введена вторая буква, курсор перемещается на вхождение подстроки «Ши» (рис. 120).
Рис. 120. Быстрый поиск – ввод второй буквы.
Содержание отчёта: см.п. 3.5 «Требования к оформлению отчетов по лабораторным работам».
Работа 2.8. Особенности сохранения изображений в бд
[1], с.239-244, 373-382
Цель: Изучение способов работы с изображениями в базе данных.
Результат: Получить интерфейс, аналогичный рис. 121.
Рис. 121. Работа с изображениями
Последовательность действий.
Создайте вспомогательную директорию , например Kartinki, и занесите туда несколько изображений. Эти рисунки обязательно должны иметь формат BMP.
С помощью утилиты DBD создайте файл vid.db базы данных для работы с изображениями. Пример структуры такого файла представлен на рис. 122.
Рис. 122. Примерная структура файла БД для хранения изображений
Назначение полей:
Поле |
Назначение |
Npp |
Уникальный ключ, поле с автоматическим приращением значения на 1 при добавлении новой записи к файлу (автоинкрементное поле) |
Naim |
Наименование рисунка |
Photo |
Поле для хранения собственно изображения. Его тип – G(graphic), размер поля не указывается, так как память под него выделяется динамически при присвоении этому полю значения картинки – см.листинг программы |
Path |
Системный путь к каталогу, откуда взят рисунок. В данном примере он используется только в информационном плане |
Memo |
Текстовая сопутствующая информация |
Создайте также вторичный индекс indVidNaim по полю Naim для сортировки рисунков по алфавиту.
Создайте интерфейс по образцу рис. 123, включив в него все необходимые невизуальные компоненты.
Рис. 123. Интерфейс программы работы с изображениями
Запишите обработчики событий по образцу листинга программы, представленного на рис. 124
#include <vcl.h>
#pragma hdrstop
#include "uGlav.h"
#include "jpeg.hpp"
#pragma package(smart_init)
#pragma resource "*.dfm"
AnsiString ModeTSyn;
TForm2 *Form2;
// - - - - - - - -процедура вывода количества строк - - - - - - - -
void ShowKol()
{Form2->lblKol->Caption="Всего фото "+IntToStr(Form2->tVid->RecordCount);
}
// - - - - - - - -процедура «Показать кнопки» - - - - - - -
void ShowButtons()
{Form2->bDob->Show();Form2->bZam->Show();Form2->bUda->Show();Form2->bPath->Show();
}
Рис. 124. Листинг программы работы с изображениями надёжного ввода (начало, продолжение на следующей странице)
// - - - - - - - -процедура «Спрятать кнопки» - - - - - - -
void HideButtons()
{Form2->bDob->Hide();Form2->bZam->Hide();Form2->bUda->Hide();Form2->bPath->Hide();
}
//-----------конструктор объекта-----------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{tVid->Open(); ShowKol();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormActivate(TObject *Sender)
{ Image1->Hide(); tVid->IndexName="indVidNaim";
}
//---------------------------------------------------------------------------
void __fastcall TForm2::bExitClick(TObject *Sender)
{ Close();
}
//--------Д О Б А В И Т Ь - - - - - - - - - - - - - - - - - - - - - - - - -
void __fastcall TForm2::bDobClick(TObject *Sender)
{ HideButtons();
if (OpenPictureDialog1->Execute())
{ Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
tVid->Insert();
tVid->FieldByName("Photo")->Assign(Image1->Picture);
tVid->FieldByName("Naim")->AsString=s;
tVid->FieldByName("Path")->AsString=s;
tVid->Post();
ShowKol();
}// конец if
ShowButtons();
}//конец bDobClick
//----З А М Е Н И Т Ь --------------------------------------------
void __fastcall TForm2::bZamClick(TObject *Sender)
{AnsiString s; int n;
s="Уточните действие:\nЗаменить только изображение, сохранив надписи (Yes)";
s=s+"\nЗаменить все элементы (All) ";
HideButtons();
Рис. 124. Листинг программы работы с изображениями надёжного ввода (продолжение, далее см. следующую страницу)
if (OpenPictureDialog1->Execute())
{ tVid->Edit();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
/* здесь используется числовая переменная n, принимающая формальное числовое значение той кнопки, на которую нажмёт пользователь. В системе установлено такое соответствие:
кнопке Yes соответствует число 6
- - - - - All - 8
Cancel 2
Далее переменная n используется как аргумент переключателя switch*/
*/
n=MessageDlgPos(s,
mtConfirmation, TMsgDlgButtons()<< mbYes<< mbAll<<mbCancel,0,300,400);
switch (n)
{case 6:{tVid->FieldByName("Photo")->Assign(Image1->Picture);//Yes
tVid->Post();
break;}
case 8:{tVid->FieldByName("Photo")->Assign(Image1->Picture);//All
tVid->FieldByName("Naim")->AsString=OpenPictureDialog1->FileName;
tVid->FieldByName("Path")->AsString=OpenPictureDialog1->FileName;
tVid->Post();
break;}
case 2:{ tVid->Cancel();break;}//Cancel
}
}
ShowButtons();
}//конец bZamClick
//-- кнопка удаления строки файла изображений ---------------------------
void __fastcall TForm2::bUdaClick(TObject *Sender)
{
HideButtons();
if (MessageDlgPos("Подтвердите удаление фото "+
tVid->FieldByName("Naim")->AsString,
mtConfirmation, TMsgDlgButtons()<< mbYes<< mbNo,0,350,400)==mrYes)
{tVid->Delete();ShowKol();
}
ShowButtons();
}// конец bUdaClick
Рис. 124. Листинг программы работы с изображениями надёжного ввода (продолжение, далее см. следующую страницу)
//----кнопка управления видимостью пути к картинке-----------------------
void __fastcall TForm2::bPathClick(TObject *Sender)
{ if (lblPath->Visible==true)
{lblPath->Visible=false;DBText1->Visible=false;
bPath->Caption="Показать путь";
}
else {lblPath->Visible=true;DBText1->Visible=true;
bPath->Caption="Спрятать путь";
}
}// конец блока bPathClick
//--конец программы-----------------------------------------------------------
Рис. 124. Листинг программы работы с изображениями надёжного ввода (окончание, начало см. предыдущую страницу)
Обратите внимание на прием, позволяющий записать рисунок в базу данных – это метод Assign (назначить) в команде
tVid->FieldByName("Photo")->Assign(Image1->Picture);
эта команда динамически выделяет столько памяти, сколько места занимает объект Image1->Picture, и записывает эти байты в автоматически построенный вспомогательный файл vid.mb, а в поле Photo заносится ссылка на него. Такой прием называется «внедрение» объекта (embedding). В результате файл изображений получается достаточно объёмным (см. файл vid.mb в рабочем каталоге программы) , но он хранит в себе все рисунки, работает быстро и не зависит от местоположения исходных картинок.
А
Алгоритм записи изображения в базу
данных состоит из двух этапов:
Из директории изображений загрузить
в компонент TImage
нужный рисунок.
Присвоить информацию из TImage
соответсвующему полю файла базы данных.
ргументом метода Assign
может служить только рисунок,
находящийся в компоненте TImage,
поэтому и приходится помещать на форме
этот вспомогательный объект. Непосредственно
присвоить полю Photo
информацию из рисунка, хранящегося на
диске, невозможно, поэтому
Студенту следует по источнику [1] самостоятельно ознакомиться со способом передачи данных в файл изображений через системный буфер обмена ClipBoard.
Содержание отчёта: см.п. 3.5 «Требования к оформлению отчетов по лабораторным работам».