Учебно-методический комплекс дисциплины (опд. Ф. 10) Базы данных (код и название дисциплины по учебному плану специальности)

Вид материалаУчебно-методический комплекс

Содержание


Работа №3. Разработка утилиты для выполнения SQL-запросов
Работа №6. Проектирование структуры приложения сквозного задания
Работа №8. Формирование твердой копии справочника.
Пользователи системы
Подобный материал:
1   ...   7   8   9   10   11   12   13   14   15


Работа №3. Разработка утилиты для выполнения SQL-запросов

Кроме компонента TDBGrid в палитре Delphi имеются и другие визуальные компоненты, чувствительные к данным (data aware components). Таким является компонентом TDBNavigator. Его достаточно подключить к источнику данных, указав значение свойства DataSource. Этот компонент позволяет c помощью соответствующих кнопок перемещаться по записям таблицы (первая, последняя, предыдущая, следующая), переходить в режим редактирования, сохранять результаты или отменять редактирование без сохранения. Каждую кнопку можно выключить, или включить, для чего просто поменять значение свойства VisibleButtons.

Еще один визуальный компонент - TDBImage. Этот компонент отображает графический образ, которая может хранится в базе данных. Установив свойства DataSource и DataField этого компонента (DataField следует задать равным имени поля таблицы, в котором хранятся графические изображения), получим возможность отражения картинок на форме.

Упомянем и компонент TDBMemo. Этот компонент очень похож на обычный компонент TMemo. Как обычно, следует установить свойства DataSource и DataField (DataField надо установить равным имени поля таблицы, в котором хранятся текстовые данные переменной длины).

 Задание: воспользуйтесь компонентом TADOQuery чтобы получить доступ к данным, извлекаемым SQL-запросом. Такой запрос должен возвращать результирующий набор. Для этого разработайте утилиту, позволяющую ввести текст SQL-запроса (например, в компонент TMemo) и выполнить его с визуализацией результата (например, с помощью TDBGrid). Поэкспериментируйте с различными запросами на чтение.




 Более подробно принципы построения компонентов доступа к базе данных описаны в главе 12 Курса лекций. В частности, интерфейс ADO описан в п. 12.5.


Работа №4. Построение инфологической модели базы данных

 Принципы и техника инфологического моделирования изложены в главе 4 курса лекций.


 Задание:

Разработать диаграмму “сущность-связь” для моделирования следующей предметной области:
  1. В университете имеются факультеты, на факультетах – группы, в группах – студенты.

Надо ответить на вопросы типа (составить соответствующие SQL-запросы):
    1. Какие студенты учатся на факультете …?
    2. На каком факультете учится студент …?
    3. Какие группы на факультете …?



 Задание:

Разработать диаграмму “сущность-связь” для моделирования следующей предметной области:
  1. Предприятие работает над выполнением нескольких проектов. Для выполнения проекта формируется проектная группа, куда входит несколько сотрудников. Один сотрудник может входить в несколько проектных групп. Надо ответить на вопросы типа:
    1. Какие сотрудники входят в проектную группу …?
    2. В какие группы входит сотрудник …?



 Задание:

Разработать диаграмму “сущность-связь” для моделирования следующей предметной области:
  1. На предприятии установлена сменная работа. Одновременно в смену работает до 10 человек.

Надо ответить на вопросы типа:
    1. Какие сотрудники работают в 1 смену 3 числа?
    2. Сколько сотрудников работает во 2 смену 10 числа?
    3. Когда работает сотрудник …?




Работа №5. Выбор сквозного задания

При выборе сквозного задания следует предложить несколько более богатую проблемную область (по количеству сущностей и связей между ними), чем те, которые рассматривались в предыдущей работе. Можно при оценке “достаточного богатства” ориентироваться на такие примеры:

  1. Спортивный комплекс предоставляет несколько видов услуг. Пользователи могут оплачивать один сеанс (100 руб.) или приобретать абонемент на 8 сеансов (640 руб.) на определенное время и день недели. Каждый сеанс длится 1 час.

Надо ответить на вопросы типа:

1.1. Сколько денег заплатил пользователь за период?

1.2. Какие пользователи имеют абонемент в тренажерный зал за указанный период?

1.3. Есть ли свободное место на теннисном корте (нет абонемента) на определенное время и дату?

1.4. Сколько свободных мест в плавательном бассейне на определенное время и дату?

1.5. Сколько денег поступило в кассу за период?

  1. Медицинское учреждение состоит из стационара и поликлиники. На каждого пациента ведется “карточка”, куда заносятся паспортные данные. В поликлинике на каждый курс лечения пациента ведется амбулаторная карта, куда заносятся диагнозы, объективные данные, жалобы, факт каждого посещения, лечебные назначения. В стационаре на каждый курс лечения пациента формируется “карта больного”, куда заносятся диагнозы, лечебные назначения, объективные данные. При выписке в карту добавляется исход болезни.

Надо иметь возможность отвечать на вопросы типа:

2.1. Какие диагнозы (и классы диагнозов) наиболее часто встречаются среди всех пациентов?

2.2. Как лечили пациента …?

2.3. Пациенты, пролеченные в стационаре за период.

2.4. Какие пациенты имеют диагноз …?

2.5. Пациенты, лечившиеся за период в поликлинике и стационаре.


 Задание:

Разработать проект базы данных для сквозного задания. При разработке проекта базы данных необходимо сначала реализовать инфологическую, а затем и физическую модели базы данных. В явной следует форме выделить таблицы фактов и справочников, обосновать выбор того или иного способа реализации отношений между таблицами (1:1, 1:N, M:N, рекурсивная иерархия) и выбор естественных или искусственных ключей. Обосновать уровни нормализации таблиц: они должны быть не ниже 3НФ.

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




 Принципы нормализации изложены в главе 5 курса лекций.


Работа №6. Проектирование структуры приложения сквозного задания

Разработайте главную форму приложения и модуль данных. В главной форме реализуйте главное меню приложения иерархической структуры, примерный вид которого:


Данные Окна Отчеты

Справочники Отчет 1

Справочник 1 Отчет 2

Справочник 2 …



Данные




Рисунок 6.1. Примерная структура главного меню приложения.


 Задание:

В модуле данных по имени DM (который необходимо добавить в проект) описать соединение с базой данных с помощью компонента DBC (класса TADOConnection) и все таблицы базы данных (TADOTable). В таблицах описать поля базы данных (TField), задать необходимые свойства этих полей.




 Более подробно принципы построения и свойства компонентов доступа к базе данных описаны в главе 12 Курса лекций. В частности, интерфейс ADO описан в п. 12.5.


Работа №7. Работа со справочниками

 Задание:

Разработать универсальный класс (TCatalog) для редактирования справочников, и на его основе реализовать окна просмотра и редактирования справочников. Этот класс должен быть основан на модальной форме. Основной интерфейсный элемент в этой форме – компонент класса TDBGrid (назовем его Grid). Форма должна создаваться динамически по мере запроса на вывод окна просмотра-редактирования справочника. В компоненте Grid должны присутствовать необходимые для просмотра поля справочника (искусственные коды, уникально идентифицирующие запись в справочнике, не должны быть видны по умолчанию, однако следует создать элемент управления, позволяющий сделать их видимыми).

Другой компонент, необходимый на форме – DS класса TDataSource. Необходимо установить свойство Grid.DataSource равным DS.




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


procedure TMain.N11Click(Sender: TObject);

var f:TCatalog;

begin

f := TCatalog.Create(Self);

f.DS.DateSet := DM.Spr1;

DM.Spr1.Open;


// Обеспечить правильное отражение полей-счетчиков и других полей, генерируемых на стороне СУБД

DM.Spr1.Properties['Update Resync'].Value:=adResyncAll;


f.Caption := <Наименование справочника>;

f.ShowModal;

DM.Spr1.Close;

end;


Необходимо обеспечить возможность показа (или скрытия) искусственных ключей (если они есть) справочника. По умолчанию, поля, соответствующие искусственным ключам, должны быть невидимы, т. к. они не нужны рядовому пользователю. Однако разработчику и администратору базы данных зачастую бывает необходимо их увидеть. Для этого следует дополнить форму показа и редактирования справочников новым элементом управления – кнопкой (например, класса TButton). Далее следует написать программу - обработчик события нажатия на эту кнопку, который должен изменять свойство видимости соответствующего поля таблицы - справочника. Здесь имеется несколько возможностей.

Если бы мы писали специальные программы отдельно для каждого справочника, то в таком обработчике можно было бы ограничиться кодом вида


procedure TCatalog.Button1Click( Sender: TObject );

begin

DM.Spr1.FieldByName(‘ID’).Visible := not DM.Spr1.FieldByName(‘ID’).Visible;

end;


Однако в универсальной программе придется поступить иначе (в предположении, что все поля-ключи во всех справочниках называются одинаково):


procedure TCatalog.Button1Click( Sender: TObject );

begin

DS.DataSet.FieldByName(‘ID’).Visible := not DS.DataSet.FieldByName(‘ID’).Visible;

end;


Если поля-ключи в разных справочниках называются по разному, но все они определены первыми по порядку в наборе полей таблицы, можно воспользоваться другой формой:


procedure TCatalog.Button1Click( Sender: TObject );

begin

DS.DataSet.Fields[0].Visible := not DS.DataSet.Fields[0].Visible;

end;

 Задание:

Добавьте в программу просмотра и редактирования справочников возможность скрытия и показа искусственных ключей (или других атрибутов по смыслу Вашего приложения). Теперь, основываясь на только что разработанной форме показа и редактирования справочников, внести данные в справочники системы.




Работа №8. Формирование твердой копии справочника.

Разработать подпрограмму формирования твердой копии справочника как метод универсального класса просмотра и редактирования справочников. Добавить элемент управления на форме для вызова этого метода. Подпрограмма формирования твердой копии должна реализовать одну из следующих возможностей:

сформировать текстовый файл, содержащий все данные таблицы-справочника;

сформировать в текстовом файле html-код для последующей демонстрации его в браузере Интернета;

выдать содержимое таблицы-справочника в таблицу Excel.


Пример.

Результатом работы такой подпрограммы может быть следующая таблица, содержащая данные таблицы-справочника о пользователях некоторой информационной системы:

Пользователи системы

Полное имя пользователя

Роль

Администратор

ADM

Алипова О. Н.

ПЛАНОВИК

Гонохов Е.А.

ТЕХНОЛОГ





Ершова Г.И

ТЕХНОЛОГ

Сидоренко Н. А.

ТЕХНОЛОГ

Сидоренко-Нормы

НОРМИРОВЩИК

Рисунок 8.1. Пример печатной формы справочника.


Для создания такого представления можно сгенерировать примерно следующий html-код, находящийся в текстовом файле с расширением .htm:


Пользователи системы







Пользователи системы



















































Полное имя пользователя Роль
Администратор ADM
Алипова О. Н. ПЛАНОВИК
Сидоренко Н. А. ТЕХНОЛОГ
Сидоренко-Нормы НОРМИРОВЩИК





 Задание:

Разработайте универсальную процедуру для формирования твердой копии содержимого таблицы базы данных в виде html-кода в текстовом файле. Добавьте возможность вызова этой процедуры в Вашу программу просмотра и редактирования справочников




Другая возможность – выдать содержимое справочника в электронную таблицу Microsoft Excel. Примерный код требуемой универсальной процедуры следующий:


procedure TCatalog.Print;

var ExcelApp, Sheet, c: Variant;

i,k,j:Integer;

f:TField;

begin

Grid.DataSource.DataSet.DisableControls; // Отключение набора данных от визуальных // компонентов, связанных с ним


k:=Grid.Columns.Count-1; // номер последнего столбца в соответствующем // компоненте TDBGrid

try

Grid.DataSource.DataSet.First; // Перейти к первой записи справочника


// Получить доступ к приложению Excel с помощью OLE-automation

ExcelApp := CreateOleObject('Excel.Application');

// Добавить рабочую книгу

ExcelApp.Workbooks.Add(1);

// Получить ссылку на первый лист первой рабочей книги

Sheet:=ExcelApp.Workbooks[1].Worksheets[1];

Try // Попытаться задать имя листа совпадающим с заголовка окна формы

Sheet.Name:=Caption;

except

end;


// В верхнюю левую ячейку листа записать содержимое заголовка окна формы

c:=Sheet.Cells[1,1]; c.Font.Bold:=True; c.Font.Size:=15; c.Value:=Caption;


// В следующую ячейку листа записать дату формирования твердой копии

c:=Sheet.Cells[2,1]; c.Font.Italic:=True;

c.Value:='Сформировано '+DateTimeToStr(Now);

Sheet.Cells[3, 1].Value:='¹№п/п';

for i:=0 to k do // Перечислить имена полей справочника в том порядке,

begin // как они заданы в соответсвующем компоненте TDBGrid c:=Sheet.Cells[3, 2+i];

c.Value := Grid.Columns[i].Title.Caption;

end;

j:=1;

while not Grid.DataSource.DataSet.Eof do

begin // Организовать цикл по всем записям справочника Sheet.Cells[j+2, 1].Value:=j;

for i:=0 to k do

begin // Организовать цикл по всем полям записи справочника c:=Sheet.Cells[j+2, 2+i];

try

// Получить ссылку на очередное поле

f:=Grid.DataSource.DataSet.FieldByName(Grid.Columns[i].FieldName );

// Занести значение поля в очередную клетку листа

c.Value:=f.Value;

except

end;

end;

// Перейти к следующей записи справочника

Grid.DataSource.DataSet.Next;

// Перейти к следующей строке листа электорнной таблицы Excel

j:=j+1;

end;

except

on e:Exception do ShowMessage('Ошибка:'+e.Message);

end;

Grid.DataSource.DataSet.EnableControls; // Подключение набора данных к визуальным // компонентам

ExcelApp.Visible := True; // Сделать Excel видимой для пользователя

end;