
labs_db
.pdf21
1.Разместить на форме дополнительные компоненты, предварительно освободив для них правую и нижнюю части формы: компонент DBGrid
(grdTemp), четыре кнопки «>» (cmdLROne), «>>» (cmdLRAll), «<» (cmdRLOne), «<<» (cmdRLAll), кнопку «Переместить» (cmdMove).
2.Внести изменения в модуль данных.
Добавить в модуль данных два компонента ADOQuery (qryTable и qryTempTable) для формирования запросов к базе данных, результаты которых будут отображаться в компонентах DBGrid. Связать компоненты ADOQuery с компонентом ADOConnection через свойство Connection. Ввести в свойство SQL компонентов тексты запросов: для компонента qryTable– вывод тех записей основной таблицы, которых нет в таблице «Рабочая», а для qryTempTable – вывод всех записей таблицы «Рабочая».
Добавить в модуль данных проекта два компонента DataSource– источника данных (dsTable, dsTempTable). Связать источники данных с соответствующими компонентами ADOQuery. Удалить не используемый в приложении компонент ADOTable и связанный с ним источник данных.
Добавить в модуль данных компонент ADOQuery (qryMain), необходимый для выполнения запросов действия.
3.Указать для первого компонента DBGrid (grdMain) в качестве источни-
ка данных dsTable, для второго (grdTemp)– dsTempTable.
Написать обработчики событий OnClick кнопок: для cmdLROne – копирование выбранной в основной таблице записи во вспомогательную, для cmdLRAll– копирование во вспомогательную всех записей основной таблицы, для cmdRLOne– удаление выбранной во вспомогательной таблице записи, для cmdRLAll – удаление всех записей вспомогательной таблицы. Для выполнения запросов использовать компонент qryMain. Каждый обработчик должен заканчиваться кодом обновления компонентов grdMain и grdTemp. Пример обработчика события для кнопки cmdRLOne приведен на рис. 6.
void __fastcall TfrmMain::cmdRLOneClick(TObject *Sender)
{
AnsiString strSQLText;
//проверка наличия записей в компоненте grdTemp if (! grdTemp->DataSource->DataSet->IsEmpty() )
//проверка наличия выделенной записи if (grdTemp->SelectedRows->Count>0)
{
strSQLText="Delete From Рабочая where [код книги]= "+
22
grdTemp->DataSource->DataSet -> FieldByName("код книги")->AsString; dmMain->qryMain->SQL->Text=strSQLText;
dmMain->qryMain->ExecSQL();//выполнение запроса //обновление grdMain и grdTemp grdMain->DataSource->DataSet->Active=false; grdMain->DataSource->DataSet->Active=true; grdTemp->DataSource->DataSet->Active=false; grdTemp->DataSource->DataSet->Active=true;
}
}
Рис. 6. Текст обработчика события OnClick кнопки cmdRLOne
Для использования в программе свойства SelectedRows необходимо для компонентов DBGrid установить значения подсвойств dgMultiSelect и dgRowSelect свойства Options в true.
4.Написать обработчик события OnClick кнопки «Переместить», для перемещения записей основной таблицы, копии которых есть в таблице «Рабочая», из основной таблицы в архивную. После перемещения записей должна происходить очистка таблицы «Рабочая» и обновление ком-
понентов grdMain и grdTemp.
5.Изменить обработчик события OnShow для формы: добавить открытие источника данных для компонента grdTemp (аналогично grdMain).
ЛАБОРАТОРНАЯ РАБОТА № 10 СОЗДАНИЕ ОТЧЕТА В ВИДЕ HTML-ДОКУМЕНТА
Разработать приложение в С++ Builder для просмотра и печати отчета. Работа выполняется на основе проекта поиска записей, а результаты поиска являются данными для отчета.
Методические указания
Почти все комплексные системы разработки приложений, включая и C++ Builder, имеют в своем распоряжении средства создания сложных отчетов. Каждое из этих средств имеет свою систему команд, свой формат данных, своих приверженцев. В этой работе для создания отчета будет использован формат html-документа, как самого простого и универсального средства. Сформировать html-документ и отобразить его можно практически в любой среде программирования. Html-документ– это обычный текст,
23
снабженный управляющими конструкциями, которые указывают программе, выполняющей его обработку (браузеру), как отобразить содержимое документа на экране. Эти управляющие конструкции называются тегами и заключаются в угловые скобки. Теги размещаются в основном парами (открывающий и закрывающий теги). В скобках, после имени открывающего тега, могут размещаться его параметры в формате: имя=значение. Форматы разделяются пробелами. Теги могут иметь вложенную структуру. Для отображения простого отчета в виде таблицы используются следующие теги:
<table> таблица. Параметры: width – ширина, border – толщина линий границ.
<td> ячейка таблицы. Параметры: align – горизонтальное выравнивание содержимого (center, left, right), valign– вертикальное выравнивание содержимого (top, bottom, center), colspan – объединение столбцов, rowspan–объединение строк, width–ширина.
<tr> строка таблицы.
<th> ячейка заголовка таблицы.
<font> шрифт. Параметры: size–размер, color–цвет, name–имя.
<b> полужирный шрифт, <u> подчеркивание, <i> курсив.
<p> новый абзац. Параметр: align–выравнивание в абзаце.
<br> перевод стоки.
<hr> линия. Параметры: width – ширина, align – выравнивание, size – толщина.
Внести в копию проекта следующие изменения.
1.Добавить кнопку «Отчет» в форму «Поиск».
2.Включить директиву #include <ShellApi.h> в модуль frmMainUnit для использования в программе функции ShellExecute. Она будет вызывать браузер и передавать ему сформированный приложением html-документ с отчетом.
3.Написать обработчик события OnClick кнопки «Отчет» для формирования и отображения текста отчета. Пример обработчика события OnClick для кнопки приведен на рис. 7.
void __fastcall TfrmMain::cmdReportClick(TObject *Sender)
{
//Объявление объекта для формирования html-текста отчета
TStringList *Report =new TStringList;
//Добавление в массив строк объекта Report html-текста отчета: //Заголовок отчета
Report->Add(
“<p align=center><font size=4><b>Отчет</b></font></p><hr><br>”);
24
//Описание таблицы с отчетом
Report->Add(“<table width=100% border=1>”); //Заголовки столбцов таблицы
Report->Add(”<tr><th>Автор</th><th>Название</th>” + “<th>Год издания</th></tr>");
//Заполнение таблицы html-документа данными из источника данных
//grdMain
for (int i = 0;i<grdMain->DataSource->DataSet-> RecordCount; i++)
{
Report->Add("<tr><td>"+ grdMain->DataSource->DataSet->FieldByName("Автор")->AsString + "</td> <td>"+
grdMain->DataSource->DataSet->FieldByName ("Название")->AsString + "</td><td>"+
grdMain->DataSource->DataSet->FieldByName ("Год издания")->AsString + "</td></tr>");
grdMain->DataSource->DataSet->Next();//переход к следующей записи
}
Report->Add(“</table>”); //конец таблицы grdMain->DataSource->DataSet->First();//переход к первой записи
//Сохранение html-кода в файле
Report->SaveToFile(“report.html”);
//Вызов браузера для просмотра и печати отчета ShellExecute(Handle,"open","report.html",NULL,NULL, SW_RESTORE);
}
Рис. 7. Обработчик события OnClick кнопки «Отчет» для формирования и отображения текста отчета
ПРИЛОЖЕНИЕ 1 ВАРИАНТЫ ПРЕДМЕТНОЙ ОБЛАСТИ
1. Служба занятости
Приложение автоматизирует работу службы занятости. Информация о безработном: регистрационный номер, фамилия, имя, отчество, дата рождения, адрес, телефон, список профессий, которыми владеет безработный (код профессии, наименование профессии, наличие опыта работы по профессии). Информация о вакансии предприятия: наименование, адрес и телефон предприятия, профессия, количество вакансий, зарплата и опыт работы по профессии.
2. Магазин
25
Приложение отслеживает распределение товаров по отделам магазина. Информация о каждом отделе: номер отдела, название отдела, список работников отдела, список продаваемых в отделе товаров. Информация о товаре: код, наименование, количество, цена магазина, отпускная цена изготовителя, информация об изготовителе товара. Информация об изготовителе: наименование и адрес фирмы. Информация о работнике: табельный номер, фамилия, имя, отчество. Работник может работать только в одном отделе. Один и тот же товар может продаваться в нескольких отделах.
3. Индивидуальные учебные планы студентов
Приложение ведет учет изучаемых студентами факультета дисциплин. Каждый студент имеет фамилию, имя, отчество, специальность и уникальный учетный номер. Каждый студент может выбирать для изучения в данном семестре дисциплины из списка. Список дисциплин составляется по каждой специальности для каждого семестра. Элемент списка содержит дисциплину, специальность, номер семестра, количество часов в неделю лекций, практических занятий, лабораторных работ и вид отчетности в конце семестра. Специальность имеет номер и наименование. Дисциплина имеет номер и наименование.
4. Библиотека
Приложение автоматизирует работу абонемента библиотеки. Каждая операция выдачи/сдачи читателем книги должна быть зафиксирована: указан читатель, книга, вид операции, дата выполнения операции. Читатель имеет номер читательского билета, фамилию, имя, отчество, адрес, телефон. Книга имеет авторов, наименование, год издания, шифр. Каждый экземпляр книги имеет уникальный учетный номер.
5. Торговая фирма
Приложение ведет учет товаров в филиалах торговой фирмы. Филиалы торговой фирмы имеют: наименование, адрес и телефон. В разных филиалах могут продаваться одинаковые виды товаров. Для каждого филиала ведется учет текущего количества каждого вида товаров. Информация о товаре: код товара, наименование товара, цена, текущее количество для каждого филиала.
6. Трудоустройство выпускников вузов
Приложение автоматизирует работу службы занятости. Информация о каждом вузе: наименование, адрес, телефон, список выпускников. Каждый выпускник имеет фамилию, имя, отчество, специальность, средний балл. Информация о каждой фирме, заказывающей специалистов: наименование, адрес, телефон, список вакансий. Информация о каждой вакансии: специальность, зарплата, количество вакансий. Специальность имеет номер и наименование.
7. Расписание экзаменов
26
Приложение автоматизирует работу с расписанием экзаменов. В расписании экзаменов для каждой студенческой группы указана информация: дисциплина, дата, время, аудитория, преподаватель. Расписание составлено таким образом, что группа может сдавать в один день только один экзамен, а в одной аудитории не может проходить несколько экзаменов одновременно. Каждая группа имеет шифр и список студентов. Студент имеет шифр, фамилию, имя, отчество. Аудитория имеет название и вместимость.
8. Картотека преподавателей
Приложение автоматизирует делопроизводство отдела кадров вуза. В базе данных отдела кадров содержится информация о преподавателях вуза. Преподаватель имеет табельный номер, фамилию, имя, отчество, список преподаваемых дисциплин. Для каждой дисциплины из списка указываются наименование и номер. Преподаватель может работать только на одной кафедре. Кафедра имеет код, наименование и список преподавателей. Кафедра принадлежит одному факультету. Факультет имеет код, наименование и список принадлежащих ему кафедр.
9. Оптовая фирма
Приложение ведет учет товаров, закупаемых у поставщиков. Информация о каждой партии товаров: виды товаров, поставщик, закупочные цены товаров, количество каждого вида товара, дата закупки. В один день поставщик поставляет не более одной партии товаров. Поставщик имеет наименование, адрес, телефон и может поставлять несколько видов товара.
10.Результаты экзаменационной сессии
Приложение автоматизирует работу деканатов вуза. Студенты каждый семестр сдают экзамены по нескольким дисциплинам и могут пересдавать экзамен несколько раз разным преподавателям. В один день студент не может сдавать несколько экзаменов. Информация о студенте: шифр, фамилия, имя, отчество, группа. Информация о каждом экзамене: наименование и код дисциплины, семестр, дата сдачи, преподаватель, оценка.
11.Поставка деталей
Приложение ведет учет поставляемых на завод деталей от поставщиков. В базе данных хранится информация о поставляемых деталях: вид детали, поставщик, количество деталей для каждого вида от каждого поставщика с указанием даты поставки. Каждый поставщик может поставлять несколько видов деталей. Разные поставщики могут поставлять одинаковые виды деталей. В один день поставщик поставляет не более одной партии деталей. Информация о каждом поставщике: наименование, адрес и телефон поставщика, список поставляемых видов деталей. Вид детали имеет код вида и наименование.
27
12.Учебные планы института
Приложение автоматизирует работу учебного управления вуза, связанную с учебными планами. Учебные планы составляются для каждой учебной группы. В планах указываются: факультет, специальность, группа, семестр, дисциплина, вид отчетности в конце семестра (зачет, экзамен, зачет по курсовой работе), количества часов лекций, лабораторных работ и практических занятий в неделю. Факультет может обучать студентов по нескольким специальностям. По одной специальности могут обучаться несколько групп, а по некоторым специальностям могут готовить специалистов несколько факультетов. Некоторые дисциплины изучаются несколько семестров. Специальность имеет номер и наименование. Факультет имеет код и наименование.
13.Платное обучение.
Приложение ведет учет оплаты студентами обучения. Оплата ведется по семестрам. Информация об оплате студентом семестра обучения: оплачиваемый семестр, дата оплаты, сумма, номер финансового документа об оплате. Студент имеет шифр, фамилию, имя и отчество. Студент принадлежит одной студенческой группе. Группа имеет шифр и список студентов.
14.Наложенные платежи
Приложение автоматизирует работу фирмы с заказами. При регистрации заказа в базу данных записывается информация о заказе, заказчике и работнике фирмы, который принял заказ. При получении заказчиком заказа в базу данных записывается дата оплаты заказа и номер финансового документа об оплате. Информация о заказе: заказчик, номер и дата регистрации заказа, количество экземпляров товара в заказе, цена экземпляра на день регистрации. Информация о заказчике: фамилия, инициалы и адрес. Информация о работнике: фамилия и инициалы, должность.
15.Видеопрокат
Приложение автоматизирует работу видеопроката: регистрирует поступление, выдачу и возврат видеокассет. При регистрации выдачи в базу данных записывается информация: дата выдачи, ФИО и паспортные данные клиента, видеокассета, стоимость проката, срок возврата, ФИО работника, который оформлял выдачу. При возврате видеокассеты фиксируется дата возврата и сумма доплаты, если возврат осуществлялся после срока возврата. Информация о кассете: название фильма, режиссер, год, продолжительность, формат.
ПРИЛОЖЕНИЕ 2 ОСНОВНЫЕ ОПЕРАТОРЫ SQL
28
1. Оператор SELECT
SELECT [ALL|DISTINCT] список полей для вывода
FROM список таблиц, из которых отбираются данные [WHERE условие отбора]
[GROUP BY список полей, по которым группируются записи] [HAVING критерии поиска]
[ORDER BY список полей, задающих порядок сортировки];
2.Оператор добавления записи в таблицу INSERT INTO имя таблицы [(список полей)] VALUES (список значений);
3.Оператор добавления в таблицу записей из другой таблицы INSERT INTO имя таблицы-получателя (список полей) SELECT список полей источника записей
FROM имя таблицы– источника записей [WHERE условие отбора];
4.Оператор изменения полей записей таблицы
UPDATE имя таблицы SET список вида поле=выражение [WHERE условие отбора];
5. Оператор удаления записей
DELETE FROM имя таблицы [WHERE условие отбора];
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1.Ульман Дж., Уидом Дж. Введение в системы баз данных. – М.: Лори, 2000–374 c.
2.Архангельский А.Я. Программирование в С++ Builder 5. –М.: ЗАО «Издательство БИНОМ», 2000–1152 с.
3.Архангельский А.Я. Язык SQL в С++ Builder 5.–М.: ЗАО «Издательство БИНОМ», 2000–224 с.
4.Шафран Э. Создание Web-страниц: самоучитель. – СПб: Издательство
«Питер», 2000–320 с.