Разработка инфомационной системы. 1. 1Техникоэкономическая характеристика предметной области и предприятия
![]()
|
Программное обеспечение задачи Общие положения (дерево функций и сценарий диалога)В данном проекте можно выделить следующие категории функций: функции вода информации в справочники, функции ввода данных недвижимости и функции получения аналитических отчетов. Каждая из этих категория относится соответствующей подсистеме разрабатываемого приложения: подсистеме ведения справочников, подсистеме ввода документов и подсистеме получения аналитических отчетов. Приложение обеспечивает удобный и понятный диалог пользователя с программой для вызова всех функций. Доступ пользователя к функциям производится через главное меню главной формы приложения и через кнопки панели быстрого запуска, дублирующие соответствующие пункты меню. Главная форма приложения кроме предоставления основного интерфейса доступа ко всем функциям приложения выполняет также роль контейнера для всех остальных экранных форм. Первая группа экранных форм предоставляет пользователю доступ к подсистеме ведения справочников системы. Эта группа экранных форм вызывается из главного меню программы «Справочники». Каждый подпункт этого пункта меню соответствует вызову экранной формы, которая позволяет редактировать соответствующий справочник. Все экранные формы просмотра и редактирования справочников похожи друг на друга и позволяют выполнять функции просмотра списка справочника, ввода новых данных в справочник, редактирования существующих данных и удаления имеющихся данных. Для ввода новых и редактирования существующих данных справочников вызываются формы редактирования соответствующих справочников. Эти же формы служат и для просмотра подробной информации записи справочника, так как в списке справочника представлены только основные данные. Далее представлен сценарий диалога. ![]() Далее представлено дерево функций. ![]() Структурная схема проектаНа рисунке 2.14 приведена структурная схема проекта. ![]() Рисунок 2.1. Схема вызова модулей. Описание программных модулейВ основу программной реализации решения задачи был положен объектно-ориентированный подход. Выбранный в качестве языка программирования язык С++ включает в себя мощный аппарат для поддержания этой наиболее перспективной технологии: классы и объекты, иерархия структур, объединений и классов с различными механизмами наследования, инкапсуляция данных и обрабатывающих функций с несколькими уровнями доступа, полиморфизм операций, функций и объектов, обеспечивающий как статический так и виртуальный методы доступа. Встроенный аппарат объектно-ориентированного программирования позволяет описывать сложные предметные области и создавать гибкие, легко адаптируемые к нуждам пользователя программные пакеты как системного так и прикладного назначения. Для реализации каждой подзадачи в проекте были созданы несколько классов, наследников стандартного класса библиотеки VCL TForm. Программа разрабатывалась как Web-приложение и удовлетворяет всем требованиям к интерфейсу Web-приложения. Программа разбита на модули, что соответствует принципам модульного программирования. Рассмотрим каждый из этих модулей подробно. Модуль главной формы приложения предоставляет пользователю интерфейс доступа ко всем основным функциям программы. Доступ ко всем функциям программы осуществляется через главное меню и панель кнопок быстрого доступа. Все кнопки и пункты меню снабжены подробными подсказками. Подсистема редактирования справочников включает в себя ряд модулей, которые предназначены для просмотра и редактирования содержимого справочников. Отметим, что эти же формы используются и в других подсистемах. Так форма просмотра списка товаров, являющаяся частью подсистемы ведения справочников, вызывается из подсистемы учета движения товаров при оформлении операций прихода или расхода для выбора товаров, а также из подсистемы аналитических отчетов для выбора товара при задании условия построения отчета по какому-либо товару. В подсистему ведения справочников входят следующие модули: Модуль просмотра списка товаров предназначен для просмотра списка номенклатуры, а также для выбора товара в какую-либо вызывающую форму; Модуль редактирования товара, вызываемый из модуля просмотра товаров предназначен для редактирования данных одного конкретного товара. Этот же модуль вызывает модули связанных справочников, таких как значения свойств товаров, проекты, которые относятся к товару и аналоги товара. Таким образом, в этом модуле происходит основная работа по заданию всех данных товара. Модуль аналогов предназначен для просмотра и назначения аналогов товаров для товара; Модуль проектов предназначен для просмотра списка типовых проектов. В которых могут применяться товары, а также для выбора этих проектов в вызывающие формы; Модуль редактирования проекта предназначен для редактирования данных одного конкретного проекта и задания свойств проекта для этого проекта; Модуль свойств проекта предназначен для ведения списка свойств проекта; Модуль редактирования свойства проекта предназначен для редактирования данных одного конкретного свойства; Модуль клиентов предназначен для просмотра и редактирования списка клиентов, включая редактирование всех данных клиента, а также для выбора клиентов в вызывающую форму; Модуль производителей предназначен для просмотра и редактирования списка клиентов, включая редактирование всех данных клиента, а также для выбора клиентов в вызывающую форму; Модуль свойств товаров предназначен для просмотра списка свойств товаров; Модуль редактирования свойств товаров предназначен для редактирования данных оного конкретного свойства товаров и для задания всех возможных значений этого свойства; Модуль значений свойств предназначен для просмотра и редактирования значений свойств товаров Модуль складов предназначен для просмотра списка складов и выбора складов в вызывающую форму; Модуль редактирования складов предназначен для редактирования данных конкретного склада; Подсистема учета движения товаров содержит модули. Отвечающие за основной функционал программы: обеспечение движения товаров на складах и подсчет остатков товаров: Модуль журнала документов содержит список операций, которые записаны в таблицу операций базы данных; Модуль документа предназначен для редактирования одной операции, включая все ее компоненты. Этот модуль также как и модуль товаров вызывает многие другие формы для выбора значений. Модуль редактирования строки табличной части операции предназначена редактирования данных одной строки документа. Подсистема аналитической отчетности включает в себя следующие модули: Модуль составления отчета по остаткам товаров на складах; Модуль составления отчета по движениям товара по складам. В визуальной интегрированной среде разработки Borland С++ Builder основной составной частью программы является форма. Форма инкапсулирует в себе элементы интерфейса пользователя и программный код, заключающий в себе реакцию на действия пользователя. Это полностью отвечает принципам объектно-ориентированного программирования. C++ Builder автоматически создает для формы класс формы, который содержит компоненты, размещенные на форме, свойства и методы формы как автоматически создаваемые C++ Builder, так и определяемые пользователем. В разработанном приложении определены следующие формы: Форма Fmain – главная форма приложения, реализованная в файле UnitMain.cpp выполняет функции основного интерфейса доступа пользователя ко всем функциям программы через главное меню приложения и панель кнопок быстрого доступа. Кроме того, главная форма выполняет роль контейнера всех остальных форм, в которых происходит ввод и обработка данных. Форма FTovar, реализованная в файле UnitTovar.cpp, выполняет функции просмотра списка товаров, введенных в таблицу товаров базы данных системы. Главным элементом формы является компонент DBGrid палитры компонентов C++ Builder, который отображает таблицу товаров в виде списка. Колонки компонента DBGrid отображают соответствующие поля таблицы товаров: наименование, англоязычное наименование, штрихкод и производитель. Эта же форма служит для выбора товара в случае вызова этой формы из других форм для выбора того или иного товара например в форму отчета по остаткам. Форма FTovarEdit, реализованная в файле UnitTovarEdit.cpp, предназначена для просмотра и редактирования данных о товаре. В этой форме расположены органы управления, в которых отображаются основные данные товара, такие как наименование, англоязычное наименование, подробное описание, синонимы, штрих-код и цена и производитель. Отметим, что производитель выбирается путем открытия формы производителей и выбора его из предлагаемого списка. Кроме основных данных в форме редактирования товара отображаются и данные связанных справочников, записи, которых связаны с данным товаром: аналоги, проекты, к которым относится товар и свойства этого товара с их значениями. Отображении данных связанных справочников в одной форме очень удобно, так как все необходимые данные о товаре находятся вместе. Их можно просмотреть и отредактировать. Форма FormClients, реализованная в файле FormClientsU.cpp, предназначена для просмотре и редактирования данных о контрагентах системы: поставщиках и покупателях. Форма построена таким образом, что позволяет просматривать в левой своей части список покупателей, а в правой подробные данные о текущем покупателе. В списке выводится только наименование покупателя из поля наименования таблицы базы данных, в органах управления в правой части выводятся данные из всех остальных полей. Такой подход весьма удобен, так как позволяет просматривать и редактировать полные данные о клиенте в одной форме. Кнопки «Добавить», «Сохранить» и «Удалить» вызывают процедуры, выполняющие SQL-запросы на добавление, изменение и удаление записей из базы данных. Форма FormVendirs, реализованная в файле FormVendirsU.cpp, предназначена для просмотре и редактирования данных о производителях товаров. Форма построена таким образом, что позволяет просматривать в левой своей части список производителей , а в правой подробные данные о текущем производителе. В списке выводится только наименование производителя из поля наименования таблицы базы данных, в органах управления в правой части выводятся данные из всех остальных полей. Такой подход весьма удобен, так как позволяет просматривать и редактировать полные данные о производителе в одной форме. Кнопки «Добавить», «Сохранить» и «Удалить» вызывают процедуры, выполняющие SQL-запросы на добавление, изменение и удаление записей из базы данных. Форма FProj, реализованная в файле FProjU.cpp, выполняет функции просмотра списка проектов, введенных в таблицу проектов базы данных системы. Главным элементом формы является компонент DBGrid палитры компонентов C++ Builder, который отображает таблицу проектов в виде списка. Колонки компонента DBGrid отображают только поле «Наименование» таблицы проектов. Эта же форма служит для выбора проекта в случае вызова этой формы из других форм для выбора того или иного проекта например в форму редактирования данных о товаре. Форма FProjEdit, реализованная в файле UnitProjEdit.cpp, предназначена для просмотра и редактирования полных данных проекта, а также для назначения проекту свойств проекта. В левой части формы в соответствующих органах управления отображаются все данные проекта из таблицы проектов: наименование, подробное наименовании и подробное описание, а в левой части располагается список свойств этого проекта. По кнопке «Добавить свойство» открывается форма для выбора справочника свойств проектов, которая позволяет выбрать и назначить проекту свойство. Удаление свойства из списка свойств проекта происходит при нажатии кнопки «Удалить свойство». Форма FSimp, реализованная в файле UnitSimp.cpp предназначена для просмотра списка свойств проектов, которые дополнительно характеризуют проект. Форма FSimpEdit предназначена для просмотра и редактирование одного конкретного свойства проекта, которое выбрали для редактирования. Форма позволяет задать основные и дополнительные данные свойства проекта. Форма FProperty, реализованная в файле UnitProperty.cpp, представляет из себя список свойств товаров. В этой форме присутствует лишь список наименований свойств, который пользователь может просмотреть и выбрать одно из этих свойств в вызывающую форму, если форма была открыта для выбора свойства из какой-либо другой формы. Форма FPropertyEdit, реализованная в файле UnitPropertyEdit.cpp предназанчена для редактирования наименования свойства и подробного описания свойства товара, а также для задания значений свойства товаров в списке в правой части формы. Кнопки управления списком позволяют открыть форму значений свойств для выбора значения свойства. Которое может быть назначено данному свойству, а также для редактирования значения свойства, удалить значение свойства. Форма FSklad, реализованная в файле UnitSklad.cpp предназначена для просмотра списка складов, в котором представлены наименования складов. Эта же форма позволяет выбирать текущую запись склада в вызывающую форму Форма FSkladEdit, реализованная в файле UnitSkladEdit.cpp предназначена для просмотра подробных данных и редактирования как наименования, так и дополнительных данных склада. Форма FVals, реализованная в файле UnitVals.cpp предназначена для выбора значения свойства для элемента справочника товаров и вызывается только из формы товаров. Форма значений свойств отображает список свйоств товаров либо полностью, либо только тех значений, которые подчитнены определенному свойству, которое можно выбрать нажав кнопку открытия для выбора формы свойств. После того как свойство выбрано в списке значений свойств отображаются только те значения, которое может принимать данное свойство. Форма FValsEdit, реализованная в файле UnitValsEdit.cpp предназначена для редактирования значения свойства товаров, путем задания его наименования и подробного описания. Форма FormFilter, реализованная в файле FormFilterU.cpp предназначена для решения задачи отбора товаров по совокупности их свойств. Для отбора могут использоваться как основные данные товара (наименование, англоязычное наименование, синонимы, полное наименование, подробное описание) так и связанные данные товара: аналогии и свойства товаров. Так как основные данные товара представляют из себя строковые значения, то форма предлагает пользователю организовать гибкий отбор по этим данным. Можно организовать отбор записей таблицы товары по точному совпадению на введенную фразу, по вхождению введенной фразы в поле отбора, по вхождению в поле отбора всех слов из введенной фразы в любой последовательности или по вхождению в поле отбора хотя бы одного из слов введенной фразы. Такой отбор можно организовать по любому из полей таблицы отбора. Кроме отбора по основным свойствам форма фильтра предоставляет возможность организовать отбор по проектам, которым относится товар. Для этого заполняется список проектов, записи в который добавляются путем выбора проектов из формы списка проекта, когда она открывается для выбора. Органы управления списка проектов позволяют добавлять в список записи, удалять записи из списка, отметить все записи или полностью очистить список. Все записи списка могут имеют отметку использования в отборе или не использования (галочку), сняв которую пользователь может исключить отбор по данному проекту. В результате в отбор записей справочника товаров попадут только те товары, которые относятся к перечисленным в списке проектам. Также в форме реализована отбор по свойствам товаров и их значениям. В список свойств товаров можно добавлять записи из справочника свойств путем открытия формы списка свойств для выбора и выбора из нее определенного свойства. Для текущей записи в списке свойств отображаются все значения, которое может принимать данное свойство из которых пользователь выбирает путем проставления в них отметок нужные. В результате в сформированный отбор попадут только те товары, которые имеют перечисленные в списке значения перечисленных свойств. Форма фильтра не вызывается из главного меню непосредственно, а вызывается только из формы списка товаров, в том числе, когда она открывается для выбора, в случае, если в этой форме нужно организовать отбор товаров по совокупности каких-либо критериев. Форма DM, реализованная в файле UnitDM.cpp представляет из себя модуль хранения компонентов С++ Builder, обеспечивающих доступ к базе данных. Для каждой таблицы базы данных выделен отдельный компонент TQuery, который позволяет вводить и выполнять SQL-запросы, которые позволяют выбирать, редактировать и удалять записи в таблицах базы данных. То что для каждой таблицы выделен лишь один компонент доступа и то что они все объединены в одном модуле связано с тем, что программа имеет MDI-интерфейс и изменении данных в одной форме приводит к моментальному изменению их отображения во всех остальных формах. Кроме компонентов доступа к данным в этой форме хранятся и компоненты, служащие источником данных для компонентов отображения данных в формах. Компонент Database обеспечивает физическую связь всех остальных компонентов программы с базой данных. Форма FJornal предназначена для просмотра журнала документов – т.е. перечня операций, которые уже были выполнены с товарами. В форме размещен компонент TDBGrid, который отображает список операций с указанием для каждой записи следующих параметров: дата операции, номер операции, склад, с которого оформлена операция, клиент, с которым оформлена операция. Форма FDocs предназначена для редактирования или ввода новой операции по движению товара на складе. В верхней части формы размещены компоненты, в которых отображаются основные свойства операции: дата и номер операции, клиент, склад и код операции. Для выбора клиента и склада открываются для выбора формы соответсвующих справочников, в которых можно выбрать нужную запись. В нижней половине формы размещена табличная часть операции, которая представляет из себя список товаров, с указанием количества. Форма FJornalEdit, реализованная в файле UnitJornalEdit.cpp предназначена для редактирования одной строки операции. Эта форма вызывается из формы FJornal для редактирования текущей строки. Форма предоставляет простой интерфейс для ввода и изменения товара и количества в строке. Для выбора товара вызывается форма списка справочника товаров, выбранная запись в которой переносится в форму FJornalEdit. Форма FUsers предназначена для ведения списка пользователей. В компоненте DBGrid данной формы при помощи SQL-запроса формируется список пользователей системы, а в органах управления отображаются свойства пользователя: логин, пароль, фамилия, имя отчество и категория пользователя. Категория пользователя отображается радиокнопками. При нажатии на кнопки управления выполняется SQL-запрос по добавлению, редактированию данных и удалению пользователя. При удалении пользователя контролируется ссылочная целостность базы данных Форма FReg предназначена для аутентификации пользователя при начале сеанса работы с системой. Система проверяет наличие пользователя в базе данных, сверяет его пароль и в случае успеха открывает доступ к тем функциям, которые доступны пользователю в зависимости от его уровня доступа. Форма FRepForm, реализованная в файле UnitRepForm.cpp предназначена для подготовки и формирования отчета по движения товара по складам. Органы управления этой формы позволяют пользователю задать условия формирования отчета, а именно выбрать клиента, с которым была проведена операция прихода или расхода, а также склад, с которого была проведена эта операция. В нижней части формы содержится таблица, в которую пользователь может выбрать несколько записей из справочника товаров, в этом случае отчет по движениям будет строиться именно по этим товарам. Каждая форма выполняет функции соответствующего модуля при помощи компонентов среду С++ Builder, помещенных на форму из палитры компонентов. Среда быстрого создания приложений или RAD-среда (Rapid Application Development – RAD) С++ Builder используют библиотеку визуальных компонентов VCL (Visual Component Library – VCL), которая состоит из готовых к употреблению визуальных и не визуальных объектов и оболочек. Она позволяет с минимальными затратами создавать приложения, в то же время предоставляя определенную степень независимости от библиотеки VCL. При работе с компонентами С++ Builder широко использует принцип повторного использования объектов. Компоненты являются экземплярами классов которые доступны с помощью палитры компонентов Component Palette. Что может быть проще при создании приложения чем просто опустить нужный компонент на форму, задав его свойства, затем определив обработчики событий. Именно при помощи компонентов формы выполняют те функции, которые заложены в них. |