Учебно-методический комплекс дисциплины (опд. Ф. 10) Базы данных (код и название дисциплины по учебному плану специальности)
Вид материала | Учебно-методический комплекс |
- Рабочая программа дисциплины «Зоология» Код дисциплины по учебному плану опд, 751.31kb.
- Учебно-методический комплекс дисциплины базы данных Специальность, 414.37kb.
- Рабочая программа дисциплины «экологический мониторинг» Код дисциплины по учебному, 254.39kb.
- Рабочая программа дисциплины «Цитология и гистология» Код дисциплины по учебному плану, 271.37kb.
- Рабочая программа дисциплины «ботаника» Код дисциплины по учебному плану опд., 301.75kb.
- Рабочая программа дисциплины «методика преподавания экологии» Код дисциплины по учебному, 283.89kb.
- Рабочая программа дисциплины «методика преподавания биологии» Код дисциплины по учебному, 350.54kb.
- Учебно-методический комплекс дисциплины математические методы в бизнесе и управлении, 423.86kb.
- Рабочая программа дисциплины «роль микроорганизмов в жизни растений» Код дисциплины, 88.04kb.
- Рабочая программа дисциплины «радиационная экология» Код дисциплины по учебному плану, 137.34kb.
Работа №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 курса лекций.
Задание:
Разработать диаграмму “сущность-связь” для моделирования следующей предметной области:
- В университете имеются факультеты, на факультетах – группы, в группах – студенты.
Надо ответить на вопросы типа (составить соответствующие SQL-запросы):
- Какие студенты учатся на факультете …?
- На каком факультете учится студент …?
- Какие группы на факультете …?
Задание:
Разработать диаграмму “сущность-связь” для моделирования следующей предметной области:
- Предприятие работает над выполнением нескольких проектов. Для выполнения проекта формируется проектная группа, куда входит несколько сотрудников. Один сотрудник может входить в несколько проектных групп. Надо ответить на вопросы типа:
- Какие сотрудники входят в проектную группу …?
- В какие группы входит сотрудник …?
- Какие сотрудники входят в проектную группу …?
Задание:
Разработать диаграмму “сущность-связь” для моделирования следующей предметной области:
- На предприятии установлена сменная работа. Одновременно в смену работает до 10 человек.
Надо ответить на вопросы типа:
- Какие сотрудники работают в 1 смену 3 числа?
- Сколько сотрудников работает во 2 смену 10 числа?
- Когда работает сотрудник …?
Работа №5. Выбор сквозного задания
При выборе сквозного задания следует предложить несколько более богатую проблемную область (по количеству сущностей и связей между ними), чем те, которые рассматривались в предыдущей работе. Можно при оценке “достаточного богатства” ориентироваться на такие примеры:
- Спортивный комплекс предоставляет несколько видов услуг. Пользователи могут оплачивать один сеанс (100 руб.) или приобретать абонемент на 8 сеансов (640 руб.) на определенное время и день недели. Каждый сеанс длится 1 час.
Надо ответить на вопросы типа:
1.1. Сколько денег заплатил пользователь за период?
1.2. Какие пользователи имеют абонемент в тренажерный зал за указанный период?
1.3. Есть ли свободное место на теннисном корте (нет абонемента) на определенное время и дату?
1.4. Сколько свободных мест в плавательном бассейне на определенное время и дату?
1.5. Сколько денег поступило в кассу за период?
- Медицинское учреждение состоит из стационара и поликлиники. На каждого пациента ведется “карточка”, куда заносятся паспортные данные. В поликлинике на каждый курс лечения пациента ведется амбулаторная карта, куда заносятся диагнозы, объективные данные, жалобы, факт каждого посещения, лечебные назначения. В стационаре на каждый курс лечения пациента формируется “карта больного”, куда заносятся диагнозы, лечебные назначения, объективные данные. При выписке в карту добавляется исход болезни.
Надо иметь возможность отвечать на вопросы типа:
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;