В качестве примера non-code проекта разберём создание простого приложения для учета клиентов, которые пользуются платным абонементом для доступа к библиотеке технической литературы.
Требования заказчика
Цели и задачи
Организация учета платного абонемента библиотеки. Регистрация пользователей. Учет поступившей оплаты. Учет периода доступа.
Среда выполнения
Windows 7 и старше
СУБД
Бесплатная и простая
Количество пользователей
Один
Входные данные
Сведения о клиенте: имя, учетная записи в google, примечание.
Сведения об оплате: дата платежа, сумма платежа
Сведения о доступе: дата начала, дата окончания, включен/выключен.
Выходные данные
Табличное отображение сведений о доступе клиента к библиотеке и оплате этого доступа.
Процесс обработки
Быстрый ввод данных в таблицу. Сортировка по клиенту и датам.
Дополнительные требования
Максимально простая реализация
Анализ требований заказчика
В нашем первом проекте главным требованием будет простота реализации.
Для этого мы создадим единственную таблицу, в которую будем вводить все данные. По сути, мы создадим что-то вроде листа MS Excel, в котором мы будем хранить:
- Имя клиента – фамилия и имя
- Учетная запись Google – адрес для предоставления доступа
- Примечание – дополнительные сведения: страна, язык и т.д.
- Дата платежа – дата оплаты
- Сумма платежа – сумма оплаты
- Дата начала – дата начала доступа
- Дата окончания – дата окончания доступа
- Активность – включен ли доступ
🔨 Внесите данную информацию в проектную документацию.
Выбор СУБД
Исходя из описаний СУБД, которые можно найти в разделе “Обзор возможностей DataExpress“, большого выбора у нас нет и мы будем использовать универсальную СУБД Firebird, встраиваемую (embedded) версию.
📝 По умолчанию DataExpress работает со встраиваемой версией СУБД Firebird, но можно использовать подключение к серверу Firebird в локальной сети, что позволяет организовать многопользовательскую работу.
Проектирование структуры данных
Как правило, для проектирования структуры данных разработчики используют специальные средства проектирования баз данных, обеспечивающие моделирование данных и генерацию схем баз данных (как правило, на языке SQL). К ним относятся ERwin (Logic Works), S-Designor (SDP) и DataBase Designer (ORACLE).
В DataExpress система редактирования структуры БД совмещена с редактором формы редактирования, который имеет простой и удобный графический интерфейс, а все взаимодействие с базой скрыто от пользователя.
Необходимая базовая информация о структуре хранения и типах данных находится в разделе “Обзор возможностей DataExpress” .
🔨 Теперь мы можем определиться с типом данных для каждого поля нашего проекта. Данную информацию необходимо внести в документацию проекта.
- Имя клиента – текст
- Учетная запись Google – текст
- Примечание – текст
- Дата платежа – дата
- Сумма платежа – число
- Дата начала – дата
- Дата окончания – дата
- Активность – флажок
Создание таблицы
Парадигма проектирования в DataExpress выглядит нестандартно: форма определяет содержимое. Это означает, что для создания таблицы БД необходимо создать форму – форму редактирования.
🔨 На панели инструментов нажимаем кнопку “Добавить форму” (1). Альтернативный вариант: во всплывающем меню дерева форм выбрать пункт “Добавить форму (2)”.
В списке форм появится новая форма с именем по умолчанию, которое необходимо сменить на более понятное. Для этого кликаем по форме и в панели свойств нажимаем кнопку “Имя формы” (1). В появившемся окне нужно заполнить четыре поля и нажать кнопку “ОК” для сохранения результата.
Поле | Значение | Назначение |
---|---|---|
Имя формы | Абонемент | Используется в качестве имени таблицы |
Заголовок множества записей | Абонементы | Заголовок для табличного представления и вкладок на главной форме. По умолчанию совпадает с именем формы. |
Заголовок одной записи | Абонемент | Заголовок для формы редактирования. По умолчанию совпадает с именем формы. |
Имя компонента | frmMain | Имя компонента для использования в скриптах. |
📝 Изменение имени формы будет приводить к изменению имени таблицы в БД.
Для удаления таблицы нужно выбрать форму (1), а затем нажать кнопку “Удалить форму” (2) или выбрать пункт “Удалить форму” из всплывающего меню (3).
Добавление полей
Поля в таблице тесно связаны с компонентами для ввода данных на форме редактирования – добавляя на форму компоненты вы будете создавать новые поля в таблице БД.
🔨 Чтобы ускорить процесс, используем кнопку “Добавить поля” (1), при нажатии которой появляется окно (2) для ввода списка полей, которые нужно добавить. Добавление производится непосредственно в табличной части, где вводится имя поля (3), тип поля (4) и для некоторых типов – размер (точность) (5). Для управления списком полей используются кнопки “Добавить” и “Удалить”, а также кнопки “Вверх” и “Вниз”, которыми меняется очередность полей. Эта очередность в дальнейшем определит место расположения компонентов пользовательского интерфейса на форме редактирования.
Свойство | Поле | Тип поля | Размер/Точн. |
---|---|---|---|
Имя клиента | Имя клиента | Текст | 50 |
Учетная запись GMail | Учетная запись GMail | Текст | 30 |
Примечание | Примечание | Текст | 100 |
Дата платежа | Дата платежа | Дата | – |
Сумма платежа | Сумма платежа | Число | 2 |
Дата начала | Дата начала | Дата | – |
Дата окончания | Дата окончания | Дата | – |
Активность | Активность | Флажок | – |
📝 DX разрешает вводить имена таблиц и полей на русском языке. Обычно я рекомендую использовать латиницу, так как это упрощает написание SQL-запросов, но в случае с DX в этом нет необходимости, так как до запросов к физическим таблицам дело не дойдет. Дело в том, что DX тщательно прячет логику работы с физической базой, в которой таблицы называются Tn, а поля в них – Fk, где n – это внутренний ID формы, а k – порядковый номер поля.
В результате получаем форму, на котором аккуратно расположились компоненты ввода данных указанного типа:
Классы и компоненты
Что такое классы и компоненты, а также перечень доступных визуальных компонент находится в разделе “Обзор возможностей DataExpress” .
В нашем первом проекте нам понадобилась только одна форма frmMain (TdxForm). На ней с помощью мастера мы разместили необходимые визуальные компоненты и настроили их основные свойства.
Свойство Name
Это свойство есть у всех компонент. Оно является идентификатором компонента, используется при настройке свойств и написании скриптов.
Идентификаторы —- имена объектов и конструкций программы (меток, констант, типов, переменных, типов, процедур, функций, объектов, модулей, программ, полей в записях и т.д.).
Имя может иметь любую длину, однако в языке Pascal, который лежит в основе проекта DX, различимыми являются только первые 63 символа. Имя состоит из буквы, за которой могут следовать буквы, цифры или символ подчеркивания. Имя может начинаться с символа подчеркивания. Имена безразличны к регистру клавиатуры.
DX поддерживает кириллические (по сути – на любом языке, т.к. редактором поддерживается Unicode) имена для компонент, однако рекомендуется использовать английские слова (существительные в единственном числе, для кнопок – глаголы) и сокращения: они более короткие; при наборе скриптов не нужно будет постоянное переключать язык; если всегда использовать один язык, то не будет путаницы с буквами, имеющими сходное написание (“О”, “H”, “Р” и др.).
Выбор имени желательно осуществлять в соответствии с логической или физической сущности именуемого объекта, что облегчает понимание программы и служит признаком хорошего стиля программирования. К хорошему стилю также относится использование префиксов в именах компонентов, которые соответствуют классу компонента. Префикс названия должен быть фиксированной длины, оптимально – 3 символа. Обычно используют название класса, удаляя из него гласные.
Класс | Префикс | Примечание |
---|---|---|
TdxForm | frm | Форма (англ. form) |
📝 Хотя это соглашение является частью внутреннего стандарта разработчика, такой стиль оформления проекта говорит о его профессионализме.
Каждая форма должна иметь уникальное имя. Остальные компоненты также должны иметь уникальные имена в пределах одной формы, то есть на разных формах могут быть компоненты с одинаковыми именами, а на одной – нет. Это связано со способом обращения к компонентам из скриптов, о чем я расскажу позже, а пока нужно запомнить данное правило уникальности. Впрочем, если вы его забыли, то DX поправит вас – программа не допускает ввода одинаковых имен компонентов на одной форме и выдает сообщение об ошибке.
☝ Нельзя в качестве имени использовать ключевые слова языка Pascal. Хотя редактор свойств не выдаст ошибку при вводе такого слова, в дальнейшем это может привести к невозможности использования скриптов для доступа к компоненту с таким именем.
Настройка табличного представления
В формах DX уже присутствует компонент для отображения данных в виде таблицы. Пока вы создавали поля (добавляли компоненты редактирования), система позаботилась об основных настройках табличного представления. Нам осталось только установить ширину колонок.
Кликаем по форме и в появившейся панели редактирования свойств нажимаем кнопку “Таблица”. Появляется окно настроек опций отображения табличного представления. Опции настройки мы рассмотрим позже. Их много и они позволяют настраивать внешний вид таблицы без написания кода.
🔨 С помощью мыши настраиваем ширину колонок и меняем их расположение. Сохраняем настройки, нажав кнопку “ОК”.
Сохраняем проект и возвращаемся в режим основной работы (F11).
Подведение итогов
За несколько минут вы создали приложение для работы с базой данных читателей, освоив основные приёмы визуального программирования в DX:
- добавление формы;
- размещение на форме визуальных компонентов с помощью мастера добавления.
Вы познакомились с основой проектирования приложений и создали пакет проектной документации: требования заказчика, техническое задание и описание проекта (если вы пропустили эту часть практической работы, рекомендую её сделать сейчас).
Вы узнали, что означают понятия компоненты и классы, лежащие в основе объектно-ориентированного программирования.
Теперь нужно усилить наши теоретические знания и закрепить практический успех. Для этого мы будем наращивать функциональность нашей программы за счет применения новых компонентов, а также более детального изучения свойств использованных компонентов. Также мы будем изучать все виды программирования: визуальное, структурное, компонентное и объектно-ориентированное. Так же необходимо изучить теорию реляционных отношений.
Но прежде небольшой обзор по тем возможностям программы, которые уже в ней присутствуют в режиме пользователя.