Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Инфоурок / Информатика / Другие методич. материалы / Методические указания к практическим занятиям по дисциплине "разработка и эксплуатация экономических информационных систем"
ВНИМАНИЮ ВСЕХ УЧИТЕЛЕЙ: согласно Федеральному закону № 313-ФЗ все педагоги должны пройти обучение навыкам оказания первой помощи.

Дистанционный курс "Оказание первой помощи детям и взрослым" от проекта "Инфоурок" даёт Вам возможность привести свои знания в соответствие с требованиями закона и получить удостоверение о повышении квалификации установленного образца (180 часов). Начало обучения новой группы: 24 мая.

Подать заявку на курс
  • Информатика

Методические указания к практическим занятиям по дисциплине "разработка и эксплуатация экономических информационных систем"

библиотека
материалов


комитет образования и науки Курской области

Областное бюджетное образовательное учреждение

«Железногорский политехнический колледж»






Методические указания

к практическим занятиям

по дисциплине «Разработка и эксплуатация экономических информационных систем»



для групп на базе основного общего образования с получением среднего (полного) общего и среднего профессионального образования

по специальности 230401 «Информационные системы (по отраслям)»

















гhello_html_79605bad.gif. Железногорск 2014г.


Одобрено

Разработано в соответствии с рабочей программой по дисциплине «Разработка и эксплуатация экономических информационных систем»

для групп на базе основного общего образования с получение среднего (полного) общего и среднего профессионального образования

по специальности 230401 Информационные системы (по отраслям)

Предметно-цикловой комиссией


Протокол № ___________

от «___» __________20__г

Председатель ПЦК:

__________________





Методические рекомендации к практическим занятиям предназначены в качестве руководства к выполнению практических работ студентов. Данное издание призвано помочь студентам освоить практические навыки и умения материала курса.






Разработчик: преподаватель Васильева Е. А.


hello_html_4263d821.gif


Содержание



стр.

Пояснительная записка

5

Введение

6

Практическая работа 1. Создание диаграммы вариантов использования и действующих лиц.

7

Практическая работа 2. Создание диаграммы Последовательности

17

Практическая работа 3. Создание Кооперативной диаграммы. Добавление на диаграмму дополнительных объектов

23

Практическая работа 4. Диаграмма состояний для класса Заказ

31

Практическая работа 5. Построение диаграммы Активности для варианта использования «Выполнить поставку Заказа»

39

Практическая работа 6. Пакеты и классы

45

Практическая работа 7. Уточнение методов и свойств классов. Добавление атрибутов

49

Практическая работа 8. Исключение кириллизованного текста в информации классов

54

Практическая работа 9. Построение диаграммы компонентов

57

Практическая работа 10. Кодогенерация проекта в Delphi

68

Практическая работа 11. Технология создания БД в Дельфи: BDE

75

Практическая работа 12. Компоненты баз данных

80

Практическая работа 13. Компоненты синхронного просмотра

86


Практическая работа 14. Редактор колонок: работа с сеткой DBGrid

89

Практическая работа 15. Перемещение по записям набора данных. Доступ к полям.

94

Практическая работа 16. Работа с записями: сортировка. Работа с записями: фильтрация.

99

Практическая работа 17. Графики и диаграммы: компонент DBChart. Модификация набора данных

102

Практическая работа 18. Добавление вычисляемого поля. Подсчет итогов по столбцу таблицы

105

Практическая работа 19. Выбор информации из базы данных: запросы. Анализ Delphi проекта, добавление визуальных объектов

108

Практическая работа 20. Кодогенерация модельных элементов. Построение диаграммы размещения

112

Заключение

125

Рекомендованная литература

125

Приложение А.

126

Приложение Б.

130

Приложение В.

134

hello_html_508fb561.gif

Пояснительная записка

Данная работа содержит методические указания к практическим занятиям по дисциплине «Разработка и эксплуатация экономических информационных систем», предназначена для обучающихся по специальности 230401 «Информационные системы (по отраслям)».

Цель разработки: оказание помощи обучающимся в выполнении практических работ по дисциплине: «Разработка и эксплуатация экономических информационных систем».

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

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

Данное пособие может быть использовано для освоения основных приемов работы.

Введение.

Целью настоящего методического руководства является оказание помощи студентам в освоении технологии проектирования информационных систем с позиции объектно-ориентированного проектирования (ООП) на основе языка UML.

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

Второй раздел содержит описание для выполнения практических работ в Ratonal Rose.

Последовательность работ следующая: выполняя практические работы первого раздела, студенты приобретают навыки работы по созданию баз данных и их программированию в среде программирования Delphi. Выполняя практические работы второго раздела на первых этапах (пр. 1- 7) строятся диаграммы логического проектирования, не имеющие прямого отношения к языку программирования. Это диаграммы концептуального моделирования, они используются для общения с постановщиками задач. Для лучшего понимания диаграмм в работах используется кириллизованный текст. Затем (пр.8), для подготовки модели к кодогенерации, кириллица в именах классов, атрибутах и методах заменяется на латинский шрифт. После этого производится кодогенерация в Delphi. Далее предлагается загрузить сгенерированный проект в Delphi и добавить в него новые визуальные компоненты. Затем выполнить реинжениринг Delphi проекта в Rose, исследовать модель, описать законы кодогенерации.


Практическая работа 1. Создание диаграммы вариантов использования и действующих лиц.


Цель: научиться создавать диаграмму вариантов использования и действующих лиц

Окончательный вид диаграммы показан на рис. 1.

hello_html_77ea3aca.gif

Рис. 1 Диаграмма вариантов использования задачи о заказе товара.

Этапы выполнения упражнения.

1. Дважды щелкнув мышью на Главной диаграмме Вариантов Использования (Main) в браузере, откройте ее.

2.С помощью кнопки Use Case (Вариант использования) панели инструментов поместите на диаграмму новый вариант использования. Назовите его "Ввести новый заказ".

3. Повторив этапы 2 и 3, поместите на диаграмму остальные варианты использования:

Изменить существующий заказ

Напечатать инвентарную опись

Обновить инвентарную опись

Оформить заказ

Отклонить заказ

Выполнить поставку заказа

4. С помощью кнопки Actor (Действующее лицо) панели инструментов поместите на диаграмму новое действующее лицо.

5. Назовите его "Продавец".

6. Повторив шаги 4 и 5, поместите на диаграмму остальных действующих лиц:

Управляющий магазином

Клерк магазина

Бухгалтерская система

7. Создание абстрактного варианта использования (не требующего дальнейшей декомпозиции).

Щелкните правой кнопкой мыши на варианте использования "Отклонить заказ" на диаграмме.

В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).

Установите флажок Abstract (Абстрактный), чтобы сделать этот вариант использования абстрактным.

Добавление ассоциаций

1. С помощью кнопки Unidirectional Association (Однонаправленная ассоциация) панели инструменте нарисуйте ассоциацию между действующим лицом Продавец и вариантом использования "Ввести заказ".

2. Повторив шаг 1, поместите на диаграмму остальные ассоциации, согласно рис. 1.

Добавление связи расширения

С помощью кнопки Generalization (Обобщение) панели инструментов нарисуйте связь между вариантом использования "Отклонить заказ" и вариантом использования "Оформить заказ". Стрелка должна быть направлена от первого варианта использования ко второму. Связь расширения означает, что вариант использования "Отклонить заказ" при необходимости дополняет функциональные возможности варианта использования "Оформить заказ".

Щелкните правой кнопкой мыши на новой связи между вариантами использования "Отклонить заказ" и "Оформить заказ".

В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).

В раскрывающемся списке стереотипов введите слово extends (расширение), затем нажмите ОК.

Надпись «extends» появится на линии данной связи.

Добавление описаний к вариантам использования

Выделите в браузере вариант использования "Ввести новый заказ".

В окне документации введите следующее описание: " Этот вариант использования дает клиенту возможность ввести новый заказ в систему".

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

Добавление описаний к действующему лицу

Выделите в браузере действующее лицо Продавец.

В окне документации введите следующее описание: "Продавец — это служащий, старающийся продать товар".

С помощью окна документации добавьте описания к остальным действующим лицам.


Практическая работа 2. Создание диаграммы Последовательности.


Согласовав основные бизнес процессы с Антоном, Павел приступил к построению модели бизнес- процессов, что бы ответить на вопрос- «как это должно делаться в системе». Для начала он выбрал наиболее важный Вариант использования - «Ввод нового заказа» и построил для него диаграммы взаимодействия.

Диаграммы взаимодействия включают в себя два типа диаграмм - Последовательности и Кооперативную.

Этапы выполнения упражнения

Настройка программной среды

1. В меню модели выберите пункт Tools >- Options (Инструменты >- Параметры).

2. Перейдите на вкладку Diagram (Диаграмма).

3. Установите флажки Sequence numbering, Collaboration numbering и Focus of control.

4. Нажмите OK, чтобы выйти из окна параметров.

Создание диаграммы Последовательности

1. Щелкните правой кнопкой мыши на Логическом представлении браузера.

2. В открывшемся меню выберите пункт New > Sequence Diagram (Создать >Диаграмма Последовате­льности).

3. Назовите новую диаграмму: Ввод заказа.

4. Дважды щелкнув на этой диаграмме, откройте ее.

Добавление на диаграмму действующего лица и объектов

1. Перетащите действующее лицо Продавец из браузера на диаграмму.

2. Нажмите кнопку Object (Объект) панели инструментов.

3. Щелкните мышью в верхней части диаграммы, чтобы поместить туда новый объект.

4. Назовите объект Выбор варианта заказа.

5. Повторив шаги 3 и 4, поместите на диаграмму объекты:

- Форма деталей заказа

- Заказ №1234

Добавление сообщений на диаграмму

1. На панели инструментов нажмите кнопку Object Message (Сообщение объекта).

2. Проведите мышью от линии жизни действующего лица Продавец к линии жизни объекта Выбор варианта заказа.

3. Выделив сообщение, введите его имя Создать новый заказ.

4. Повторив шаги 2 и 3, поместите на диаграмму сообщения:

- Открыть форму между Выбор Варианта Заказа и Форма деталей Заказа

-hello_html_m1e0d47f2.gifВвести номер заказа, заказчика и число заказываемых предметов между Продавец и Форма Деталей Заказа

- Сохранить заказ — между Продавец и Форма Деталей Заказа

- Создать пустой заказ между Форма Деталей Заказа и Заказ N1234

- Ввести номер заказа, заказчика и число заказываемых предметов между Форма Деталей Заказа и Заказ N1234

- Сохранить заказ — между Форма Деталей Заказа и Заказ N1234

Завершен первый этап работы. Готовая диаграмма Последовательности представлена на рис. 2.


Рис. 2. Диаграмма последовательности без управляющих элементов.


Теперь нужно позаботиться об управляющих объектах и о взаимодействии с базой данных. Как видно из диа­граммы, объект Форма Деталей Заказа имеет множество ответственностей, с которыми лучше всего мог бы справиться управляющий объект. Кроме того, новый заказ должен сохранять себя в базе данных сам. Ве­роятно, эту обязанность лучше было бы переложить на другой объект.


Добавление на диаграмму дополнительных объектов

1. Нажмите кнопку Object панели инструментов.

2. Щелкните мышью между объектами Форма Деталей Заказа и Заказ №1234, чтобы поместить туда новый объект.

3. Введите имя объекта Управляющий заказами.

4. Нажмите кнопку Object панели инструментов.

5. Новый объект расположите справа от Заказ №1234.

6. Введите его имя- Управляющий транзакциями.

Назначение ответственностей объектам

1. Выделите сообщение 5: Создать пустой заказ.

2. Нажав комбинацию клавиш CTRL+D, удалите это сообщение.

3. Повторите шаги 1 и 2 для удаления двух последних сообщений:

- Вести номер заказа, заказчика и число заказываемых предметов

- Сохранить заказ

4. Нажмите кнопку Object Message панели инструментов.

5. Поместите на диаграмму новое сообщение, расположив его под сообщением 4 между Форма деталей заказа и Управляющий заказами.

6. Назовите его Сохранить заказ.

7. Повторите шаги 4 — 6, добавив сообщения с шестого по девятое и назвав их:

- Создать новый заказ между Управляющий заказами и Заказ №1234

- Ввести номер заказа, заказчика и число заказываемых предметов- между Управляющий заказами и Заказ №1234

- Сохранить заказ- между Управляющий заказами и Управляющий транзакциями

- Информация о заказемежду Управляющий транзакциями и Заказ №1234

8. На панели инструментов нажмите кнопку Message to Self (Сообщение себе).

9. Щелкните на линии жизни объекта Управляющий транзакциями ниже сообще­ния 9, добавив туда рефлексивное сообщение.

10. Назовите его Сохранить информацию о заказе в базе данных.

Соотнесение объектов с классами

1. Щелкните правой кнопкой мыши на объекте Выбор варианта заказа.

2. В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).

В раскрывающемся списке классов выберите пункт <New> (Создать). Появится окно спецификации классов.

4. В поле Name введите Выбор заказа.

5. Щелкните на кнопке ОК. Вы вернетесь в окно спецификации объекта.

6. В списке классов выберите класс Выбор Заказа.

7. Щелкните на кнопке ОК, чтобы вернуться к диаграмме. Теперь объект называется Выбор варианта заказа: Выбор Заказа

8. Для соотнесения остальных объектов с классами повторите шаги с 1 по 7:

- Класс Детали заказа соотнесите с объектом Форма деталей заказа

- Класс Упр_заказами с объектом Управляющий заказами

- Класс Заказ с объектом Заказ N 1234

- Класс Упр_ транзакциями с объектом Управляющий транзакциями

Соотнесение сообщений с операциями

1. Щелкните правой кнопкой мыши на сообщении 1: Создать новый заказ.

2. В открывшемся меню выберите пункт <new operation> (создать операцию). Появится окно специфика­ции операции.

3. В поле Name введите имя операцииСоздать.

4. Нажмите на кнопку ОК, чтобы закрыть окно спецификации операции и вернуться к диаграмме.

5. Еще раз щелкните правой кнопкой мыши на сообщении 1.

6. В открывшемся меню выберите новую операцию Создать().

7. Повторите шаги с 1 по 6, чтобы соотнести с операциями все остальные сообщения:

- Сообщение 2: Открыть форму соотнесите с операцией Открыть()

- Сообщение 3: Ввести номер заказа, заказчика и число заказываемых предметов с операцией Ввести номер заказа, заказчика и число заказываемых предметов()

- Сообщение 4: Сохранить заказ с операцией Сохранить заказ()

- Сообщение 5: Сохранить заказ с операцией Сохранить заказ()

- Сообщение 6: Создать пустой заказ – с операцией Создать пустой заказ()

- Сообщение 7: Ввести номер заказа, заказчика и число заказоваемых предметов- с одноименной операцией.

- Сообщение 8 Сохранить заказ – с операцией Сохранить заказ()

- Сообщение 9 Информация о заказе – с одноименной операцией

- Сообщение 10 Сохранить информацию о заказе с одноименной операцией.

Диаграмма должна выглядеть, как на рис. 3.




Рhello_html_m5e4c7ac7.gifис. 3. Окончательный вид диаграмы последовательности



Практическая работа 3. Создание Кооперативной диаграммы. Добавление на диаграмму дополнительных объектов.

Конечный вид диаграммы представлен на рис. 4.


hello_html_10f9a0c5.gif

Рис. 4. Окончательный вид кооперативной диаграммы.

1. Щелкните правой кнопкой мыши на Логическом представлении в браузере.

2. В открывшемся меню выберите пункт New > Collaboration Diagram (Создать > Кооперативная диа­грамма).

3. Назовите эту диаграмму Ввод заказа.

4. Дважды щелкнув мышью на диаграмме, откройте ее.

Добавление действующего лица и объектов на диаграмму

1. Перетащите действующее лицо Продавец из браузера на диаграмму.

2. Нажмите кнопку Object (Объект) панели инструментов.

3. Щелкните мышью где-нибудь внутри диаграммы, чтобы поместить туда новый объект.

4. Назовите объект Выбор варианта заказа.

5. Повторив шаги 3 и 4, поместите на диаграмму объекты:

- Форма деталей заказа

- Заказ №1234

Добавление сообщений на диаграмму

1. На панели инструментов нажмите кнопку Object Link (Связь объекта).

2. Проведите мышью от действующего лица Продавец к объекту Выбор варианта заказа.

3. Повторите шаги 1 и 2, соединив связями следующие объекты:

- Действующее лицо Продавец и объект Форма деталей Заказа

- Объект Форма деталей Заказа и объект Выбор Варианта Заказа

- Объект Форма деталей Заказа объект Заказ N1234

4. На панели инструментов нажмите кнопку Link Message (Сообщение связи).

5. Щелкните мышью на связи между Продавец и Форма деталей Заказа.

6. Выделив сообщение, введите его имяСоздать новый заказ;

7. Повторив шаги с 4 по 6, поместите на диаграмму сообщения:

- Открыть форму между Выбор Варианта Заказа и Форма Деталей Заказа.

- Ввести номер заказа, заказчика и число заказываемых предметов между Продавец и Форма Деталей Заказа

- Сохранить заказ — между Продавец и Форма деталей Заказа

- Создать пустой заказ между Форма деталей Заказа и Заказ №1234

- Ввести номер заказа, заказчика и число заказываемых предметов между Форма деталей Заказа и Заказ №1234

- Сохранить заказ между Форма деталей Заказа и Заказ №1234

Теперь нужно поместить на диаграмму дополнительные элемен­ты, а также рассмотреть ответственности объектов.

Добавление на диаграмму дополнительных объектов

1. Нажмите кнопку Object панели инструментов.

2. Щелкните мышью где-нибудь на диаграмме, чтобы поместить туда новый объект.

3. Введите имя объекта Управляющий заказами.

4. На панели инструментов нажмите кнопку Object.

5. Поместите на диаграмму еще один объект.

6. Введите его имя Управляющий транзакциями.

Назначение ответственностей объектам

1. Выделите сообщение 5: Создать пустой заказ. Выделяйте слова, а не стрелку.

2. Нажав комбинацию клавиш CTRL+D, удалите это сообщение.

3. Повторите шаги 1 и 2 для удаления сообщений 6 и 7:

- Ввести номер заказа, заказчика и число заказываемых предметов

- Сохранить заказ

4. Выделите связь между объектами Форма деталей Заказа и Заказ №1234

5. Нажав комбинацию клавиш CTRL+D, удалите эту связь

6. На панели инструментов нажмите кнопку Object Link (Связь объекта).

7. Нарисуйте связь между Форма деталей Заказа и Управляющий Заказами.

8. На панели инструментов нажмите кнопку Object Link (Связь объекта).

9. Нарисуйте связь между Управляющий Заказами и Заказ №1234

10. На панели инструментов нажмите кнопку Object Link (Связь объекта).

11. Нарисуйте связь между Заказ №1234 и Управляющий Транзакцией.

12. На панели инструментов нажмите кнопку Object Link (Связь объекта).

13. Нарисуйте связь между Управляющий Заказами и Управляющий Транзакцией.

14. На панели инструментов нажмите кнопку Link Message (Сообщение связи).

15. Щелкните мышью на связи между объектами Форма деталей Заказа и Управляющий Заказами, чтобы ввести новое сообщение.

16. Назовите это сообщение Сохранить заказ.

17. Повторите шаги 14 — 16, добавив сообщения с шестого по девятое, и назвав их:

- Создать новый заказ между Управляющий Заказами и Заказ №1234

- Ввести номер заказа, заказчика и число заказываемых предметов между Управляющий Заказами и Заказ №1234

- Сохранить заказ между Управляющий Заказами и Управляющий Транзакцией

- Информация о заказе между Управляющий Транзакцией и Заказ №1234

18. На панели инструментов нажмите кнопку Link to Self (Связь с собой).

19. Щелкнув на объекте Управляющий Транзакцией, добавьте к нему рефлексивное сообщение.

20. На панели инструментов нажмите кнопку Link Message (Сообщение связи).

21. Щелкните мышью на рефлексивной связи Управляющий Транзакциями, чтобы ввести туда сообщение.

22. Назовите новое Сохранить информацию о за­казе в базе данных.

Соотнесение объектов с классами (если классы были созданы при разработке описанной выше диаграммы Последовательности)

1. Найдите в браузере класс Выбор Заказа.

2. Перетащите его на объект Выбор варианта заказа на диаграмме.

3. Повторите шаги 1 и 2 соотнеся остальные объекты и соответствующие им классы:

- Класс заказ деталей соотнесите с объектом Форма деталей заказа

- Класс Упр_заказами с объектом Управляющий Заказами

- Класс Заказ с объектом Заказ №1234

- Класс Упр_транзакциями с объектом Управляющий транзакциями

Соотнесение объектов с классами (если вы не создавали описанную выше диаграмму Последовательности)

1. Щелкните правой кнопкой мыши на объекте Форма деталей Заказа.

2. В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).

3. В раскрывающемся списке классов выберите пункт <New> (Создать). Появится окно спецификации классов.

4. В поле имени введите Выбор заказа.

5. Щелкните на кнопке ОК. Вы вернетесь в окно спецификации объекта.

6. В списке классов выберите класс Выбор заказа.

7. Щелкните на кнопке OK, чтобы вернуться к диаграмме. Теперь объект называется Выбор варианта заказа: Выбор Заказа

8. Для соотнесения остальных объектов с классами повторите шаги с 1 по 7:

- Класс Детали заказа соотнесите с объектом Форма деталей заказа

- Класс Упр_заказами с объектом Управляющий заказами

- Класс Заказ с объектом Заказ N 1234

- Класс Упр_ транзакциями с объектом Управляющий транзакциями

Соотнесение сообщений с операциями (если операции были созданы при разработке описанной выше диаграммы Последовательности)

1. Щелкните правой кнопкой мыши на сообщении 1: Создать новый заказ.

2. В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).

3. В раскрывающемся списке имен укажите имя операции Создать().

4. Нажмите на кнопку ОК.

5. Повторите шаги 1—4 для соотнесения с операциями остальных сообщений:

- Сообщение 2: Открыть форму соотнесите с операцией Открыть()

- Сообщение 3: Ввести номер заказа, заказчика и число заказываемых предметов с операцией Ввести номер заказа, заказчика и число заказываемых предметов()

- Сообщение 4: Сохранить заказ с операцией Сохранить заказ()

- Сообщение 5: Сохранить заказ с операцией Сохранить заказ()

Сообщение 6: Создать пустой заказ – с операцией Создать пустой заказ()

Сообщение 7: Ввести номер заказа, заказчика и число заказоваемых предметов- с одноименной операцией.

Сообщение 8 Сохранить заказ – с операцией Сохранить заказ()

Сообщение 9 Информация о заказе – с одноименной операцией

Сообщение 10 Сохранить информацию о заказе с одноименной операцией

Соотнесение сообщений с операциями (если вы не создавали описанную выше диаграмму Последовательности)

1. Щелкните правой кнопкой мыши на сообщении 1: Создать новый заказ().

2. В открывшемся меню выберите пункт <new operation> (создать операцию). Появится окно специфика­ции операции.

3. В поле имени введите имя операцииСоздать().

4. Нажмите на кнопку ОК, чтобы закрыть окно спецификации операции и вернуться к диаграмме.

5. Еще раз щелкните правой кнопкой мыши на сообщении 1.

6. В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).

7. В раскрывающемся списке Name (Имя) укажите имя новой операции.

8. Нажмите на кнопку ОК.

9. Повторите шаги 1—8, чтобы создать новые операции и соотнести с ними остальные сообщения:

- Сообщение 2: Открыть форму соотнесите с операцией Открыть()

- Сообщение 3: Ввести номер заказа, заказчика и число заказываемых предметов с операцией Ввести номер заказа, заказчика и число заказываемых предметов()

- Сообщение 4: Сохранить заказ с операцией Сохранить заказ()

- Сообщение 5: Сохранить заказ с операцией Сохранить заказ()

Сообщение 6: Создать пустой заказ – с операцией Создать пустой заказ()

Сообщение 7: Ввести номер заказа, заказчика и число заказоваемых предметов- с одноименной операцией.

Сообщение 8 Сохранить заказ – с операцией Сохранить заказ()

Сообщение 9 Информация о заказе – с одноименной операцией

Сообщение 10 Сохранить информацию о заказе с одноименной операцией

Ваша диаграмма должна выглядеть, как показано на рис. 4


Практическая работа 4. Диаграмма Состояний для класса Заказ.

Постройте диаграмму Состояний для класса Заказ, показанную на рис. 5.


hello_html_31d4b2dc.gif

Рис 5. Диаграмма состояний для класса Заказ

Этапы выполнения упражнения

Создание диаграммы

1. Найдите в браузере класс Заказ.

2. Щелкните на классе правой кнопкой мыши и в открывшемся меню укажите пункт New > Statechart Diagram (Создать диаграмму состояний).

Добавление начального и конечного состояний

1. Нажмите кнопку Start State (Начальное состояние) панели инструментов.

2. Поместите это состояние на диаграмму.

3. Нажмите кнопку End State (Конечное состояние) панели инструментов.

4. Поместите это состояние на диаграмму.

Добавление суперсостояния

1. Нажмите кнопку State (Состояние) панели инструментов.

2. Поместите это состояние на диаграмму.

Добавление оставшихся состояний

1. На панели инструментов нажмите кнопку State (Состояние).

2. Поместите состояние на диаграмму.

3. Назовите состояние Отменен.

4. На панели инструментов нажмите кнопку State(Состояние).

5. Поместите состояние на диаграмму.

6. Назовите состояние Выполнен.

7. На панели инструментов нажмите кнопку State(Состояние).

8. Поместите состояние на диаграмму внутрь суперсостояния.

9. Назовите состояние Инициализация.

10. На панели инструментов нажмите кнопку State (Состояние).

11. Поместите состояние на диаграмму внутрь суперсостояния.

12. Назовите состояние Выполнение заказа приостановлено.

Описание состояний

1. Дважды щелкните мышью на состоянии Инициализация.

2. Перейдите на вкладку Detail (Подробно).

3. Щелкните правой кнопкой мыши в окне Actions(Действия).

4. В открывшемся меню выберите пункт Insert(Вставить).

5. Дважды щелкните мышью на новом действии.

6. Назовите его Сохранить дату заказа.

7. Убедитесь, что в окне When (Когда) указан пункт On Entry (На входе).

8. Повторив шаги 3—7, добавьте следующие действия:

- Собрать клиентскую информацию, в окне When укажите DO (Выполнять между входом и выходом)

- Добавить к заказу новые позиции, укажите DO

9. Нажмите два раза на ОК, чтобы закрыть спецификацию.

10. Дважды щелкните мышью на состоянии Отменен.

11. Повторив шаги 2—7, добавьте действия:

Сохранить дату отмены, укажите On Exit (На выходе)

12. Нажмите два раза на ОК, чтобы закрыть спецификацию.

13. Дважды щелкните мышью на состоянии Выполнен.

14. Повторив шаги 2—7, добавьте действие:

- Выписать счет, укажите On Exit

15. Нажмите два раза на ОК, чтобы закрыть спецификацию.

Добавление переходов

1. Нажмите кнопку Transition (Переход) панели инструментов.

2. Щелкните мышью на начальном состоянии.

3. Проведите линию перехода к состоянию Инициализация.

4. Повторив шаги с первого по третий, создайте следующие переходы:

- От состояния Инициализация к состоянию Выполнение заказа приостановлено

- От состояния Выполнение заказа приостановлено к состоянию Выполнен

- От суперсостояния к состоянию Отменен

- От состояния Отменен к конечному состоянию

- От состояния Выполнен к конечному состоянию

5. На панели инструментов нажмите кнопку Transition to Self (Переход к себе).

6. Щелкните мышью на состоянии Выполнение заказа приостановлено

Описание переходов

1. Дважды щелкнув мышью на переходе от состояния Инициализация к состоянию Выполнение заказа приостановлено, откройте окно спецификации перехода.

2. В поле Event (Событие) введите фразу Выполнить заказ.

3. Щелкнув на кнопке ОК, закройте окно спецификации.

4. Повторив шаги с первого по третий, добавьте событие Отменить заказ к переходу меж­ду суперсостоянием и состоянием Отменен.

5. Дважды щелкнув мышью на переходе от состояния Выполнение заказа приостановлено к со­стоянию Выполнен, откройте окно его спецификации.

6. В поле Event (Событие) введите фразу Добавить к заказу новую позицию.

7. Перейдите на вкладку Detail (Подробно).

8. В поле Guard Condition (Сторожевое Условие) введите Не осталось незаполненных позиций.

9. Щелкнув на кнопке ОК, закройте окно спецификации.

10. Дважды щелкните мышью на рефлексивном переходе (Transition to Self) состояния Выполне­ние заказа приостановлено.

11. В поле Event (Событие) введите фразу Добавить к заказу новую позицию.

12. Перейдите на вкладку Detail (Подробно).

13. В поле Guard Condition (Сторожевое Условие) введите Остаются незаполненные позиции.

14. Щелкнув на кнопке ОК, закройте окно спецификации.


Практическая работа 5. Построение диаграммы Активности для варианта использования «Выполнить поставку Заказа».

Побеседовав с Павлом, Антон понял, что необходимо согласовать логику реализации еще одного варианта использования «Выполнить поставку заказа». Стало ясно, что здесь возможны несколько альтернативных потоков управления. Для таких ситуаций более удобно использовать не диаграммы взаимодействия, приспособленные для единственного потока, а диаграмму активности.

Описание варианта использования.

При оформлении заказа проверяют каждую содержащую­ся в нем позицию, чтобы убедиться в наличии соответствующих товаров на складе. После этого выписываются товары для реализации заказа. Во время выполнения этих процедур одновременно проверяется прохож­дение платежа. Если платеж прошел, и товары имеются на складе, то осуществляется их поставка. Если платеж прошел, но товары на складе отсутствуют, то заказ ставится в ожи­дание. Если платеж не прошел, то заказ аннулируется.

Этапы выполнения упражнения.

1. Найдите в браузере вариант использования «Выполнить поставку заказа»

2. Щелкните на классе правой кнопкой мыши и в открывшемся меню укажите пункт New > Activity Diagram (Создать диаграмму активности).

3. Назвите диаграмму «Выполнить поставку» и откройте ее двукратным щелчком мыши

4. На панели инструментов щелкните мышкой на элементе Swimline, затем на поле диаграммы. На диаграмме появится разделительная линия («водная дорожка»).

5. Установите курсор на заголовок NewSwinlane и нажмите правую клавишу мыши. В выпадающем списке нажмите Select in brousere. В браузере выделится этот объект. Нажав правую клавишу мыши в выпадающем списке выберете Open Specefication и откройте спецификацию. Измените поле Name на Клерк. Выберите в поле Class Клерк в магазине.

6. Выполните заново пункты 5-6 и присвойте полю Name Система, Class- Бухгалтерская система.

7. Найдите в браузере сплошной черный кружок (начальное состояние). Перенесите его на дорожку Клерк.

8. Выберете из панели инструментов объект Activity и помемтите его на диаграмму в “дорожку” Клерк. Измените имя объекта на ”Получить заказ”.

9. Повторите предыдущий этап, создайте на «дорожке» Клерк 4 новых Activity и присвойте им имена Проверить позицию заказа, закрепить позицию за заказом, Поставить заказ в ожидание, Скомплектовать заказ

10. Поместите на «дорожку» 2 новых объекта End State (конечное состояние). Одному из них измените поле Name на «Выполнить поставку»

11. На дорожку Система поместите новый объект Activity и присвойте полю NameПроверить платеж”. На эту же дорожку поместите новый объект End State и измените в его спецификации поле Name на «Отменить заказ».

12. Поместить на «дорожку» Клерк 2 объекта Horisontal Sinhronization (горизонтальная синхронизация). Присвойте полю Name спецификации одного объекта «1», другого- «2».

13. Поместить на «дорожку» Клерк объект Dicision (выбор). Через спецификацию присвойте полю Name «Позиция имеется?».

14. Поместить на «дорожку» Система объект Dicision. Присвойте полю Name «Деньги поступили?».

15. Щелкните мышкой на панели инструментов объекте- стрелке State Transition (состояние перехода). Затем щелкните мышкой на диаграмме объекта начальное состояние. Удерживая кнопку мыши перенесите курсор на активность ”Получить заказ” и лишь затем отпустить курсор. В результате два объекта будут соединены стрелкой.

16. Выполните этап 14, соединив стрелкой объект Активность «Получить заказ» с объектом Horisontal Sinhronization 1.

17. Соедините этими же стрелками объекты 1 и «Проверить платеж», 1 и «Проверить позицию заказа», «Проверить заказ» и «Деньги подступили?», «Деньги поступили?» и «Отменить заказ», «Проверить позицию заказа» и «Позиция имеется», «Позиция имеется» и «Закрепить позицию за заказом», «Деньги получены?» и 2, «Закрепить позицию за заказом» и 2, «Позиция имеется?» и «Поставить заказ в ожидание», 2 и «Скомплектовать заказ», «Скомплектовать заказ» и «Выполнить поставку», «Поставить заказ в ожидание» и объект Конечное состояние (без имени).

18. Присвоим некоторым стрелкам наименование полю Event (условие перехода).Для этого, установим курсор на стрелке, соединяющей «Деньги получены?» и «Отменить заказ». Двукратным щелчком мыши откроем окно спецификации. В поле Event введем «Нет».

19. Выполним пункт 18 для стрелки, соединяющей «Деньги получены?» и 2 и присвойте Event «Да». Аналогично для стрелки соединяющей «Позиция имеется?» и «Закрепить позицию за заказом» присвоить Event «Да». Стрелке, соединяющей «Позиция имеется?» и «Поставить заказ в ожидание» - «Нет».

20. Добавим элементарные действия (Actions) к активности “Проверить позицию заказа». Установим курсор на «Проверить позицию заказа» и двукратным щелчком мыши откроем окно спецификации. Откроем закладку Actions. Установим курсор на свободное поле и нажмем правую клавиши мыши. В выпадающем меню нажмем Insert. В появившейся заставке в поле When выберем Entry(на входе в активность), В поле Name введем «Просмотреть спецификацию к заказу». Нажать Ok. Вновь нажмем курсор правой мыши и введем новое действие. Полю When прсвоим Do(промежуток между входом и выходом), а полю Name «Найти новую позицию». При вводе третьей активности полю When присвойте Exit (выход), а полю Name «Передать результаты поиска».

21. Путем перемещения объектов (установить курсор мыши- нажать- тащить- отпустить) привести диаграмму к виду, показанному на рис. 6.

hello_html_m26aec9fa.gif

Рис. 6 Диаграмма активности для варианта использования «Выполнить поставку заказа»


Практическая работа 6. Пакеты и классы

В этом упражнении необходимо сгруппировать в пакеты классы, созданные при выполнении предыду­щих работ. Затем нужно будет построить несколько диаграмм Классов и показать на них клас­сы и пакеты системы.

Создание диаграммы Классов

Объедините обнаруженные классы в пакеты. Создайте диаграмму Классов для отображения пакетов, диаграммы Классов, для представления классов в каждом пакете и диаграмму Классов для пред­ставления всех классов варианта использования "Ввести новый заказ".

Этапы выполнения упражнения

Создание пакетов

1. Щелкните правой кнопкой мыши на Логическом представлении браузера.

2. В открывшемся меню выберите пункт New > Package (Создать >Пакет).

3. Назовите новый пакет Сущности.

4. Повторив шаги 1—3, создайте пакеты Границы и Управление.

Создание Главной диаграммы Классов

1. Дважды щелкнув мышью на Главной диаграмме Классов, находящейся под Логическим представлени­ем браузера, откройте ее.

2. Перетащите пакет Сущности из браузера на диаграмму.

3. Перетащите пакеты Границы и Управление из браузера на диаграмму.

Главная диаграмма Классов должна выглядеть, как показано на рис. 7


hello_html_91a92b5.png


Рис. 7 Главная диаграмма классов в логическом представлении браузера.

Создание диаграммы Классов для сценария "Ввести новый заказ" с отображением всех классов

1. Щелкните правой кнопкой мыши на Логическом представлении браузера.

2. В открывшемся меню выберите пункт New > Class Diagram (Создать > Диаграмма Классов).

3. Назовите новую диаграмму Классов: Ввод нового заказа.

4. Дважды щелкнув мышью на этой диаграмме в браузере, откройте ее.

5. Перетащите из браузера все классы (Выбор_заказа, Заказ_деталей, упр_заказами, Заказ, Упр_транзакциями.

Объединение классов в пакеты

1. В браузере перетащите класс выбор_заказа на пакет Границы.

2. Перетащите класс заказ_деталей на пакет Границы.

3. Перетащите классы Упр_заказами и Упр-транзакциями на пакет Управление.

4. Перетащите класс Заказ на пакет Сущности.

Классы и пакеты в браузере показаны на рис. 9

hello_html_m26c8cd88.png

Рис. 8 Представление пакетов и классов

Добавление диаграмм Классов к каждому пакету

1. В браузере щелкните правой кнопкой мыши на пакете Границы.

2. В открывшемся меню выберите пункт New > Class Diagram (Создать > Диаграмма Классов).

3. Введите имя новой диаграммы Main (Главная).

4. Дважды щелкнув мышью на этой диаграмме, откройте ее.

5. Перетащите на нее из браузера классы выбор_заказа и заказ_деталей.

6. Закройте диаграмму.

В браузере щелкните правой кнопкой мыши на пакете Сущности.

8. В открывшемся меню выберите пункт New > Class Diagram (Создать > Диаграмма Классов).

9. Введите имя новой диаграммы — Main (Главная).

10. Дважды щелкнув мышью на этой диаграмме, откройте ее.

11. Перетащите на нее из браузера класс Заказ.

12. Закройте диаграмму

13. В браузере щелкните правой кнопкой мыши на пакете Управление

14. В открывшемся меню выберите пункт New > Class Diagram (Создать > Диаграмма Классов).

15. Введите имя новой диаграммы — Main (Главная).

16. Дважды щелкнув мышью на этой диаграмме, откройте ее.

17. Перетащите на нее из браузера классы Упр_заказами и Упр_транзакциями

18. Закройте диаграмму



Практическая работа 7. Уточнение методов и свойств классов. Добавление атрибутов

В этом упражнении к описаниям операций будут добавлены детали, включая параметры и типы возвращаемых значений, и определены атрибуты классов

Постановка проблемы

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

Добавление атрибутов и операций

Добавим атрибуты и операции к классам диаграммы Классов "Ввод нового заказа". При этом использу­ем специфические для языка особенности. Установим параметры так, чтобы показывать все атрибу­ты, все операции и их сигнатуры. Применим нотацию UML.

Этапы выполнения упражнения

Настройка

1. В меню модели выберите пункт Тооls > Options (Инструменты >Параметры).

2. Перейдите на вкладку Diagram.

3. Убедитесь, что флажок Show visibility (Показать видимость) установлен.

4. Убедитесь, что флажок Show stereotyps (Показать стереотипы) установлен.

5. Убедитесь, что флажок Show operation signatures (Показать сигнатуры операций) установлен.

6. Убедитесь, что флажки Show all attributes (Показать все атрибуты) и Show all operations (Пока­зать вое операции) установлены.

7. Убедитесь, что флажки Suppress attributes (Подавить атрибуты) и Suppress operations (Подавить операции) сброшены.

8. Перейдите на вкладку Notation (Нотация).

9. Убедитесь, что флажок Visibility as icons (Отображать пиктограммы) сброшен.

Добавление нового класса

1. Найдите в браузере диаграмму Классов варианта использования "Ввести новый заказ".

2. Дважды щелкнув мышью на диаграмме, откройте ее.

3. Нажмите кнопку С1аss панели инструментов.

4. Щелкните мышью внутри диаграммы, чтобы поместить туда новый класс.

5. Назовите его Позиц_заказа.

6. Назначьте этому классу стереотип Entity.

7. В браузере перетащите класс в пакет Сущности.

Добавление атрибутов

1. Щелкните правой кнопкой мыши на классе Заказ.

2. В открывшемся меню выберите пункт New Attribute (Создать атрибут),

3. Введите новый атрибут:

OrderNumber : Integer

4. Нажмите клавишу Enter

5. Введите следующий атрибут:

CustomerName : String.

6. Повторив шаги 4 и 5, добавьте атрибуты:

OrderDate : Date

OrderFillDate : Date

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

7. Щелкните правой кнопкой мыши на классе Позиц_заказа.

8. В открывшемся меню выберите пункт New Attribute (Создать атрибут).

9. Введите новый атрибут:

ItemID : Integer.

10. Нажмите клавишу Enter.

11. Введите следующий атрибут:

ItemDescription : String.

Добавление операций к классу Позиц_заказа

1. Щелкните правой кнопкой мыши на классе Позиц_заказа.

2. В открывшемся меню выберите пункт New Opration (Создать операцию).

3. Введите новую операцию:

Создать()

4. Нажмите клавишу Enter.

5. Введите следующую операцию:

Взять_информацию()

6. Нажмите клавишу Enter.

7. Введите операцию:

Дать_информацию()

Подробное описание операций с помощью диаграммы Классов

1. Щелкнув мышью на классе Заказ, выделите его.

2. Щелкните на этом классе еще раз, чтобы переместить курсор внутрь.

3. Отредактируйте операцию Создать(), чтобы она выглядела следующим образом:

Создать() : Воо1еаn

4. Отредактируйте операцию Взять_информацию:

Взять_информацию (OrderNum : Integer, Customer : String, OrderDate : Date, FillDate : Date) : Boolean

5. Отредактируйте операцию Дать_информацию;

Дать_информацию(): String

Подробное описание операций с помощью браузера

1. Найдите в браузере класс Позиц_заказа.

2. Раскройте этот класс, щелкнув на значке "+" рядом с ним. В браузере появятся атрибуты и операции класса.

3. Дважды щелкнув мышью на операции Дать_информацию() , откройте окно ее спецификации:

4. В раскрывающемся списке Return class (Возвращаемый класс) укажите String.

5. Щелкнув мышью на кнопке ОК, закройте окно спецификации операции.

6. Дважды щелкните в браузере на операции Дать_информацию () класса Позиц_заказа, чтобы открыть окно ее спецификации.

7. В раскрывающемся списке Return class укажите Воо1еаn.

8. Перейдите на вкладку Detail(Подробно).

9. Щелкните правой кнопкой мыши в области аргументов, чтобы добавить туда новый параметр:

10. В открывшемся меню выберите пункт Insert (Вставить). Rose добавит аргумент под названием argname.

11. Щелкнув один раз на этом слове, выделите его и измените имя аргумента на ID.

12. Щелкните на колонке Туре (Тип). В раскрывающемся списке типов выберите Integer (Если этого либо иного необходимого типа не будет- введите его вручную).

13. Щелкните на колонке Default (По умолчанию), чтобы добавить значение аргумента по умолчанию. Вве­дите число 0.

14. Нажав на кнопку ОК, закройте окно спецификации операции.

15. Дважды щелкните на операции Создать() класса Позиц_заказа, чтобы открыть окно ее спецификации.

16. В раскрывающемся списке Return class укажите Воо1еаn.

17. Нажав на кнопку ОК, закройте окно спецификации операции.

Подробное описание операций

1. Используя браузер или диаграмму Классов, введите следующие сигнатуры операций класса Заказ_деталей:

Открыть() : Boolean

Сохранить заказ() : Boolean

2. Используя браузер или диаграмму Классов, введите сигнатуру операций класса Выбор_заказа:

Создать() : Воо1еаn

3. Используя браузер или диаграмму Классов, введите сигнатуру операций класса Упр_заказами:

Сохранить заказ(OrderID : Integer) : Воо1еаn

4. Используя браузер или диаграмму Классов, введите сигнатуры операций класса Упр_транзакциями:

Сохранить заказ(OrderID : Integer) : Boolean

Сохранить информацию() : Integer


Практическая работа 8. Исключение кириллизованного текста в информации классов.

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

Этапы выполнения упражнения.

Этап 1. Используя меню (Файл-> Сохранить как) сохраните данную модель под другим именем (например Заказ1) в той же папке, что и исходная модель.

Работайте далее с копией модели (то есть Заказ1).

Этап 2. Переименуйте классы и их спецификации таким образом, чтобы использовался только латинский шрифт. Замените имя класса

Заказ_деталей на OrderDetail

Выбор_заказа на OrderОptions

Заказ на Order

Упр_заказами на OrderMgr

Позиц_заказа на OrderItem

Упр_транзакциями на TransactionMgr


Измените имена операций таким образом, чтобы рис.10 преобразовался в рис. 11. Для этого, измените операцию класса OrderОptions

Открыть() на Open()

Класса OrderDetail

Открыть() на Open()

Сохранить заказ() на Save()

Класса Order

Ввести номер заказа, заказчика и число заказываемых предметов() на SetInfo()

Сохранить_заказ() на Save()

Класса OrderMgr

Сохранить заказ() на SaveOrder()

Класса TransactionMgr

Сохранить заказ() на SaveOrder()

Сохранить информацию о заказе() на Commit()

Создать_заказ() на SubmitInfo()

Класса OrderItem

Создать() на Create()

Взять_информацию() на GetInfo()

Дать_информацию на SetInfo()

Переименуйте имена пакетов

Границы на Boundaries

Сущности на Entity

Контроль на Control

Добавление стереотипов к классам

1. Щелкните правой кнопкой мыши на классе OrderOptions диаграммы.

2. В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).

3. В поле стереотипа выберите из выпадающего списка слово Boundary (если его нет, то введите).

4. Нажмите на кнопку ОК.

5. Повторив шаги 1—4, свяжите классы OrderDetail со стереотипом Boundary, OrderMgr и TransactionMgr со стереотипом Control, а класс Order и OderItem— со стереотипом Entity.


Теперь диаграмма Классов должна иметь вид, показанный на рис. 11.


hello_html_39b1ad6c.gif

Рис. 11 Основная диаграмма классов

Замечание. На диаграмме рис. 11 возможно визуальное представление классов не в виде иконок, а в виде дополнительной строки текста с именем стереотипа. За этот вид отвечает метка установленная либо на icon либо на label (Class> Open Specefication> Options> Label)

Практическая работа 9. Построение диаграммы компонентов.

В настоящем разделе начинается построение физической модели системы (то есть программной системы).

Этапы выполнения упражнения

Так как эта модель связана с конкретным языком программирования, то в настройках это необходимо отметить. Выполнить Tools>Options>Notations>Default Language и из выпадающего списка языков программирования выбрать Delphi.

Создание пакетов компонентов

1. Щелкните правой кнопкой мыши на представлении компонентов в браузере.

2. В открывшемся меню выберите пункт New > Package (Создать > Пакет}.

3. Назовите пакет Entities (Сущности).

4. Повторив шаги с первого по третий, создайте пакеты Boundaries (Границы) и Control (Управление).

Добавление пакетов на Главную диаграмму Компонентов

1. Откройте Главную диаграмму Компонентов, дважды щелкнув на ней мышью,

2. Перетащите пакеты Entities, Boundary и Control из браузера на Главную диаграмму.

Отображение зависимостей между пакетами

1. Нажмите кнопку Dependency (Зависимость) панели инструментов.

2. Щелкните мышью на пакете Boundary Главной диаграммы Компонентов.

3. Проведите линию зависимости к пакету Control.

4. Повторив шаги 13, проведите зависимость от пакета Control к пакету Entities.

В результате диаграмма примет вид рис. 12

hello_html_75de47d7.gif

Рис. 12 Зависимости между пакетами

Добавление компонентов к пакетам и отображение зависимостей

1. Дважды щелкнув мышью на пакете Entities Главной диаграммы Компонентов, откройте Главную диаграмму Компонентов этого пакета.

2. Нажмите кнопку Package Specification (Спецификация пакета) панели инструментов.

3. Поместите спецификацию пакета на диаграмму.

4. Введите имя спецификации пакета — OrderItem_.

5. Повторив шаги 2—4, добавьте спецификацию пакета Order_.

6. Нажмите кнопку Dependency (Зависимость) панели инструментов.

7. Щелкните мышью на спецификации пакета OrderItem_.

8. Проведите линию зависимости к спецификации пакета OrderItem_.

9. С помощью описанного метода создайте следующие компоненты и зависимости:

Для пакета Boundaries:

Спецификацию пакета Orderоptions_

Спецификацию пакета OrderDetail_

Зависимости в пакете Boundaries:

От спецификации пакета Orderоptions_

к спецификации пакета OrderDetai_l

Для пакета Control:

Спецификацию пакета OrderMgr_

Спецификацию пакета TransactionMgr_

Зависимости в пакете Control:

От спецификации пакета OrderMgr_

к спецификации пакета TransactionMg_

Создание диаграммы Компонентов системы

1. Щелкните правой кнопкой мыши на представлении Компонентов в браузере.

2. В открывшемся меню выберите пункт New > Component Diagram (Создать > Диаграмма Компонентов).

3. Назовите новую диаграмму System.

4. Дважды щелкните на этой диаграмме мышью.

Размещение компонентов на диаграмме Компонентов системы

1. Разверните в браузере пакет компонентов Entities, чтобы открыть его.

2. Щелкните мышью на спецификации пакета Order_ в пакете компонентов Entities.

3. Перетащите эту спецификацию на диаграмму.

4. Повторив шаги 2 и 3, поместите на диаграмму спецификацию пакета OrderItem_.

5. С помощью этого метода поместите на диаграмму следующие компоненты:

Из пакета компонентов Boundaries:

Спецификацию пакета Orderоptions_

Спецификацию пакета OrderDetail_

Из пакета компонентов Control:

Спецификацию пакета OrderMgr_

Спецификацию пакета TransactionMgr_

6. Нажмите кнопку Task Specification (Спецификация задачи) панели инструментов.

7. Поместите на диаграмму спецификацию задачи и назовите ее OrderClientExe.

8. Повторите шаги 6 и 7 для спецификации задачи OrderServerExe.

Добавление оставшихся зависимостей на диаграмму Компонентов системы

Уже существующие зависимости будут автоматически показаны на диаграмме Компонентов системы после добавления туда соответствующих компонентов. Теперь нужно добавить остальные зависимости.

1. Нажмите кнопку Dependency (Зависимость) панели инструментов.

2. Щелкните мышью на спецификации пакета OrderDetail_

3. Проведите линию зависимости к спецификации пакета OrderDetail_

4. Повторив шаги 1 — 3, создайте следующие зависимости:

От спецификации пакета OrderMgr_

к спецификации пакета Order_

От спецификации пакета TransactionMgr_

к спецификации пакета OrderItem_

От спецификации пакета TransactionMgr_

к спецификации пакета Order_

От спецификации задачи OrderClientExe к спецификации пакета Orderоptions_

От спецификации задачи OrderServerExe к спецификации пакета OrderMg_r

Соотнесение классов с компонентами

1. В Логическом представлении браузера найдите класс Order пакета Entities.

2. Перетащите этот класс на спецификацию пакета компонента Order_ в представлении Компонентов брау­зера, В результате класс Order будет соотнесен со спецификацией пакета компонента Order_.

3. Повторив шаги 1 — 2, соотнесите классы со следующими компонентами:

Класс OrderItem со спецификацией пакета OrderItem_

Класс Orderоptions со спецификацией пакета Orderоptions_

Класс OrderDetail со спецификацией пакета OrderDetai_l

Класс OrderMgr со спецификацией пакета OrderMgr_

Класс TransactionMgr со спецификацией пакета TransactionMgr_

В результате в браузере после имени класса, в скобках появятся имена компонентов, с которыми этот класс связан (рис. 13)

hello_html_m5cf73cf1.png


Рис. 13 Представление компонентов и классов в браузере



Практическая работа 10. Кодогенерация проекта в Delphi.

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

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

- протестировать модель на логические непротиворечия;

- настроить (или проверить настройки) среду на законы кодогенерации (соответствие элемента модели Rose элементу кода Delphi);

- создать имя проекта Delphi и выполнить кодогенерацию.

Этапы выполнения упражнения.

1) Протестируйте модель Tools->Ceck Model. Просмотрите log файл на наличие ошибок. Если файл не виден- выполните команду file->Save Log As и введите имя файла (по умолчанию error.log). Затем его просмотрите и, при необходимости, исправьте ошибки. К наиболее распространенным ошибкам относятся такие, как неотображение сообщений на операции или несоотнесение объектов с классами на диаграммах взаимодействия. С помощью пункта меню Check Model можно выявить большую часть неточностей и ошибок в модели.

2) Пункт меню Access Violations позволяет обнаружить нарушения правил доступа, возникающие тогда, когда существует связь между двумя классами разных пакетов. При этом связи между самими пакетами нет. Например, если существует связь между классами Order пакета Entities и OrderManager пакета Control, то обязательно должна существовать и связь между пакетами Entities и Control. Если послед­няя связь не установлена, Rose выявит нарушение правил доступа. Чтобы обнаружить нарушение правил доступа:

Выберите в меню Report > Show Access Violations.

Проанализируйте все нарушения правил доступа.

3) Выполните Tools>Options>Notation>Default Language и из выпадающего списка выберите язык программирования Delphi.

4) Проверьте правильность установок кодогенерации по умолчанию (default). Для этого выполните Tools->Options->Delphi и последовательно переберите из выпадающего списка поля Type все элементы. Сравните установки в поле Model Propities с данными (default) из таблицы Приложения A. В случае несоответствия- исправьте.

5) Выполните Tools> Ensemble Tools>Rose Delphi Link (рис.14)


hello_html_4aec960d.png

Рис. 14. Меню для выбора процесса кодогенерации


В результате появится соответствующая экранная форма. Выполните на этой форме File>New Proect. Появится форма с браузером. Введите имя файла и место на диске, куда будет сохранено имя сгенерированного проекта в Delphi. Например, NewProect.dpr и нажмите Открыть. В результате форма примет вид (рис. 15)


hello_html_m353d49c6.png


Рис. 15. Представление результатов кодогенерации в окне Rose Delphi Link



5. Через проводник Windows найдите папку проекта Delphi. С помощью программы Блокнот просмотрите содержимое всех файлов. В приложении B к руководству приведено содержимое всех файлов проекта.


Практическая работа 11. Тема: Технология создания БД в Дельфи: BDE.


Цели:


  1. Изучить технологию создания БД в Дельфи: BDE.

  2. Изучить алгоритм создания БД в Delphi.

  3. На практическом примере изучить работу утилит BDE Administrator


и Database Desktop.

  1. Развивать внимание и навыки самостоятельной работы.

Ход работы:

    1. Выполнения задания по инструкции

  1. Понятие БД (база данных). Типы БД.

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

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


В зависимости от расположения программы, использующей данные,


  • самих данных, а также способа разделения данных между несколькими пользователями различают локальные и удалённые базы данных.

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

компьютера или сетевой диск (диск другого компьютера, работающего в сети).1


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

Paradox, dBase, FoxPro и Access – это локальные базы данных.2

hello_html_m30381d01.gif

  1. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 507)

  2. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 508)

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


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


Серверная часть программы, работающая на удалённом компьютере, принимает запросы, выполняет их и пересылает данные клиентской программе. Запросы представляют собой команды, представленные на языке SQL (Structured Query Language) – языке структурированных запросов.


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


Транзакция это некоторая последовательность действий, которая должна быть обязательно выполнена над данными перед тем, как они будут переданы. В случае обнаружения ошибки во время выполнения любого из действий вся последовательность действий, составляющая транзакцию, повторяется снова. Таким образом, механизм транзакций обеспечивает защиту от аппаратных сбоев. Он также обеспечивает возможность многопользовательского доступа к данным.3


Interbase, Oracle, Sysbase, Infomix, Microsoft SQL Server – это удалённые базы данных.4


Разработка программы работы с удалённой базы данных – сложная и трудоёмкая задача. Её решение предполагает наличие у разработчика глубоких знаний и большого опыта разработки программного обеспечения. Поэтому в данном курсе задача разработки удалённых баз данных не рассматривается.

2. Алгоритм создания БД


Процесс создания базы данных в Delphi может быть представлен как последовательность следующих шагов:

  1. Создание каталога.


  1. Создание псевдонима.

  2. Создание таблиц.

  3. Разработка приложения, работающего с БД.


hello_html_m30381d01.gif

  1. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 508)

  2. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 507)

1. Создание каталога

Каталог (папка) для файлов базы данных создаётся обычным образом, например, при помощи Проводника. Обычно файлы локальной базы данных помещаются в отдельном каталоге программы работы с базой данных.5

На диске D создайте папку со своей фамилией. Это будет ваша рабочая папка в течение всего этого курса. В этой папке создайте ещё одну папку с именем PR1 (что значит – Практическая работа №1).

2. Создание псевдонима

Разрабатывая программу работы с базой данных, программист не может знать, на каком диске и в каком каталоге будут находиться файлы базы данных во время её исполнения. Например, пользователь может поместить в один из каталогов дисков C:, D: или сетевой диск. Поэтому возникает проблема передачи в программу информации о месте нахождения файлов базы данных.


В Delphi проблема передачи в программу информации о месте нахождения файлов базы данных решается путём использования псевдонима базы данных. Псевдоним (Alias) – это короткое имя, поставленное в соответствие реальному, полному имени каталога базы данных. Например, псевдонимом каталога C:\data\SРeterburg может быть имя Рeterburg. Программа работы с базой данных для доступа к данным использует не реальное имя, а псевдоним.6


Характерной особенностью программ, создаваемых с помощью Delphi и предназначенных для работы с базами данных, является их зависимость от специальной библиотеки программ, которая называется

BDE (Borland Database Engine – машина баз данных корпорации Borland). BDE представляет собой набор библиотек DLL, предназначенных для низкоуровнего доступа к данным самых различных форматов. BDE автоматически устанавливается в процессе установки Delphi и регистрируется в реестре 32-разрядной версии Windows. В BDE имеется собственный интерпретатор языка SQL, что позволяет создавать запросы не только к серверам БД, но и таблицам файл-сервера. Без установки и регистрации BDE на компьютере не может работать ни одна программа БД, созданная в Delphi и использующая механизм BDE.7


Для доступа к информации программа, обеспечивающая работу с базой данных, подключает библиотеку Borland Database Engine (BDE),

hello_html_m30381d01.gif

  1. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 511)

  2. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 510)

  3. Фаронов В.В. Программирование баз данных в Delphi 7. Учебный курс. СПб.: Питер, 2006. – 459 с.: ил. (стр. 20)

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


Псевдоним базы данных создаётся при помощи входящей в Delphi утилиты BDE Administrator, которая запускается из Windows выбором из меню Пуск  Программы  Borland Delphi 7  BDE Administrator.9


Запустите её. Вид диалогового окна BDE Administrator после запуска приведён на рисунке 1.

hello_html_292f1472.jpg





















Рис. 1. Окно BDE Administrator.


В левой части окна, на вкладке Database, перечислены псевдонимы, зарегистрированные на данном компьютере. Создадим новый псевдоним. Для этого из меню Object выберем команду New. В результате откроется диалоговое окно New Database Alias (Новый псевдоним базы данных), где будет предложен список Database Driver Name в котором перечислены зарегистрированные в системе драйверы доступа к базам данных, иными словами тип создаваемой базы данных.


При создании псевдонима по умолчанию предлагается драйвер STANDARD (default driver), который обеспечивает доступ к таблицам в формате Paradox. Мы ничего менять не будем и просто нажмём кнопку


Оhello_html_m108a589a.jpgК. (рис. 2)










Рис. 2. Диалоговое окно New Database Alias

hello_html_m30381d01.gif

  1. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 511)

  2. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 512)

Пhello_html_508fa33.jpgосле выбора драйвера и щелчка на кнопке ОК в список псевдонимов будет добавлен новый элемент (рис. 3).




















Рис. 3. Регистрация нового псевдонима

Изменим автоматически созданное администратором имя STANDARD1 на PR1, а во вкладке Definition укажем путь к папке, где будут храниться файлы нашей БД. Для этого в конце поля PATH щелкаем левой кнопкой мыши по пиктограмме с трёмя точечками – откроется диалоговое окно. Находим на компьютере папку PR1 и щёлкаем по кнопке


Оhello_html_m74cfcff.jpgК (рис. 4).




















Рис. 4. Результат создания псевдонима

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

3. Создание таблицы

Теперь, когда создан каталог и зарегистрирован псевдоним, приступим непосредственно к созданию таблицы. Таблицы создаются при помощи входящей в состав Delphi утилиты Database Desktop.


Утилита Database Desktop позволяет выполнять все необходимые при работе с базами данных действия. Она обеспечивает создание, просмотр и модификацию таблиц баз данных различных форматов (Paradox, dBASE, Microsoft Access). Кроме того, утилита позволяет выполнять выборку информации путем создания запросов.10

Запускается данная утилита из Windows выбором из меню Пуск  Программы  Borland Delphi 7  Database Desktop. Запустим её.

Затем в появившемся окне утилиты Database Desktop надо из меню File выбрать команду New и в появившемся списке выбрать тип создаваемого файла – Table (рис. 5). Затем в открывшемся диалоговом окне Create Table (рис. 6) следует выбрать тип создаваемой таблицы (значением по умолчанию является тип Paradox 711 – его мы и оставим, нажав кнопку

Оhello_html_5fd7d8a.jpgК).





















Рhello_html_6e9cef91.jpgис. 5. Диалоговое окно Database Desktop











Рис. 6. Выбор типа таблицы

hello_html_m30381d01.gif


  1. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 515)

  2. Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2003. – 608 с.: ил. (стр. 516)

В результате открывается диалоговое окно Create Paradox 7 Table (рис. 7), в котором можно определить структуру записей таблицы.

hello_html_m368ee45e.jpg





















Рис. 7. Диалоговое окно Create Paradox 7 Table

Сегодня мы создадим с вами однотабличную БД «Записная книжка», таблица которой будет содержать следующие поля:

Тhello_html_1c57d4b0.jpgаблица 1. Поля записей базы данных «Записная книжка»















Для каждого поля создаваемой таблицы, прежде всего указывается имя (FieldName) – идентификатор поля. Идентификатор может включать до 25 символов и не может начинаться с пробела (формально для таблицы Paradox внутри пробелы допускаются, но я не советую их использовать – это вызовет немало проблем). Затем надо выбрать тип (Type) данных этого поля. Для этого перейдите в раздел Type поля и щёлкните правой кнопкоймыши (или нажмите пробел). Появится список доступных типов, из которого вы можете выбрать необходимый вам.12

В диалоговом окно Create Paradox 7 Table создадим необходимые поля в соответствии с таблицей 1 (см. рис. 8).











hello_html_179f1423.jpg














Рис. 8. Создание полей таблицы


Теперь нам необходимо сохранить нашу таблицу. Нажимаем кнопку Save As… в открывшемся диалоговом окне Save Table As в поле Имя файла пишем имя таблицы записная_книжка, в поле Тип файла всё оставляем без изменения, а в поле Alias из выпадающего списка выбираем псевдоним PR1, ставим галочку в пункте Display table и нажимаем кнопку


Сохранить. (см. рис. 9).

hello_html_7781c3e8.jpg
























Рис. 9. Окно сохранения таблицы

hello_html_m30381d01.gif


12 А.Я Архангельский. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi. – М.:


ООО «Бином-Пресс», 2007 г. – 1248 с.: ил. (стр. 710).

Таблица создана! Теперь мы можем вносить в неё данные. Для этого щёлкните по пиктограмме hello_html_2d464f15.jpg и внесите в таблицу 5 записей (рис. 10).

hello_html_m37ad5bbe.jpg

























Рис. 10. Записи таблицы БД «Записная книжка»


После того, как все записи внесены. Утилиту можно закрыть. Все изменения в таблице будут сохранены автоматически.


4. Разработка приложения, работающего с БД.


Теперь создадим непосредственно приложение, которое будет работать с нашей БД. Запускаем Delphi. Размещаем на форме следующие компоненты (см. Таблица 2) и настраиваем их свойства


Имя компонента

Вкладка

Свойства компонента


Table

BDE

DatabaseName – PR1




TableName



записная_книжка.db




Active – True


DataSource

Data Access

DataSet – Table1


DBGrid

Data Controls

DataSource – DataSource1



Сохраняем проект и запускаем приложение на исполнение. Если вы всё правильно сделали, то должны получить вот такое окно (рис. 11):

hello_html_62a87da5.gif

















Рис. 11. Готовое приложение БД «Записная книжка»


      1. Контрольные вопросы


  1. Какие бывают БД? Охарактеризуйте каждый вид. Приведите примеры.

  2. Что такое транзакция?

  3. Для чего предназначен BDE?

  4. Для чего предназначены утилиты BDE Administrator и Database Desktop?


  1. Как загрузить утилиты BDE Administrator и Database Desktop?

  2. Что такое псевдоним БД?

  3. Как создать псевдоним БД?

  4. Перечислите основные пункты алгоритма создания БД в Delphi.

III. Самостоятельная работа


Задание: Напишите программу работы с базой данных «Ежедневник», каждая запись которой содержит информацию о запланированном мероприятии.


Таблица 2. Поля записей базы данных «Ежедневник»

hello_html_m515cc7c8.jpg








Практическая работа 12. Тема: Компоненты баз данных.

Цели:


1.Изучить основные компоненты баз данных в Delphi;

2.На практическом примере научиться создавать приложение, которое позволяет просматривать содержимое БД в режиме формы;

3.Развивать навыки работы со справочной литературой и умение находить необходимую информацию.

Ход работы:

  1. Тhello_html_m4431ab2a.jpgеоретическая часть

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


На прошлом занятии вы при создании приложения, работающего с БД, использовали три компонента Table (вкладка BDE), DataSource (Data Access), DBGrid (Data Controls). Давайте же сегодня изучим, для чего они нужны.

Сначала, поговорим о вкладках, на которых они располагаются:

BDE содержит компоненты для создания приложений, использующих BDE;


Data Access это вкладка, содержащая невизуальные компоненты, предназначенные для организации доступа к данным;


D

Рис.1.Структура приложения БД использующего BDE

ata Controls на ней располагаются визуальные компоненты для отображения данных.

Компоненты для работы с базами данных можно разделить на три группы:


  1. множества данных (data sets);


  1. визуальные компоненты баз данных (dataaware controls)


  1. источники данных (data sources).

Множества данных это невизуальные компоненты, которые взаимодействуют с BDE и обеспечивают доступ к данным в таблицах. Наиболее важные из них – компоненты Table и Query.

Визуальные компоненты баз данных это управляющие элементы пользовательского интерфейса для просмотра и редактирования данных. Многие из них дублируют обычные управляющие компоненты: DBGrid, DBEdit, DBCheckBox, DBRadioGroup, DBImage и др.

Источники данных это невизуальные компоненты, исполняющие роль трубопроводов между множествами данных и визуальными компонентами баз данных. Используя введённые понятия, можно уточнить структуру приложения, осуществляющего доступ к данным через BDE (DataSource) (рис. 1).



Компонент Table


Компонент Table (табл. 1) обеспечивает доступ к таблицам базы данных, создавая набор данных, структура полей которого повторяет таблицу БД. Набором данных называют записи одной или нескольких таблиц, переданные в приложение в результате активизации компонента доступа к данным.3


hello_html_m6162e896.jpg



















































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

Компонент DataSource


Компонент DataSource (табл. 2) обеспечивает взаимодействие набора данных с компонентами для отображения данных. С каждым компонентом доступа к данным должен быть связан как минимум один компонент DataSource. С одним компонентом DataSource может быть связано несколько визуальных компонентов.5





hello_html_6dbb3413.jpg



















Компонент DBGrid


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


Для перемещения по записям используются полосы прокрутки и клавиши управления курсором. Для изменения данных достаточно установить курсор в нужную ячейку и ввести другое значение. Новая пустая строка создаётся в позиции указателя нажатием на клавишу Insert. Чтобы изменения, сделанные при редактировании и добавлении записи, были внесены в таблицу, необходимо на жать на клавишу Enter или перейти на другую строку. До того как данные были переданы в таблицу, можно клавишей Esc отменить изменения. Для удаления записи используется комбинация клавиш Ctrl+Delete.7

hello_html_m30381d01.gif

  1. Шейкер, Т.Д. Разработка приложений баз данных в системе DELPHI: учеб. пособие / Т.Д. Шейкер. – Владивосток:


Изд-во ДВГТУ, 2009. – 138 с. (стр. 13)

  1. Шейкер, Т.Д. Разработка приложений баз данных в системе DELPHI: учеб. пособие / Т.Д. Шейкер. – Владивосток:


Изд-во ДВГТУ, 2009. – 138 с. (стр. 13)

  1. Шейкер, Т.Д. Разработка приложений баз данных в системе DELPHI: учеб. пособие / Т.Д. Шейкер. – Владивосток:


Изд-во ДВГТУ, 2009. – 138 с. (стр. 21)

  1. Шейкер, Т.Д. Разработка приложений баз данных в системе DELPHI: учеб. пособие / Т.Д. Шейкер. – Владивосток:


Изд-во ДВГТУ, 2009. – 138 с. (стр. 22)



Тhello_html_m4f80f020.jpgаблица 3

























Сегодня мы познакомимся ещё с несколькими основными визуальными компонентами баз данных. Рассмотрим их работу на практическом примере.


II. Выполнение задания по инструкции


Создадим однотабличную БД «Семья».


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

Создание каталога и псевдонима.

1Создайте в своей рабочей папке папку «Семья».


2Откройте утилиту BDE Administrator, создайте псевдоним Familiy, укажите путь к только что созданной папке «Семья».

Создание таблицы.

  1. Откройте утилиту Database Desktop.

  2. Создайте таблицу со следующими полями.



Field Name

Type

Size

Key

1

Семья

Alpha (A)

15


2

Фамилия

Alpha (A)

15


3

Имя

Alpha (A)

15


4

Отчество

Alpha (A)

15


5

Возраст

Long Integer



6

Фотография

Graphic (G)




3. Сохраните таблицу под именем Familiy.db в папку «Семья».

4. Заполните таблицу следующими данными.


















Семья

Фамилия

Имя

Отчество

Возраст

Фотография











Папа

Пупкин

Фёдор

Вениаминович

45











Мама

Пупкина

Федора

Поликарповна

42











Сын

Пупкин

Василий

Фёдорович

16











Старшая дочь

Пупкина

Дульсинея

Фёдоровна

20











Младшая дочь

Пупкина

Дарья

Фёдоровна

1












Создание формы.


1Запустите Delphi 7.


2hello_html_c2c635f.jpgНа форме разместите компоненты, как показано на рисунке.


















3Настройте компоненты формы согласно следующим указаниям

Компонент Table1

DataField – Имя


DatabaseName – Familiy

Компонент DBText4


TableName – Familiy.db


Active – True

DataSource - DataSource1


Компонент DataSource1

DataField – Отчество


Компонент DBText5


DataSet - Table1


Компонент DBText1

DataSource - DataSource1


DataField – Возраст


DataSource - DataSource1

Компонент DBImage1


DataField – Семья


Компонент DBText2

DataSource - DataSource1


DataField – Фотография


DataSource - DataSource1

Stretch – True


DataField – Фамилия

Компонент DBNavigator1


Компонент DBText3


DataSource - DataSource1


DataSource - DataSource1




4. Сохраните проект. Запустите программу на исполнение.


Все данные отобразились, кроме фотографий членов семьи.

Вставка изображений в БД.

  1. Запустите программу на исполнение.

  2. Откройте изображение Папа.gif в графическом редакторе Paint (см. в папке «Приложение к ПР_2»).

  3. Выберите пункт в меню Правка --> Выделить всё.

  4. Далее нажмите сочетание клавиш Ctr+С.

  5. Теперь перейдите на окно работающего приложения и щёлкните в компоненте


DBImage1 мышкой.

  1. Далее нажмите сочетание клавиш Ctr+V. Теперь картинка вставилась в поле для изображения.

  2. Аналогично добавьте остальные изображения в БД.


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



Практическая работа 13. Тема: Компоненты синхронного просмотра.

Цели:


1Изучить компоненты синхронного просмотра;

2На практическом примере научиться создавать многотабличные БД;

3Развивать навыки самостоятельной работы.


Ход работы:

I. Теоретическая часть

Специально для отображения связанной информации в БД, имеются 2 компонента, предназначенных именно для этих целей. Это компоненты DBLookupComboBox и DBLookupListBox. Оба они, хотя визуально и похожи на комбинированный и обычный списки, на самом деле, не являются потомками ни стандартных, ни БД-ориентированных компонентов, а происходят от общего для них класса TDBLookupControl, инкапсулирующего как список значений для просмотра, так и его механизм.


Фактически, здесь следует запомнить лишь следующее: то, что отображается в самом компоненте синхронного просмотра (в обычном или в ниспадающем списке), задается парой значений для ListSource и ListField, а то, на основании чего происходит выборка текущего значения – в DataSource и DataField.

II. Выполнение задания по инструкции

Связывание данных в таблицах

Важной особенностью работы с БД является связывание данных в таблицах. И хотя такое связывание осуществляется невизуальным компонентом Table, наглядно продемонстрировать связывание можно лишь с использованием компонентов, отображающих данные таблиц, т.е. с использованием, например, компонента DBGrid.

Очевидно, что для связывания данных между таблицами нам нужно иметь более одной таблицы. Рассмотрим технологию создания многотабличной БД на примере базы данных «Знаки Зодиака».

  1. На диске D: в своей рабочей папке создайте новую папку с именем Знаки Зодиака.

  2. Откройте утилиту BDE Administrator и создайте псеводим к этой папке под названием


Goroskop.

  1. Откройте утилиту Database Desktop и создайте две таблицы:




Оhello_html_52903560.jpgбратите внимание, что при создании таблиц, в обоих случаях поле Data должно быть ключевым.

Первую таблицу назвать 1.db























Второй талице дать имя 2.db


Информацию для заполнения таблиц смотрите в папке


Приложение к ПР_3


в документе Знаки_Зодиака.doc












hello_html_42433eb6.jpg























4. Теперь откройте Delphi и разместите на форме следующие компоненты:


Для таблицы 1.db


Table1


DataSource1


DBLookupComboBox1 (находится на вкладке Data Controls)


Для таблицы 2.db


Table2


DataSource2

DBEdit1


DBMemo1

DBImage1


5. Настройте свойства компонентов в указанном порядке


Table1.DatabaseMame – Goroskop


Table1.TableName – 1.db

DataSource1.DataSet - Table1


Table2.DatabaseMame – Goroskop

Table2.TableName – 2.db


DataSource2.DataSet – Table2

Table2.MasterSourse – DataSource1


(hello_html_54dfa27b.jpg!) Table2.MasterFields – Data – чтобы установить данное свойство нужно напротив свойства MasterFields для компонента Table2 щёлкнуть по кнопке.



























В появившемся окне выбрать во вкладке Available Index значение Primary. В полях DetailFields и Master Fields выбрать Data и нажать кнопку Add. Далее Ок. Так вы свяжите две таблицы 1.db и 2.db.

hello_html_m1899dd2.jpg





Data Data


Znaki













Настраиваем оставшиеся компоненты: DBEdit1.DataSource – DataSource2 DBEdit1.DataField – Znak DBMemo1. DataSource –DataSource2 DBMemo1.DataField – Harakterist DBImage1. DataSource – DataSource2 DBImage1.DataField – Image


Новый компонент, с которым вы сегодня познакомитесь DBLookupComboBox1. Установим для него свойства:


DBLookupComboBox1.ListSource – DataSource1

DBLookupComboBox1.ListFieldsData

DBLookupComboBox1.KeyFieldsData


ListField что именно необходимо отображать в списке;


Khello_html_7e5dfc9c.jpgeyField ключевое поле.

















Рис. 1. Окно рабочего приложения «Знаки Зодиака»


III. Самостоятельная работа

Задание: Напишите программу работы с локальной базой данных «Архитектурные памятники Курска» (рис. 2). Для создания базы данных используйте утилиту Database Desktop, для создания псевдонима – BDE Administrator. Характеристики полей записей базы данных приведены в таблице 1, сами записи в таблице 2, форма программы


на рис. 3.1 Иллюстрации для БД смотрите в папке Приложение для ПР_3 в папке «Архитектурные памятники Курска».





Таблица 1. Поля записей базы данных




«Архитектурные памятники Курска»







Поле

Тип

Размер


Информация


Monument

Alpha (A)

60


Название памятника


Architect

Alpha (A)

40


Архитектор


Note

Alpha (A)

255


Краткая историческая справка


Photo

Graphik (G)



Иллюстрация


hello_html_m764c1b3a.jpg


















Рhello_html_m61e7617c.jpgис. 2. Окно программы работы с базой данных «Архитектурные памятники Курска»


















Рис. 3. Форма программы работы с базой данных «Архитектурные памятники Курска»

hello_html_m30381d01.gif

1 Культин Н.Б. Delphi в задачах и примерах. – СПб.: БХВ-Петербург, 2003. – 288 с.: ил. (стр. 216)


Таблица 2. Записи базы данных «Архитектурные памятники Курска»


Памятник

Архитектор

Историческая справка


Иллюстрация

мемориал Курская дуга


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







Антоновка

Огюст Монферран

Памятник победы Росси над войсками

aleks.jpg



Наполеона в отечественной войне 1812




года. Открыта 30 августа 1834 года.




Высота: 47, 5 метра; вес гранитного




ствола: 600 тонн.



Зимний дворец

Ф.Б. Растрелли

Зимний дворец много раз менял свой

herm.jpg



облик. Последний раз он перестраивался




по проекту Растрелли. Строительство




дворца продолжалось более семи лет




(1754-1762 годы).



Исаакиевский собор

Огюст Монферран

Исаакиевский собор, четвёртый по счёту,

isaak.jpg



стали возводить в 1818 году. Строился




собор 40 лет и был окончен в 1858 году.




Автор проекта – Огюст Монферран.


Ростральные колонны

Тома де Томон

32-метровые

ростральные

колонны,

rostr.jpg



органично вошедшие в архитектурный




ансамбль Стрелки Васильевского острова,




были сооружены в 1810 году. Они




напоминают о древнем Риме: обычае




украшать

триумфальные

колонны




рострами захваченных кораблей.





Практическая работа 14. Тема: Редактор колонок: работа с сеткой DBGrid.

Цели:


1.изучить различные способы работы с сеткой DBGrid;


2.на практическом примере научиться выводить текст различным цветом, добавлять в ячейки выпадающие списки;

3.развивать умение разрешать проблемы в профессиональной деятельности;

4.воспитывать усидчивость.


ХОД РАБОТЫ


I. Изучение теоретической части и выполнение задания по инструкции


На первой практической работе, для вывода на экран информации из наборов данных в виде таблицы вы применяли компонент DBGrid. Однако этот компонент способен на большее. Профессиональные программы отличаются большим набором дополнительных возможностей для пользователя. В этой практической мы и поговорим о дополнительных возможностях сетки DBGrid.


Как вы уже знаете, строки сетки DBGrid соответствуют записям подключенного набора данных, а столбцы - полям. Свойство DataSource содержит ссылку на выбранный набор данных. Изменяя эту ссылку во время работы программы, можно изменять выводимые в сетке данные, отображая то одну, то другую таблицу в одной сетке DBGrid.


Столбцы DBGrid


Столбцы содержат значения полей подключенного к сетке набора данных. Этими значениями можно манипулировать, показывая или скрывая поля набора данных, меняя их местами или добавляя новые столбцы. Однако, это не всегда оправдано - один набор данных может использоваться в различных местах приложения, в различных формах и на различных сетках. Изменение свойств полей набора данных в этом случае коснется и всех сеток DBGrid, которые подключены к нему, а это требуется далеко не всегда. Более разумным вариантом будет добавление всех полей в редактор полей набора данных, а изменение их свойств можно сделать в каждой сетке по-своему.


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


Создадим новую базу данных «Сотрудники».


На диске D: создайте в своей рабочей папке новую папку с именем Практическая работа №4.


Откройте BDE Administrator и создайте к вновь созданному каталогу псевдоним Sotrudniki.


Откройте Database Desktop и создайте таблицу Spisok.db со следующими полями:


Имя поля

Тип поля

Размер поля

Информация

FIO

Alpha (A)

35

ФИО

Data

Data (D)


Дата рождения

Obrazovanie

Alpha (A)

25

Образование


Сохраните таблицу в папку Практическая работа №4 и занесите в таблицу следующие записи:





FIO

Data

Obrazovanie



1

Иванов Иван Иванович

10.10.1960

Высшее



2

Петров Пётр Петрович

10.05.1972

Среднее техническое



3

Синичкина Елена Герасимова

11.12.1986

Неполное высшее



4

Васечкин Василий Васильевич

15.12.1982

Техническое



5

Козлов Валерий Иванович

05.12.1970

Среднее техническое

Откройте Delphi и разместите на форме компоненты:



1

Table1




2

DataSource1



3

DBGrid1




4

DBNavigator1




Настройте для компонентов следующие свойства:

Table1


DatabaseName – Sotrudniki

TableName - Spisok.DB

Active – True

DataSource1


DataSet - Table1

DBGrid1


DataSource - DataSource1


DBNavigator1


DataSource - DataSource1


Еhello_html_51ee2d78.jpgсли вы всё сделали правильно, то должны получить вот такое приложение (рис. 1):














Рис. 1. Приложение БД «Сотрудники»


Но, допустим, в нашем проекте нам нужны не все поля таблицы, а только некоторые из них (например, только FIO и Obrazovanie). Значит, придется поработать с редактором столбцов сетки DBGrid. Вызвать редактор можно тремя способами: дважды щелкнуть по сетке; щелкнуть правой кнопкой по сетке и в контекстном меню выбрать команду ColumnsEditor и, наконец, щелкнув дважды по свойству сетки Columns в Инспекторе Объектов (рис. 2):

hello_html_626c9c16.jpg















Рис. 2 . Редактор столбцов сетки DBGrid


Если щёлкнуть в нём правой кнопкой мыши, то появится контекстное меню:

hello_html_70232e29.jpg

















  1. Add New (Добавить новый столбец).


  1. Delete Selected (Удалить выделенный столбец).

  2. Add All Fields (Добавить все столбцы из набора данных).


  1. Restore Defaults (Восстановить значения по умолчанию для выделенного столбца).


Вhello_html_52b58859.jpgыберите пункт Add All Fields (Добавить все столбцы из набора данных). В результате все поля таблицы отобразятся в редакторе колонок.
















Выберите поле Data и в инспекторе объектов установите свойство Visible (данное свойство разрешает или запрещает отображение столбца) в положение False.


Обратите внимание на сетку BDGrid – поле Data исчезло. Из таблицы оно не удалилось, просто вы сделали его невидимым пользователю.


В нашей БД имена выводятся латиницей, а это не удобно для пользователя. Изменить параметры заголовка столбца можно в раскрывающемся свойстве:

hello_html_13f6cea8.jpg
















Для этого, выделите в редакторе полей поле FIO. В инспекторе объектов найдите свойство Title и нажмите на знак плюса рядом с этим свойством. Откроется список. Найдите в нём свойство Caption и поменяйте значение FIO на ФИО. Точно таким же способом переименуйте поле Obrazovanie на Образование.


Пhello_html_7d57888b.jpgосмотрите на заголовки таблицы.










Также свойство Title имеет ряд других свойств:


Alignment - свойство устанавливает выравнивание заголовка и может быть taCenter (по центру), taLeftJustify (по левому краю) и taRightJustify (по правому краю). По умолчанию, заголовок выровнен по левому краю.


Caption - свойство содержит текст, который отображается в заголовке столбца. Если поле НД имеет имя латинскими буквами, именно здесь можно отобразить его кириллицей.


Color - цвет заголовка, по умолчанию это свойство равно clBtnFace, что обеспечивает стандартный серый цвет. Если вы желаете украсить программу, можете выбрать другой цвет.


Font - шрифт заголовка. Если дважды щелкнуть по этому свойству, откроется диалоговое окно, в котором можно изменить шрифт, начертание, размер и цвет шрифта. То же самое можно сделать, если раскрыть это свойство и непосредственно изменять нужные свойства.


Надо заметить, что свойства Font, Alignment и Color внутри свойства Title меняют шрифт, выравнивание и цвет фона только заголовка столбца, а не его содержимого. Но у столбца имеются эти же свойства, они меняют шрифт, выравнивание и цвет фона выводимых в столбце данных.


Обратите внимание, что перетаскивая мышью столбцы в редакторе столбцов, вы можете менять их порядок в сетке. Пользователь же имеет возможность менять их порядок, перетаскивая мышью заголовки столбцов.


У сетки DBGrid имеется свойство Columns, которое содержит столбцы. Щелчок по этому свойству как раз и откроет редактор столбцов сетки. Столбцы хранятся в свойстве Items в виде массива и имеют индексы от 0

до DBGrid1.Columns.Items.Count-1. Заметим, что свойство Items используется по умолчанию, и его можно не указывать:

DBGrid1.Columns[0] = DBGrid1.Columns.Items[0]

Шрифт и цвет можно менять не только в Инспекторе объектов, но и программно. Добавим на форму две кнопки, на которых напишем "Шрифт" и "Цвет". А также два диалога: FontDialog и ColorDialog. Создадим процедуру нажатия на первую кнопку и впишем в нее следующее:

hello_html_60f1bcb0.jpg













Зhello_html_m245a1f94.jpgдесь вначале мы свойству Font диалога FontDialog присвоили тот же шрифт, который был в текущем столбце сетки. Затем вызвали выбор диалога, и если пользователь выбрал другой шрифт (название, начертание, размер, цвет шрифта), то изменяем шрифт всего столбца на выбранный пользователем. Аналогичным образом меняем и цвет столбца. Создайте процедуру обработки второй кнопки, и впишите код:










Сохраните проект, скомпилируйте его и проверьте работу кнопок. И шрифт, и цвет текущего столбца будут меняться.


Следует заметить, что таким образом можно менять параметры не только содержимого текущего столбца, но и его заголовка, если, например, вместо DBGrid1.Columns.Items[DBGrid1.SelectedIndex].Color

использовать

DBGrid1.Columns.Items[DBGrid1.SelectedIndex].Title.Color


А если применить цикл, то можно изменить параметры всех столбцов:

for i:= 0 to DBGrid1.Columns.Count-1 do

DBGrid1.Columns.Items[i].Color :=

Пустые столбцы

Если добавить в редактор столбцов сетки DBGrid новый столбец, но в свойстве FieldName не выбирать поле БД, а оставить его пустым, мы получим пустой столбец. Для чего нужны пустые столбцы в сетке? Во-первых, в них можно выводить обработанные данные из других столбцов. Во-вторых, пустое поле может выводить информацию по требованию. Данный раздел мы разберём чуть позже, в отдельной практической работе.

Список выбора в столбце


Для организации списков выбора служит компонент ComboBox. Однако сетка DBGrid позволяет устроить такой же список в одном из своих столбцов без использования каких-либо других компонентов.

Для примера отредактируем поле "Образование". Откройте редактор столбцов сетки и выделите столбец "Образование". Обратите внимание на свойство PickList в Инспекторе объектов. Это свойство имеет тип TStrings, то есть представляет собой набор строк, так же как и свойство Items у компонента ComboBox. Щелкните дважды по PickList, чтобы открыть редактор, и впишите туда

Высшее Среднее техническое


Неполное высшее Техническое

иhello_html_6c131bd3.jpgменно так, каждое значение на своей строке. Сохраните проект, скомпилируйте его и попробуйте редактировать этот столбец. При попытке редактирования в ячейке покажется похожий на ComboBox список, в котором можно будет выбрать одно из указанных значений:











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


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


DBGrid1.Columns.Items[1].PickList.Add('Средне-специальное');

      1. Контрольные вопросы

1.С каким компонентом работает Редактор колонок?


2.Для чего используется Редактор колонок?


3.Как открыть Редактор колонок?


    1. Задание для самостоятельной работы

Создайте БД «Список группы».


Имя поля

Информация

FIO

ФИО

Data

Дата рождения

Language

Изучаемый язык


  • Подумайте, какого типа и размера должно быть каждое поле. (см. таблицу «Типы данных таблицы Paradox»)


  • БД должна содержать не менее 5 записей.

  • Данные в приложении должны отображаться в режиме таблицы.


  • Имена столбцов должны быть на кириллице.

  • Поле «Изучаемый язык» должно представлять собой выпадающий список со следующим содержанием:


    • английский

    • немецкий


    • французский

    • испанский












Таблица «Типы данных таблицы Paradox»

hello_html_m107e2219.jpg
















Практическая работа 15. Тема: Перемещение по записям набора данных. Доступ к полям.

Цели:


  1. Изучить объекты доступа к полям;

.

  1. На практических примерах изучить методы перемещения по записям НД;

  2. Развивать логическое мышление.

Ход работы:

Практическое задание №1


Создайте в своей рабочей папке новую папку под именем «Товар». Пропишите к ней псевдоним «Tovar». Создайте таблицу «Tovar.db» со следующими полями:


Field Name

Type

Size




Tovar

A

20

Kod

I


DataVipusk

D


SrokGodnos

D


Kolvo

I


Cena

$



Внесите в таблицу следующие записи:

hello_html_m4cc46f44.jpg


















Откройте Delphi. Разместите на форме следующие компоненты и настройте их свойства:


Компонент

Свойство



DataBaseName – Tovar


Table1

TableName – Tovar.db



Active - True


DataSource1

DataSet – Table1




DBGrid1

DataSource – DataSource1




DBNavigator1

DataSource – DataSource1




hello_html_m74c889e8.jpghello_html_3c035c44.jpg


перемещение по записям набора данных


Перемещение по НД заключается в управлении указателем текущей записи (курсором). Этот указатель определяет запись, с которой будут выполняться какие-либо операции.

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

Процедура First – установка курсора на первую запись НД;

Процедура Next – на следующую запись;


Процедура Last – на последнюю запись;

Процедура Prior – на предыдущую запись;


Функция MoveBy (n:integer): integer – перемещение на число запсией, указанных в параметре n n>0 – перемещение вперед;

n<0 – назад;


n=0 – нет перемещения. Результат функции – число записей, на которое переместился указатель.


Практическое задание №2


Пhello_html_169fd9b2.jpgеремещение по записям НД с помощью кнопок. Расположить на форме следующие компоненты:


















Компонент SpinEdit (п. к. Samples) – редактор числа, обеспечивающий отображение и редактирование целого числа с возможностью его изменения с помощью двойной кнопки.


Для компонента Label1 в свойстве Caption оставьте пустую строку.


При помощи рассмотренных методов напишите процедуру для кнопки «Первая запись»:


procedure TForm1.Button1Click (Sender: TObject);

begin


Table1.First;

end;


Процедуры для кнопок «Следующая запись», «Предыдущая запись», «Последняя запись» напишите самостоятельно.


Для перемещения указателя на произвольное число записей используется счетчик SpinEdit1, в поле которого вводится это число. Для кнопки «Перемещение на…записей» напишите процедуру:


procedure TForm1.Button5Click (Sender: TObject);

begin


Table1.MoveBy (SpinEdit1.Value);

end;

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


procedure TForm1.Table1AfterScroll (DataSet: TDataSet);

begin


label1.Caption:='Запись номер '+IntToStr(Table1.RecNo);

SpinEdit1.MinValue:= 1-Table1.RecNo;

SpinEdit1.MaxValue:= Table1.RecordCount-Table1.RecNo;

end;


Доступ к полям


Каждое поле НД представляет собой отдельный столбец, для работы с которым в Delphi служат:


объект Field: TField;

объекты :TIntegerField,: TFloatField, TStringField (производные от TField).

Объекты типа TField являются невизуальными и служат для доступа к данным соответствующих полей записей. Управляя объектами типа TField, можно управлять поведением полей, при этом все объекты полей являются независимыми друг от друга. Например, можно запретить модификацию значения отдельного поля, несмотря на то, что НД в целом является модифицируемым и допускает изменение значений других полей. Кроме того, можно скрыть то или иное поле от пользователя, сделав его невидимым.


Для доступа к объектам TField и, соответственно, к полям записей НД имеет соответствующие методы и свойства.


Свойство FieldCount: nteger указывает количество полей НД. Количество полей НД может отличаться от физического числа полей таблицы БД, поскольку в НД не обязательно включаются все поля таблицы.


Свойство Fields[Index:Integer]: TField – возвращает содержимое указанного в параметре Index поля НД.

К отдельному полю можно обратиться, указав его номер Index в массиве Fields. Номера полей изменяются от 0 до FieldCount-1.


Пример.


Edit1.Text:=Table1.Fields[5].AsString; – в компонент Edit1 появится та информация, которая находится в шестом поле НД.


Свойства объекта Field – AsString, AsInteger, AsFloat, AsBoolean позволяют обращаться к значению поля текущей записи как к строковому, целочисленному, вещественному или логическому значению.


Чтобы обращаться к какому-либо полю НД не по его номеру в массиве полей, а по его имени существуют методы FindField и FieldByName.

Функция FindField (const FieldName : String) : TField возвращает для НД поле, имя которого указано в параметре FieldName. Имя поля, определяемое параметром FieldName, является именем физического поля таблицы БД, заданным при создании таблицы. Если заданное параметром FieldName поле не найдено, то функция FindField возвращает значение Nil. На практике часто используется метод FieldByName, который отличается от метода FindField тем, что если заданное поле не найдено, то генерируется исключительная ситуация.


Свойство Fields и методы FindField и FieldByName наиболее часто используются для доступа к значению поля текущей записи совместно с такими свойствами объекта Field, как AsString, AsInteger, AsFloat или AsBoolean, которые соответственно позволяют обращаться к значению поля как строковому, целочисленному, вещественному или логическому значению.


Практическое задание №3


Выведем на экран общую сумму количества товара (поле Kolvo), общую стоимость каждой единицы товара (поле Cena) и общую стоимость товара (для текущей записи) для таблицы Tovar.db.


Расположите на форме следующие компоненты:

hello_html_m60306d6e.jpg

















Для кнопок напишите соответствующие процедуры:


procedure TForm1.BitBtn1Click(Sender: TObject);

var s:integer;

i:longint;


begin

s:=0;

table1.First;

for i:=1 to table1.RecordCount do begin


s:=s+table1.fieldbyname('kolvo').asinteger; table1.Next;


end;

label1.Caption:=inttostr(s);

end;



procedure TForm1.BitBtn2Click(Sender: TObject); var s:real;

i:longint; begin


s:=0;

table1.First;


for i:=1 to table1.RecordCount do begin


s:=s+table1.fieldbyname('cena').asfloat; table1.Next;


end;

label2.Caption:=floattostr(s);

end;


procedure TForm1.BitBtn3Click(Sender: TObject); var s:real;

begin

s:=table1.fieldbyname('kolvo').asfloat*table1.fieldbyname('cena').asfloat; label3.Caption:=floattostr(s);


end;


Практическое задание №4


Вhello_html_418d2313.jpgывести в компонент ListBox1 содержимое всех полей текущей записи (начиная с первого). Расположите на форме компоненты в соответствии с рисунком:













Напишите обработчик события OnClick для кнопки:


procedure TForm1.Button1Click (Sender: TObject);

var n:integer;

begin

for n:=0 to table1.FieldCount-1 do

ListBox1.Items.Add (table1.Fields[n].AsString);

end;


После этого запустите программу и щелкните по кнопке на форме. В ListBox вы увидите список содержимого полей текущей записи набора данных. Содержимое каждого поля интерпретируется как строковое значение и добавляется к списку ListBox.


Задание для самостоятельной работы


  1. Теперь попробуйте вывести в компонент ListBox1 содержимое всех полей текущей записи начиная с последнего (Подсказка: цикл с уменьшением параметра fordowntodo).


  1. Используя общую схему обработки всех записей НД, выведите в компонент ListBox1 содержимое всех записей из всех полей


Подсказка: для перебора всех записей полей используйте конструкцию:


Table1.first;//первая запись


While not table1.eof do //пока не конец таблицы

Begin


Table1.next;//следующая запись

End;


Практическая работа 16. Тема: Работа с записями: сортировка. Работа с записями: фильтрация.


Цели:


  1. Изучить операцию работы с записями: сортировку.

  2. Научиться индексировать таблицу и сортировать данные в ней.

  3. Развивать навыки самостоятельной работы.

  4. Воспитывать усидчивость, ответственность.

Ход работы

I. Теоретическая часть

1. Работа с записями


Работа с записями подразумевает выполнение операций:

сортировки; фильтрации; поиска.

2.Индексирование баз данных.


В таблицах могут определяться ключи и индексы. Ключ – это комбинация полей, данные в которых однозначно определяют каждую запись в таблице. Простой ключ состоит из одного поля, составной из нескольких полей. Поля, по которым построен ключ, называют ключевыми. Чтобы определить ключевое поле, нужно запустить программу Database Desktop, открыть таблицу, для которой строится ключ, перейти в окно изменения структуры таблицы и в этом окне в поле Key напротив имени поля поставить символ «*» клавишей [Пробел].


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


Индексы при создании именуются. Создание индекса называют

индексированием таблицы.

Использование ключей и индексов позволяет:

  • однозначно идентифицировать записи;


  • избегать дублирования значений в ключевых полях;

  • увеличивать скорость доступа к данным(поиск данных);

  • выполнять сортировку записей в таблицах;

  • устанавливать связи между отдельными таблицами БД и т.д.


Для одной таблицы можно создать несколько индексов. В каждый момент времени один из них можно сделать текущим (активным). При существовании нескольких индексов таблица может не иметь текущего индекса.


Задание индекса сводится к определению:

      • состава полей;

      • параметров;

      • имени.

Дhello_html_m77c53b0c.gifля задания индексов надо:


  1. Запустить Database Desktop;

  2. Открыть таблицу, которую необходимо проиндексировать;

  3. Перейти в окно создания структуры таблицы (Table/Restructure);


  1. В комбинированном списке Table properties: выбрать пункт Secondary Indexes (вторичные индексы);


  1. Нажать на кнопку Define (определить);

  2. В появившемся окне Define Secondary Index (задание вторичного индекса) задать состав полей и параметры индекса:


  • Unique (Уникальный) – индекс требует для составляющих его полей не повторяющихся значений;


  • Case sensitive (Зависящий от условий) – для полей строкового типа учитывается регистр символов;


  • Descending (Нисходящий) – сортировка выполняется в порядке убывания значений.


  1. Нажать кнопку ОК, появится окно Save Index As (Сохранить индекс), в котором указывается имя индекса (indИмяПоля, например, indTovar, indKolvo, indTovarCena и т.д.). В имени индекса указывается имя поля, по которому строится индекс.


  1. После повторного нажатия кнопки ОК сформированный индекс добавляется к таблице и его имя появляется в списке индексов.


Чтобы изменить индекс, нужно в окне изменения структуры таблицы в списке Table properties выбрать пункт Secondary Indexes, выделить имя изменяемого индекса и нажать кнопку Modify (Изменить). Для удаления индекса, нужно выделить имя удаляемого индекса и нажать кнопку Erase (Удалить).

  1. Установка текущего индекса


В НД Table возможно указание текущего индекса. Его можно установить двумя способами:


  1. С помощью свойства IndexName: String – содержит имя индекса, заданное при его создании (Например, Table1.IndexName:='indTovar';).


  1. С помощью свойства IndexFieldNames: String – содержит имя поля, для которого был создан индекс (Например, Table1.IndexFieldNames:='Tovar';).


Эти свойства являются взаимоисключающими, и установка значения одного из них приводит к автоматической очистке значения другого.

4. Сортировка набора данных


Порядок расположения записей в НД может быть неопределенным. По умолчанию записи не отсортированы.


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


Сортировка НД Table выполняется автоматически по текущему индексу. При смене индекса происходит автоматическое переупорядочивание записей. Таким образом, сортировка возможна по полям, для которых создан индекс.

II. Практическая часть


Отсортировать записи набора данных Table1 для таблицы Tovar.db по полям


Tovar, Kod, DataVipusk, Kolvo, Cena.

Расположите на форме компоненты в соответствии с рисунком:





hello_html_m42510d76.jpg




















Проиндексируйте таблицу Tovar.db по полям Tovar, Kod, DataVipusk, Kolvo, Cena. Создайте простые индексы и назовите их соответственно indTovar, indKod, indDV, indKolvo, indCena.


Для кнопки «Отсортировать» напишите следующий обработчик события


OnClick:




hello_html_m40638ffa.jpg











Для кнопки «Отменить сортировку» напишите обработчик события OnClick:


hello_html_244e681a.jpg








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



III. Самостоятельная работа


Создайте однотабличную БД.


Таблица должна содержать следующие поля:

Поле

Информация

FIO

ФИО студента

Sr_ball

Средний бал по итогам года

Propuski_up

Количество пропусков по у/п

Propuski_np

Количество пропусков по н/п

Propuski_vsego

Количество пропусков всего


Проиндексируйте все поля и сделайте сортировку по каждому полю.


Работа с записями: фильтрация.


Цели:


  1. Изучить операцию работы с записями: фильтрация;

  2. На практическом примере рассмотреть разновидности фильтрации записей: по выражению, по диапазону;

  3. Развивать логическое мышление.


  1. Воспитывать информационную культуру.


Ход работы


Фильтрация записей


Фильтрация это задание ограничений для записей, отбираемых в набор данных. Состав записей в НД в данный момент зависит от установленных ограничений, в том числе и от фильтров.

Система Delphi дает возможность осуществлять фильтрации записей:

          • по выражению;


          • по диапазону.


По умолчанию фильтрация записей не ведется, и НД Table содержит все записи связанной с ним таблицы БД.

1. Фильтрация по выражению

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


Достоинством фильтрации по выражению состоит в том, что она применима к любым полям, в том числе к неиндексированным. Так как в процессе отбора просматриваются все записи таблицы, фильтрация по выражению эффективна при небольшом количестве записей.


Свойство Filter типа Srting компонента Table – задает выражение фильтра. В его состав могут входить элементы:

1имена полей таблиц;


2литералы – значение, заданное явно (число, строка или символ). В выражение фильтра включаются только выражения строкового типа.

3операции сравнения (<, >, =, >=, <=, <>);

4 арифметические операции (+, -, *, /);


5логические операции (and (логическое умножение), or (логическое сложение), not (логическое отрицание));

6( ) и [ ] скобки.

hello_html_692f6dd2.gifhello_html_m63e19f98.gifhello_html_m572c7581.gifhello_html_m14b2a7aa.gif

Пример:


Tovar = 'Макароны'

Cena >=150 or Cena <= 500


Если имя поля содержит пробелы, то его заключают в [ ] (например, [Name Firma] = 'Слад&Ко'), в противном случае [ ] необязательны.


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


Для активизации и деактивизации фильтра используется свойство Filtered типа Boolean. Если Filtered=True, то фильтрация включается, и НД отбираются записи, которые удовлетворяют фильтру, записанному в свойстве Filter. Если Filtered=False (по умолчанию), то фильтрация выключена.


Свойство FilterOptions типа TFilterOptions задает параметры фильтрации. Может принимать комбинации двух значений:

  1. foCaseInsensitive – регистр букв не учитывается, т. е. при задании фильтра Tovar='Хлеб' слова "Хлеб", "хЛеБ", "ХЛЕБ" или "хлеб" будут восприняты как одинаковые;

  2. foNoPartialCompare – выполняется проверка на полное соответствие содержимого поля и значения, заданного для поиска. Обычно применяется для строк. Если известны только первые символы строки, то нужно указать их в выражении фильтра, заменив остальные символом «*» и выключив значение foNoPartialCompare. Например, при выключенном значении foNoPartialCompare для фильтра Tovar = 'C*' будут отобраны записи, у которых в поле Tovar содержатся значения "Сметана", "Сыр", "Сахар" или "Сельдь с/м".


Все параметры фильтра перечисляются в свойстве FilterOptions через «,» и заключаются в [ ]. По умолчанию все параметры фильтра выключены, т.е. свойство FilterOptions = [ ].


Практическое задание №1


Организовать фильтрацию записей таблицы Tovar. db по выражению, которое задает пользователь.

hello_html_m3dec1816.jpg














Вид формы работающего приложения показан на рисунке:


Разместите в окне формы компоненты в соответствии с рисунком готовой программы. Напишите для окна формы обработчик события OnCreate:







hello_html_6c782d84.jpg
























Для кнопки «Закрыть» самостоятельно напишите обработчик события, при котором закрывается работающее приложение.


Запустите программу. Напишите в компонент Edit1 выражение фильтра в соответствии с указанным ранее рисунком. Отмените фильтр. Придумайте свое выражение фильтра.

Практическое задание №2


Создадим электронную записную книжку. Совместно с набором данных будем использовать элемент управления с закладками TabControl

Компонент TabCotntrol (п.к. Win32). Представляет собой контейнер с закладками.

hello_html_m60d356b5.jpg














Вид записной книжки с распечаткой фамилий на букву "А" показан на рисунке:

Создайте таблицу Notebook.db со списком телефонов друзей и знакомых (поля: FIO, Phone, Note (примечания)) в программе Database Desktop. Сохраните созданную таблицу в рабочей папке Baza. Заполните данными (20 записей).


Расположите на форме компонент TabControl. В свойстве Tabs этого компонента в столбик перечислите все буквы алфавита (кроме "Й", "Ь", "Ъ"). В свойстве MultiLine установите значение true, чтобы закладки размещались в несколько рядов. Свойству TabPosition присвойте значение alTop, свойству HotTrack – true.

На форме разместите три компонента для работы с БД (Table1, DataSource1, DBGrid1). Таблицу Notebook.db свяжите с НД Table1. Список владельцев телефонов отображается в компоненте DBGrid1. Пользователь может отобразить все фамилии или вывести фамилии, начинающиеся с определенной буквы.


Для управления отбором записей используется фильтрация. Разместите на форме компонент CheckBox1 и присвойте ему заголовок «Показывать все записи». С помощью этого компонента будет активизироваться и деактивизироваться фильтр. По умолчанию флажок установлен, при этом фильтр выключен, и отображаются все фамилии. Если флажок CheckBox1 сброшен, то выполняется фильтрация. Записи выбираются на основании первой буквы фамилии. Букву можно выбирать с помощью закладок компонента TabControl1.


Напишите следующие обработчики событий для данной формы:

hello_html_m4d3afb08.jpg















2.Фильтрация по диапазону

При фильтрации по диапазону в НД включаются записи, значения полей которых попадают в заданный диапазон.


Таким образом, условием фильтрации является выражение вида "значение > нижней границы AND значение < верхней границы" (вместо операций сравнения < > могут указываться и операции <= >=).


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


Для фильтрации записей по диапазону компонент Table имеет следующие методы:

ApplyRange активизирует фильтр (включение фильтра);

CancelRange деактивизирует фильтр (выключение фильтра); SetRangeStart устанавливает нижнюю границу диапазона; SetRangeEnd устанавливает верхнюю границу диапазона;


EditRangeStart изменяет предварительно заданную нижнюю границу диапазона;

EditRangeEnd изменяет предварительно заданную верхнюю границу диапазона;


SetRange имеет тот же эффект, что и последовательное выполнение методов SetRangeStart, SetRangeEnd и ApplyRange. Процедура позволяет одновременно задать границы диапазона и выполнить фильтрацию.


Свойство KeyExclusive типа Boolean определяет, как учитывается заданное граничное значение при анализе записей. Если KeyExclusive = False (по умолчанию), то записи, у которых значения полей фильтрации совпадают с границами диапазона, включаются в состав НД, а если KeyExclusive = True, то такие записи в НД не попадают. Свойство KeyExclusive действует отдельно для нижней и верхней границы. Значение этого свойства должно устанавливаться после вызова методов SetRangeStart, SetRangeEnd, EditRangeStart и EditRangeEnd.

Пример:


Table1.IndexName: ='indCena'; //установка текущего индекса indCena (создан по полю Cena таблицы Tovar.db)

Table1. SetRangeStart; Table1. KeyExclusive: = True;


Table1.FieldByName('Cena').AsFloat: =100.5;

Записи, содержащие в поле Cena значение 100,5, не входят в отфильтрованный НД (т. к. KeyExclusive = True). Фильтрация по диапазону подчиняется условию Cena >100,5. Если бы KeyExclusive = False, то условие фильтрации выглядело бы по-другому (Cena >=100,5).

Когда одна из границ диапазона не задана, то диапазон открыт, то есть нижняя граница становится равной минимально возможному, а верхняя граница – максимально возможному значению этого поля.

Самостоятельная работа


Иhello_html_m15d73da7.jpgмена полей указываются на английском языке. Дайте им названия на русском.











Практическая работа 17. Тема: Графики и диаграммы: компонент DBChart. Модификация набора данных


Ход работы


Цели:


  1. Изучить компонент DBСhart (свойства, события, методы).


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

I. Теоретическая часть.

Для построения диаграмм в приложениях, использующих базы данных, предназначен компонент DBСhart, который позволяет строить диаграммы различных типов, в том числе и объёмные. Важнейшим свойством DBСhart является Series[Index:Longint]: TChartSeries, представляющее собой массив диаграмм, выводимых в области компонента. Каждая серия содержит последовательность значений, по которым выполняется построение графика (диаграммы). Один компонент DBChart позволяет построить несколько графиков в одних координатах.

Для отображения серии данных используются классы TAreaSeries,


TBarSeries, TLineSeries, TFastLineSeries, THorizBarSeries,

TPieSeries, TPointSeries и др., соответствующие разным типам диаграмм.


При построении диаграмм часть свойств задаётся в целом для компонента DBСhart, а некоторые свойства уточняются для отдельных серий. Задать значения свойств для получения качественной иллюстрации можно на этапе проектирования или программно во время работы.


Так как параметров очень много, то для их настройки на этапе проектирования обычно используют окно редактора, который вызывается через контекстное меню DBChart. По сравнению с работой в Инспекторе объектов это проще и нагляднее. В редакторе две страницы: Chart и Series, каждая из которых имеет несколько вкладок. На вкладках страницы Series задаются параметры, относящиеся к конкретной серии данных.


Дhello_html_7f18b6ed.jpgля добавления графика в окне редактора используется кнопке Add на вкладке Series страницы Chart. Щелчок по кнопке Add выводит галерею доступных типов графиков. После выбора типа графика появляется значок, соответствующий этому типу, и надпись Series1 (рис. 1). Становятся доступными кнопки Delete, Clone, позволяющие удалить и продублировать диаграмму, а также кнопка Title, открывающая диалоговое окно для задания имени серии.











Рис. 1. Задание типа графика

В программном коде в разделе описания класса формы появляется тип, соответствующий выбранному графику, например: Series1:TBarSeries. В дальнейшем тип графика можно будет изменить. Для этого используется кнопка Change. Для задания данных необходимо перейти на страницу Series (рис. 2).

hello_html_m67bd515.jpg
























Рис. 2. Задание данных для построения графика


На вкладке DataSource в качестве источника данных надо выбрать Dataset и в поле Dataset указать компонент (Table, Query), из которого будут поступать данные, а затем выбрать поле. К этому моменту компонент Table (Query) должен быть уже установлен и связан с соответствующей таблицей.


В зависимости от типа диаграммы при построении могут использоваться данные из одного или двух полей. Поясняющие надписи задаются метками (Labels), значения которых берутся из символьных полей или полей типа Датавремя. Если в списке Dataset выбрано No Data, то источник данных на этапе проектирования не задаётся, он должен быть определён при выполнении приложения. В качестве источника данных можно выбрать функцию. Функция применяется к уже имеющимся сериям данных. Например, позволяет для двух графиков построить третий, который будет их разностью (Subtract) или суммой.


II. Практическая часть


Графики применяются там, где нужно показать динамику подъема или спада одного или нескольких объектов. Хорошим примером является график с кривыми, демонстрирующими динамику изменений курсов доллара и евро к рублю. Диаграммы же применяются для демонстрации сравнительных показателей разных объектов. Так, например, во время предвыборной кампании часто демонстрируют диаграмму, где столбики различного роста показывают, кто из кандидатов набрал больше голосов. Круговые диаграммы показывают сравнительное отношение каждого объекта к целому, например круговая диаграмма, показывающая процент депутатов каждой партии от общего количества депутатов.


Познакомимся с работой компонента DBChart на практике. Для примера нам понадобится база данных с одной таблицей, в которую мы запишем курсы доллара и евро к рублю.


В таблице создайте три поля: CDate, CDollar и CEvro. Саму таблицу назовите Curs. Заполните таблицу произвольными данными, делая по записи на каждый день, пусть в таблице будет не менее 10 записей. Данные не обязательно должны соответствовать действительности, но постарайтесь сделать их похожими на реальный курс доллара США и евро к рублю, например:


CDate: 10.03.2010 CDollar: 29,21 CEvro: 40,16

hello_html_70dbb493.jpg





























Заполнив таблицу, подключите ее к новому проекту, используя технологию BDE.


Далее на форму установите пустую панель со свойством Align, равным alTop (она нам потребуется позже). На свободное место формы установите компонент DBChart с вкладки Data Controls Палитры компонентов. Свойство Align компонента установите в alClient, чтобы график занял все оставшееся место формы. Теперь дважды щелкните по графику, чтобы открыть редактор серий:

hello_html_m44016f44.jpg



















Рис.3. Редактор серий графика


Все отображаемые на графике данные построены с помощью серий - объектов Series типа TChartSeries, которые являются отображением данных отдельного реального объекта. Например, если мы используем график динамики курса доллара и евро к рублю, то серия доллара будет содержать ряд точек на графике, которые соответствуют стоимости доллара на каждый день. Для евро будет создана собственная серия. Все настройки серий можно делать как с помощью этого редактора, так и программно изменяя свойства графика. В этом примере нам потребуется сделать две серии: для доллара и для евро. Ось X будет содержать дату, а ось Y - значение.


Нажмите кнопку Add (добавить серию). У вас появится окно выбора графика:

hello_html_m2edfb5d.jpg



















Рис.4. Окно выбора графика.


Помимо выбора графика мы так же можем оставить или снять "галочку" 3D, которая включает или выключает объемность. Объемный график смотрится наряднее и больше подходит для всякого рода докладов или презентаций. Если же вам придется строить график в строгой деловой программе, то объемность будет разумней не использовать. Выбор типа графика или диаграммы зависит от типа отображаемых данных. В нашем примере мы собрались чертить кривую, так что нам больше подойдут типы Line или Fast Line. Выберем первый из них. Как только мы это сделали, на компоненте DBChart отобразился график со случайными данными. Это происходит по умолчанию, чтобы легче было производить настройки серии. В редакторе серий появилась серия Seriesl. Выделите ее и щелкните по кнопке Title (заголовок). Измените заголовок на


"Доллар":

hello_html_m62ac2424.jpg



















Рис. 5. Новая серия


Теперь перейдите на вкладку Series на самом верху окна редактора, а уже на этой вкладке откройте внутреннюю вкладку Data Source. В выпадающем списке вы видите Random Values (случайные значения), которые и обеспечили показ серии на графике. Нам нужно выбрать Dataset, а в окне Dataset – наш набор данных:














hello_html_m1508b16.jpg






Рис. 6. Подключение серии к таблице


В списке Labels можно выбрать поле с данными по доллару, а можно оставить его пустым, этот список используется для отображения меток, если они установлены. В списке X выберите поле с датой, автоматически должна установиться "галочка" DateTime. Эти даты будут отображаться по оси X. А по оси Y отобразим поле с курсом доллара. Как только вы закроете редактор кнопкой Close, на форме появится график курса доллара.


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

hello_html_mf30583e.jpg



















Рис. 7. График курсов доллара и евро


Займемся настройкой графика. Вновь откройте редактор графика и перейдите на вкладку Chart, а в ней на вкладку Titles. В выпадающем списке мы видим "Title" (заголовок графика), а в текстовом окне отображается название графика "TDBChart". Впишите вместо него "Курсы доллара и евро". Кнопка Font позволяет изменить шрифт заголовка, кнопка Border откроет окно, в котором можно настроить обрамление. Кнопка Back Color открывает диалог выбора цвета для фона заголовка, кнопка Pattern также позволяет настроить фон, придав ему цвет "родителя" – самого графика. Если вы откроете выпадающий список, то увидите, что помимо "Title" (заголовка) доступен еще и "Foot"

(подвал) – надпись, которая будет выведена внизу. Напишите там "Пример простого графика".


Смотрим, какие вкладки здесь еще есть. Самой последней имеется вкладка 3D, на которой можно включить или выключить объемность графика, а также отрегулировать вращение, наклон или масштаб.


На вкладке Walls (стены) можно отрегулировать "стены" осей, на рисунке 13.5 они выделяются желтым и белым цветами.

Вкладка Paging позволяет настроить многостраничные графики, а вкладка Panel – задать параметры фона. Интересны здесь параметры панели Gradient, позволяющие задать градиентную заливку. При этом фон будет плавно переходить из одного цвета в другой.

Вкладка Legend позволяет настроить легенду графика, на рисунке вы видите ее в правой части графика с надписями "Доллар" и "Евро".

Перейдем на вкладку Axis (оси). Здесь мы можем сделать множество настроек осей. Вначале в левой части окна в разделе Axis нужно выбрать ось. Мы выберем Left, то есть, ось Y. Правее находится дополнительное окно со своими собственными вкладками, причем открыта вкладка Scales (шкалы):

hello_html_m5cc44c20.jpg

























Рис. 8. Настройка осей графика


Здесь мы снимем "галочку" Automatic, которая автоматически устанавливает размер шкалы. В большинстве случаев этого не требуется, но в нашем примере мы получили относительно ровные линии, причем одна из них в нижней, а другая - в верхней части, что не делает график красивее. Итак, снимите эту галочку, а затем с помощью кнопок Change немного увеличьте максимальное значение, и немного уменьшите минимальное. В результате кривые графика сдвинутся к середине.


Далее можете перейти на внутреннюю вкладку Title, где напишите "Курс к рублю". Эта надпись является заголовком оси Y. Больше, пожалуй, с этой осью делать ничего не нужно. Зато ось X у нас вместо дат показывает значения. Исправим это. В группе радиокнопок Axis выберем Bottom (нижняя ось), и перейдем на внутреннюю вкладку Labels. В разделе Style вместо Auto выберем Value, что изменит надписи к точкам оси X: вместо назначаемых автоматически, мы четко указали, что нужно взять значение поля, то есть, дату. В результате этих манипуляций мы получим уже достаточно привлекательный график:

hello_html_1fced2aa.gif























Рис. 9. График курсов валют


Сохраните проект, скомпилируйте и загрузите полученную программу. Посмотрим, что умеет делать этот график в рабочем приложении. Прежде всего, если вы выделите какой то участок графика левой кнопкой мыши слева-направо и сверху-вниз, выделенный фрагмент увеличится во все окно графика. Ухватившись за график правой кнопкой мыши, его можно будет перемещать. Затем вы можете сделать обратное выделение левой кнопкой любого участка графика снизу-вверх и справа-налево, и масштаб графика восстановится.


Изменить масштаб программно можно с помощью свойства Zoom объекта

View3DOptions графика:

DBChart1.View3DOptions.Zoom:= 100;

Это целое число, содержащее процент масштаба. Значение 100 соответствует нормальному масштабу. Попробуйте изменять масштаб от 1 до 500.

* Печать графика

Посмотреть, как реализована печать графика с предварительным просмотром можно уже на этапе конструирования, в редакторе серий. Для этого на вкладке Chart редактора серий перейдите на внутреннюю вкладку General и нажмите кнопку Print Preview. Вы получите такое окно:









hello_html_7c5f1f3d.gif









Рис. 10. Окно предварительного просмотра перед печатью


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


Для этого установите кнопку на верхнюю панель, которую мы оставили специально для этого. На кнопке напишите "Печать". Щелкните по ней дважды, чтобы сгенерировать обработчик нажатия. Однако, прежде чем вписывать в обработчик код, нам необходимо подключить модуль Teeprevi в верхний раздел uses, потому что именно в этом модуле описана процедура ChartPreview(), вызывающая данное окно. Напомню, что для этого нужно после последнего подключенного модуля поставить запятую, после чего вписать а уже после этого модуля поставить точку с запятой. Код процедуры нажатия на кнопку будет содержать следующую строку:


ChartPreview(Form1, DBСhart;1) ;


Как видим, процедура ChartPreview() имеет два параметра: форму, содержащую график, и компонент DBСhart (если вы изменили имена формы или графика, установленные по умолчанию, то и здесь нужно будет указать их). Сохраните проект, скомпилируйте его и попробуйте нажать на кнопку. У вас должно выйти окно печати.


На вкладке General, где мы вызывали окно печати, под кнопкой Print Preview имеется кнопка Export. Эта кнопка выводит следующее диалоговое окно:

hello_html_4bddfd4f.jpg












Рис. 11. Окно экспорта графика


Как мы видим, график (диаграмму) можно экспортировать в буфер обмена или графический файл одного из четырех форматов. Формат BMP наиболее универсален, но файл получается большого размера. WMF - формат метафайлов Windows, который обеспечивает хорошее качество изображения при сравнительно небольшом размере файла. EMF - такой же формат, как и WMF, но более новый, используемый в 32-разрядных Windows. Последний TEE формат - специализированный для TDBChart(TChart) формат, который сохраняет не только сам график, но и все его настройки, что в дальнейшем позволяет загрузить ранее сохраненный график в компонент TDBChart.


Сохранение графика программным путем осуществляется следующими методами:

Procedure SaveToBitmapFile(const Filename: String);

Здесь график сохраняется в указанный в параметре файл формата BMP.

Procedure SaveToMetafile(const Filename: String);

График сохраняется в WMF формат.

Procedure SaveToMetafileEnh(const Filename: String);

График сохраняется в EMF формат.

Procedure SaveChartToFile(AChart:TCustomChart; const AName: String);


График сохраняется в специализированный формат. Первым параметром указывается сохраняемый график. Если вы будете использовать эту процедуру, не забудьте в раздел uses добавить модуль Teestore, где описан этот метод. Если вы сохранили график или диаграмму таким образом, то в дальнейшем вы можете и загрузить его методом

Procedure LoadChartFromFile(AChart:TCustomChart; const AName: String);


Следующая группа свойств позволяет вращать трехмерный график, изменять его масштаб и угол наклона, что позволяет нам в программе установить богатый инструментарий для пользователя, с помощью которого он сможет изменять вид графика. При разработке программы эти же инструменты доступны вам на вкладке Chart и на внутренней вкладке 3D. Многие возможности управления графиком зависят от того, включено ли свойство Orthogonal. При включенной ортогональности многие свойства становятся недоступными. Изменить состояние этого свойства можно просто:

DBChart1.View3DOptions.Orthogonal:= False;

Изменить масштаб можно, присвоив свойству Zoom целое число:

DBChart1.View3DOptions.Zoom:= 300;

Напомню, что нормальным масштабом является число 100. Пользователю можно дать возможность изменять масштаб от 1 до 500, еще больший масштаб будет уже неудобным.


Свойство Rotation отвечает за горизонтальное вращение графика, и может быть целым числом от 0 до 360, это число указывает количество градусов:

DBChart1.View3DOptions.Rotation:= 100;

Свойство Tilt отвечает за вертикальное вращение и также содержит целое число от 0 до 360 (градусов):

DBChart1.View3DOptions.Tilt:= 12 0;

Свойство Elevation содержит целое число, указывающее наклон графика. Число может быть также от 0 до 360:

DBChart1.View3DOptions.Elevation:= 50;

Свойство Perspective указывает соответственно, на перспективу графика. Это число удобней делать от 0 до 100:


DBChart1.View3DOptions.Perspective:= 30;

Пhello_html_3203d595.jpgопробуйте сделать в проекте новое окно для настройки графика, и с помощью события onChange ползунков TrackBar изменять соответствующие свойства:



















Рис. 12. Окно настройки графика


Напомню, что компонент TrackBar хранит значение в свойстве Position, а минимальное и максимальное значение можно установить при проектировании в свойствах Min и Max. Чтобы из главного окна можно было вызывать окно с настройками, а из окна настроек менять параметры графика, оба модуля придется подключить друг к другу командой File Use Unit.

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


Модификация набора данных.


Цели:


  1. Изучить процесс модификации данных в БД программным способом.


  1. Изучить процедуры Edit, Post, Insert, Append, Delete и их назначение.


  1. Научиться программно модифицировать НД: добавление, удаление записей.


I. Теоретическая часть


Модификация НД представляет собой редактирование, добавление и удаление его записей. Модифицируемость НД зависит от различных условий. Можно разрешить или запретить изменение НД с помощью соответствующих свойств. Управлять возможностью изменения НД Table можно с помощью свойства ReadOnly типа Boolean. Если значение этого свойства = True, то изменения записей запрещаются. По умолчанию свойство ReadOnly имеет значение False, и НД можно модифицировать.


Для проверки, можно ли изменять НД, предназначено свойство CanModify типа Boolean. Если это свойство имеет значение True, то НД изменять можно, а если False, то изменения в НД запрещены.

1. Редактирование записей

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

  • перевести НД в режим редактирования;

  • изменить значения полей записи;

  • подтвердить сделанные изменения или отказаться от них, в результате чего НД снова перейдет в режим просмотра.


НД переводится в режим редактирования вызовом метода Edit, например Table1.Edit – редактирование текущей записи НД Table1.

Редактирование записей осуществляется для модифицируемого НД, поэтому перед вызовом метода Edit следует выполнять проверку на возможность редактирования записи (например, путем анализа свойства CanModify).


Пример:

If Table1.CanModify then Table1.Edit;

Если редактирование осуществляется с помощью управляющих компонентов, не связанных с НД, например кнопок Button или переключателей CheckBox, программист должен самостоятельно кодировать действия по предотвращению попыток редактирования немодифицируемого НД. Вот пример осуществления такой блокировки:


procedure TForm1.Button1Click(Sender: TObject);

begin


if not Table1.CanModify then

begin

Beep;


MessageDlg ('Редактирование запрещено!', mtInformation, [mbOk], 0);

Exit;

end;

Table1.Edit;

end;


Здесь переход в режим редактирования осуществляется при нажатии кнопки Button, которая может иметь название «Редактировать» или «Edit». Перед переводом в этот режим выполняется проверка, можно ли изменять записи НД Table1, и если нет, то процедура выдает соответствующее сообщение и завершается.


Блокировка попыток пользователя изменить немодифицируемый НД должна выполняться также при добавлении и удалении записей.

При выполнении метода Edit непосредственно перед переводом НД в режим редактирования возникает событие BeforeEdit, которое можно использовать для проверки возможности перехода в этот режим. Например, при попытке пользователя редактировать запись ему может быть предложено подтвердить свои действия:


procedure TForm1.Table1BeforeEdit (DataSet: TDataSet);

begin

if MessageDlg ('Выполнить редактирование?',

mtConfirmation, [mbYes, mbNo], 0) <> mrYes then Abort;

end;


После выполнения метода Edit вызывается обработчик события AfterEdit.


Для проверки, вносились ли изменения в запись, можно проанализировать свойство Modified типа Boolean. Если свойство имеет значение True, то было изменено значение как минимум одного поля текущей записи.


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

Метод Post сохраняет изменения записи в таблице БД (например, Table1.Post), снимает блокировку записи и переводит НД в режим просмотра (Table1.Browse).

Перед его выполнением автоматически вызывается обработчик события BeforePost, а сразу после выполнения – обработчик события AfterPost. Используя событие BeforePost, можно проверить сделанные изменения и при необходимости отменить их.


При работе с компонентом DBGrid изменения закрепляются при переходе к другой записи или нажатии клавиши [Enter], а в компоненте DBNavigator можно нажать кнопку Post Edit (Утвердить изменения).


Метод Cancel отменяет изменения, выполненные в текущей записи (например, Table1.Cancel), и возвращает НД в режим просмотра. При выполнении метода Cancel вызываются обработчики событий BeforeCancel и AfterCancel.


При работе с сеткой DBGrid изменения отменяются нажатием клавиши [Esc], а в компоненте DBNavigator – нажатием кнопки Cancel Edit (Отменить изменения).


2. Добавление записей


Добавлять записи можно только к модифицируемому НД.

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

  • перевести НД в режим вставки;

  • задать значения полей текущей записи;

  • подтвердить сделанные изменения или отказаться от них, после чего НД снова переходит в режим просмотра.


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

Метод Append вставляет новую запись в конец НД.

Для компонента DBGrid новая запись добавляется к НД при нажатии клавиши [Insert] или при переходе на последнюю запись. Если на форме находится компонент DBNavigator, то новая запись добавляется при нажатии кнопки Insert Record (Вставить запись).


3. Удаление записей

Удаление текущей записи выполняет метод Delete, который работает только с модифицируемым НД. В случае успешного удаления записи текущей становится следующая запись, если же удалялась последняя запись, то курсор перемещается на предыдущую запись, которая после удаления становится последней.

При удалении записи генерируются события BeforeDelete и AfterDelete.

Если при удалении записи требуется подтверждение удаления, то можно написать следующий обработчик события OnClick для кнопки Button «Удалить запись»:


procedure TForm1.Button1Click(Sender: TObject);

begin

if MessageDlg ('Удалить запись?',

mtConfirmation, [mbYes, mbNo], 0) = mrYes then

Table1.Delete;

end;

Удаление нескольких последовательно расположенных записей имеет особенность, связанную с тем, что при вызове метода Delete в цикле по перебору удаляемых записей не нужно вызывать методы, перемещающие указатель текущей записи. после удаления текущей записи указатель автоматически перемещается на соседнюю (обычно следующую) запись. Так можно удалить все записи НД:


procedure TForm1.Button1Click(Sender: TObject);

var n:longint;


begin

Table1.Last;

For n:= Table1.RecordCount downto 1 do Table1.Delete;

end;

В примере перебор записей выполняется с конца НД. После удаления текущей записи указатель снова оказывается на последней записи.


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

II. Практическая часть

Создадим приложение для добавления, вставки, удаления записей таблицы Chitateli.db. В программе предусмотреть блокировку изменения записей.

Расположите на форме компоненты в соответствии с рисунком:

hello_html_m354e60a5.jpg

















Для блокировки редактирования НД используется компонент CheckBox1 «Редактирование НД запрещено». Если флажок компонента установлен, то в НД невозможно внести какие-либо изменения. Для компонента CheckBox1 напишите следующий обработчик события OnClick:


procedure Tform1.CheckBox1Click(Sender: TObject);

begin


if CheckBox1.Checked then

begin

Table1.Active:=False;

Table1.ReadOnly:=True;


Table1.Active:=True;

end

else

begin

Table1.Active:=False;

Table1.ReadOnly:=False;


Table1.Active:=True;

end;


end;


При щелчке по кнопке Добавить запись в конец НД будет появляться дополнительное окно формы в модальном режиме для добавления новой записи:

hello_html_m7e1309cd.jpg











Для этого добавьте к проекту новую форму. Перейдите на первую форму. Выберите в главном меню Delphi пункт меню File, в этом пункте команду Use unit… В появившемся окне выберите Unit2. Нажмите ОК. В окне кода программы появится следующий раздел:

implementation

uses Unit2;


Перейдите на вторую форму и выполните аналогичные действия. В окне кода программы появится аналогичный раздел:


implementation

uses Unit1;


Разместите на второй форме четыре компонента DBEdit. Этот компонент представляет собой поле, в котором возможно отображение и изменение его значений.


Расположите на второй форме две кнопки BitBtn. В процессе ввода пользователь может утвердить ввод, нажав кнопку «Ввод», или отменить его, нажав кнопку «Отмена». После закрытия модальной формы ввода проверяется, какая кнопка нажата. Если «Ввод», то сделанные изменения принимаются, в противном случае – нет.


Для окна формы напишите обработчик события OnCreate:


procedure TForm2.FormCreate(Sender: TObject);

begin

DBEdit1.DataSource:=Form1.DataSource1;

DBEdit1.DataField:='Fio';


DBEdit2.DataSource:=Form1.DataSource1;

DBEdit2.DataField:='DataR';

DBEdit3.DataSource:=Form1.DataSource1;

DBEdit3.DataField:='Adres';

DBEdit4.DataSource:=Form1.DataSource1;

DBEdit4.DataField:='NomerChit';

BitBtn1.ModalResult:=mrOk;


BitBtn2.ModalResult:=mrCancel;

end;

Для кнопки «Добавить запись в конец НД» напишите обработчик события OnClick:


procedure TForm1.BitBtn1Click(Sender: TObject);

begin


if table1.ReadOnly=False then

begin

Table1.Append;


if Form2.ShowModal=mrOk then

Table1.Post

else


Table1.Cancel;

end

else


ShowMessage('Редактирование записей запрещено!');

end;


Для кнопки «Вставить запись» – следующую процедуру:


procedure TForm1.BitBtn2Click(Sender: TObject);

begin

if table1.ReadOnly=False then

begin

Table1.Insert;

if Form2.ShowModal=mrOk then

Table1.Post else

Table1.Cancel;

end

else


ShowMessage('Редактирование записей запрещено!');

end;


Для кнопки «Удалить запись»:


procedure TForm1.BitBtn3Click(Sender: TObject);

begin


if table1.ReadOnly=False then

begin

if Messagedlg('Удалить запись?',

mtConfirmation,[mbYes, mbNo],0)=mrYes then


Table1.delete;

end

else

ShowMessage('Редактирование записей запрещено!');

end;

hello_html_78a08b20.jpg














После щелчка по этой кнопке на экране появляется окно, в котором происходит подтверждение или отказ от удаления текущей записи.


    1. Контрольные вопросы


  1. Для чего используются процедуры Edit, Post, Insert, Append, Delete?


  1. Как программно выполнить редактирование записи?


  1. Как добавить запись?


  1. Как программно выполнить удаление записи?


  1. Как очистить таблицу БД?



Практическая работа 18. Тема: Добавление вычисляемого поля .Подсчет итогов по столбцу таблицы


Добавление вычисляемого поля.

hello_html_1d3156d2.gif

1Создайте на диске D: в папке TO-31 каталог Практическая работа 12

2Запустите утилиту BDE Аdministrator и создайте новый псевдоним БД с именем Итоги аттестации.

3С помощью утилиты Database Desktop создайте новую таблицу со следующими полями:

hello_html_m557dc0ed.jpg

Группа


Количество студентов в группе


Количество студентов с одной двойкой


Количество студентов с двумя двойками


Количество студентов с тремя и более двойками


Пропуски по неуважительной причине


Пропуски по уважительной причине

группа

количество студентов

количество неуспевающих

пропуски

успеваемость

 

 

с одной "2"

с двумя "2"

с тремя и более "2"

у/п

н/п

всего

 

АС 08

34

7

5

6

242

791

1033

47%

АС 09

28

 

5

10

295

776

1071

46,4%

АС 10

24

3

3

6

304

642

946

50%

АС 11

20

 

3

5

605

939

939

60%




  1. Сhello_html_m9ebd4c4.jpgохраните таблицу в созданную папку Практическая работа 12 под именем attestation.db и занесите в неё следующие данные:

5Запустите Delphi 7.0.


6На форму поместите компоненты Table, DBGrid, DataSource1 и DBNavigator и установите для каждого компонента свойства в том порядке, как указано ниже:


Table1


DatabaseName - Итоги аттестации

TableName - attestation.db

Activ – True


DataSource1


DataSet - Table1


DBGrid


DataSource - DataSource1


DBNavigator


DataSource - DataSource1


7. Сохраните проект в папку Практическая работа 12. Запустите программу на исполнение.

hello_html_m14070173.jpg
















  1. Вновь вернитесь в режим редактирования приложения.


  1. У компонента Table1 свойству Activ установите значение False.


  1. Щёлкните правой кнопкой мыши по компоненту Table1. Из контекстного меню выберите пункт Field Editor. Таким образом вы запустили Редактор полей.

hello_html_m1c7b7466.jpg

  1. В появившемся окне Редактора полей (Field Editor) щёлкните правой кнопкой мыши и с помощью контекстного меню добавьте все поля (Add fields …)

hello_html_m2200ca5c.jpg


















  1. Вновь в редакторе полей щёлкните правой кнопкой мыши и теперь уже добавьте новое поле (New field) со следующими настройками:

hello_html_6ecb703b.jpg



имя


нового


поля



тип данных нового поля



тип нового поля (вычисляемое)





13. Создайте процедуру вычисления поля (событие OnCalcFields) и внесите следующий код:

hello_html_m6bc2f424.gifhello_html_m6bc2f424.gifhello_html_46f526c.gif

if (Table1Number_of_person.Text<>'') and (Table1One.Text<>'') and (Table1Two.Text<>'') and (Table1Three_and_more.Text<>'') then Table1Progress.asFloat := (100-


((((StrToInt(Table1One.Text)

+hello_html_46f526c.gifStrToInt(Table1Two.Text)+ StrToInt(Table1Three_and_more.Text))*100)/(StrToInt(T able1Number_of_person.Text)))));


  1. Вновь у компонента Table1 свойству Activ установите значение True. Сохраниете изменения и запустите приложение на исполнение.

hello_html_m2a72c4da.jpg












Если вы всё сделали правильно, поле Progressing должно высчитываться автоматически, попробуйте


изменить в полях One, Two, Three_add_more данные и посмотрите, как меняются значения в поле Progressing



На оценку 3.

hello_html_dd8fc6f.jpg

Самостоятельно создайте вычисляемое поле Propuski которое высчитывает общее количество пропусков по группам.
















На оценку 4.

hello_html_m7f49ef35.gif

Подсчет итогов по столбцу таблицы

hello_html_m67e98859.gif

  1. Иногда приходится подводить итоги по некоторым полям всей таблице. Например, необходимо подсчитать Успеваемость по колледжу. Для этого установите на форму под полем Progress (Успеваемость) компонент Label и кнопку Button1 (Успеваемость по колледжу).


  1. В метод, соответствующий событию OnClick для кнопки внесите следующий код:

hello_html_7e113b90.gif

Var Uspevaemost, Sum: real; begin


Sum:=0;

Table1.first;

While not table1.eof do Begin

Sum:=sum+table1Progress.Value;

Table1.next;

End;

Uspevaemost:=Sum/4;

Label1.caption:= floattostr(Uspevaemost);

end;

На оценку 5.

hello_html_m7f49ef35.gif

Добавьте на форму компоненты Labe2 и кнопку Button2 (Общее количество

пропусков по колледжу) и для события OnClick для кнопки 2 пропишите

необходимый код.

hello_html_4490a345.jpg





















* Дополнительное задание

hello_html_m58c3d942.gif

Разместите на форме две диаграммы «Успеваемость по группам» и пропуски

по неуважительной причине»

hello_html_22453ddf.jpg
















Практическая работа 19. Тема: Выбор информации из базы данных: запросы. Анализ Delphi проекта, добавление визуальных объектов


Цель:


  1. Изучить основные приемы в организации запросов к базе данных.

  2. Закрепить полученные знания на практике.


ХОД РАБОТЫ


1. Теоретическая часть


При работе с базой данных пользователя, как правило, интересует не все ее содержимое, а некоторая конкретная информация. Найти нужные сведения можно последовательным просмотром записей. Однако такой способ поиска неудобен и малоэффективен.


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


Для выборки из базы данных записей, удовлетворяющих некоторому критерию, предназначен компонент Query (см. рис. 1).

hello_html_m6af22c25.jpg














Рис. 1.


Компонент Query похож на компонент Table, но, в отличие от последнего, он представляет не всю базу данных (все записи), а только ее часть — записи, удовлетворяющие критерию запроса.

В таблице перечислены некоторые свойства компонента Query.

Свойство

определяет

Name

Имя компонента. Используется компонентом Datasource для связи результата выполнения запроса (набора записей) с компонентом, обеспечивающим просмотр записей, например DBGrid

SQL

Записанный на языке SQL запрос к базе данных (к таблице)

Active


При присвоении свойству значения True активизирует выполнение запроса


hello_html_60b04b1e.gifhello_html_60b04b1e.gif

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

Запрос может быть сформирован и записан в свойство SQL во время разработки формы или во время работы программы.


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


2. Практическая часть

Создадим базу данных «Библиотека»

  1. С помощью BDE Administrator создайте псевдоним БД и дайте ему название Библиотека

  2. hello_html_80f912e.gifС помощью утилиты Database Deskto создайте таблицу следующей структуры:













и сохраните её под именем library.db

Заполните созданную таблицу следующими данными:


Инв_номер

Авт_знак

Шифр

Автор

Название

Место

Издательство

Год

Кол-во

Стоимость


издания

издания

страниц










1.

К 41

ББК 84.7 США

Кинг С.

Бессонница

Харьков

Дельта

1995

640

70,00р.


2.

К 50

ББК 84.7 США

Кин С.

Тайна старого дуба

C.-Пб.

Совершенно секретно

1994

320

70,00р.


3.

Д 39

ББК 84.4

Вл

Дефо Д.

Приключения

Москва

Дрофа

1982

328

20,00р.






Робинзона Крузо






4.

Ж 97

ББК 84.4

Вл

Жюль

Дети капитана Гранта

Самара

Просвещение

1983

640

20,00р.





Верн







5.

Ф 49

ББК 32.973

Фигурнов

IBM PC для

Москва

Дрофа

1994

350

40,00р.





В. Э.

пользователя






6.

Д 96

ББК 98 Фр

Дюма А.

Три мушкетера

Москва

Машиностроение

1985

720

130,00р.











7.

Ц 27

ББК 84.Р7

Цветаева

Стихотворения.

Владивосток

ДВГУ

1990

848

220,00р.





М.

Поэмы. Проза






8.

Б 90

ББК 84Р7

Булгаков

Мастер и Маргарита

C.-Пб.

Художественная

1990

734

150,00р.





М. А.



литература




9.

К 41

ББК 84.7

США

Кинг С.

Зеленая миля

Москва

АСТ

2000

384

70,00р.

10.

К 41

ББК 84.7

США

Кинг С.

Глаза дракона

Москва

АСТ

1999

448

50,00р.

4hello_html_6d1584b0.gifhello_html_32681009.gifhello_html_1f2878.gifhello_html_1f2878.gifhello_html_m30087594.gifhello_html_m30087594.gifhello_html_m2de2a542.gifhello_html_1cc9a116.gifhello_html_m3518fa5e.gif.Теперь откройте Delphi и поместите на форму компоненты Table1, DataSource1, DBGrid1. Настройте компоненты.


  1. Разместите на форме компонент Query1. (для данного компонента никакую настройку свойств производить не надо!)


Для просмотра базы данных и результата выполнения запроса используется компонент DBGrid1, который через компонент DataSource1 взаимодействует с компонентом Table1 (при просмотре всей базы данных) или с компонентом Query (при просмотре результата выполнения запроса).

  1. Поместите на форму кнопку АВТОР – данная кнопка будет производить выборку по имени автора. Пропишите для кнопки АВТОР следующий программный код:


procedure TForm1.Button1lick(Sender: TObject);

var

autor: string[30];

begin

autor:=InputBox('Выборка информации из БД', 'Укажите автора и щелкните на OK.', ''); if autor <> '' // пользователь ввел автора then


begin

with form1.Query1 do begin


Close; // закрыть файл-результат выполнения предыдущего запроса SQL.Clear; // удалить текст предыдущего запроса


// записываем новый запрос в свойство SQL

SQL.Add('SELECT Автор, Название');

SQL.Add('FROM ":Библиотека:library.DB"');

SQL.Add('WHERE');


SQL.Add('(Автор = "'+ autor + '")');

SQL.Add('ORDER BY Автор');

Open; // активизируем выполнение запроса


end;

if Query1.RecordCount <> 0 then


DataSource1.DataSet:=Query1 // отобразить рез-т выполнения запроса

else


begin

ShowMessage('В БД нет записей, удовлетворяющих критерию запроса.'); DataSource1.DataSet:=Table1;


end;


end;


end;


  1. Сохраните проект. Запустите программу на исполнение.

Проверьте работу кнопки АВТОР.


  1. Для того, чтобы в таблице вновь отображались все записи,

разместите на форме ещё одну кнопку и назовите её ВСЕ ЗАПИСИ.

Пропишите для неё следующий код:

procedure TForm1.Button1Click(Sender: TObject);

begin DataSource1.DataSet:=Table1; // источник данных - таблица end;

Проверьте работу кнопки ВСЕ ЗАПИСИ.


На оценку 4 самостоятельно (!) создайте кнопку ГОД ИЗДАНИЯ, которая бы производила выборку книг по году их издания, при этом, выводя в таблице записи с полями в следующем порядке, как указано в рисунке ниже, т.е. вначале был столбец ГОД ИЗДАНИЯ, затем НАЗВАНИЕ и лишь потом АВТОР.

hello_html_7b731e34.jpg





На оценку 5 самостоятельно (!) создайте кнопку ИЗДАТЕЛЬСТВО, которое бы производило выборку книг по наименованию издательства. Порядок столбцов: Издательство, Место издания, Название, Автор, Шифр.


Практическая работа 20. Кодогенерация модельных элементов из Приложения Б.

Построение диаграммы размещения


В приложении Б, с помощью визуального представления, описаны основные законы кодогенерации при установках кодогенерации типа Default.

Задание. Создать новый проект в Rational Rose. Для каждого элемента из приложения создать в Rose соответствующую модель классов и выполнить кодогенерацию для нее.

В этом упражнении создается диаграмма Размещения для системы обработки заказов.

hello_html_m7df5b8f4.gif

Рис. 18 Диаграмма размещения для модельной задачи

Этапы выполнения упражнения

Добавление узлов к диаграмме Размещения

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

2. Нажмите кнопку Processor (Процессор) панели инструментов.

3. Щелкнув мышью на диаграмме, поместите туда процессор.

4. Введите имя процессора "Сервер базы данных".

5. Повторив шаги 2—4, добавьте следующие процессоры:

-Сервер приложения

- Клиентская рабочая станция №1

- Клиентская рабочая станция №2

6. На панели инструментов нажмите кнопку Devices (Устройство).

7. Щелкнув мышью на диаграмме, поместите туда устройство.

8. Назовите его "Принтер".


Добавление связей

1. Нажмите кнопку Connection (Связь) панели инструментов.

2. Щелкните мышью на процессоре "Сервер базы данных".

3. Проведите линию связи к процессору "Сервер приложения".

4. Повторив шаги 1 — 3, добавьте следующие связи;

- От процессора "Сервер приложения" к процессору "Клиентская рабочая станция №1"

- От процессора "Сервер приложения" к процессору "Клиентская рабочая станция №2"

- От процессора "Сервер приложения" к устройству "Принтер"


Добавление процессов

1. Щелкните правой кнопкой мыши на процессоре "Сервер приложения" в браузере.

2. В открывшемся меню выберите пункт New > Process (Создать > Процесс),

3. Введите имя процесса — OrderServerExe.

4. Повторив шаги 1 —- 3, добавьте процессы:

- Процесс OrderclientExe на процессоре "Клиентская рабочая станция №1"

- Процесс ATMClientExe на процессоре "Клиентская рабочая станция №2"


Показ процессов на диаграмме

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

2. В открывшемся меню выберите пункт Show Process (Показать процессы).

3. Повторив шаги 1 и 2, покажите процессы на следующих процессорах:

- Клиентская рабочая станция №1

- Клиентская рабочая станция №2



Заключение.


В результате выполнения практических работ обучающийся должен понять последовательность работ при проектировании информационной системы и освоить программную среду Rational Rose. Начинать надо с Use Case диаграммы, остальные диаграммы должны служить декомпозицией вариантов использования первой диаграммы. Логические и физические разделы модели Rose с помощью кодогенерации преобразуются в программный код Delphi. Изменения в модели Rose, путем нажатия нескольких кнопок, сразу соответствующим образом изменяют программный код. Тем самым проиллюстрировано основная идея CASE технологий - автоматизированная поддержка информационной системы на всех этапах ее жизненного цикла.


Рекомендуемая литература


1 У.Боггс, М. Богс UML и Rational Rose. Из-во «ЛОРИ», 2000 г., 580 с

2. М. Фаулер, К. Скотт UML в кратком изложении. Применение стандартного языка объектного моделирования: Пер. с англ. – М.: Мир, 1999.- 191 с.,с ил.



Приложение А. Таблица законов кодогенерации из Rose в Delphi

Элемент модели: Category

Наименование св-ва

Описание

ClassDiagram

The name of diagram to add classes to when reverse engineering. Defaults to "Overview". If "", then no diagram is created.

Элемент модели: Class

Наименование св-ва

Описание

Kind

One of "", "class" (default), "interface", "dispinterface", "object". The class stereotype is also set to "Interface" if the kind is "interface" or "dispinterface".

Элемент модели: ProcedureType

Наименование св-ва

Описание

<>

Delphi Procedure Types are modelled in Rose as classes with a stereotype "ProcType"

ProcedureType_ofObject

True or False (default), true if procedure type references a method of an instance object.


Элемент модели: Component

Наименование св-ва

Описание

ComponentKind

One of "unit", "library", "program", or "package". Library or program components describe as projects, package components are ignored (their referenced units are in the RDL view anyway).


Элемент модели: Attribute

Наименование св-ва

Описание

Published

True or False (default). If the attribute is public and published is true, then the attribute gets generated to code in a published visibility section.

Элемент модели: Role

Наименование св-ва

Описание

Published

True or False (default). If the role is public and published is true, then the role gets generated to code in a published visibility section.

Array_Range

If not "" (default), then the role is generated to code as an array with the specified range. If "", then the role's cardinality is used to determine it the role is an array.

Элемент модели: Operation

Наименование св-ва

Описание

Published

True or False (default). If the operation is public and published is true, then the operation gets generated to code in a published visibility section.

Operation_Abstract

True or False (default). If true, then the operation is generated to code with an "abstract" directive.

Operation_Binding

One of "" (default), "virtual", "dynamic", "override", "reintroduce". If not "", then the operation is generated to code with the specified binding.

Operation_CallingConvention

One of "" (default), "register", "pascal", "cdecl", "stdcall", "safecall". If not "", then the operation is generated to code with the specified calling convention.

Operation_Message

"" (default) or a message expression. If not "", then the operation is generated to code with a "message" directive having the specified value.

Operation_Overload

True or False (default). If true, then the operation is generated to code with a "overload" directive.

Operation_Kind

The kind of the operation. One of "procedure" (default), "function", "constructor", "destructor", "class procedure", "class function".

Элемент модели: Property

Наименование св-ва

Описание

<>

Delphi properties are modelled in rose as operations with a stereotype of "Property".

Published

True or False (default). If the property is public and published is true, then the property gets generated to code in a published visibility section.

Property_Index

"" (default) or index expression. If not "", then the property is generated to code with a "index" specifier having the specified value.

Property_Read

"" (default) or read expression. If not "", then the property is generated to code with a "read" specifier having the specified value.

Property_ReadOnly

True or False (default). If true,then the property is generated to code with a "readonly" specifier. .

Property_Write

"" (default) or write expression. If not "", then the property is generated to code with a "write" specifier having the specified value.

Property_WriteOnly

True or False (default). If true,then the property is generated to code with a "writeonly" specifier.

Property_Stored

"" (default) or storage expression. If not "", then the property is generated to code with a "stored" specifier having the specified value.

Property_DefaultSpecifier

One of "" (default), "nodefault", or "default". If not "", then the property is generated to code with a default value specifier. If "default", the value is obtained from the Property_DefaultValue model property.

Property_DefaultValue

"" (default) or constant expression. The value used for the "default" specifier.

Property_Implements

"" (default) or implements expression. If not "", then the property is generated to code with a "implements" specifier having the specified value.

Property_IsDefaultProperty

True or False (default). If true, then the property is generated to code with a "default" property directive. Only relevant for array properties.

Элемент модели: Parameter

Наименование св-ва

Описание

Mode

One of "" (default), "const", "var", "out". If not "", then the parameter is generated to code with the specified mode.





Приложение Б. Модели кодогенерации при настройке по типу Default


Type SampleClass1 = class

(BaseClass, SampleInterface)

    {...}

end;

hello_html_m438e67a1.png


type SampleClass2 = class private

    AnAttribute : Integer;

    ARole : SupplierClass1;

Public

    procedure AnOperation (arg : Integer);   

property AProperty : Integer

index 2

    read AnAttribute         write AnOperation;

end;

hello_html_fe217f0.png

Property specifiers are stored in the code generation properties of the associated rose operation.


type SampleClass3 = class

private

     ArrayRole1 : array of SupplierClass2;

     ArrayRole2 : array [1..10] of SupplierClass5;

     ArrayRole3 : array [SampleRange] of SupplierClass3;

     ArrayRole4 : TItems;

end;

hello_html_76d7e036.png

ArrayRole3 range 'SampleRange' is stored in the Array_Range code gen property.

To specify your own collection type, instead of using arrays, add a ':' and the collection type to the role name.

type SampleRecord = record

          attr1 : Integer;

          attr2 : Real;

     end;

hello_html_m5c109fe3.png

type SampleEnum = ( value1, value2, value3 );

hello_html_6b59bb39.png

type ProcedureTypeSample = function( arg : Integer ) : Integer;

hello_html_m7e201744.png

A procedure type maps to a Rose class, with a ProcType stereotype, and a single operation 'signature' which represents the procedure type signature

type SampleRange = 1..10;

hello_html_493d32d3.png

A subrange is represented as a Rose class with 'Range' stereotype, and 2 attributes named Low and High. The initial value of these attributes are the low and high values of the range

type TOldType = class

     end;

 

type SampleTypeId1 = TOldType;

type SampleTypeId2 = Integer;

hello_html_m46ef0075.png

A type id is represented as a Rose class with a 'TypeId' stereotype. If the type being renamed is a standard delphi type (such as Integer) an attribute is used to model this type. Otherwise, an inheritance relationship is used.

type SampleClassRef = class of TObject;

 

type SamplePointer = ^TOtherType;

 

type SampleFile = file of Integer;

 

type SampleArray = array of array of Integer;

hello_html_6ba0c677.png

Delphi pointer types, class references, array types, set types, and file types are represented as Rose classes with stereotypes. If the delphi type references another user-defined type, this is shown with a dependency. If the delphi type references a basic delphi type (Integer) or is complex (i.e. nested arrays) the reference is modeled with an attribute.

Unit SampleUnit;

 

interface

 

type SampleClass1 = class {…} end;

 

implementation

end;

hello_html_m3d71bb2.png

hello_html_0.gif

A unit maps to a component and a category. Its member classes are the component’s assigned classes.





Приложение В Результаты кодогенерации проекта в Delphi.

Модуль NewProect.dpr (Корневая папка)


program NewProject;

uses

OrderClientExe in 'OrderClientExe.pas',

OrderServerExe in 'OrderServerExe.pas',

OrderDetail_ in 'Baundary\OrderDetail_.pas',

OrderOptions_ in 'Baundary\OrderOptions_.pas',

TransactionMgr_ in 'Control\TransactionMgr_.pas',

OrderMgr_ in 'Control\OrderMgr_.pas',

Order_ in 'Entity\Order_.pas',

OrderItem_ in 'Entity\OrderItem_.pas';


begin

end.


Модуль OrderDetail_.pas (Папка Baundary)


unit OrderDetail;

interface

uses

OrderMgr;

var theOderMgr : OderMgr;

procedure Open;

procedure SubmitinfoXX;

procedure Save;


implementation

procedure Open;

begin

end;

procedure SubmitinfoXX;

begin

end;


Модуль OrderOptions_.pas (Папка Baundary)


unit OrderOptions_;

interface

uses

OrderDetail_;

type

OderOptions = class;

OderOptions = class

public

theOrderDetail : OrderDetail;

procedure Create;

end;

implementation

procedure OderOptions.Create;

begin

end;

end.


Модуль OrderMgr_.pas (Папка Control)


unit OrderMgr;

interface

uses

Order,

TransactionMgr;

type

OderMgr = class;

OderMgr = class

public

theOrderCollection : array of Order;

theTransactionMgr : TransactionMgr;

procedure SaveOrder;

end;

implementation

procedure OderMgr.SaveOrder;

begin

end;


end.


Модуль TransactionMgr _.pas (Папка Control)


unit TransactionMgr;

interface

uses

Order,

OrderItem;

var theOrderCollection : array of Order;

var theOrderItemCollection : array of OrderItem;

procedure SaveOrder;

procedure CommitXX;

implementation

procedure SaveOrder;

begin

end;

procedure CommitXX;

begin

end;

end.


Модуль Order_.pas (Папка Entity)


unit Order_;

interface

uses

OrderItem_;

type

Order = class;

Order = class

public

theOrderItemCollection : array of OrderItem;

procedure Create;

procedure SetInfo;

procedure GetInfo;

end;

implementation

procedure Order.Create;

begin

end;

procedure Order.SetInfo;

begin

end;

procedure Order.GetInfo;

begin

end;

end.


Модуль OrderItem_.pas (Папка Entity)



unit OrderItem_;

interface

type

OrderItem = class;

OrderItem = class

public

procedure GetInfo;

procedure Create;

procedure SetInfo;

end;

implementation

procedure OrderItem.GetInfo;

begin

end;

procedure OrderItem.Create;

begin

end;

procedure OrderItem.SetInfo;

begin

end;

end.


Модуль OrderClientExe.pas (Корневая папка)


unit OrderClientExe;

interface

implementation

end.


Модуль OrderServerExe.pas (Корневая папка)



unit OrderServerExe;

interface

implementation

end.

41

Краткое описание документа:

 

Данная работа содержит методические указания к практическим занятиям по дисциплине «Разработка и эксплуатация экономических информационных систем», предназначена для обучающихся по специальности 230401 «Информационные системы (по отраслям)».

 

Цель разработки: оказание помощи обучающимся в выполнении практических работ по дисциплине: «Разработка и эксплуатация экономических информационных систем».

 

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

 

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

 

Данное пособие может быть использовано для освоения основных приемов работы.


Автор
Дата добавления 21.02.2015
Раздел Информатика
Подраздел Другие методич. материалы
Просмотров847
Номер материала 402089
Получить свидетельство о публикации

Выберите специальность, которую Вы хотите получить:

Обучение проходит дистанционно на сайте проекта "Инфоурок".
По итогам обучения слушателям выдаются печатные дипломы установленного образца.

ПЕРЕЙТИ В КАТАЛОГ КУРСОВ

Похожие материалы

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