Разработка базы данных и прикладных программ для автоматизации процесса закупки лекарственных препаратов

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

2015-09-01

1.36 MB

34 чел.


Поделитесь работой в социальных сетях

Если эта работа Вам не подошла внизу страницы есть список похожих работ. Так же Вы можете воспользоваться кнопкой поиск


Федеральное казенное профессиональное образовательное учреждение

«Новочеркасский технологический техникум-интернат»

Министерства труда и социальной защиты Российской Федерации

(ФКПОУ «НТТИ» Минтруда России)

Курсовой проект

по МДК 02.2 Технология разработки и защиты баз данных профессионального модуля ПМ.02 Разработка и администрирование баз данных

Тема: Разработка базы данных и прикладных программ для автоматизации процесса закупки лекарственных препаратов

Выполнил студент группы _____________________________А.Г. Глушков

             дата, подпись

Руководитель, преподаватель __________________________О.В. Полякова

           оценка, дата, подпись

Новочеркасск, 2013

ФКОУ СПО «НТТИ» Минтруда России

   УТВЕРЖДАЮ

    Зам. директора по УМР

_________Л.Ю. Саенко

   _______________20    г.

Задание

на курсовое проектирование по МДК.02.2 Технология разработки и защиты баз данных профессионального модуля ПМ,02 Разработка и администрирование баз данных

Исполнитель, студент: ________________________ Группа:_________

Тема проекта: ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________


График выполнения проекта

Наименование раздела

Объем, %

Срок выполнения

Анализ предметной области и формирование требований пользователей

10%

Проектирование и создание базы данных

20%

Разработка прикладных программ

20%

Технология обработки информации

10%

Тестирование

15%

Оформление документации

15%

Всего:

100%

Дата выдачи задания:

Дата защиты:

Преподаватель:

Рассмотрено на заседании ПЦК ОПД и СД специальности 230115 ПКС

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

Содержание

[1] Содержание

[2]

[3] Реферат

[4] Введение

[5]

[6] 1 Анализ предметной области и формирование требований пользователей

[6.1] 1.1 Анализ предметной области

[6.2] 1.2 Запросы пользователей

[6.3] 1.3 Информационные процессы

[7]

[8] 2 Проектирование и создание базы данных

[8.1] 2.1 Разработка концептуальной модели предметной области

[8.2] 2.2 Выбор архитектуры программно-технологической реализации АИС и используемой СУБД

[8.3] 2.3 Логическое проектирование базы данных

[8.4] 2.4 Создание базы данных

[8.5]

[9] 3 Разработка клиентского программного обеспечения

[9.1] 3.1 Структура прикладного программного обеспечения

[9.2]

[9.3] 3.2 Описание интерфейса и алгоритмов работы программных модулей

[10] 4 Тестирование программного продукта

[10.1] 4.1 Организация процесса тестирования

[10.2] Методы тестирования программного продукта

[10.2.1] 4.2.1 Модульное тестирование программного продукта

[10.2.2] 4.2.2 Тестирование интеграции

[10.2.3]  Тестирование правильности

[11]

[12] 5 Технологическая часть

[12.1] 5.1 Руководство пользователя

[13]

[14] Заключение

[15] Список использованных источников

[16] Приложение А

[17] Приложение Б


Реферат

Проект 76 с., 21 рис., 32 табл., 11 источников, 2 прил. БАЗА ДАННЫХ, АВТОМАТИЗАЦИЯ УЧЕТА ЗАКУПКИ ЛЕКАРСТВЕННЫХ ПРЕПАРАТОВ.

Объектом проектирования являются база данных и прикладные программы для работы с ней.

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

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

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

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

Введение

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

В недавнем прошлом информацию такого рода хранили в картотеках, используя «бумажные» технологии. И, разумеется, они занимали довольно большие объёмы. Вся информация заносилась вручную на бумажные карточки, что создавало большие неудобства, и требовало огромных временных затрат на поиск нужной информации, добавление и редактирование данных. Естественно, работа такого вида являлась очень кропотливой. Кроме того, сама картотека довольно быстро изнашивалась по ходу работы.

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

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

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

Для решения этих и многих других задач в настоящее время используется специальное программное обеспечение, часто объединяемое в крупные информационно – справочные системы.

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

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

- данные о содержащихся в аптеке препаратах;

- данные о движении лекарственных препаратах;

- данные о поставщиках;

- данные об аптеках.

Основными требованиями, предъявляемыми к такого рода программным продуктам, можно отнести:

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

- организация поиска информации БД по запросам пользователей;

- обеспечение безопасности и целостности данных БД;

- организация сетевого доступа к БД ИС для пользователей различных категорий в соответствие с правами, установленными администратором БД;

- обеспечение удобного интуитивно понятного графического пользовательского интерфейса (GUI), доступного пользователю любой квалификации.

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

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

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

Очевидно, решение задачи такого масштаба требует тщательного планирования и выработки общей стратегии процесса разработки в соответствие с основными принципами и рекомендациями профессионального модуля ПМ. 03 Участие в интеграции программных модулей.


1 Анализ предметной области и формирование требований пользователей

1.1 Анализ предметной области 

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

Управляющий заключает договоры с поставщиками. В договор входит: номер, наименование поставщика, адрес, телефон, поставляемые товары.

Менеджер заказывает препараты на основании данных из аптек. Менеджеру необходима информация о количестве товара. На основании этих данных менеджер формирует заказ определенным поставщикам в зависимости от перечня поставляемых по договору препаратов.

Продавец осуществляет продажу, поэтому ему требуется информация о количестве того или иного лекарственного препарата.

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

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

Поставщик поставляет заказанный препарат непосредственно каждой аптеке в соответствии с заказом, в котором указывается аптека, сделавшая заказ.

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

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

Список пользователей базы данных:

  •  Управляющий;
  •  Менеджер;
  •  Продавец.

1.2 Запросы пользователей

Запросы продавца представлены в соответствии с рисунком 1.

Рисунок 1 – Форма отчета «Сведения о наличии товара»

Запросы менеджера представлены в соответствии с рисунком 2.

Рисунок 2 – Форма отчёта «Заявка на поставку»

Запросы управляющего представлены в соответствии с рисунками 3-4.

Рисунок 3 – Форма отчёта «Объёмы выполненных поставок»

Рисунок 4 – Форма отчёта «Объёмы выполненных поставок по договору»

1.3 Информационные процессы

  •  Заключение договора с поставщиками;
  •  Формирование торгового предложения от поставщика;
  •  Формирование заказа на поставку препаратов;
  •  Получение лекарственных препаратов;
  •  Информацию о количестве того или иного товара, необходимая продавцу.
  •  Менеджеру для формирования заказа требуется информация о количестве товара в аптеке:
  •  Остаток на начало периода, который подсчитывается в начале каждого месяца;
  •  Поступление (приход) товара на склад от поставщика;
  •  Продажа (расход) товара в розничной сети аптек;
  •  Остаток на конец периода, подсчитываемый в конце каждого месяца.
  •  Управляющий запрашивает информацию об объёмах выполненных поставок в определённый срок.


2 Проектирование и создание базы данных

2.1 Разработка концептуальной модели предметной области 

2.1.1 Сущности

Выделим следующие сущности:

  •  Поставщики;
  •  Торговое предложение;
  •  Заказ;
  •  Справочник препаратов;
  •  Аптеки;
  •  Товар в аптеке.

2.1.2 Первичные ключи

Выберем первичные ключи для каждой сущности(первичный ключ должен быть уникальным):

  •  Поставщики – Код поставщика;
  •  Торговое предложение – Порядковый номер;
  •  Заказ – Номер заказа;
  •  Справочник препаратов –  Код товара;
  •  Аптеки – Номер аптеки;
  •  Товар в аптеке – Код расхода.

2.1.3 Атрибуты сущностей

Определим описательные атрибуты сущностей:

  •  Поставщики – Название поставщика, Адрес, Телефон;
  •  Торговое предложение – Оптовая цена;
  •  Заказ – Количество заказанного товара, Дата заказа, Дата оплаты, Дата поставки, Количество поставленного товара, Номер документа;
  •  Справочник препаратов – Группа препарата, Наименование препарата, Единица измерения, Жизненно необходимый препарат;
  •  Аптеки – Адрес, Телефон;
  •  Товар в аптеке – Остаток товара, Продано товара, Розничная цена (цена 1 ед. товара), Минимальный запас жизненно необходимых препаратов.

2.1.4 Спецификация связей

Выполним спецификацию связей:

  •  Поставщик (1) предоставляет Торговое предложение (М);
  •  На основании Торгового предложения (1) формируется Заказ (М) на поставку товара;
  •  Торговое предложение (М) формируется на основании Справочника препаратов (1);
  •  Товар в аптеке (1) формируется из Заказа (М);
  •  Справочник препаратов (1) служит приложением к Торговому предложению (М) и Заказу (М).

Учитывая всё вышесказанное, составил ER-модель данных в соответствии с рисунком 5.

Рисунок 5 – ER-модель данных

2.1.5 Обрабатываемые транзакции

- Т1: Ввод информации об аптеках, добавляется запись в таблицу «Apteki»;

- Т2: Ввод справочной информации о препарате – добавляется запись в таблицу «PreparSprav»;

- Т3.1: Ввод договора с поставщиком – добавляется запись в таблицу «Postavshiki»;

- Т3.2: Формирование торгового предложения – добавляется запись в таблицу «TorgPred»;

- Т4: Формирование товара в аптеке – добавляется запись в таблицу «TovarApt»;

- Т5.1: Заказ товара у поставщика – добавляется запись в таблицу «Zakaz»;

- Т5.2: Ввод поставки (указание даты поставки и количества товара при поступлении) – изменение записи в таблице «Zakaz»;

- Т6.1: Формирование отчёта для продавца о наличии товара в аптеке – выбираются таблицы PreparSprav и TovarApt;

- Т6.2: Формирование отчёта для менеджера «Заявка на поставку» – выбираются таблицы Postavshik, PreparSprav и TorgPred;

- Т6.3: Формирование отчёта для управляющего «Объёмы выполненных поставок» – выбираются таблицы Postavshik, Zakaz и TorgPred;

- Т6.4: Формирование отчёта для управляющего «Объёмы выполненных поставок по договору» – выбираются таблицы Postavshik, PreparSprav, TorgPred и Zakaz;

2.2 Выбор архитектуры программно-технологической реализации АИС и используемой СУБД

При разработке данного программного продукта будут применяться элементы визуального объектно-ориентированного программирования в среде Delphi.

Для того чтобы представлять отчеты в виде документов Exsel предполагается использование  Object Likring and Embedding(OLE) - основанный на COM механизм, позволяющий приложениям взаимодействовать между собой. Он повышает эффективность работы за счет использования в приложении возможностей других программ.

Работа пользователей должна осуществляется в многопользовательском параллельном режиме для локальной сети. Для реализации задачи целесообразно использовать технологию клиент-сервер базы данных. БД должна храниться на сервере, там же находится ядро СУБД и часть бизнес – логики в форме хранимых процедур. На клиенте находится презентационная логика и остальная часть бизнес – логики приложения. Клиент обращается к серверу с запросами на языке SQL. Разрабатываемая система является многопользовательской и в связи с этим используется СУБД InterBase.

Borland InterBase является высокопроизводительной кросс-платформенной встраиваемой реляционной базой данных, сочетающей простую инсталляцию, автоматическое восстановление после сбоев, чрезвычайно низке системные требования и минимальную потребность в сопровождении, что очень важно для надежного функционирования распределенных высокопроизводительных критически важных бизнес-приложений. Среди возможностей базы данных InterBase - запатентованные обработчики оповещений о событиях, хранимые процедуры, триггеры, определяемые пользователем функции (UDF) и фильтры для работы с объектами BLOB.

Одной из основных особенностей InterBase (в отличие от MSSQL), пожалуй, можно считать архитектуру (Multi-Generational), которая обеспечивает уникальные возможности при многопользовательской работе - пишущие пользователи никогда не блокируют читающих! Помимо этого, данная архитектура, позволяет отказаться (в отличие от ORACLE) от использования протокола транзакций для восстановления базы данных после сбоев, поэтому InterBase обладает очень высокой надежностью и устойчивостью. Также в InterBase реализован механизм оптимистической блокировки на уровне записи, т.е. сервер блокирует только те записи, которые реально были изменены пользователем, а не блокирует всю страницу данных целиком (в отличие от MSSQL). Эта особенность еще больше снижает вероятность конфликтов при многопользовательской работе.

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

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

2.3 Логическое проектирование базы данных

2.3.1 Логическая структура

В данной части курсового проекта в таблицах 1 – 5 представлено логическое проектирование базы данных Apteka. Приведены основные характеристики  данной  базы данных.

Таблица 1 - Логическая структура таблицы Postavshiki (информация о поставщиках)

Имя поля

Тип

Ширина

Ограничения целостности

Примечание

Kod_pstvsh

Числовой

4

>=0, первичный ключ

Код поставщика

Name_pstvsh

Строковый

32

Название поставщика

Adres_pstvsh

Строковый

32

Адрес поставщика

Tel_pstvsh

Числовой

16

Телефон поставщика

Таблица 2 - Логическая структура таблицы PreparSprav (справочная информация о препаратах)

Имя поля

Тип

Ширина

Ограничения целостности

Примечание

Kod_tovara

Числовой

4

>=0, первичный ключ

Код товара

Grup_tov

Строковый

32

Группа товара

Name_tovara

Строковый

32

Наименование препарата

Ed_iz

Строковый

8

Единица измерения

Zn_n_pr

Логический

1

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

Таблица 3 - Логическая структура таблицы TorgPred (торговое предложение)

Имя поля

Тип

Ширина

Ограничения целостности

Примечание

NumTorgPred

Числовой

4

>=0, первичный ключ

Номер торгового предложения

Kod_tovara

Числовой

4

Внешний ключ

Код товара

Kod_pstvsh

Числовой

4

Внешний ключ

Код поставщика

Price_opt

Числовой

8, 2

Оптовая цена

Внешний ключ Kod_tovara ссылается на таблицу PreparSprav

Внешний ключ Kod_pstvsh  ссылается на таблицу Postavshiki

Таблица 4 - Логическая структура таблицы Apteki (информация об аптеках)

Имя поля

Тип

Ширина

Ограничения целостности

Примечание

Num_aptk

Числовой

4

>=0, первичный ключ

Номер аптеки

Aptk_adres

Строковый

16

Название аптеки

Aptk_telf

Строковый

16

Телефон аптеки

Таблица 5 - Логическая структура таблицы TovarApt (информация о товаре в аптеке, продажа товара)

Имя поля

Тип

Ширина

Ограничения целостности

Примечание

Kod_rashoda

Числовой

4

>=0, первичный ключ

Код расхода

Tovar_ost

Числовой

 8

Остаток товара в аптеке

Tovar_prod

Числовой

8

Продано товара

Tovar_price_ed

Числовой

8, 2

Розничная цена 1 ед. товара

Min_zps

Числовой

8

Минимальный запас жизненно необходимых препаратов

Kod_tovara

Числовой

4

Внешний ключ

Код товара

Num_aptk

Числовой

4

Внешний ключ

Номер аптеки

Внешний ключ Kod_tovara ссылается на таблицу PreparSprav

Внешний ключ Num_aptk  ссылается на таблицу Apteki

Таблица 6 - Логическая структура таблицы Zakaz (заказ поставщику)

Имя поля

Тип

Ширина

Ограничения целостности

Примечание

Num_zakz

Числовой

4

>=0, первичный ключ

Номер заказа

NumTorgPred

Числовой

4

Внешний ключ

Номер торгового предложения

Kod_rashoda

Числовой

4

Внешний ключ

Код расхода

Zak_tov_kol

Числовой

8

Заказано товара

Data_zakz

Дата

Дата заказа

Data_oplt

Дата

Дата оплаты

Data_post

Дата

Дата поставки

Post_tov_kol

Числовой

8

Поступило товара

Num_doc

Числовой

8

Номер документа

Внешний ключ NumTorgPred ссылается на таблицу TorgPred

Внешний ключ Kod_rashoda  ссылается на таблицу TovarApt

2.3.2 Анализ транзакций

Т1 – Ввод информации об аптеках

При выполнении Т1 (таблица 7) производится добавление записи в таблицу Apteki. Атрибут Num_apt (номер аптеки) формируется автоматически. Вводится адрес (Aptk_adres) и телефон (Aptk_telf) аптеки.

Таблица 7 – Т1

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 17-00

Таблица, поля

Тип доступа

Выходные данные

Apteki (Num_apt, Aptk_adres, Aptk_telf)

Insert

Т2 – Ввод справочной информации о препарате

При выполнении Т2 (таблица 8) производится добавление записи в таблицу PreparSprav. Атрибут Kod_tovara(код товара) формируется автоматически. Вводится название (Name_tovara), единица измерения (Ed_iz) и является ли данный препарат жизненно необходимым (Zh_n_pr).

Таблица 8 – Т2

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 17-00

Таблица, поля

Тип доступа

Выходные данные

PreparSprav (Kod_tovara, Name_tovara, Ed_iz, Zh_n_pr)

Insert

Т3.1 – Ввод договора с поставщиком

При выполнении Т3.1 (таблица 9) производится добавление записи в таблицы Postavshiki. Атрибут Kod_pstvsh (код поставщика) формируется автоматически, название (Name_pstvsh), адрес (Adres_pstvsh) и телефон (Tel_pstvsh) поставщика вводится пользователем.

Таблица 9 – Т3.1

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 17-00

Таблица, поля

Тип доступа

Выходные данные

Postavshiki (Kod_pstvsh,Name_pstvsh, Adres_pstvsh, Tel_pstvsh)

Insert

Т3.2 – Формирование торгового предложения

После ввода информации о поставщике, происходит формирование торгового предложения данного поставщика. При выполнении Т3.2 (таблица 10) производится добавление записи в таблицы TorgPred. Атрибут NumTorgPred (номер торгового предложения) формируется автоматически. Из таблицы Postavshiki выбирается поставщик по коду поставщика (Kod_pstvsh). Из таблицы PreparSprav происходит выбор лекарственного препарата коду товара (Kod_tovara) и вводится оптовая цена препарата (Price_opt).

Таблица 10 – Т3.2

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 17-00

Таблица, поля

Тип доступа

Выходные данные

Postavshiki (Kod_pstvsh)

PreparSprav (Kod_tovara)

TorgPred (NumTorgPred, Price_opt)

Select

Select

Insert

Т4 – Формирование товара в аптеке

При выполнении Т4 (таблица 11) производится добавление записи в таблице TovarApt. Атрибут Kod_rashoda (код расхода) формируется автоматически. Из таблицы PreparSprav выбирается препарат по коду товара (Kod_tovara). Номер аптеки выбирается из таблицы Apteki по номеру аптеки (Num_apt). Остаток товара (Tovar_ost) суммируется с количеством товара из таблицы Zakaz (Post_tov_kol). Вводится розничная цена 1 ед. товара (Tovar_price_ed) и количество минимального запаса жизненно необходимых препаратов (Min_zps).

Таблица 11 – Т4

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 17-00

Таблица, поля

Тип доступа

Выходные данные

PreparSprav (Kod_tovara)

Apteki (Num_apt)

Sum (Zakaz.Post_tov_kol, TovarApt.Tovar_ost)

TovarApt (Tovar_price_ed, Min_zps)

Select

Select

Select

Insert

Т5.1 – Заказ товара у поставщика

При выполнении Т5.1 (таблица 12) производится добавление записи в таблицу Zakaz. Атрибут Num_zakz (номер заказа) формируется автоматически. Номер торгового предложения (NumTorgPred) выбирается из таблицы TorgPred. Код расхода (Kod_rashoda) выбирается из таблицы TovarApt. Вводится количество заказанного товара (Zak_tov_kol), дата  заказа (Data_zakz), дата оплаты (Data_oplt), дата поставки (Data_post), поступило товара (Post_tov_kol) и номер документа (Num_doc). Печатаются заказы и отправляются поставщикам.

Таблица 12 – Т5.1

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 17-00

Таблица, поля

Тип доступа

Выходные данные

TorgPred (NumTorgPred)

TovarApt (Kod_rashoda)

Apteki (Num_aptk)

PreparSprav (Kod_tovara)

Zakaz (Zak_tov_kol, Price_zakz, Data_zakz, Data_oplt, Post_tov_kol, Num_doc)

Select

Select

Select

Select

Insert

Т5.2 – Ввод поставки (указание даты поставки и количества товара при поступлении)

При выполнении Т5.2 (таблица 13) производится поиск соответствующего заказа по номеру документа (Num_doc), затем происходит изменение записи в таблицу Zakaz, вводится дата поставки (Data_post) и количество поступившего товара (Post_tov_kol).

Таблица 13 – Т5.2

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 20-00

Таблица, поля

Тип доступа

Выходные данные

Zakaz (Num_doc)

Zakaz (Data_post, Post_tov_kol)

Select

Update

Т6.1 – Формирование отчёта для продавца о наличии товара в аптеке

При выполнении Т6.1 (таблица 14) будет производится выборка из таблиц PreparSprav и TovarApt.

Таблица 14 – Т6.1

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 20-00

Таблица, поля

Тип доступа

Выходные данные

PreparSprav (Kod_tovara, Name_tovara, Ed_iz)

TovarApt (Kod_rashoda, Tovar_ost)

Apteki (Num_aptk)

Select

Select

Select

PreparSprav (Kod_tovara, Name_tovara, Ed_iz)

Apteki (Num_aptk)

TovarApt (Tovar_ost)

Т6.2 – Формирование отчёта для менеджера «Заявка на поставку»

При выполнении Т6.2 (таблица 15) будет производится выборка из таблиц Postavshik, PreparSprav и TorgPred.

Таблица 15 – Т6.2

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 20-00

Таблица, поля

Тип доступа

Выходные данные

Postavshiki (Kod_pstvsh, Name_pstvsh)

PreparSprav (Kod_tovara, Name_tovara, Ed_iz)

TorgPred (NumTorgPred, Price_opt)

Select

Select

Select

Postavshiki (Kod_pstvsh, Name_pstvsh)

PreparSprav (Name_tovara, Ed_iz)

TorgPred (Price_opt)

Т6.3 – Формирование отчёта для управляющего «Объёмы выполненных поставок»

При выполнении Т6.3 (таблица 16) будет производится выборка из таблиц Postavshik, Zakaz и TorgPred.

Таблица 16 – Т6.3

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 20-00

Таблица, поля

Тип доступа

Выходные данные

Postavshiki (Kod_pstvsh, Name_pstvsh)

Zakaz (Num_zakz, Data_post)

TorgPred (NumTorgPred, Price_opt)

Select

Select

Select

Postavshiki (Kod_pstvsh, Name_pstvsh)

TorgPred (Price_opt)

Т6.4 – Формирование отчёта для управляющего «Объёмы выполненных поставок по договору»

При выполнении Т6.4 (таблица 17) будет производится выборка из таблиц Postavshik, PreparSprav, TorgPred и Zakaz.

Таблица 17 – Т6.4

Активность

Интенсивность использования (вызов/час)

Ежедневно с 8-00 до 20-00

Таблица, поля

Тип доступа

Выходные данные

Postavshiki (Kod_pstvsh, Name_pstvsh)

PreparSprav (Kod_tovara, Name_tovara, Ed_iz)

TorgPred (NumTorgPred, Price_opt)

Zakaz (Num_zakz, Data_zakz, Data_post)

Select

Select

Select

Select

Postavshiki (Kod_pstvsh, Name_pstvsh)

PreparSprav (Name_tovara, Ed_iz)

TorgPred (Price_opt)

Zakaz (Data_zakz, Data_post)

2.4 Создание базы данных

Для создания базы данных использовал ER/Studio. Порядок действий следующий:

  1.  Запустил ER/Studio; 
    1.  В обозревателе объектов открыл ветку «Maim Model» и выбрал в контекстном меню «EntityNewEntity»;
      1.  Ввёл имя сущности, имя таблицы БД;
        1.  На вкладке «Attribute» щелкнул по кнопке «Add» для добавления нового атрибута сущности, ввёл имя, тип данных, ограничения целостности. Для создания связи между сущностями (отношения) щелкнул по Relationship в дереве обозревателя объектов и выбрал команду «NewRelationship…»;
        2.  Выбрал родительскую сущность, дочернюю и указал тип связи на вкладке «Triggers». Затем указал, какие действия должны выполняться при внесении изменений в связанные таблицы и щелкнул «ОК»;
        3.  Создал физическую модель данных из контекстного меню «MainModel» и в обозревателе объектов выбрал «Generate Phisical Model…», задал имя модели и выбрал тип СУБД;
        4.  После создания физической модели в ER/Studio сгенерировался SQL-код для создания базы данных в СУБД InterBase;
        5.  Для создания базы данных в СУБД InterBase включил сервер, запустил IBConsole. Зарегистрировался на сервере, выбрав команду меню «Register…»;
        6.  Выбрал  тип сервера – локальный, в строке «UserName» ввёл SYSDBA, в строке «Password» – masterkey;
        7.  Создал  базу данных, выбрав в меню «DataBase» команду «CreateDataBase». В появившемся окне указал путь к БД в строке «Filenames», ввёл в строке «Alias» псевдоним БД и выбрал кодовую страницу WIN1251 в «DefaultCharacterSet»;
        8.  Перед тем, как работать с БД, зарегистрировал её  «Register»  и установил соединение «Connect», выбрав соответствующие команды в меню «IBConsole»;
        9.  Для создания таблиц БД, установки связей и т.д.  воспользовался средством «InteractiveSQL»  из меню «Tools». С помощью меню «Query»  выполнил SQL-запросы по созданию доменов, таблиц, просмотров из сгенерированного SQL-кода в ER/Studio (листингSQL-кода приведён в приложения А).
        10.  Для реализации транзакции «Т1: Ввод информации об аптеках» создал на сервере хранимую процедуру «NEW_APTEKA»:

CREATE PROCEDURE "NEW_APTEKA"

(

 "P1" CHAR(16),

 "P2" NUMERIC(16, 0)

)

AS

begin

 insert into "Apteki" ("Aptk_adres", "Aptk_telf") values (:p1,:p2);

end

  1.  Для реализации транзакции «Т2: Ввод справочной информации о препарате» создал на сервере хранимую процедуру «add_preparat»:

CREATE PROCEDURE " add_preparat"

 (

 "P1" CHAR(32),

 "P2" CHAR(32),

 "P3" CHAR(8),

 "P4" NUMERIC(1, 0)

)

AS

begin

 insert into "PreparSprav" ("grup_tov","Name_tovara","Ed_iz","Zh_n_pr") values (:p1, :p2, :p3, :p4);

end

  1.  Для реализации транзакции «Т3.1: Ввод договора с поставщиком» создал на сервере хранимую процедуру «add_pstvsh»:

CREATE PROCEDURE " add_pstvsh"

(

 "P1" CHAR(32),

 "P2" CHAR(32),

 "P3" NUMERIC(16, 0)

)

AS

begin

 insert into "Postavshiki" ("Name_pstvsh","Adres_pstvsh","Tel_pstvsh") values (:p1, :p2, :p3);

end

  1.  Для реализации транзакции «Т3.2: Формирование торгового предложения» создал на сервере хранимую процедуру «add_torgpred»:

CREATE PROCEDURE " add_torgpred "

(

 "P1" INTEGER,

 "P2" INTEGER,

 "P3" NUMERIC(8, 2)

)

AS

begin

 insert into "TorgPred" ("Kod_tovara", "Kod_pstvsh", "Price_opt") values (:p1, :p2, :p3);

end

  1.  Для реализации транзакции «Т4: Формирование товара в аптеке» создал на сервере хранимую процедуру «add_tovar_apt»:

CREATE PROCEDURE " add_tovar_apt"

(

 "P1" INTEGER,

 "P2" INTEGER,

 "P3" NUMERIC(8, 0),

 "P4" NUMERIC(8, 0),

 "P5" NUMERIC(8, 0),

 "P6" NUMERIC(8, 0)

)

AS

begin

 insert into "TovarApt" ("Num_aptk","Kod_tovara","Tovar_ost","Tovar_prod","Tovar_price_ed","Min_zps") values (:p1, :p2, :p3, :p4, :p5, :p6);

end

  1.  Для реализации транзакции «Т5.1: Заказ товара у поставщика» создал на сервере хранимую процедуру «add_zakaz»:

CREATE PROCEDURE " add_zakaz"

(

 "P1" INTEGER,

 "P2" INTEGER,

 "P3" NUMERIC(8, 0),

 "P4" DATE,

 "P5" NUMERIC(8, 0)

)

AS

begin

 insert into "Zakaz" ("NumTorgPred","Kod_rashoda","Zak_tov_kol","Data_zakz","Num_doc") values (:p1, :p2, :p3, :p4, :p5);

end

  1.  Для реализации транзакции «Т6.2: Формирование отчёта для менеджера» создал на сервере 2 хранимых процедуры  «manager_otchet» (выбор заявок на поставку по каждому поставщику)  и «manager_otchet2» (выбор заявок на поставку по определённому поставщику):

CREATE PROCEDURE "manager_otchet"

RETURNS

(

 "P1" INTEGER,

 "P2" CHAR(32),

 "P3" CHAR(32),

 "P4" CHAR(8),

 "P5" NUMERIC(8, 2),

 "P6" NUMERIC(8, 0),

 "P7" NUMERIC(8, 0)

)

AS

begin

for select "Postavshiki"."Kod_pstvsh", "Postavshiki"."Name_pstvsh",

"PreparSprav"."Name_tovara", "PreparSprav"."Ed_iz", "TorgPred"."Price_opt",

"Zakaz"."Zak_tov_kol", "TorgPred"."Price_opt"*"Zakaz"."Zak_tov_kol"

from "Postavshiki", "PreparSprav", "TorgPred", "Zakaz"

where "Postavshiki"."Kod_pstvsh"="TorgPred"."Kod_pstvsh" and

"TorgPred"."Kod_tovara"="PreparSprav"."Kod_tovara" and

"Zakaz"."NumTorgPred"="TorgPred"."NumTorgPred"

into :p1, :p2, :p3, :p4, :p5, p6, p7

do

suspend;

end

CREATE PROCEDURE " manager_otchet2"

(

 "PKOD" INTEGER

)

RETURNS

(

 "P1" INTEGER,

 "P2" CHAR(32),

 "P3" CHAR(32),

 "P4" CHAR(8),

 "P5" NUMERIC(8, 2),

 "P6" NUMERIC(8, 0),

 "P7" NUMERIC(8, 0)

)

AS

begin

for select "Postavshiki"."Kod_pstvsh", "Postavshiki"."Name_pstvsh",

"PreparSprav"."Name_tovara", "PreparSprav"."Ed_iz", "TorgPred"."Price_opt",

"Zakaz"."Zak_tov_kol", "TorgPred"."Price_opt"*"Zakaz"."Zak_tov_kol"

from "Postavshiki", "PreparSprav", "TorgPred", "Zakaz"

where "Postavshiki"."Kod_pstvsh"="TorgPred"."Kod_pstvsh" and

"TorgPred"."Kod_tovara"="PreparSprav"."Kod_tovara" and

"Zakaz"."NumTorgPred"="TorgPred"."NumTorgPred" and

"Postavshiki"."Kod_pstvsh"=:pkod

into :p1, :p2, :p3, :p4, :p5, p6, p7

do

suspend;

end


3 Разработка клиентского программного обеспечения

3.1 Структура прикладного программного обеспечения

Для работы с базой данных DB_APT.GDB, разработано клиентское приложение Kr_Apteka. Приложение включает в себя формы для ввода и отображения данных, а также необходимые элементы управления.

Таблица 18 – Структура прикладного программного обеспечения

Форма

Модуль

Назначение

Пользователь

FPassword

UnitAuth.pas

Авторизация пользователей

Управляющий, менеджер, продавец

FProdavec

UnitProdavec.pas

Меню управления, просмотр информации и печать отчётов для продавца

Продавец

FManager

UnitManager.pas

Меню управления, просмотр информации и печать отчётов для менеджера

Менеджер

FTorgPredApteki

UnitTorgPredApteki.pas

Торговое предложение во всех аптеках

Менеджер

FNewTorgPredApteki

UnitNewTorgPredApteki.pas

Формирование торгового предложения в определённой аптеке

Менеджер

FZayavkaPostavka

UnitZayavkaPostavka.pas

Формирование заявки на поставку лекарственного препарата

Менеджер

FNewPreparat

UnitNewPreparat.pas

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

Менеджер, Директор

FManagerOtchet

UnitManagerOtchet.pas

Вывод на экран и печать отчёта для менеджера «Заявка на поставку»

Менеджер

FDirector

UnitDirector.pas

Меню управления, просмотр информации и печать отчётов для директора

Директор

FNewApteka

UnitNewApteka.pas

Добавление данных о новой аптеке в розничной сети

Директор

FNewPostavshik

UnitNewPostavshik.pas

Добавление данных о новом поставщике

Директор

FNewTorgPred

UnitNewTorgPred.pas

Добавление данных о торговом предложении определённого поставщика

Директор


3.2 Описание интерфейса и алгоритмов работы программных модулей

3.2.1 Модуль данных

На модуле данных разместил компоненты в соответствии с таблицей 19.

Таблица 19 – Модуль данных

Компонент

Объект БД

Назначение

SQLConnection1

Подключение к БД

SimpleDataSetAllAptk

Apteki

Выборка всех записей из таблицы «Аптеки»

SQLStoredProcAddAptk

NEW_APTEKA

Добавление записи в таблицу «Аптеки»

SimpleDataSetAllPstvsh

Postavshiki

Выборка всех записей из таблицы «Поставщики»

SQLStoredProcAddPstvsh

add_pstvsh

Добавление записи в таблицу «Поставщики»

SimpleDataSetAllPreparat

PreparSprav

Выборка всех записей из таблицы «Справочник препаратов»

SQLStoredProcAddPreparat

add_preparat

Добавление записи в таблицу «Справочник препаратов»

SimpleDataSetOptPrice

TorgPred

Выборка «Оптовой цены» из таблицы «Торговое предложение»

SimpleDataSetTovar_v_Apteke

Apteki, PreparSprav, TovarApt, TorgPred

Выборка «Код расхода», «Адрес аптеки», «Телефон аптеки», «Наименование товара», «Оптовая цена», «Розничная цена», «Остаток товара», «Продано товара», «Признак жизн. необ. препарат.» и «Мин. запас жизн. необ. препарат.» из таблиц «Аптеки», «Справочник препаратов», «Товар в аптеке» и «Торговое предложение»

SQLStoredProcAddTorgPred

add_torgpred

Добавление записи в таблицу «Торговое предложение»

SQLStoredProcAddTorgPredApteki

add_tovar_apt

Добавление записи в таблицу «Товар в аптеке»

SimpleDataSetTovarApt

TovarApt

Выборка всех записей из таблицы «Товар в аптеке»

SimpleDataSetZayavkaPostavka

PreparSprav, TorgPred

Выборка всех записей из таблиц «Справочник препаратов» и «Торговое предложение»

SQLStoredProcManagerOtchet2

manager_otchet2

Выборка «Код поставщика», «Название поставщика»,

«Наименование товара», «Ед. изм.», «Оптовая цена»,

«Кол-во заказанного товара», «Сумма» из таблиц «Поставщики», «Справочник препаратов», «Торговое предложение» и «Заказ» по определённому поставщику

SQLStoredProcAddZakaz

add_zakaz

Добавление записи в таблицу «Заказ»

SimpleDataSetManagerOtchet

manager_otchet

Выборка всех записей из хранимой процедуры «manager_otchet»

SimpleDataSetManagerOtchet2

manager_otchet2

Выборка всех записей из хранимой процедуры «manager_otchet2»

3.2.2 Главная форма «FPassword»

Выполнение программы начинается с формы (FPassword) авторизации пользователя в соответствии с рисунком 6.

Рисунок 6 – Форма (FPassword) авторизации пользователя

На данной форме разместил компоненты в соответствии с таблицей 20.

Таблица 20 – Компоненты формы «FPassword»

Компонент

Назначение

Label1

Надпись «Пользователь»

Label2

Надпись «Пароль»

Image1

Фоновый рисунок

ComboBox1

Выбор пользователя

Edit1

Ввод пароля

BitBtn1

Кнопка «Войти»

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

- Форма «FProdavec» для продавца в соответствии с рисунком 7;

- Форма «FManager» для менеджера в соответствии с рисунком 8;

- Форма «FDirector» для управляющего в соответствии с рисунком 9.

Обработчик события «OnChange» компонента «ComboBox1»:

procedure TFPassword.ComboBox1Change(Sender: TObject);

begin

Label2.Visible:=true;

Edit1.Visible:=true;

Edit1.PasswordChar:='*';

BitBtn1.Visible:=true;

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFPassword.BitBtn1Click(Sender: TObject);

begin

if ComboBox1.Text='Продавец' then

 if Edit1.Text = '1' then

   begin

     FPassword.Visible:=false;

     FProdavec.ShowModal;

   end

   else begin

     dec(n);

     if n<>0 then MessageDlg('Пароль неверный. Осталось попыток '+inttostr(n),mtWarning,[mbOK],0)

             else begin MessageDlg('Лимит превышен, авторизация не выполнена',mtError,[mbOK],0); close; end;

       end;

if ComboBox1.Text='Менеджер' then

 if Edit1.Text = '2' then

   begin

     FPassword.Visible:=false;

     FManager.ShowModal;

   end

   else begin

     dec(n);

     if n<>0 then MessageDlg('Пароль неверный. Осталось попыток '+inttostr(n),mtWarning,[mbOK],0)

             else begin MessageDlg('Лимит превышен, авторизация не выполнена',mtError,[mbOK],0); close; end;

       end;

if ComboBox1.Text='Управляющий' then

 if Edit1.Text = '3' then

   begin

     FPassword.Visible:=false;

     FDirector.ShowModal;

   end

   else begin

     dec(n);

     if n<>0 then MessageDlg('Пароль неверный. Осталось попыток '+inttostr(n),mtWarning,[mbOK],0)

             else begin MessageDlg('Лимит превышен, авторизация не выполнена',mtError,[mbOK],0); close; end;

       end;

end;

3.2.3 Форма «FProdavec»

Форма «FProdavec» предназначена для пользователя «Продавец» и осуществления им основных функций в рамках соответствующей должности. Вид формы показан на рисунке 7.

Рисунок 7 – Форма «FProdavec» для продавца

На данной форме разместил компоненты в соответствии с таблицей 21.

Таблица 21 – Компоненты формы «FProdavec»

Компонент

Вложенный компонент

Назначение

Panel1

Компонент для размещения и группировки элементов

GroupBox1

Меню пользователя

BitBtn3

Кнопка «Товар»

BitBtn4

Кнопка «Выход»

CheckBox1

Выбор «Показать/Скрыть всё»

Image1

Фоновый рисунок

PageControl1 (TabSheet1)

Вкладка «Товар»

DBGrid1

Вывод данных

BitBtn1

Кнопка «Печать»

BitBtn2

Кнопка «Продать»

Label1

Надпись «Аптека»

DBLookupComboBox1

Выбор аптеки

В данном случаи меню представлено кнопкой «Товар», после нажатия на которую на данной форме будет активна вкладка компонента PageControl1, на которой будет представлена необходимая информации о товаре как в данной аптеке, так и в других аптеках розничной сети (рисунок 8).

Рисунок 8 – Вкладка «Товар»

Обработчик события «OnClick» компонента «BitBtn3»:  

procedure TFProdavec.BitBtn3Click(Sender: TObject);

begin

PageControl1.Visible:=true;

PageControl1.Pages[0].TabVisible:=true;

PageControl1.ActivePageIndex:=0;

end;

Обработчик события «OnClick» компонента «CheckBox1»:  

procedure TFProdavec.CheckBox1Click(Sender: TObject);

begin

if CheckBox1.Checked=true then

 begin

   PageControl1.Visible:=true;

   PageControl1.Pages[0].TabVisible:=true;

 end

 else

 begin

   PageControl1.Visible:=false;

   PageControl1.Pages[0].TabVisible:=false;

 end;

end;

Обработчик события «OnClick» компонента «DBLookupComboBox1»:

procedure TFProdavec.DBLookupComboBox1Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=false;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.DataSet.CommandText:='SELECT "Apteki"."Num_aptk", "Apteki"."Aptk_adres",'

+'"Apteki"."Aptk_telf", "PreparSprav"."Name_tovara", "PreparSprav"."Kod_tovara", '

+'"TovarApt"."Tovar_price_ed","TovarApt"."Tovar_ost" '

+'FROM "Apteki", "PreparSprav", "TovarApt" '

+'WHERE "Apteki"."Num_aptk"="TovarApt"."Num_aptk" and '

+'"TovarApt"."Kod_tovara"="PreparSprav"."Kod_tovara" and "Apteki"."Num_aptk"='

+DataModuleApteka.SimpleDataSetAllAptk.FieldByName('Num_aptk').AsString;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=true;

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFProdavec.BitBtn1Click(Sender: TObject);

begin

OExcel:=CreateOleObject('Excel.Application'); // Создать OLE объект Excel

OExcel.WorkBooks.Add();                      // Создать рабочую книгу Excel

OExcel.Visible:=True;                         // Сделать Excel видимым

//Занести в ячейку значение

OExcel.Cells[1,1].Value:='Сведения о наличии товара в аптеке по адресу ' + DataModuleApteka.SimpleDataSetAllAptk.FieldByName('Aptk_adres').AsString;

OExcel.Cells[2,1].Value:='Дата '+ DateToStr(Date);

 // Определить количество столбцов DBGrid1

i:=DBGrid1.Columns.Count;

for j:=1 to i do

begin

//Занести в ячейки 3 строки заголовки столбцов DBGrid1

 OExcel.Cells[3,j].Value:=  DBGrid1.Columns.Items[j-1].Title.Caption;

OExcel.Range[chr(96+j)+':'+chr(96+j)].Select;        // Выделить ячейки

//Установить ширину ячейки OExcel в зависимости от ширины столбца DBGrid1

OExcel.Selection.ColumnWidth :=DBGrid1.Columns.Items[j-1].Width/5 ;

OExcel.Selection.WrapText:= True;      // Переносить по словам

end;

OExcel.Range['1:1'].Select;           // Выделить ячейку 1 столбца 1 строки

OExcel.Selection.WrapText:= False;

istr:=5;                           // Номер строки

DataModuleApteka.SimpleDataSetTovar_v_Apteke.First;                //Перейти на первую запись

while not DataModuleApteka.SimpleDataSetTovar_v_Apteke.Eof do      // Пока не будет достигнут конец файла

begin

 for j:=1 to i do

//Заносить в ячейку Excel содержимое полей, которые отражаются в  DBGrid1

OExcel.Cells[istr,j].Value:=DataModuleApteka.SimpleDataSetTovar_v_Apteke.FieldByName(DBGrid1.Columns.Items[j-1].FieldName).AsString;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Next;                 //Перейти на следующую запись

 istr:=istr+1;                           //Увеличить номер строки

end;

OExcel.Range['A3:'+chr(96+j-1)+IntToStr(istr)].Select;   // Выделить ячейки

//Обрамление сплошной линией всех выделенных ячеек

    OExcel.Selection.Borders[xlEdgeLeft].LineStyle:=xlContinuous;

    OExcel.Selection.Borders[xlEdgeRight].LineStyle:=xlContinuous;

    OExcel.Selection.Borders[xlEdgeTop].LineStyle:=xlContinuous;

    OExcel.Selection.Borders[xlEdgeBottom].LineStyle:=xlContinuous;

  if i>1 then

    OExcel.Selection.Borders[xlInsideVertical].LineStyle:=xlContinuous;

    OExcel.Selection.Borders[xlInsideHorizontal].LineStyle:=xlContinuous;

     OExcel.Range['D'+IntToStr(istr)+':D'+IntToStr(istr+1)].Select;

// Объединение ячеек

     OExcel.Selection.MergeCells:=True;

     OExcel.Selection.HorizontalAlignment := xlLeft;

     OExcel.Selection.VerticalAlignment := xlCenter;

end;

Обработчик события «OnActivate» формы «FProdavec»:

procedure TFProdavec.FormActivate(Sender: TObject);

begin

DataModuleApteka.SQLConnection1.Connected:=true;

DataModuleApteka.SimpleDataSetAllAptk.Open;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=false;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.DataSet.CommandText:='SELECT "Apteki"."Aptk_adres",'

+'"Apteki"."Aptk_telf", "PreparSprav"."Name_tovara", "PreparSprav"."Kod_tovara", '

+'"TovarApt"."Tovar_price_ed","TovarApt"."Tovar_ost" '

+'FROM "Apteki", "PreparSprav", "TovarApt" '

+'WHERE "Apteki"."Num_aptk"="TovarApt"."Num_aptk" and '

+'"TovarApt"."Kod_tovara"="PreparSprav"."Kod_tovara"';

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=true;

PageControl1.Pages[0].TabVisible:=false;

end;

Обработчик события «OnClose» формы «FProdavec»:

procedure TFProdavec.FormClose(Sender: TObject; var Action: TCloseAction);

begin

DataModuleApteka.SQLConnection1.Connected:=false;

Application.Terminate;

end;

3.2.4 Форма «FManager»

Форма « FManager » предназначена для пользователя «Менеджер» и осуществления им основных функций в рамках соответствующей должности. Вид формы показан на рисунке 9. 

Рисунок 9 - Форма «FManager» для менеджера

На данной форме разместил компоненты в соответствии с таблицей 22.

Таблица 22 – Компоненты формы «FManager»

Компонент

Вложенный компонент

Назначение

Panel1

Компонент для размещения и группировки элементов

GroupBox1

Меню пользователя

BitBtn1

Кнопка «Аптеки»

BitBtn2

Кнопка «Поставщики»

BitBtn3

Кнопка «Отчёты»

BitBtn4

Кнопка «Выход»

BitBtn6

Кнопка «Товар»

BitBtn7

Кнопка «Справочник»

CheckBox1

Выбор «Показать/Скрыть всё»

Image1

Фоновый рисунок

PageControl1 (TabSheet1)

Вкладка «Аптеки»

DBGrid1

Вывод данных

BitBtn5

Кнопка «Печать»

PageControl1 (TabSheet2)

Вкладка «Поставщики»

DBGrid2

Вывод данных

PageControl1 (TabSheet3)

Вкладка «Отчёты»

BitBtn9

Кнопка «Отчёт. Заявка на поставку»

PageControl1 (TabSheet4)

DBGrid3

Вывод данных

BitBtn8

Кнопка «Новый препарат»

В зависимости от нажатия определённой кнопки меню откроется выбранная вкладка в соответствии с рисунком 10.

Рисунок 10 – Рабочие вкладки пользователя «Менеджер»

Обработчик события «OnActivate» формы «FManager»:

procedure TFManager.FormActivate(Sender: TObject);

begin

DataModuleApteka.SQLConnection1.Connected:=true;

PageControl1.Pages[0].TabVisible:=false;

PageControl1.Pages[1].TabVisible:=false;

PageControl1.Pages[2].TabVisible:=false;

PageControl1.Pages[3].TabVisible:=false;

end;

Обработчик события «OnClose» формы «FManager»:

procedure TFManager.FormClose(Sender: TObject; var Action: TCloseAction);

begin

DataModuleApteka.SQLConnection1.Connected:=false;

Application.Terminate;

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFManager.BitBtn1Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllAptk.Open;

PageControl1.Visible:=true;

PageControl1.Pages[0].TabVisible:=true;

PageControl1.ActivePageIndex:=0;

end;

Обработчик события «OnClick» компонента «BitBtn2»:

procedure TFManager.BitBtn2Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllPstvsh.Open;

PageControl1.Visible:=true;

PageControl1.Pages[1].TabVisible:=true;

PageControl1.ActivePageIndex:=1;

end;

Обработчик события «OnClick» компонента «BitBtn3»:  

procedure TFManager.BitBtn3Click(Sender: TObject);

begin

PageControl1.Visible:=true;

PageControl1.Pages[2].TabVisible:=true;

PageControl1.ActivePageIndex:=2;

end;

Обработчик события «OnClick» компонента «BitBtn7»:  

procedure TFManager.BitBtn7Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllPreparat.Open;

PageControl1.Visible:=true;

PageControl1.Pages[3].TabVisible:=true;

PageControl1.ActivePageIndex:=3;

end;

Обработчик события «OnClick» компонента «BitBtn6»:  

procedure TFManager.BitBtn6Click(Sender: TObject);

begin

FTorgPredApteki.ShowModal;

end;

Обработчик события «OnClick» компонента «BitBtn5»:  

procedure TFManager.BitBtn5Click(Sender: TObject);

begin

FTorgPredApteki.ShowModal;

end;

Обработчик события «OnClick» компонента «BitBtn9»:  

procedure TFManager.BitBtn9Click(Sender: TObject);

begin

FManagerOtchet.ShowModal;

end;

Обработчик события «OnClick» компонента «BitBtn8»:  

procedure TFManager.BitBtn8Click(Sender: TObject);

begin

FNewPreparat.ShowModal;

end;

3.2.5 Форма «FDirector»

Форма « FDirector » предназначена для пользователя «Директор» и осуществления им основных функций в рамках соответствующей должности. Вид формы показан на рисунке 11.

На данной форме разместил компоненты в соответствии с таблицей 23.

Таблица 23 – Компоненты формы «FDirector»

Компонент

Вложенный компонент

Назначение

Panel1

Компонент для размещения и группировки элементов

GroupBox1

Меню пользователя

BitBtn1

Кнопка «Аптеки»

BitBtn2

Кнопка «Поставщики»

BitBtn3

Кнопка «Отчёты»

BitBtn4

Кнопка «Выход»

BitBtn7

Кнопка «Справочник»

CheckBox1

Выбор «Показать/Скрыть всё»

Image1

Фоновый рисунок

PageControl1 (TabSheet1)

Вкладка «Аптеки»

DBGrid1

Вывод данных

BitBtn5

Кнопка «Добавить новую аптеку»

PageControl1 (TabSheet2)

Вкладка «Поставщики»

DBGrid2

Вывод данных

BitBtn6

Кнопка «Новый поставщик»

BitBtn9

Кнопка «Торговое предложение»

PageControl1 (TabSheet3)

Вкладка «Отчёты»

PageControl1 (TabSheet4)

Вкладка «Справочник препаратов»

DBGrid3

Вывод данных

BitBtn8

Кнопка «Новый препарат»

Рисунок 11 - Форма «FDirector» для управляющего

В зависимости от нажатия определённой кнопки меню откроется выбранная вкладка в соответствии с рисунком 12.

Рисунок 12 - Рабочие вкладки пользователя «Директор»

Обработчик события «OnActivate» формы «FManager»:

procedure TFDirector.FormActivate(Sender: TObject);

begin

DataModuleApteka.SQLConnection1.Connected:=true;

PageControl1.Pages[0].TabVisible:=false;

PageControl1.Pages[1].TabVisible:=false;

PageControl1.Pages[2].TabVisible:=false;

PageControl1.Pages[3].TabVisible:=false;

end;

Обработчик события «OnClose» формы «FManager»:

procedure TFDirector.FormClose(Sender: TObject; var Action: TCloseAction);

begin

DataModuleApteka.SQLConnection1.Connected:=false;

Application.Terminate;

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFDirector.BitBtn1Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllAptk.Open;

PageControl1.Visible:=true;

PageControl1.Pages[0].TabVisible:=true;

PageControl1.ActivePageIndex:=0;

end;

Обработчик события «OnClick» компонента «BitBtn2»:

procedure TFDirector.BitBtn2Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllPstvsh.Open;

PageControl1.Visible:=true;

PageControl1.Pages[1].TabVisible:=true;

PageControl1.ActivePageIndex:=1;

end;

Обработчик события «OnClick» компонента «BitBtn3»:  

procedure TFDirector.BitBtn3Click(Sender: TObject);

begin

PageControl1.Visible:=true;

PageControl1.Pages[2].TabVisible:=true;

PageControl1.ActivePageIndex:=2;

end;

Обработчик события «OnClick» компонента «BitBtn7»:

procedure TFDirector.BitBtn7Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllPreparat.Open;

PageControl1.Visible:=true;

PageControl1.Pages[3].TabVisible:=true;

PageControl1.ActivePageIndex:=3;

end;

Обработчик события «OnClick» компонента «BitBtn5»:

procedure TFDirector.BitBtn5Click(Sender: TObject);

begin

FNewApteka.ShowModal;

end;

Обработчик события «OnClick» компонента «BitBtn6»:

procedure TFDirector.BitBtn6Click(Sender: TObject);

begin

FNewPostavshik.ShowModal;

end;

Обработчик события «OnClick» компонента «BitBtn9»:

procedure TFDirector.BitBtn9Click(Sender: TObject);

begin

FNewTorgPred.ShowModal;

end;

Обработчик события «OnClick» компонента «BitBtn8»:

procedure TFDirector.BitBtn8Click(Sender: TObject);

begin

FNewPreparat.ShowModal;

end;

3.2.6 Форма «FTorgPredApteki»

Форма « FTorgPredApteki » предназначена для отображения торгового предложения в аптеки с возможность посмотреть предложение по каждой аптеке или по определённому лекарственному препарату при помощи фильтров.

На основе информации данной формы менеджер формирует торговое предложение (форма FNewTorgPredApteki) для каждой аптеки при нажатии кнопки «Сформировать торговое предложение». Также на данной форме менеджер может отслеживать остатки товара в каждой аптеке и при необходимости оформить заявку на поставку необходимого препарата (форма «FZayavkaPostavka»), нажав кнопку «Заявка на поставку». Вид формы показан на рисунке 13. 

Рисунок 13 – Форма «FTorgPredApteki»

На данной форме разместил компоненты в соответствии с таблицей 24.

Таблица 24 – Компоненты формы «FTorgPredApteki»

Компонент

Вложенный компонент

Вложенный компонент

Назначение

DBGrid1

Вывод информации

Panel1

Компонент для размещения и группировки элементов

BitBtn1

Кнопка «Сформировать торговое предложение»

BitBtn2

Кнопка «Заявка на поставку»

GroupBox1

Фильтр

DBLookupComboBox1

Выбор аптеки

DBLookupComboBox2

Выбор препарата

Label1

Надпись «Выберите аптеку»

Label2

Надпись «Название препарата»

Обработчик события «OnActivate» формы «FTorgPredApteki»:

procedure TFTorgPredApteki.FormActivate(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllAptk.Open;

DataModuleApteka.SimpleDataSetAllPreparat.Open;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=false;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.DataSet.CommandText:='SELECT "TovarApt"."Kod_rashoda","Apteki"."Aptk_adres",'

+'"Apteki"."Aptk_telf", "PreparSprav"."Name_tovara", "TorgPred"."Price_opt", '

+'"TovarApt"."Tovar_price_ed","TovarApt"."Tovar_ost", "TovarApt"."Tovar_prod", '

+'"PreparSprav"."Zh_n_pr", "TovarApt"."Min_zps" '

+'FROM "Apteki", "PreparSprav", "TovarApt", "TorgPred" '

+'WHERE "Apteki"."Num_aptk"="TovarApt"."Num_aptk" and '

+'"TovarApt"."Kod_tovara"="PreparSprav"."Kod_tovara" and '

+'"TorgPred"."Kod_tovara"="PreparSprav"."Kod_tovara"';

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=true;

end;

Обработчик события «OnClick» компонента «DBLookupComboBox1»:

procedure TFTorgPredApteki.DBLookupComboBox1Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=false;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.DataSet.CommandText:='SELECT "TovarApt"."Kod_rashoda","Apteki"."Aptk_adres",'

+'"Apteki"."Aptk_telf", "PreparSprav"."Name_tovara", "TorgPred"."Price_opt", '

+'"TovarApt"."Tovar_price_ed","TovarApt"."Tovar_ost", "TovarApt"."Tovar_prod", '

+'"PreparSprav"."Zh_n_pr", "TovarApt"."Min_zps" '

+'FROM "Apteki", "PreparSprav", "TovarApt", "TorgPred" '

+'WHERE "Apteki"."Num_aptk"="TovarApt"."Num_aptk" and '

+'"TovarApt"."Kod_tovara"="PreparSprav"."Kod_tovara" and '

+'"TorgPred"."Kod_tovara"="PreparSprav"."Kod_tovara" and "Apteki"."Num_aptk"='

+DataModuleApteka.SimpleDataSetAllAptk.FieldByName('Num_aptk').AsString;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=true;

end;

Обработчик события «OnClick» компонента «DBLookupComboBox2»:

procedure TFTorgPredApteki.DBLookupComboBox2Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=false;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.DataSet.CommandText:='SELECT "TovarApt"."Kod_rashoda","Apteki"."Aptk_adres",'

+'"Apteki"."Aptk_telf", "PreparSprav"."Name_tovara", "TorgPred"."Price_opt", '

+'"TovarApt"."Tovar_price_ed","TovarApt"."Tovar_ost", "TovarApt"."Tovar_prod", '

+'"PreparSprav"."Zh_n_pr", "TovarApt"."Min_zps" '

+'FROM "Apteki", "PreparSprav", "TovarApt", "TorgPred" '

+'WHERE "Apteki"."Num_aptk"="TovarApt"."Num_aptk" and '

+'"TovarApt"."Kod_tovara"="PreparSprav"."Kod_tovara" and '

+'"TorgPred"."Kod_tovara"="PreparSprav"."Kod_tovara" and "PreparSprav"."Kod_tovara"='

+DataModuleApteka.SimpleDataSetAllPreparat.FieldByName('Kod_tovara').AsString;

DataModuleApteka.SimpleDataSetTovar_v_Apteke.Active:=true;

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFTorgPredApteki.BitBtn1Click(Sender: TObject);

begin

FNewTorgPredApteki.Show;

end;

Обработчик события «OnClick» компонента «BitBtn2»:

procedure TFTorgPredApteki.BitBtn2Click(Sender: TObject);

begin

FZayavkaPostavka.ShowModal;

end;

3.2.7 Форма «FNewTorgPredApteki»

Форма « FNewTorgPredApteki » предназначена для формирования торгового предложения выбранной аптеки. При выборе определённого товара, оптовая цена автоматически отображается в соответствующем поле. Вид формы показан на рисунке 14. 

Рисунок 14 - Форма «FNewTorgPredApteki» для формирования торгового предложения в аптеке

На данной форме разместил компоненты в соответствии с таблицей 25.

        Таблица 25 – Компоненты формы «FNewTorgPredApteki»

Компонент

Назначение

Image1

Фоновый рисунок

DBLookupComboBox1

Выбор адреса аптеки

DBLookupComboBox2

Выбор наименования товара

LabeledEdit1

Поле ввода «Остаток товара»

LabeledEdit2

Поле ввода «Продано товара»

LabeledEdit3

Поле ввода «Розничная цена»

LabeledEdit4

Поле ввода «Оптовая цена»

Label1

Надпись «Адрес аптеки»

Label2

Надпись «Наименование товара»

Label3

Надпись «Минимальный запас жизн. необ. препар.»

Edit1

Поле ввода «Минимальный запас жизн. необ. препар.»

BitBtn1

Кнопка «Добавить»

Обработчик события «OnActivate» формы «FNewTorgPredApteki»:

procedure TFNewTorgPredApteki.FormActivate(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllAptk.Open;

DataModuleApteka.SimpleDataSetAllPreparat.Open;

end;

Обработчик события «OnClick» компонента «DBLookupComboBox2»:

procedure TFNewTorgPredApteki.DBLookupComboBox2Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetOptPrice.Active:=false;

DataModuleApteka.SimpleDataSetOptPrice.DataSet.CommandText:='select "Price_opt" from "TorgPred" where "Kod_tovara"='

+DataModuleApteka.SimpleDataSetAllPreparat.FieldByName('Kod_tovara').AsString;

DataModuleApteka.SimpleDataSetOptPrice.Active:=true;

LabeledEdit4.Text:=DataModuleApteka.SimpleDataSetOptPrice.FieldByName('Price_opt').AsString;

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFNewTorgPredApteki.BitBtn1Click(Sender: TObject);

begin

TransInfo.TransactionID:=1;

if Not DataModuleApteka.SQLConnection1.InTransaction then

 DataModuleApteka.SQLConnection1.StartTransaction(TransInfo);

DataModuleApteka.SQLStoredProcAddTorgPredApteki.Params.ParamByName('P1').Value:=DataModuleApteka.SimpleDataSetAllAptk.FieldByName('Num_aptk').Value;

DataModuleApteka.SQLStoredProcAddTorgPredApteki.Params.ParamByName('P2').Value:=DataModuleApteka.SimpleDataSetAllPreparat.FieldByName('Kod_tovara').Value;

DataModuleApteka.SQLStoredProcAddTorgPredApteki.Params.ParamByName('P3').Value:=LabeledEdit1.Text;

DataModuleApteka.SQLStoredProcAddTorgPredApteki.Params.ParamByName('P4').Value:=LabeledEdit2.Text;

DataModuleApteka.SQLStoredProcAddTorgPredApteki.Params.ParamByName('P5').Value:=LabeledEdit3.Text;

DataModuleApteka.SQLStoredProcAddTorgPredApteki.Params.ParamByName('P6').Value:=Edit1.Text;

try

 DataModuleApteka.SQLStoredProcAddTorgPredApteki.ExecProc;

 DataModuleApteka.SQLConnection1.Commit(TransInfo);

 ShowMessage('Транзакция выполнена');

except

DataModuleApteka.SQLConnection1.Rollback(TransInfo);

 MessageDlg('Транзакция не выполнена',mtError,[mbOK],0)

end;

end;

3.2.8 Форма «FZayavkaPostavka»

Форма « FZayavkaPostavka » предназначена для формирования заявки на поставку товара в аптеку на основании «Кода расхода» в торговом предложении аптеки, доступном  на форме «FTorgPredApteki». При выборе определённого препарата, оптовая цена автоматически отображается в соответствующем поле, а при вводе количества необходимого товара, сумма подсчитывается автоматически. Вид формы показан на рисунке 15.

На данной форме разместил компоненты в соответствии с таблицей 26.

        Таблица 26 – Компоненты формы «FZayavkaPostavka»

Компонент

Назначение

Image1

Фоновый рисунок

Label2

Надпись «Поставщик»

Label3

Надпись «Наименование препарата»

Label4

Надпись «Количество»

Label5

Надпись «Цена (опт.)»

Label6

Надпись «Сумма»

Label7

Надпись «Номер документа»

Label8

Надпись «Код расхода»

Label9

Надпись «Дата заказа

Edit1

Поле ввода «Цена (опт.)»

Edit2

Поле ввода «Количество»

Edit3

Поле ввода «Сумма»

Edit4

Поле ввода «Номер документа»

DBLookupComboBox1

Выбор поставщика

DBLookupComboBox2

Выбор препарата

DBLookupComboBox3

Выбор кода расхода

DateTimePicker1

Выбор даты заказа

BitBtn1

Кнопка «Оформить заявку»

Рисунок 15 - Форма «FZayavkaPostavka»

Обработчик события «OnActivate» формы «FZayavkaPostavka»:

procedure TFZayavkaPostavka.FormActivate(Sender: TObject);

begin

DataModuleApteka.SQLConnection1.Connected:=true;

DataModuleApteka.SimpleDataSetAllPstvsh.Open;

DataModuleApteka.SimpleDataSetAllAptk.Open;

DataModuleApteka.SimpleDataSetTovarApt.Open;

end;

Обработчик события «OnClick» компонента «DBLookupComboBox1»:

procedure TFZayavkaPostavka.DBLookupComboBox1Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetZayavkaPostavka.Active:=false;

DataModuleApteka.SimpleDataSetZayavkaPostavka.DataSet.CommandText:='SELECT * FROM '

+' "PreparSprav", "TorgPred"'

+' WHERE "TorgPred"."Kod_tovara"="PreparSprav"."Kod_tovara" and "TorgPred"."Kod_pstvsh"='

+DataModuleApteka.SimpleDataSetAllPstvsh.FieldByName('Kod_pstvsh').AsString;

DataModuleApteka.SimpleDataSetZayavkaPostavka.Active:=true;

end;

Обработчик события «OnClick» компонента «DBLookupComboBox2»:

procedure TFZayavkaPostavka.DBLookupComboBox2Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetOptPrice.Active:=false;

DataModuleApteka.SimpleDataSetOptPrice.DataSet.CommandText:='select "Price_opt" from "TorgPred" where "Kod_tovara"='

+DataModuleApteka.SimpleDataSetAllPreparat.FieldByName('Kod_tovara').AsString;

DataModuleApteka.SimpleDataSetOptPrice.Active:=true;

Edit1.Text:=DataModuleApteka.SimpleDataSetOptPrice.FieldByName('Price_opt').AsString;

end;

Обработчик события «OnClick» компонента «Edit3»:

procedure TFZayavkaPostavka.Edit3Click(Sender: TObject);

begin

Edit3.Text:=IntToStr(StrToInt(Edit1.Text)*StrToInt(Edit2.Text));

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFZayavkaPostavka.BitBtn1Click(Sender: TObject);

begin

TransInfo.TransactionID:=1;

if Not DataModuleApteka.SQLConnection1.InTransaction then

 DataModuleApteka.SQLConnection1.StartTransaction(TransInfo);

DataModuleApteka.SQLStoredProcAddZakaz.Params.ParamByName('P1').Value:=DataModuleApteka.SimpleDataSetZayavkaPostavka.FieldByName('NumTorgPred').Value;

DataModuleApteka.SQLStoredProcAddZakaz.Params.ParamByName('P2').Value:=DataModuleApteka.SimpleDataSetTovarApt.FieldByName('Kod_rashoda').Value;

DataModuleApteka.SQLStoredProcAddZakaz.Params.ParamByName('P3').Value:=StrToInt(Edit1.Text);

DataModuleApteka.SQLStoredProcAddZakaz.Params.ParamByName('P4').Value:=DateTimePicker1.Date;

DataModuleApteka.SQLStoredProcAddZakaz.Params.ParamByName('P5').Value:=StrToInt(Edit4.Text);

try

 DataModuleApteka.SQLStoredProcAddZakaz.ExecProc;

 DataModuleApteka.SQLConnection1.Commit(TransInfo);

 ShowMessage('Транзакция выполнена');

except

DataModuleApteka.SQLConnection1.Rollback(TransInfo);

 MessageDlg('Транзакция не выполнена',mtError,[mbOK],0)

end;

OExcel:=CreateOleObject('Excel.Application'); // Создать OLE объект Excel

OExcel.WorkBooks.Add();                      // Создать рабочую книгу Excel

OExcel.Visible:=True;                         // Сделать Excel видимым

//Занести в ячейку значение

OExcel.Cells[1,1].Value:='Номер документа';

OExcel.Cells[1,3].Value:=Edit4.Text;

OExcel.Cells[2,1].Value:='Дата заказа';

OExcel.Cells[2,3].Value:=DateToStr(DateTimePicker1.Date);

OExcel.Cells[3,1].Value:='Поставщик';

OExcel.Cells[3,3].Value:=DBLookupComboBox1.Text;

OExcel.Cells[4,1].Value:='Номер договора';

OExcel.Cells[4,3].Value:=DataModuleApteka.SimpleDataSetAllPstvsh.FieldByName('Kod_pstvsh').AsString;

OExcel.Cells[5,1].Value:='Наименование препарата';

OExcel.Cells[5,3].Value:=DataModuleApteka.SimpleDataSetAllPreparat.FieldByName('Name_tovara').AsString;

OExcel.Cells[6,1].Value:='Количество';

OExcel.Cells[6,3].Value:=Edit2.Text;

OExcel.Cells[7,1].Value:='Цена(сумма)';

OExcel.Cells[7,3].Value:=Edit3.Text;

end;

3.2.9 Форма «FNewPreparat»

Форма « FNewPreparat » предназначена для добавления нового препарата в справочник лекарственных препаратов. Вид формы показан на рисунке 16.

На данной форме разместил компоненты в соответствии с таблицей 27.

        Таблица 27 – Компоненты формы «FNewPreparat»

Компонент

Назначение

LabeledEdit1

Поле ввода группы препарата

LabeledEdit2

Поле ввода наименования препарата

LabeledEdit3

Поле ввода единицы измерения

CheckBox1

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

BitBtn1

Кнопка «Добавить препарат»

Рисунок 16 - Форма «FNewPreparat»

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFNewPreparat.BitBtn1Click(Sender: TObject);

begin

TransInfo.TransactionID:=1;

if Not DataModuleApteka.SQLConnection1.InTransaction then

 DataModuleApteka.SQLConnection1.StartTransaction(TransInfo);

DataModuleApteka.SQLStoredProcAddPreparat.Params.ParamByName('P1').AsString:=LabeledEdit1.Text;

DataModuleApteka.SQLStoredProcAddPreparat.Params.ParamByName('P2').AsString:=LabeledEdit2.Text;

DataModuleApteka.SQLStoredProcAddPreparat.Params.ParamByName('P3').AsString:=LabeledEdit3.Text;

if CheckBox1.Checked then n:=1

 else n:=0;

DataModuleApteka.SQLStoredProcAddPreparat.Params.ParamByName('P4').Value:=n;

try

 DataModuleApteka.SQLStoredProcAddPreparat.ExecProc;

 DataModuleApteka.SQLConnection1.Commit(TransInfo);

 ShowMessage('Транзакция выполнена');

except

DataModuleApteka.SQLConnection1.Rollback(TransInfo);

MessageDlg('Транзакция не выполнена',mtError,[mbOK],0)

end;

DataModuleApteka.SimpleDataSetAllPreparat.Close;

DataModuleApteka.SimpleDataSetAllPreparat.Open;

end;

3.2.10 Форма «FManagerOtchet»

Форма « FManagerOtchet » предназначена для отображения информации по заявкам поставщикам (заявка на поставку) с возможностью просмотра по каждому поставщику и печатью соответствующего отчёта. Вид формы показан на рисунке 17. 

Рисунок 17 - Форма «FManagerOtchet»

На данной форме разместил компоненты в соответствии с таблицей 28.

        Таблица 28 – Компоненты формы «FManagerOtchet»

Компонент

Назначение

DBGrid1

Вывод информации

DBLookupComboBox1

Выбор поставщика

BitBtn1

Кнопка «Печать»

Обработчик события «OnActivate» формы «FManagerOtchet»:

procedure TFManagerOtchet.FormActivate(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllPstvsh.Open;

DataModuleApteka.SimpleDataSetManagerOtchet.Open;

end;

Обработчик события «OnClick» компонента «DBLookupComboBox1»:

procedure TFManagerOtchet.DBLookupComboBox1Click(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetManagerOtchet.Close;

DataModuleApteka.SimpleDataSetManagerOtchet2.Close;

DataModuleApteka.SimpleDataSetManagerOtchet2.DataSet.CommandText:='select * from "manager_otchet2"('

+DataModuleApteka.SimpleDataSetAllPstvsh.FieldByName('Kod_pstvsh').AsString+')';

DBGrid1.DataSource:=DataModuleApteka.DataSourceManagerOtchet2;

DataModuleApteka.SimpleDataSetManagerOtchet2.Open;

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFManagerOtchet.BitBtn1Click(Sender: TObject);

begin

OExcel:=CreateOleObject('Excel.Application'); // Создать OLE объект Excel

OExcel.WorkBooks.Add();                      // Создать рабочую книгу Excel

OExcel.Visible:=True;                         // Сделать Excel видимым

//Занести в ячейку значение

OExcel.Cells[1,1].Value:='Отчёт по заявкам поставщикам ' + DataModuleApteka.SimpleDataSetAllPstvsh.FieldByName('Name_pstvsh').AsString;

OExcel.Cells[2,1].Value:='Дата '+ DateToStr(Date);

 // Определить количество столбцов DBGrid1

i:=DBGrid1.Columns.Count;

for j:=1 to i do

begin

//Занести в ячейки 3 строки заголовки столбцов DBGrid1

 OExcel.Cells[3,j].Value:=  DBGrid1.Columns.Items[j-1].Title.Caption;

OExcel.Range[chr(96+j)+':'+chr(96+j)].Select;        // Выделить ячейки

//Установить ширину ячейки OExcel в зависимости от ширины столбца DBGrid1

OExcel.Selection.ColumnWidth :=DBGrid1.Columns.Items[j-1].Width/5 ;

OExcel.Selection.WrapText:= True;      // Переносить по словам

end;

OExcel.Range['1:1'].Select;           // Выделить ячейку 1 столбца 1 строки

OExcel.Selection.WrapText:= False;

istr:=5;                           // Номер строки

DataModuleApteka.SimpleDataSetManagerOtchet.First;                //Перейти на первую запись

while not DataModuleApteka.SimpleDataSetManagerOtchet.Eof do      // Пока не будет достигнут конец файла

begin

 for j:=1 to i do

//Заносить в ячейку Excel содержимое полей, которые отражаются в  DBGrid1

OExcel.Cells[istr,j].Value:=DataModuleApteka.SimpleDataSetManagerOtchet.FieldByName(DBGrid1.Columns.Items[j-1].FieldName).AsString;

DataModuleApteka.SimpleDataSetManagerOtchet.Next;                 //Перейти на следующую запись

 istr:=istr+1;                           //Увеличить номер строки

end;

OExcel.Range['A3:'+chr(96+j-1)+IntToStr(istr)].Select;   // Выделить ячейки

//Обрамление сплошной линией всех выделенных ячеек

    OExcel.Selection.Borders[xlEdgeLeft].LineStyle:=xlContinuous;

    OExcel.Selection.Borders[xlEdgeRight].LineStyle:=xlContinuous;

    OExcel.Selection.Borders[xlEdgeTop].LineStyle:=xlContinuous;

    OExcel.Selection.Borders[xlEdgeBottom].LineStyle:=xlContinuous;

  if i>1 then

    OExcel.Selection.Borders[xlInsideVertical].LineStyle:=xlContinuous;

    OExcel.Selection.Borders[xlInsideHorizontal].LineStyle:=xlContinuous;

     OExcel.Range['D'+IntToStr(istr)+':D'+IntToStr(istr+1)].Select;

// Объединение ячеек

     OExcel.Selection.MergeCells:=True;

     OExcel.Selection.HorizontalAlignment := xlLeft;

     OExcel.Selection.VerticalAlignment := xlCenter;

end;

3.2.11 Форма «FNewApteka»

Форма « FNewApteka » предназначена для добавления информации в базу данных о новой аптеке. Вид формы показан на рисунке 18.

Рисунок 18 - Форма «FNewApteka»

На данной форме разместил компоненты в соответствии с таблицей 29.

        Таблица 29 – Компоненты формы «FNewApteka»

Компонент

Назначение

LabeledEdit1

Поле ввода адреса новой аптеки

LabeledEdit2

Поле ввода телефона новой аптеки

BitBtn1

Кнопка «Сохранить»

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFNewApteka.BitBtn1Click(Sender: TObject);

begin

TransInfo.TransactionID:=1;

if Not DataModuleApteka.SQLConnection1.InTransaction then

 DataModuleApteka.SQLConnection1.StartTransaction(TransInfo);

DataModuleApteka.SQLStoredProcAddAptk.Params.ParamByName('P1').AsString:=LabeledEdit1.Text;

DataModuleApteka.SQLStoredProcAddAptk.Params.ParamByName('P2').Value:=LabeledEdit2.Text;

try

 DataModuleApteka.SQLStoredProcAddAptk.ExecProc;

 DataModuleApteka.SQLConnection1.Commit(TransInfo);

 ShowMessage('Транзакция выполнена');

except

DataModuleApteka.SQLConnection1.Rollback(TransInfo);

 MessageDlg('Транзакция не выполнена',mtError,[mbOK],0)

end;

DataModuleApteka.SimpleDataSetAllAptk.Close;

DataModuleApteka.SimpleDataSetAllAptk.Open;

end;

3.2.12 Форма «FNewPostavshik»

Форма « FNewPostavshik » предназначена для добавления информации в базу данных о новом поставщике. Вид формы показан на рисунке 19. 

Рисунок 19 - Форма «FNewPostavshik»

На данной форме разместил компоненты в соответствии с таблицей 30.

        Таблица 30 – Компоненты формы «FNewPostavshik»

Компонент

Назначение

Image1

Фоновый рисунок

LabeledEdit1

Поле ввода наименования поставщика

LabeledEdit2

Поле ввода адреса поставщика

LabeledEdit3

Поле ввода телефона поставщика

BitBtn1

Кнопка «Сохранить»

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFNewPostavshik.BitBtn1Click(Sender: TObject);

begin

TransInfo.TransactionID:=1;

if Not DataModuleApteka.SQLConnection1.InTransaction then

 DataModuleApteka.SQLConnection1.StartTransaction(TransInfo);

DataModuleApteka.SQLStoredProcAddPstvsh.Params.ParamByName('P1').AsString:=LabeledEdit1.Text;

DataModuleApteka.SQLStoredProcAddPstvsh.Params.ParamByName('P2').AsString:=LabeledEdit2.Text;

DataModuleApteka.SQLStoredProcAddPstvsh.Params.ParamByName('P3').Value:=LabeledEdit3.Text;

try

 DataModuleApteka.SQLStoredProcAddPstvsh.ExecProc;

 DataModuleApteka.SQLConnection1.Commit(TransInfo);

 ShowMessage('Транзакция выполнена');

except

DataModuleApteka.SQLConnection1.Rollback(TransInfo);

 MessageDlg('Транзакция не выполнена',mtError,[mbOK],0)

end;

DataModuleApteka.SimpleDataSetAllPstvsh.Close;

DataModuleApteka.SimpleDataSetAllPstvsh.Open;

end;

3.2.13 Форма «FNewTorgPred»

Форма « FNewTorgPred » предназначена для добавления информации о торговом предложении каждого поставщика. Вид формы показан на рисунке 20. 

Рисунок 20 - Форма «FNewTorgPred»

На данной форме разместил компоненты в соответствии с таблицей 31.

        Таблица 31 – Компоненты формы «FNewTorgPred»

Компонент

Назначение

Label1

Надпись «Поставщик»

Label2

Надпись «Препарат»

Label3

Надпись «Цена (оптовая)»

Label4

Надпись «руб.»

DBLookupComboBox1

Выбор поставщика

DBLookupComboBox1

Выбор лекарственного препарата

Edit1

Поле ввода оптовой цены

BitBtn1

Кнопка «Сохранить»

Обработчик события «OnActivate» формы «FNewTorgPred»:

procedure TFNewTorgPred.FormActivate(Sender: TObject);

begin

DataModuleApteka.SimpleDataSetAllPstvsh.Open;

DataModuleApteka.SimpleDataSetAllPreparat.Open;

end;

Обработчик события «OnClick» компонента «BitBtn1»:

procedure TFNewTorgPred.BitBtn1Click(Sender: TObject);

begin

TransInfo.TransactionID:=1;

if Not DataModuleApteka.SQLConnection1.InTransaction then

 DataModuleApteka.SQLConnection1.StartTransaction(TransInfo);

DataModuleApteka.SQLStoredProcAddTorgPred.Params.ParamByName('P1').Value:=DataModuleApteka.SimpleDataSetAllPreparat.FieldByName('Kod_tovara').Value;

DataModuleApteka.SQLStoredProcAddTorgPred.Params.ParamByName('P2').Value:=DataModuleApteka.SimpleDataSetAllPstvsh.FieldByName('Kod_pstvsh').Value;

DataModuleApteka.SQLStoredProcAddTorgPred.Params.ParamByName('P3').Value:=Edit1.Text;

try

 DataModuleApteka.SQLStoredProcAddTorgPred.ExecProc;

 DataModuleApteka.SQLConnection1.Commit(TransInfo);

 ShowMessage('Транзакция выполнена');

except

DataModuleApteka.SQLConnection1.Rollback(TransInfo);

 MessageDlg('Транзакция не выполнена',mtError,[mbOK],0)

end;

end;


4 Тестирование программного продукта 

4.1 Организация процесса тестирования 

Тестирование в соответствии с рисунком 6 представляет собой деятельность по проверке программного кода и документации. Она должна заранее планироваться и систематически проводиться специально назначенным независимым тестировщиком. Работа тестировщика начинается до утверждения спецификаций требований. Он проверяет требования к ПП на полноту и возможность тестирования, определяет методы тестирования.

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

Рисунок 21 - Цикл тестирования

Существуют два принципа тестирования программ:

  •  Функциональное тестирование (тестирование "черного ящика");
  •  Структурное тестирование (тестирование "белого ящика").

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

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

  1.  Методы тестирования программного продукта

4.2.1 Модульное тестирование программного продукта

Модульное тестирование реализует принцип "белого ящика".

 Тестированию подвергаются:

  •  интерфейс модуля для проверки правильности ввода-вывода;
    •  внутренние структуры данных для проверки целостности сохраняемых данных;
    •  независимые пути – однократное выполнение всех операторов модуля;
    •  пути обработки ошибок;
    •  граничные условия.
      1.  Модуль «Авторизация пользователя» (UnitAuth.pas)
      2.  После запуска программы выбрать пользователя, на форме появится поле ввода соответствующего пароля пользователя;
      3.  Ввести пароль и нажать кнопку «Войти», данная форма закроется и откроется форма для выбранного пользователя;
      4.  Если пароль по истечении 3 попыток введён неверно, программа закроется.
      5.  При вводе неправильного пароля будет выдано сообщении о предупреждении и количестве попыток.
        1.  Модуль «Продавец» (UnitProdavec.pas)
  1.  После нажатия кнопки «Товар», появится компонент  PageControl1, вкладка «Товар» с таблицей данных о товаре (DBGrid1), компонентом DBLookupComboBox1, кнопками «Продать» и «Печать»;
  2.  При выборе адреса аптеки в компоненте DBLookupComboBox1, данные таблицы будет отсортированы по соответствующему выбору;
  3.  При нажатии на кнопку «Печать», содержимое таблицы формируется отчётом в Excel’е;
  4.  При использовании компонента CheckBox1, вкладка «Товар» вместе с компонентом PageControl1 появляется /исчезает;
  5.  При нажатии на кнопку «Выход» приложение закрывается.
    1.  Модуль «Менеджер» (UnitManager.pas)
  6.  При нажатии кнопки «Аптеки», появится компонент  PageControl1, вкладка «Аптеки» с таблицей данных об аптеках (DBGrid1) и кнопкой «Торговое предложение в аптеке», при нажатии на которую откроется форма «Торговое приложение в аптеке» (модуль UnitTorgPredApteki.pas);
  7.  При нажатии кнопки «Поставщики», станет активна вкладка «Поставщики» компонента PageControl1 с таблицей данных о поставщиках (DBGrid2);
  8.  При нажатии кнопки «Отчёты», станет активна вкладка «Отчёты» компонента PageControl1 с кнопкой открытия формы отчёта «Заявка на поставку» (модуль UnitManagerOtchet.pas);
  9.  При нажатии кнопки «Справочник», станет активна вкладка «Справочник препаратов» компонента PageControl1 с таблицей данных о лекарственных препаратах (DBGrid3) и кнопка «Новый препарат», нажав которую откроется форма ввода нового препарата (модуль UnitNewPreparat.pas);
  10.  При нажатии кнопки «Товар», откроется форма «Торговое предложение в аптеке» (модуль UnitTorgPredApteki.pas);
  11.  При использовании компонента CheckBox1, вкладки «Аптеки», «Поставщики», «Отчёты», «Справочник» компонента PageControl1 появляются /исчезают;
  12.  При нажатии на кнопку «Выход» приложение закрывается.
    1.  Модуль «Управляющий» (UnitDirector.pas)
  13.  При нажатии кнопки «Аптеки», появится компонент  PageControl1, вкладка «Аптеки» с таблицей данных об аптеках (DBGrid1) и кнопкой «Добавить новую аптеку», при нажатии на которую откроется форма «Добавление новой аптеки» (модуль UnitNewApteka.pas);
  14.  При нажатии кнопки «Поставщики», станет активна вкладка «Поставщики» компонента PageControl1 с таблицей данных о поставщиках (DBGrid2) и кнопками «Новый поставщик» и «Торговое предложение», открывающие формы добавления нового поставщика (модуль UnitNewPostavshik.pas) и торгового предложения поставщика (модуль UnitNewTorgPred.pas);
  15.  При нажатии кнопки «Отчёты», станет активна вкладка «Отчёты» компонента PageControl1;
  16.  При нажатии кнопки «Справочник», станет активна вкладка «Справочник препаратов» компонента PageControl1 с таблицей данных о лекарственных препаратах (DBGrid3) и кнопка «Новый препарат», нажав которую откроется форма ввода нового препарата (модуль UnitNewPreparat.pas);
  17.  При использовании компонента CheckBox1, вкладки «Аптеки», «Поставщики», «Отчёты», «Справочник» компонента PageControl1 появляются /исчезают;
  18.  При нажатии на кнопку «Выход» приложение закрывается.
    1.  Модуль «Торговое предложение в аптеке» (UnitTorgPredApteki.pas)
  19.  При запуске активна таблица DBGrid1 с данными о торговом предложении каждой аптеки.
  20.  При использовании одного из компонентов DBLookupComboBox1 («Выберите аптеку») и DBLookupComboBox2 («Название препарата») данные в таблице DBGrid1 фильтруются соответственно сделанному выбору;
  21.  При нажатии кнопки «Сформировать торговое предложение», откроется новая форма «Формирование торгового предложения в аптеке» (модуль UnitNewTorgPredApteki.pas);
  22.  При нажатии кнопки «Заявка на поставку», откроется новая форма «Оформление заказа на товар» (модуль UnitZayavkaPostavka.pas).
    1.  Модуль «Формирование торгового предложения в аптеке» (UnitNewTorgPredApteki.pas)
  23.  Выбрать адрес аптеки (DBLookupComboBox1), наименование товара (DBLookupComboBox2), после выбора наименования товара в поле «Оптовая цена» появляется соответствующая цена;  
  24.  Ввести остаток товара, продано товара, розничная цена и минимальный запас жизн. необ. препар.;  
  25.  При нажатии на кнопку «Добавить», соответствующая запись добавляется в БД;
  26.  Если  данные введены неверно или поля остались пустые, при нажатии на кнопку «Добавить» появится сообщении об ошибке «Транзакции не выполнена» и откат транзакции.
    1.  Модуль «Оформление заказа на товар» (UnitZayavkaPostavka.pas)
  27.  Ввести номер документа, выбрать дату заказа, поставщика, наименование препарата и код расхода, указать количество необходимого товара;
  28.  После выбора наименования товара поле «Цена (опт.)» заполнится соответствующей ценой, а при указании необходимого количества  товара, сумма посчитается автоматически;
  29.  При нажатии на кнопку «Оформить заявку», соответствующая запись добавляется в БД;
  30.  Если данные введены неверно или поля остались пустые, при нажатии на кнопку «Оформить заявку» появится сообщении об ошибке «Транзакции не выполнена» и откат транзакции.
    1.  Модуль «Отчёт менеджера (заявки на поставку)» (UnitZayavkaPostavka.pas)
  31.  При запуске модуля и открытии формы становится активна таблица DBGrid1с данными о заявках и компонентами: DBLookupComboBox1 (выбор названия поставщика) и кнопка «Печать»;
  32.  При нажатии на кнопку «Печать» содержимое таблицы DBGrid1 формируется отчётом в Excel’е.
    1.  Модуль «Новый препарат» (UnitNewPreparat.pas)
  33.  Ввести группу лекарственного препарата, наименование, единицу измерения и отметить является ли данный препарат жизненно необходимым;
  34.  При нажатии на кнопку «Добавить препарат» соответствующая запись добавляется в БД;
  35.  Если данные введены неверно или поля остались пустые, при нажатии на кнопку «Добавить препарат» появится сообщении об ошибке «Транзакции не выполнена» и откат транзакции.
    1.  Модуль «Добавление новой аптеки» (UnitNewApteka.pas)
  36.  Ввести адрес и телефон аптеки;
  37.  При нажатии на кнопку «Сохранить» соответствующая запись добавляется в БД;
  38.  Если данные введены неверно или поля остались пустые, при нажатии на кнопку «Сохранить» появится сообщении об ошибке «Транзакции не выполнена» и откат транзакции.
    1.  Модуль «Новый поставщик» (UnitNewPostavshik.pas)
  39.  Ввести наименование, адрес, телефон поставщика;
  40.  При нажатии на кнопку «Сохранить» соответствующая запись добавляется в БД;
  41.  Если данные введены неверно или поля остались пустые, при нажатии на кнопку «Сохранить» появится сообщении об ошибке «Транзакции не выполнена» и откат транзакции.
    1.  Модуль «Торговое предложение» (UnitNewTorgPred.pas)
  42.  Выбрать поставщика, лекарственный препарат и ввести оптовую цену;
  43.  При нажатии на кнопку «Сохранить» соответствующая запись добавляется в БД;
  44.  Если данные введены неверно или поля остались пустые, при нажатии на кнопку «Сохранить» появится сообщении об ошибке «Транзакции не выполнена» и откат транзакции.

4.2.2 Тестирование интеграции

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

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

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

Таблица 32 – Тестирование интеграции приложения Kr_Apteka

Модуль «Авторизация пользователя»

Модуль «Продавец»

Модуль «Менеджер»

Модуль «Управляющий»

Модуль «Торговое предложение в аптеке»

Модуль «Формирование торгового предложения в аптеке»

Модуль «Оформление заказа на товар»

Модуль «Отчёт менеджера (заявки на поставку)»

Модуль «Новый препарат»

Модуль «Добавление новой аптеки»

Модуль «Новый поставщик»

Модуль «Торговое предложение»

Модуль «Авторизация пользователя»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Продавец»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Менеджер»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Управляющий»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Торговое предложение в аптеке»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Формирование торгового предложения в аптеке»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Оформление заказа на товар»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Отчёт менеджера (заявки на поставку)»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Новый препарат»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Добавление новой аптеки»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Новый поставщик»

+

+

+

+

+

+

+

+

+

+

+

+

Модуль «Торговое предложение»

+

+

+

+

+

+

+

+

+

+

+

+

  1.   Тестирование правильности

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

Исходные данные контрольного примера приведены в приложении Б.

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


5 Технологическая часть

5.1 Руководство пользователя

Разместить программу D:\work\Delphi_Kr_Apteka_v1\ Kr_Apteka.exe, а базу данных D:\work\ DB_APT.GDB.

Запустим программу Kr_Apteka.exe. Открывается окно «авторизация».

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

Открывается форма в зависимости от выбранного пользователя. Слева на форме будет представлено меню соответствующего пользователя с теми возможностями, которые ему разрешены и требуются для работы. Функции, которые не разрешены пользователю, не отображаются.

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

Рабочий функционал продавца представлен кнопкой «Товар» и соответствующими функциями на 1 вкладке.

Рабочий функционал менеджера представлен кнопками, соответствующим 4 вкладкам с необходимым рабочим интерфейсом, а также кнопкой «Товар», которая в отличии от кнопки продавца предлагает более расширенный интерфейс (представленный в отдельных модулях) на отдельно открываемой форме «Торговое предложение в аптеке». Менеджер на данной форме имеет возможность отслеживать информацию о товаре в каждой аптеке, цены, продажи и по необходимости сформировать необходимое торговое предложение для определённой аптеки или оформить заявку на новый товар поставщику.  

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


Заключение

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

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

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

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


Список использованных источников

1. Фаронов В. В. Delphi 6. Учебный курс. – М.: «Нолидж», 2001

2. Фаронов В. В. Delphi. Программирование на языке высокого уровня. Учебник для вузов. – СПб.: Питер, 2007

3. Культин Н. Б. Основы программирования в Delphi 7.0. СП.: БХВ - Петербург , 2003

4. Зуев Е. А. Программирование на языке TURBO PASCAL 6.0, 7.0 – М.: Веста, Радио и связь, 1993

5. Голицина О. Л., Попов И. И. Основы алгоритмизации и программирования: Учебное пособие. – М: Форум, 2008

6. Культин Н. Б. Delphi в задачах и примерах СП.: БХВ - Петербург , 2003

7. Бобовский С. Delphi 7 учебный курс. «Питер»,2008

2. С.В. Глушаков, А.Л. Клевцов - «Программирование в среде Delphi 7.0»;

3. В. Фаронов - «Программирование баз данных в  Delphi 7»;

4. А. Сорокин - «Delphi разработка баз данных»;

5. В. Э. Гофман - «Delphi7»;

6. И.В. Боровский - «Программирование в Delphi 2005»;

7. Автор неизвестен - «Delphi. Готовые алгоритмы»;

8. Гализеев В.П. - «Программирование в среде Delphi 7»;

9. А.А. Шкрыль - «Delphi Народные советы»;

10. А.В. Рудаков – «Технология разработки программных продуктов»;

11.  Гагарина – «Основы технологии разработки программных продуктов. Учебное пособие»;


Приложение А

/*

* ER/Studio Data Architect 8.5 SQL Code Generation

* Company :      Microsoft

* Project :      Model3.DM1

* Author :       Microsoft

*

* Date Created : Friday, November 08, 2013 10:22:59

* Target DBMS : InterBase

*/

/*

* TABLE: Apteki

*/

CREATE TABLE Apteki(

   Num_aptk  INTEGER           NOT NULL,

   Aptk_adres  CHAR(16)          NOT NULL,

   Aptk_telf  NUMERIC(16, 0)    NOT NULL,

   CONSTRAINT PK8 PRIMARY KEY (Num_aptk)

);

/*

* TABLE: Postavshiki

*/

CREATE TABLE Postavshiki(

   Kod_pstvsh  INTEGER           NOT NULL,

   Name_pstvsh CHAR(32)          NOT NULL,

   Adres_pstvsh CHAR(32)          NOT NULL,

   Tel_pstvsh  NUMERIC(16, 0)    NOT NULL,

   CONSTRAINT PK2 PRIMARY KEY (Kod_pstvsh)

);

/*

* TABLE: PreparSprav

*/

CREATE TABLE PreparSprav(

   Kod_tovara  INTEGER     NOT NULL,

   grup_tov  CHAR(32)    NOT NULL,

   Name_tovara CHAR(32)    NOT NULL,

   Ed_iz  CHAR(8, 0)     NOT NULL,

   Zh_n_pr  BINARY(1)     NOT NULL,

   CONSTRAINT PK7 PRIMARY KEY (Kod_tovara)

Приложение А (продолжение)

);

/*

* TABLE: TorgPred 

*/

CREATE TABLE TorgPred(

   NumTorgPred INTEGER          NOT NULL,

   Kod_tovara  INTEGER          NOT NULL,

   Kod_pstvsh  INTEGER          NOT NULL,

   Price_opt  NUMERIC(8, 2)    NOT NULL,

   CONSTRAINT PK3 PRIMARY KEY (NumTorgPred)

);

/*

* TABLE: TovarApt

*/

CREATE TABLE TovarApt(

   Kod_rashoda INTEGER          NOT NULL,

   Tovar_ost  NUMERIC(8, 0)    NOT NULL,

   Tovar_prod  NUMERIC(8, 0)    NOT NULL,

   Tovar_price_ed NUMERIC(8, 2)    NOT NULL,

   Min_zps  NUMERIC(8, 0)    NOT NULL,

   Kod_tovara  INTEGER          NOT NULL,

   Num_aptk  INTEGER          NOT NULL,

   CONSTRAINT PK6 PRIMARY KEY (Kod_rashoda)

);

/*

* TABLE: Zakaz

*/

CREATE TABLE Zakaz(

   Num_zakz  INTEGER          NOT NULL,

   NumTorgPred INTEGER          NOT NULL,

   Kod_rashoda INTEGER          NOT NULL,

   Zak_tov_kol NUMERIC(8, 0)    NOT NULL

   Data_zakz  DATE             NOT NULL,

   Data_oplt  DATE             NOT NULL,

   Data_post  DATE,

   Post_tov_kol NUMERIC(8, 0),

   Num_doc  NUMERIC(8, 0)    NOT NULL,

   CONSTRAINT PK4 PRIMARY KEY (Num_zakz)

Приложение А (продолжение)

);

/*

* INDEX: "Ref21"

 */

CREATE INDEX "Ref21" ON "TorgPred"(Kod_pstvsh)

;

/*

* INDEX: "Ref72"

*/

CREATE INDEX "Ref72" ON "TorgPred"(Kod_tovara)

;

/*

* INDEX: "Ref77"

*/

CREATE INDEX "Ref77" ON "TovarApt"(Kod_tovara)

;

/*

* INDEX: "Ref89"

*/

CREATE INDEX "Ref89" ON "TovarApt"(Num_aptk)

;

/*

* INDEX: "Ref63"

*/

CREATE INDEX "Ref63" ON "Zakaz"(Kod_rashoda)

;

/*

* INDEX: "Ref35"

*/

CREATE INDEX "Ref35" ON "Zakaz"(NumTorgPred)

;

/*

* TABLE: "TorgPred"

*/

ALTER TABLE "TorgPred" ADD CONSTRAINT "RefPostavshiki1"

   FOREIGN KEY (Kod_pstvsh)

   REFERENCES "Postavshiki"(Kod_pstvsh);

ALTER TABLE "TorgPred" ADD CONSTRAINT "RefPreparSprav2"

   FOREIGN KEY (Kod_tovara)

   REFERENCES "PreparSprav"(Kod_tovara);

Приложение А (продолжение)

/*

* TABLE: "TovarApt"

 */

ALTER TABLE "TovarApt" ADD CONSTRAINT "RefPreparSprav7"

   FOREIGN KEY (Kod_tovara)

   REFERENCES "PreparSprav"(Kod_tovara);

ALTER TABLE "TovarApt" ADD CONSTRAINT "RefApteki9"

   FOREIGN KEY (Num_aptk)

   REFERENCES "Apteki"( Num_aptk);

/*

* TABLE: "Zakaz"

*/

ALTER TABLE "Zakaz" ADD CONSTRAINT "RefTovarApt3"

   FOREIGN KEY (Kod_rashoda)

   REFERENCES "TovarApt"(Kod_rashoda);

ALTER TABLE "Zakaz" ADD CONSTRAINT "RefTorgPred5"

   FOREIGN KEY (NumTorgPred)

   REFERENCES "TorgPred"(NumTorgPred);


Приложение Б

Тестовый пример

Таблица: Apteki (Аптеки)

Num_aptk

Aptk_adres

Aptk_telf

Номер аптеки

Название аптеки

Телефон аптеки

1

Аптека 1

344455

2

Аптека 2

344545

3

Аптека 3

345555

Таблица: PreparSprav (Справочник препаратов)

Kod_tovara

Grup_tov

Name_tovara

Ed_iz

Zh_n_pr

Код товара

Группа товара

Наименование препарата

Единица измерения

Жизн. Необх. Препарат

1

Группа 1

Первый препарат

шт.

0

2

Группа 1

Второй препарат

шт.

0

3

Группа 2

Третий препарат

уп.

1

Таблица: Postavshiki (Поставщики)

Kod_pstvsh

Name_pstvsh

Adres_pstvsh

Tel_pstvsh

Код поставщика

Название поставщика

Адрес поставщика

Телефон поставщика

1

Первый поставщик

Платова 19

321222

2

Второй поставщик

Пушкина 25

321819

3

Третий поставщик

Ермака 54

324555

Таблица: TorgPred (Торговое предложение) 

NumTorgPred

Kod_tovara

Kod_pstvsh

Price_opt

Номер торгового предложения

Код товара

Код поставщика

Оптовая цена

1

1

1

250

2

2

1

345

3

3

2

445

4

2

2

344

5

4

1

558

Приложение Б (продолжение)

Таблица: TovarApt (Товар в аптеке)

Kod_rashoda

Num_aptk

Kod_tovara

Tovar_ost

Tovar_prod

Tovar_price_ed

Min_zps

Код расхода

Номер аптеки

Код товара

Остаток товара в аптеке

Продано товара

Розничная цена 1 ед. товара

Минимальный запас жизненно необходимых препаратов

1

1

1

0

0

290

0

2

1

2

0

0

375

0

3

2

3

0

0

490

15

4

2

4

0

0

590

10

Таблица: Zakaz (Заказ)

Num_zakz

NumTorgPred

Kod_rashoda

Zak_tov_kol

Data_zakz

Data_oplt

Data_post

Post_tov_kol

Num_doc

Номер заказа

Номер торгового предложения

Код расхода

Заказано товара

Дата заказа

Дата оплаты

Дата поставки

Поступило товара

Номер документа

1

1

1

100

15.11.2013

16.11.2013

17.11.2013

100

10001

2

4

2

200

15.11.2013

16.11.2013

17.11.2013

200

10001

3

5

4

100

18.11.2013

19.11.2013

20.11.2013

100

10002



 

Другие похожие работы, которые могут вас заинтересовать.
1760. Разработка базы данных системы автоматизации документооборота отдела по работе с физическими лицами коммерческого банка 5.37 MB
  Прием поступающих в организацию документов осуществляется централизованно экспедицией или сотрудниками службы документационного обеспечения управления (ДОУ). Факсимильные сообщения и сообщения, поступающие по электронной почте, могут приниматься децентрализовано
19473. Создание базы данных для учета лекарственных средств и изделий медицинского назначения в аптеках стационаров 1.71 MB
  анная работа посвящена проектированию базы данных «Аптека» для учета лекарственных средств и изделий медицинского назначения, предназначенной для использования в аптеках стационаров лечебно-профилактических учреждений (ЛПУ) Нижегородской области и Нижнего Новгорода.
4720. Разработка программного обеспечения для автоматизации формирования учебных программ на кафедре ИВТ факультета ИТиКС ОмГТУ 1.55 MB
  Главное назначение СЭДО — это организация хранения электронных документов, а также работы с ними (в частности, их поиска как по атрибутам, так и по содержимому). В СЭД должны автоматически отслеживаться изменения в документах, сроки исполнения документов, движение документов, а также контролироваться все их версии и подверсии
5031. Разработка базы данных Библиотека 11.72 MB
  Технология проектирования баз данных. Определение взаимосвязей между сущностями и создание модели данных. Основные идеи современной информационной технологии базируются на концепции согласно которой данные должны быть организованы в базы данных с целью адекватного отображения изменяющегося реального мира и удовлетворения информационных потребностей пользователей. Эти базы данных создаются и функционируют под управлением специальных программных комплексов называемых системами управления базами данных СУБД.
14095. Разработка базы данных библиотеки 11.72 MB
  Увеличение объема и структурной сложности хранимых данных, расширение круга пользователей информационных систем привели к широкому распространению наиболее удобных и сравнительно простых для понимания реляционных (табличных) СУБД.
17474. Разработка базы данных доска объявлений 493.89 KB
  Логическое моделирование базы данных Нормализация схемы базы данных Физическое моделирование базы данных. Разработка таблиц базы данных Разработка форм ввода информации в базу данных Разработка основных запросов к базе данных Разработка хранимых процедур и триггеров Разработка хранимых процедур и триггеров Разработка форм вывода информации из базы данных Подготовка данных для вывода на печать...
9911. Разработка базы данных по коллекционированию монет 1.01 MB
  Пользуясь базой данной коллекционер находит нужные монеты получает полную информацию об их изготовлении и их качестве в настоящее время. Также он может увидеть какие монеты имеются у определенного коллекционера и обменять нужный товар. На основании этого он заключает договор который является документом подтверждающим легальность приобретения монеты.
20323. Разработка структуры базы данных информационной системы 971.23 KB
  Требуется разработать приложение и базу данных для компьютерной фирмы занимающейся продажей вычислительной техники комплектующих для неё и периферии. Формы первичных учетных документов определяются и устанавливаются организацией в составе применяемой ею системы учетной документации для регистрации хозяйственных операций. Первые быстродействующие компьютеры использовались предпринимателями в основном для автоматизации процессов которые раньше выполнялись вручную большим числом сотрудников невысокой квалификации; типичный пример - обработка...
18464. Разработка структуры базы данных информационной системы 971.23 KB
  Требуется разработать приложение и базу данных для компьютерной фирмы занимающейся продажей вычислительной техники комплектующих для неё и периферии. Формы первичных учетных документов определяются и устанавливаются организацией в составе применяемой ею системы учетной документации для регистрации хозяйственных операций. Первые быстродействующие компьютеры использовались предпринимателями в основном для автоматизации процессов которые раньше выполнялись вручную большим числом сотрудников невысокой квалификации; типичный пример - обработка...
13010. Разработка технологического процесса изготовления детали сборочного изделия с использованием СNС станков и средств автоматизации 6.58 MB
  Для изготовления корпуса обычно используют металлы либо их сплавы: бронзу или латунь которые могут быть покрыты позолотой никелем хромом; нержавеющую сталь; титан; алюминий; драгоценные металлы: серебро золото платину а также пластик; керамику; карбиды титана или вольфрама; натуральный камень; сапфир; дерево резину. В качестве часового стекла обычно используется прозрачный пластик минеральное или сапфировое стекло...
© "REFLEADER" http://refleader.ru/
Все права на сайт и размещенные работы
защищены законом об авторском праве.