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

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

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

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

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

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 " предназначена для добавления информации о торговом предложении каждого поставщика На данной форме разместил компоненты в соответствии с таблицей 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 - Цикл тестирования

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

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

­ Структурное тестирование (тестирование "белого ящика").

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

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

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

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

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

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

­ интерфейс модуля для проверки правильности ввода-вывода;

­ внутренние структуры данных для проверки целостности сохраняемых данных;

­ независимые пути - однократное выполнение всех операторов модуля;

­ пути обработки ошибок;

­ граничные условия.

4.2.1.1 Модуль "Авторизация пользователя" (UnitAuth. pas)

a) После запуска программы выбрать пользователя, на форме появится поле ввода соответствующего пароля пользователя;

b) Ввести пароль и нажать кнопку "Войти", данная форма закроется и откроется форма для выбранного пользователя;

c) Если пароль по истечении 3 попыток введён неверно, программа закроется.

d) При вводе неправильного пароля будет выдано сообщении о предупреждении и количестве попыток.

4.2.1.2 Модуль "Продавец" (UnitProdavec. pas)

a) После нажатия кнопки "Товар", появится компонент PageControl1, вкладка "Товар" с таблицей данных о товаре (DBGrid1), компонентом DBLookupComboBox1, кнопками "Продать" и "Печать";

b) При выборе адреса аптеки в компоненте DBLookupComboBox1, данные таблицы будет отсортированы по соответствующему выбору;

c) При нажатии на кнопку "Печать", содержимое таблицы формируется отчётом в Excel'е;

d) При использовании компонента CheckBox1, вкладка "Товар" вместе с компонентом PageControl1 появляется /исчезает;

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

4.2.1.3 Модуль "Менеджер" (UnitManager. pas)

a) При нажатии кнопки "Аптеки", появится компонент PageControl1, вкладка "Аптеки" с таблицей данных об аптеках (DBGrid1) и кнопкой "Торговое предложение в аптеке", при нажатии на которую откроется форма "Торговое приложение в аптеке" (модуль UnitTorgPredApteki. pas);

b) При нажатии кнопки "Поставщики", станет активна вкладка "Поставщики" компонента PageControl1 с таблицей данных о поставщиках (DBGrid2);

c) При нажатии кнопки "Отчёты", станет активна вкладка "Отчёты" компонента PageControl1 с кнопкой открытия формы отчёта "Заявка на поставку" (модуль UnitManagerOtchet. pas);

d) При нажатии кнопки "Справочник", станет активна вкладка "Справочник препаратов" компонента PageControl1 с таблицей данных о лекарственных препаратах (DBGrid3) и кнопка "Новый препарат", нажав которую откроется форма ввода нового препарата (модуль UnitNewPreparat. pas);

e) При нажатии кнопки "Товар", откроется форма "Торговое предложение в аптеке" (модуль UnitTorgPredApteki. pas);

f) При использовании компонента CheckBox1, вкладки "Аптеки", "Поставщики", "Отчёты", "Справочник" компонента PageControl1 появляются /исчезают;

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

4.2.1.4 Модуль "Управляющий" (UnitDirector. pas)

a) При нажатии кнопки "Аптеки", появится компонент PageControl1, вкладка "Аптеки" с таблицей данных об аптеках (DBGrid1) и кнопкой "Добавить новую аптеку", при нажатии на которую откроется форма "Добавление новой аптеки" (модуль UnitNewApteka. pas);

b) При нажатии кнопки "Поставщики", станет активна вкладка "Поставщики" компонента PageControl1 с таблицей данных о поставщиках (DBGrid2) и кнопками "Новый поставщик" и "Торговое предложение", открывающие формы добавления нового поставщика (модуль UnitNewPostavshik. pas) и торгового предложения поставщика (модуль UnitNewTorgPred. pas);

c) При нажатии кнопки "Отчёты", станет активна вкладка "Отчёты" компонента PageControl1;

d) При нажатии кнопки "Справочник", станет активна вкладка "Справочник препаратов" компонента PageControl1 с таблицей данных о лекарственных препаратах (DBGrid3) и кнопка "Новый препарат", нажав которую откроется форма ввода нового препарата (модуль UnitNewPreparat. pas);

e) При использовании компонента CheckBox1, вкладки "Аптеки", "Поставщики", "Отчёты", "Справочник" компонента PageControl1 появляются /исчезают;

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

4.2.1.5 Модуль "Торговое предложение в аптеке" (UnitTorgPredApteki. pas)

a) При запуске активна таблица DBGrid1 с данными о торговом предложении каждой аптеки.

b) При использовании одного из компонентов DBLookupComboBox1 ("Выберите аптеку") и DBLookupComboBox2 ("Название препарата") данные в таблице DBGrid1 фильтруются соответственно сделанному выбору;

c) При нажатии кнопки "Сформировать торговое предложение", откроется новая форма "Формирование торгового предложения в аптеке" (модуль UnitNewTorgPredApteki. pas);

d) При нажатии кнопки "Заявка на поставку", откроется новая форма "Оформление заказа на товар" (модуль UnitZayavkaPostavka. pas).

4.2.1.6 Модуль "Формирование торгового предложения в аптеке" (UnitNewTorgPredApteki. pas)

a) Выбрать адрес аптеки (DBLookupComboBox1), наименование товара (DBLookupComboBox2), после выбора наименования товара в поле "Оптовая цена" появляется соответствующая цена;

b) Ввести остаток товара, продано товара, розничная цена и минимальный запас жизн. необ. препар.;

c) При нажатии на кнопку "Добавить", соответствующая запись добавляется в БД;

d) Если данные введены неверно или поля остались пустые, при нажатии на кнопку "Добавить" появится сообщении об ошибке "Транзакции не выполнена" и откат транзакции.

4.2.1.7 Модуль "Оформление заказа на товар" (UnitZayavkaPostavka. pas)

a) Ввести номер документа, выбрать дату заказа, поставщика, наименование препарата и код расхода, указать количество необходимого товара;

b) После выбора наименования товара поле "Цена (опт.)" заполнится соответствующей ценой, а при указании необходимого количества товара, сумма посчитается автоматически;

c) При нажатии на кнопку "Оформить заявку", соответствующая запись добавляется в БД;

d) Если данные введены неверно или поля остались пустые, при нажатии на кнопку "Оформить заявку" появится сообщении об ошибке "Транзакции не выполнена" и откат транзакции.

4.2.1.8 Модуль "Отчёт менеджера (заявки на поставку)" (UnitZayavkaPostavka. pas)

a) При запуске модуля и открытии формы становится активна таблица DBGrid1с данными о заявках и компонентами: DBLookupComboBox1 (выбор названия поставщика) и кнопка "Печать";

b) При нажатии на кнопку "Печать" содержимое таблицы DBGrid1 формируется отчётом в Excel'е.

4.2.1.9 Модуль "Новый препарат" (UnitNewPreparat. pas)

a) Ввести группу лекарственного препарата, наименование, единицу измерения и отметить является ли данный препарат жизненно необходимым;

b) При нажатии на кнопку "Добавить препарат" соответствующая запись добавляется в БД;

c) Если данные введены неверно или поля остались пустые, при нажатии на кнопку "Добавить препарат" появится сообщении об ошибке "Транзакции не выполнена" и откат транзакции.

4.2.1.10 Модуль "Добавление новой аптеки" (UnitNewApteka. pas)

a) Ввести адрес и телефон аптеки;

b) При нажатии на кнопку "Сохранить" соответствующая запись добавляется в БД;

c) Если данные введены неверно или поля остались пустые, при нажатии на кнопку "Сохранить" появится сообщении об ошибке "Транзакции не выполнена" и откат транзакции.

4.2.1.11 Модуль "Новый поставщик" (UnitNewPostavshik. pas)

a) Ввести наименование, адрес, телефон поставщика;

b) При нажатии на кнопку "Сохранить" соответствующая запись добавляется в БД;

c) Если данные введены неверно или поля остались пустые, при нажатии на кнопку "Сохранить" появится сообщении об ошибке "Транзакции не выполнена" и откат транзакции.

4.2.1.12 Модуль "Торговое предложение" (UnitNewTorgPred. pas)

a) Выбрать поставщика, лекарственный препарат и ввести оптовую цену;

b) При нажатии на кнопку "Сохранить" соответствующая запись добавляется в БД;

c) Если данные введены неверно или поля остались пустые, при нажатии на кнопку "Сохранить" появится сообщении об ошибке "Транзакции не выполнена" и откат транзакции.

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

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

­ потеря данных при прохождении через интерфейс;

­ отсутствие в модуле необходимой ссылки;

­ неблагоприятное влияние одного модуля на другой;

­ подфункции при объединении не образуют требуемую функцию;

­ проблемы при работе с глобальными данными.

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

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

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

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

Модуль "Менеджер"

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

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

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

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

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

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

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

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

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

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

Модуль "Менеджер"

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

+

+

+

+

+

+

+

+

+

+

+

+

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

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

Исходные данные контрольного примера приведены в приложении Б.

Результаты проверки программы показали, что программа работает правильно.

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_aptkINTEGER NOT NULL,

Aptk_adresCHAR (16) NOT NULL,

Aptk_telfNUMERIC (16, 0) NOT NULL,

CONSTRAINT PK8 PRIMARY KEY (Num_aptk)

);

/*

* TABLE: Postavshiki

*/

CREATE TABLE Postavshiki (

Kod_pstvshINTEGER NOT NULL,

Name_pstvshCHAR (32) NOT NULL,

Adres_pstvshCHAR (32) NOT NULL,

Tel_pstvshNUMERIC (16, 0) NOT NULL,

CONSTRAINT PK2 PRIMARY KEY (Kod_pstvsh)

);

/*

* TABLE: PreparSprav

*/

CREATE TABLE PreparSprav (

Kod_tovaraINTEGER NOT NULL,

grup_tovCHAR (32) NOT NULL,

Name_tovaraCHAR (32) NOT NULL,

Ed_izCHAR (8, 0) NOT NULL,

Zh_n_prBINARY (1) NOT NULL,

CONSTRAINT PK7 PRIMARY KEY (Kod_tovara)

);

/*

* TABLE: TorgPred

*/

CREATE TABLE TorgPred (

NumTorgPredINTEGER NOT NULL,

Kod_tovaraINTEGER NOT NULL,

Kod_pstvshINTEGER NOT NULL,

Price_optNUMERIC (8,2) NOT NULL,

CONSTRAINT PK3 PRIMARY KEY (NumTorgPred)

);

/*

* TABLE: TovarApt

*/

CREATE TABLE TovarApt (

Kod_rashodaINTEGER NOT NULL,

Tovar_ostNUMERIC (8, 0) NOT NULL,

Tovar_prodNUMERIC (8, 0) NOT NULL,

Tovar_price_edNUMERIC (8,2) NOT NULL,

Min_zpsNUMERIC (8, 0) NOT NULL,

Kod_tovaraINTEGER NOT NULL,

Num_aptkINTEGER NOT NULL,

CONSTRAINT PK6 PRIMARY KEY (Kod_rashoda)

);

/*

* TABLE: Zakaz

*/

CREATE TABLE Zakaz (

Num_zakzINTEGER NOT NULL,

NumTorgPredINTEGER NOT NULL,

Kod_rashodaINTEGER NOT NULL,

Zak_tov_kolNUMERIC (8, 0) NOT NULL

Data_zakzDATE NOT NULL,

Data_opltDATE NOT NULL,

Data_postDATE,

Post_tov_kolNUMERIC (8, 0),

Num_docNUMERIC (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

Размещено на Allbest.ru


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

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