Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пз.docx
Скачиваний:
39
Добавлен:
02.03.2016
Размер:
1.28 Mб
Скачать
    1. Даталогическая модель

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

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

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

На рисунке 6 представлена даталогическая модель ИС «рациональное питание школьников»

Рисунок 6 – Даталогическая модель ИС «Рациональное питание школьника»

    1. Описание программы ис «рациональное питание школьников»

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

Главное окно нашей ИС состоит из перечня продуктов, возможностью редактирования добавления и удаления строк. Тут же можно перейти в разделы склад, формирование блюда и меню в соответствии с рисунком 7.

Рисунок 7 – Главное окно

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

Рисунок 8 –Раздел блюда

Листинг 1 – раздел блюда

unit SostavBludoUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Grids, DBGrids, Menus, ExtCtrls;

type

TSostavBludoForm = class(TForm)

DBGrid1: TDBGrid;

PopupMenu1: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

BitBtn5: TBitBtn;

Panel2: TPanel;

DBGrid2: TDBGrid;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure BitBtn5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

SostavBludoForm: TSostavBludoForm;

implementation

uses BludoUnit, ProductsUnit, DMUnit, BludoUnit1, EditBludoUnit;

{$R *.dfm}

procedure TSostavBludoForm.BitBtn1Click(Sender: TObject);

begin

i:=1;

EditBludoForm.ShowModal;

end;

procedure TSostavBludoForm.BitBtn3Click(Sender: TObject);

var id:string;

begin

If DBGrid1.SelectedField.IsNull then begin

Application.MessageBox(Pchar('Удаление пустой строки не возможно!'),'Warning!',mb_Ok) end else

If application.MessageBox(PChar('Вы действительно хотите удалить блюдо: '+DMU.BludoZQname.AsString+' ?'),'',mb_YesNo+mb_IconQuestion)=id_Yes then

with DMU do begin

id:=BludoZQ.FieldByName('idbludo').AsString;

EditBludoZQ.Close;

EditBludoZQ.SQL.Clear;

EditBludoZQ.SQL.Add('DELETE FROM Bludo WHERE idBludo="'+id+'"');

EditBludoZQ.ExecSQL;

BludoZQ.Refresh;

DBGrid1.Refresh;

end;

end;

procedure TSostavBludoForm.BitBtn2Click(Sender: TObject);

begin

i:=2;

EditBludoForm.ShowModal;

end;

procedure TSostavBludoForm.BitBtn4Click(Sender: TObject);

begin

BludoForm.ShowModal;

end;

procedure TSostavBludoForm.N1Click(Sender: TObject);

begin

BitBtn1.Click;

end;

procedure TSostavBludoForm.N2Click(Sender: TObject);

begin

BitBtn2.Click;

end;

procedure TSostavBludoForm.N3Click(Sender: TObject);

begin

BitBtn4.Click;

end;

procedure TSostavBludoForm.N4Click(Sender: TObject);

begin

BitBtn3.Click;

end;

procedure TSostavBludoForm.BitBtn5Click(Sender: TObject);

begin

Close;

end;

end.

При желании можно добавить новое блюдо, указав его данные в соответствии с рисунком 9

Рисунок 9 – форма добавления нового блюда

Есть возможность редактирования состава уже созданного блюда в соответствии с рисунком 10.

Рисунок 10 – Редактирование состава блюд

Листинг 2 – Состав блюда

unit BludoUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls, DBCtrls, Grids, DBGrids;

type

TBludoForm = class(TForm)

DBLookupListBox1: TDBLookupListBox;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

Label1: TLabel;

DBGrid1: TDBGrid;

Label2: TLabel;

procedure FormActivate(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

BludoForm: TBludoForm;

implementation

uses DMUnit, DB, MassaUnit;

{$R *.dfm}

procedure TBludoForm.FormActivate(Sender: TObject);

var id:string;

begin

Label1.Caption:='Состав блюда - "'+DMU.BludoZQname.AsString+'"';

Label2.Caption:='Состав блюда - "'+DMU.BludoZQname.AsString+'"';

//id:=DMU.EditBludoZQ.SQL.Add('SELECT MAX(idbludo) FROM bludo');

//DMU.EditBludoZQ.ExecSQL;

//DMU.EditBludoZQ.SQL.Clear;

//DMU.EditBludoZQ.SQL.Add('SELECT name FROM bludo where idbludo="'+id+'"');

//DMU.EditBludoZQ.ExecSQL;

end;

procedure TBludoForm.BitBtn1Click(Sender: TObject);

begin

MassaForm.ShowModal;

end;

procedure TBludoForm.BitBtn2Click(Sender: TObject);

var id:string;

begin

If DBGrid1.SelectedField.IsNull then begin

Application.MessageBox(Pchar('Удаление пустой строки не возможно!'),'Warning!',mb_Ok) end else

If application.MessageBox(PChar('Вы действительно хотите удалить ингридиент: '+DMU.SostavZQname.AsString+' ?'),'',mb_YesNo+mb_IconQuestion)=id_Yes then

with DMU do begin

id:=SostavZQ.FieldByName('idlink1').AsString;

EditLink1ZQ.Close;

EditLink1ZQ.SQL.Clear;

EditLink1ZQ.SQL.Add('DELETE FROM Link1 WHERE idlink1="'+id+'"');

EditLink1ZQ.ExecSQL;

SostavZQ.Refresh;

DBGrid1.Refresh;

end;

end;

procedure TBludoForm.BitBtn3Click(Sender: TObject);

begin

Close;

end;

end.

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

Рисунок 11 - Склад

Листинг 3 - Склад

.unit SkladUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Grids, DBGrids, Menus;

type

TSkladForm = class(TForm)

DBGrid1: TDBGrid;

BitBtn1: TBitBtn;

PopupMenu1: TPopupMenu;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

procedure BitBtn4Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

SkladForm: TSkladForm;

implementation

uses DMUnit, EditSkladUnit, ProductsUnit;

{$R *.dfm}

procedure TSkladForm.BitBtn4Click(Sender: TObject);

begin

Close;

end;

procedure TSkladForm.BitBtn1Click(Sender: TObject);

begin

i:=1;

EditSkladForm.ShowModal;

end;

procedure TSkladForm.BitBtn2Click(Sender: TObject);

begin

i:=2;

EditSkladForm.ShowModal;

end;

procedure TSkladForm.BitBtn3Click(Sender: TObject);

var id:string;

begin

If DBGrid1.SelectedField.IsNull then begin

Application.MessageBox(Pchar('Удаление пустой строки не возможно!'),'Warning!',mb_Ok) end else

If application.MessageBox(PChar('Вы действительно хотите удалить со склада продукт : '+DMU.SkladZQname.AsString+' ?'),'',mb_YesNo+mb_IconQuestion)=id_Yes then

with DMU do begin

id:=SkladZQidsklad.AsString;

EditSkladZQ.Close;

EditSkladZQ.SQL.Clear;

EditSkladZQ.SQL.Add('DELETE FROM sklad WHERE idsklad="'+id+'"');

EditSkladZQ.ExecSQL;

SkladZQ.Refresh;

DBGrid1.Refresh;

end;

end;

end.

При приходе товара можно добавить наличие в соответствии с рисунком 12, изменить или удалить ненужный компонент.

Рисунок 12 – форма добавления продуктов

Для составления меню необходимо выбрать день в соответствии с рисунком 13, затем выбрать что вы ходите завтрак, обед или ужин, и создать его с помощью формы в соответствии с рисунком 14. Есть возможность посмотреть что было в предыдущие дни воспользовавшись календарем. Показывается общая энергетическая ценность за каждый из периодов. Производится экспорт перечня выбранных блюд в Excel в соответствии с рисунком 15.

Рисунок 13 – форма создание меню

Рисунок 14 – Форма Создание обеда

Рисунок 15 – Перенос в Excel

Перейдя в раздел расчеты в соответствии с рисунком 16 можно посмотреть отчет по потраченным деньгам на каждый день в формате Excel. Также предоставляется отчет о количестве израсходованных продуктов питания за десять дней за период выбранный для отчета. А так же сравнение и результат в процентах о отклонении от нормы потребляемых продуктов по каждому ингредиенту.

Рисунок 16 – Расчеты

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

Рисунок 17 – Запрос на согласие удаления компонента

Рисунок 18 – Запрет на сохранение пустых строк