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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 10.09.2015
Размер файла 4,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

ПМ.02 Разработка и администрирование баз данных

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

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

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

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

Задание

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

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

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

_________________________________________________________________________________________________________________________________________________________________________________________________

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

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

Объем, %

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

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

10%

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

20%

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

20%

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

10%

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

15%

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

15%

Всего:

100%

Содержание

  • Задание
  • Реферат
  • Введение
  • 1. Анализ предметной области и формирование требований пользователей
  • 1.1 Анализ предметной области
  • 1.2 Запросы пользователей
  • 1.3 Информационные процессы
  • 2. Проектирование и создание базы данных
  • 2.1 Разработка концептуальной модели предметной области
  • 2.1.1 Сущности
  • 2.1.2 Первичные ключи
  • 2.1.3 Атрибуты сущностей
  • 2.1.4 Спецификация связей
  • 2.1.5 Обрабатываемые транзакции
  • 2.2 Выбор архитектуры программно-технологической реализации АИС и используемой СУБД
  • 2.3 Логическое проектирование базы данных
  • 2.3.1 Логическая структура
  • 2.3.2 Анализ транзакций
  • 2.4 Создание базы данных
  • 3. Разработка клиентского программного обеспечения
  • 3.1 Структура прикладного программного обеспечения
  • 3.2 Описание интерфейса и алгоритмов работы программных модулей
  • 3.2.1 Модуль данных
  • 3.2.2 Главная форма "FPassword"
  • 3.2.3 Форма "FProdavec"
  • 3.2.4 Форма "FManager"
  • 3.2.5 Форма "FDirector"
  • 3.2.6 Форма "FTorgPredApteki"
  • 3.2.7 Форма "FNewTorgPredApteki"
  • 3.2.8 Форма "FZayavkaPostavka"
  • 3.2.9 Форма "FNewPreparat"
  • 3.2.10 Форма "FManagerOtchet"
  • 3.2.11 Форма "FNewApteka"
  • 3.2.12 Форма "FNewPostavshik"
  • 3.2.13 Форма "FNewTorgPred"
  • end;
  • 4. Тестирование программного продукта
  • 4.1 Организация процесса тестирования
  • 4.2 Методы тестирования программного продукта
  • 4.2.1 Модульное тестирование программного продукта
  • 4.2.1.1 Модуль "Авторизация пользователя" (UnitAuth. pas)
  • 4.2.1.2 Модуль "Продавец" (UnitProdavec. pas)
  • 4.2.1.3 Модуль "Менеджер" (UnitManager. pas)
  • 4.2.1.4 Модуль "Управляющий" (UnitDirector. pas)
  • 4.2.1.5 Модуль "Торговое предложение в аптеке" (UnitTorgPredApteki. pas)
  • 4.2.1.6 Модуль "Формирование торгового предложения в аптеке" (UnitNewTorgPredApteki. pas)
  • 4.2.1.7 Модуль "Оформление заказа на товар" (UnitZayavkaPostavka. pas)
  • 4.2.1.8 Модуль "Отчёт менеджера (заявки на поставку)" (UnitZayavkaPostavka. pas)
  • 4.2.1.9 Модуль "Новый препарат" (UnitNewPreparat. pas)
  • 4.2.1.10 Модуль "Добавление новой аптеки" (UnitNewApteka. pas)
  • 4.2.1.11 Модуль "Новый поставщик" (UnitNewPostavshik. pas)
  • 4.2.1.12 Модуль "Торговое предложение" (UnitNewTorgPred. pas)
  • 4.2.2 Тестирование интеграции
  • 4.2.3 Тестирование правильности
  • 5. Технологическая часть
  • 5.1 Руководство пользователя
  • Заключение
  • Список использованных источников
  • Приложение А
  • Приложение Б

Реферат

Проект _____ с., 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. Порядок действий следующий:

a) Запустил ER/Studio;

b) В обозревателе объектов открыл ветку "Maim Model" и выбрал в контекстном меню "Entity - NewEntity";

c) Ввёл имя сущности, имя таблицы БД;

d) На вкладке "Attribute" щелкнул по кнопке "Add" для добавления нового атрибута сущности, ввёл имя, тип данных, ограничения целостности. Для создания связи между сущностями (отношения) щелкнул по Relationship в дереве обозревателя объектов и выбрал команду "NewRelationship…";

e) Выбрал родительскую сущность, дочернюю и указал тип связи на вкладке "Triggers". Затем указал, какие действия должны выполняться при внесении изменений в связанные таблицы и щелкнул "ОК";

f) Создал физическую модель данных из контекстного меню "MainModel" и в обозревателе объектов выбрал "Generate Phisical Model…", задал имя модели и выбрал тип СУБД;

g) После создания физической модели в ER/Studio сгенерировался SQL-код для создания базы данных в СУБД InterBase;

h) Для создания базы данных в СУБД InterBase включил сервер, запустил IBConsole.

Зарегистрировался на сервере, выбрав команду меню "Register…";

i) Выбрал тип сервера - локальный, в строке "UserName" ввёл SYSDBA, в строке "Password" - masterkey;

j) Создал базу данных, выбрав в меню "DataBase" команду "CreateDataBase". В появившемся окне указал путь к БД в строке "Filenames", ввёл в строке "Alias" псевдоним БД и выбрал кодовую страницу WIN1251 в "DefaultCharacterSet";

k) Перед тем, как работать с БД, зарегистрировал её "Register" и установил соединение "Connect", выбрав соответствующие команды в меню "IBConsole";

l) Для создания таблиц БД, установки связей и т.д. воспользовался средством "InteractiveSQL" из меню "Tools".

С помощью меню "Query" выполнил SQL-запросы по созданию доменов, таблиц, просмотров из сгенерированного SQL-кода в ER/Studio (листингSQL-кода приведён в приложения А).

m) Для реализации транзакции "Т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

n) Для реализации транзакции "Т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

o) Для реализации транзакции "Т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

Для реализации транзакции "Т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

p) Для реализации транзакции "Т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

q) Для реализации транзакции "Т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

r) Для реализации транзакции "Т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;


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.