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


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

1) Перейдем к форме Преподаватели. Добавим на форму компонент dgPosition (экземпляр класса DataGrid), в нем будут отображаться список должностей выбранного преподавателя и ehPosition (экземпляр класса ExpressionHandle). Настроим ehPosition: в свойстве RootHandle выберем значение cmhLecturer, а в свойстве Expression сформируем выражение self.rolePosition. Настроим интерфейс (см. Рисунок 10.8).

Рисунок 10.8 – Создание таблицы Должности


2) В компонент MainMenu добавим еще два пункта: Назначить должность и Освободить от должности. При выборе пункта Назначить должность будет создаваться окно, в котором можно будет назначить должность выбранному преподавателю. Если потребуется освободить преподавателя от должности, выберем должность в таблице и нажмем пункт меню Освободить от должности.

3) Создадим новую форму wfPositAsign (класс TPositAsign), в свойстве Text формы введем значение Назначение должности. Эта форма будет служить для выбора и назначения должности текущему преподавателю. Настроим создание формы по выбору пункта Назначить должность в главном меню формы Преподаватели. Но перед этим сохраним текущий объект Преподаватель, который будет использован в форме Назначение должности. Настроим интерфейс созданной формы (см. Рисунок 10.9).

Рисунок 10.9 – Настройка компонентов формы Назначение должности

Компонент Label добавлен на форму, чтобы отобразить в его поле Ф.И.О. выбранного в таблице преподавателя. Выбирать нужную должность будем с помощью компонента ComboBox – выпадающего списка. Если нужная должность отсутствует, ее можно будет добавить в отдельном окне. Окно добавления должности будет создаваться нажатием кнопки, расположенной справа от выпадающего списка. При нажатии на кнопку ОК, преподавателю будет назначена выбранная должность, после чего окно закроется. При отмене произойдет закрытие окна Назначение должности.

4) В обработчике события загрузки окна Load запишем одну операцию

Label1.Text := CurLect.LecturerSNP;

5) Добавим на форму дескрипторs ehPosition и cmhPosition. Настроим их на обращение к экземплярам класса clChair. В свойстве BindingContext дескриптора cmhPosition выберем значение ComboBox1.

6) В свойстве DataSource компонента ComboBox1 установим значение ehPosition, а в свойстве DisplayMember – PositionName. После этого выпадающий список будет отображать список должностей.

7) В обработчике события нажатия кнопки ОК запишем следующий код:

var

CurPosition: clPosition;

begin

if cmhPosition.Element.AsObject is clPosition

then

begin

CurPosition := clPosition(cmhPosition.Element.AsObject);

 

CurLect.rolePositions.Add(CurPosition);

end;

Close;

Строка

CurLect.rolePositions.Add(CurPosition);

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

8) Создадим форму wfPositAdd (класс TPositAdd), заголовок формы назовем Добавление должности. В этой форма будем создавать справочник должностей. Настроим создание данной формы по нажатию кнопки, расположенной справа от выпадающего списка на форме Назначение должности. Настроим интерфейс (см. Рисунок 10.10).

Рисунок 10.10 – Настройка компонентов формы Добавление должности

Таблицу Должности настроим на отображение списка всех должностей. По нажатию кнопки Добавить создадим новый объект класса clPosition (Должность), в котором единственный атрибут PositionName получит значение, введенное в поле компонента TextBox. Кнопку Выход настроить на закрытие окна.

9) Запустим приложение. Проверим настроенные операции (см. Рисунок 10.11).

Рисунок 10.11 – Работа со справочником Должность


Поиск объектов

Рассмотрим операцию поиска в приложении. Настроим поиск преподавателя по маске (строке, содержащей фамилию, имя или отчество).

10) В компонент MainMenu добавим пункт Найти. При выборе пункта будет создаваться окно, в котором можно будет по введенной строке осуществить поиск.

11) Создадим новую форму wfLectSearch (класс TLectSearch), в свойстве Text формы введем значение Поиск преподавателя. Настроим создание формы по выбору пункта Найти в главном меню формы Преподаватели. Настроим интерфейс созданной формы (см. Рисунок 10.9).

Рисунок 10.12 – Настройка компонентов интерфейса

На форму поместим компонент TextBox для ввода строки, по которой будет осуществляться поиск. Результаты поиска будут выведены в таблице после нажатия кнопки Найти.

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

if ehLecturer.GetList.Count <> 0

then

По нажатию кнопки Выход окно Поиск преподавателя закроется.

12) Добавим в проект дескрипторы ehLecturer и cmhLecturer. Первый потребуются для осуществления OCL-запроса и вывода полученной коллекции. Второй необходим для оперирования с выбранным в таблице преподавателем.

13) Настроим поля таблицы так, чтобы можно было отобразить в ней название кафедры каждого преподавателя. Для этого надо настроить ehLecturer. Обратимся к свойству Columns элемента ehLecturer. Откроется диалоговое окно, предназначенное для настройки колонок. Новые колонки создаются в дополнение к уже существующим, автоматически созданным на базе текущих атрибутов класса Преподаватель. Для добавления колонок служит кнопка Add. При ее нажатии открывается меню выбора типа колонки. Создадим одну колонку. В свойстве Name задается название колонки, введем в него строку LectChair. В качестве выражения OCL введем конструкцию:

self.roleChair.ChairName

В ней происходит обращение к ссылке на кафедру (к окончанию ассоциативной связи roleChair), связанную с текущим преподавателем. Нажмем кнопку ОК – окно добавления колонки закроется. В таблице появится новая колонка LectChair.

14) В обработчик нажатия кнопки Найти запишем код:

procedure TLectSearch.Button1_Click(sender: System.Object; e: System.EventArgs);

var

StrSearch: string;

StrExpression: string;

begin

StrSearch := TextBox1.Text;

StrExpression := 'clLecturer.allInstances->select(LecturerSNP. sqlLikeCaseInsensitive(''' + ' %' + StrSearch + ' %' + '''))';

ehLecturer.Expression := StrExpression;

dgLecturer.CaptionText := 'Результаты поиска';

end;

Переменная StrSearch предназначается для хранения строки-параметра, которую передадим в OCL-запрос. С помощью переменной StrExpression будет формироваться строка, которую передадим дескриптору ehLecturer в качестве выражения. Операция sqlLikeCaseInsensitive используется совместно с операцией Select и обеспечивает поиск записей, содержащих заданную строку-параметр. При этом применим символ маски поиска (%). В результате запроса будут получены все записи в фамилии, имени или отчестве которых будет встречаться подстрока записанная в переменную StrSearch.

15) Настроим функционирования пунктов главного меню. В обработчике выбора пункта меню Действие > Редактировать запишем операции сохранения текущего объекта Преподаватель в переменную CurLect типа clLecturer и создания окна Редактирование преподавателя. К форме Редактирование преподавателя подключим форму Преподаватель, в которой уже объявлена переменная CurLect. В обработчике выбора пункта меню Действие > Удалить запишем операции удаления текущего объекта Преподаватель, как делали это раньше.

16) Запустим приложение. Проверим работу поиска и действий с найденными преподавателями (см. Рисунок 10.13).

Рисунок 10.13 – Поиск и редактирование объектов

Задания

1) Организовать добавление и редактирование объектов в отдельных окнах. Реализовать удаление и обновление базы данных при каждом изменении информации.

2) Применить операции поиска.

3) Создать дружественный интерфейс.

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

1) Как программно создаются объекты ECO?

2) Как программно удалить объект ECO?

3) Как программно формируются ассоциативные связи между объектами ECO?

4) С помощью каких операций OCL можно организовать поиск?

Заключение

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

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

Взаимосвязанный технологический цикл процесса разработки позволяет сформировать целостную картину об этом процессе, что является неотъемлемым требованием соответствующих компетенций для выпускников направления «230100 – Информатика и вычислительная техника».



Дата добавления: 2021-12-14; просмотров: 289;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.017 сек.