Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Обработка информации однотабличной базы данных




Помимо хранения, редактирования, обновления и анализа данных в базе данных (БД), на практике часто возникает задача осуществления разного рода расчётов и вычислений с использованием хранящейся в БД информации. Например, для базы данных, хранящей информацию о студентах учебного заведения (см. методические указания “Создание однотабличной базы данных в среде Borland C++ Builder”) может возникнуть задача расчёта средней оценки студента по конкретному предмету или расчёта успеваемости группы. Поскольку требуемые расчёты могут быть довольно сложные, необходимо использование программных пакетов разработки приложений, объединяющих в себе как удобные средства доступа к БД различных форматов, так и гибкий язык программирования. С этой точки зрения наиболее удобным инструментом является среда визуальной разработки Windows-приложений Borland C++ Builder, обеспечивающая доступ к информации БД практически всех существующих форматов и возможность её обработки, используя язык С++.

Визуальная навигация и управление данными в Borland C++ Builder производится с помощью компонент просмотра (DBGrid) и управления (DBNavigator), которые позволяют перемещаться по записям, удалять, добавлять или модифицировать их и т.д.

Программная навигация по записям таблицы возможна ис­пользованием соответствующих методов. Компонента Table ос­нована на базовом классе TTable, в который инкапсулированы следующие методы навигации:

Next() - перемещение указателя на следующую запись;

Prior() - перемещение указателя на предыдущую запись;

First() - перемещение указателя на первую запись таблицы;

Last() - перемещение указателя на последнюю запись таблицы.

Например, если создан объект Table, свойством Name ко­торого является значение Table1, то оператор

Table1->First();

переместит указатель на первую запись. Перечисленные методы позволяют последовательно пере­мещать указатель записи по таблице. Для определения последней записи таблицы используется ее свойство Eof, которое принимает значение true, когда указатель установлен на последней записи.

Фрагмент программы

 

Table1->First();//перемещение на начало таблицы

while(Table1->Eof!=true)//проверка на конец файла

{

Table1->Next();//перемещение на следующую запись

}

 

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

Для программного управления записями таблицы в класс TTable инкапсулированы следующие методы управле­ния:

Delete() - удаление текущей записи с позиционированием указателя на следующую запись;

Insert() - добавление пустой записи в таблицу;

Edit() – перевод таблицы в режим редактирования;

Post() – сохранение изменений в таблице.

Например, фрагмент программы

 

Table1->Last();

Table1->Delete();

 

позволяет удалить последнюю запись таблицы.

Перечисленные методы позволяют оперировать с целыми записями таблицы.

При обработке данных таблицы часто требуется программ­но получить значение определенного поля записи или записать в него новое значение. Например, в БД студентов учебного заведения необходимо поменять оценку в одной записи, не изменяя значения остальных полей. Подобные операции с полями таблицы тре­буют создания объектов, указывающих на соответствующие поля.

Для создания подобных объектов нужно выполнить следующую последовательность действий:

- нажать правой клавишей мыши на соответствующем объ­екте Table;

- в выведенном меню выбрать опцию Fields Editor, в ре­зультате чего на экране появится диалог редактирования полей;

- нажать правой клавишей мыши в области диалога редак­тирования полей;

- в выведенном меню выбрать опцию Add Fields, в резуль­тате чего на экране появится соответствующий диалог;

- добавить необходимые поля выбором кнопки Ok. В результате диалог редактирования полей должен содер­жать список созданных объектов, свойствакоторых отражены в окне Object Inspector. Каждый из созданных объектов, указываю­щих на соответствующие поля, имеет свойство Name. Значение этого свойства является имя объекта (указатель). Имя указателя по умолчанию формируется из имени объекта Table и имени по­ля.

Например, для таблицы с именем stud.dbf, содержащей фа­милии студентов и их оценки с именами полей FAM и OZ, для полей FAM и OZ будут созданы объекты с именами Table1FAM и Table1OZ.

Созданные объекты позволяютоперироватьс таблицей на уровне полей. Значение поля содержит свойство Value. Следова­тельно, обозначения

Table1FAM->Value

Table1OZ->Value

позволяют получать или модифицировать значения полей FAM и OZ текущей записи.

Фрагмент программы

 

float soz=0;//переменная для средней оценки

int n=0;//счётчик записей

Table1->First();

while(Table1->Eof!=true)

{

soz=soz+Table1OZ->Value;//накопление суммы

n++;//инкремент счётчика записей

Table1->Next();//переход на след. запись

}

if(n!=0)//проверка отсутствия записей

soz = soz/n;//расчёт среднего

 

показывает, как вычислить среднюю оценку всех студентов. Для отображения на экране вычисленных данных можно, например, использовать объекты Label (текстовая метка). Свойст­во Caption объекта Label отвечает за надпись на форме приложе­ния.

Например, если имя объекта Label1, то фрагмент програм­мы

 

char buf[50];

sprintf(buf, "Средняя оценка: %.2f", soz) ;

Label1->Caption = buf;

 

позволяет отобразить на форме вычисленное значение средней оценки.

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

Для вывода разного рода списков плавающего размера используется компонента Memo. Добавление, например, фамилии студента в список будет осуществляться с помощью оператора:

Memo1->Add(Table1FAM->Value);

 

Кроме ввода данных в таблицу, как правило, в программу требуется вводить другие исходные данные. Для ввода исходных данных в программу используются объекты Edit. Объект Edit имеет свойство Text, которое является данным типа AnsiString и содержит значение, введенное в поле ввода на форме приложе­ния.

Например, если имя объекта Edit1, то фрагмент программы

 

float soz = 0;

int n=0;

Table1->First();

while(Table1->Eof!=true)

{

/* проверка совпадения поля FAM и текста в Edit1*/

if(Table1FAM->Value == Editl->Text)

{

soz=soz+Table1OZ->Value;

n++;

}

Table1->Next() ;

}

if(n!=0)

soz=soz/n;

 

позволяет рассчитать оценку не всех студен­тов, а конкретного студента, фамилия которого введена в поле ввода объекта Edit1.

Тип AnsiString позволяет непосредственносравнивать стро­ки с использованием логической операции ==. Ввод числовых значений осуществляется аналогичным образом с дальнейшим последовательным преобразованием значения типа AnsiString к типу символьной строки, а затем к числовому. Например, фрагмент программы

float x=atof(Edit2->Text.c_str());

позволяет преобразовать значение переменной Edit2->Text типа AnsiString в символьную строку с использованием метода с_str(). Метод с_str() инкапсулирован в класс AnsiString. Доступ к методу осуществляется через . поскольку данноеEdit2->Textявляется переменной, а не указателем. Ряд методов в Borland C++ Builder специально предусмотрен для преобразования типов:

FloatToStr() - преобразование вещественного числа в строку;

IntToStr() - преобразование целого числа в строку;

StrToFloat() - преобразование строки в вещественное число;

StrToInt() - преобразование строки в целоечисло.

Как правило, программные модули выполняются в резуль­тате определенных действий пользователя. Например, фрагмент программы по расчёту и выводу средней оценки может выпол­няться при нажатии кнопки «Расчет». Событие OnClick (одинар­ное нажатие) объекта Button (кнопка) позволяет определить функцию, выполняемую при нажатии на кнопку. За надпись на кнопке отвечает свойство Caption.

Заголовок функции генерируется автоматическипри выбо­ре в закладке Events инспектора объектов соответствующего со­бытия и двойном щелчке напротив, сама функция инкапсулирует­ся в класс Form (форма) - основной класс приложения. В Borland C++ Builder такие функции называются обработчиками событий, т. к. они содержат программный код, выполняющийся при насту­плении соответствующего события этой компоненты. Например, если на форме с именем Form1 разместить ком­поненту Button с именем Button1 и создать обработчик события OnClick для компоненты Button1, в редакторе кода в файле Unit1.cpp будет создана пустая функция, которая должна содер­жать код, выполняемый, если произойдёт событие OnClick.

void __fastcall Tform1::ButtonlClick(TObject *Sender)

{

//код, выполняющийся при наступлении события OnClick //например, расчёт средней оценки студентов

}

 

а в заголовочном файле Unit1.h в шаблоне класса TForm1 будет объявлена функция обработчика события OnClick.

 

void __fastcall ButtonlClick(TObject * Sender);

Приведём вид формы приложения (рис. 9) примера работы с таблицей stud.dbf, расчёта средней оценки студента, фамилия которого вво­дится в поле ввода и описание компонент приложения с по­яснением настройки свойств и событий (табл. 1).

 
 

Рис. 1. Внешний вид формы приложения

Таблица 1. Свойства и события компонент приложения

Компонент Войство Свойство Значение
Table Name Table1
TableName stud.dbf
DataSource Name DataSource1
DataSet Table1
DBGrid Name DBGrid1
DataSource DataSource1
DBNavigator Name DBNavigator1
DataSource DataSource1
ShowHint TRUE (показывает подсказки к кноп­кам навигатора)
Button Name Button1
    Caption "Расчёт средней оценки студентов"
Label Name Label1
    Caption Определяется в обработчике события OnClick компоненты Button1
Edit Name Edit1
    Text Определяется пользователем
Компонент войство Свойство Значение
Button OnClick Одинарное нажатие на кнопку

 
 

На рис. 2 показан вид работающего Windows-приложения после отладки и компиляции проекта, запускаприложения, ввода в поле ввода фамилии Петров и нажатия кнопки "Расчёт средней оценки".

 

Рис. 2. Внешний вид работающего приложения

 


Поделиться:

Дата добавления: 2015-04-04; просмотров: 113; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты