Информационная система "Книга рецептов"

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РФ

Московский Государственный Институт Электроники и Математики























КУРСОВАЯ РАБОТА

по теме: «Книга рецептов»

по курсу «Информационные технологии в экономике»























Москва, 2005 г.


Введение



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

Мы живём в век информационных технологий, в век в котором техника может выполнять задачи, которые обременяют нас в повседневности. В настоящий момент существует масса мультимедийных систем, которые контролируют и упрощают наш повседневный быт. Например, так называемая система «Умный дом». Она позволяет с помощью современных технологий следить за функционированием дома и бытовых приборов. В данную систему может входить такие функции как: автоматический заказ продуктов, случае их отсутствия в холодильнике; управление с пульта ДУ всей музыкальной техникой, телевизорами, системой вентиляции и т.д.

Каждый день, все мы сталкиваемся с такими тривиальными задачами, как приготовление еды. Нужно знать, ЧТО ты хочешь приготовить, КАК и какие ПРОДУКТЫ необходимы. И при решении этой задачи мы сталкиваемся с проблемой упорядочения этих трех параметров: «ЧТО, КАК, Продукты?». А также актуальной задачей является экономия времени и средств.

Поэтому целесообразным инструментом решения поставленных задач, на мой взгляд, является электронная база данных, представляющая собой «Поваренную книгу». Функциями этой БД является: при выборе блюда из предложенного списка, БД выдаёт информацию о рецепте, количестве входящих в него продуктов, о расходах на продукты, времени приготовления и о виде блюда (1, 2, 3).

Итак, решением проблемы возникающей при приготовлении любого блюда, будет информационная система. Основные цели данной информационной системы:

упорядоченное хранение информации о:

1.1) продуктах необходимых для приготовления;

1.2) о блюдах, предлагаемых базой данных; 

1.3) о рецептах, по которым готовятся блюда;

расчет расхода на продукты для блюдо;

время приготовления.


Функциональная структура системы



Назначение проектируемой информационной системы (ИС) – упорядоченное хранение информации и управление расходом продуктов на блюдо и их стоимостью. Исходная информация ИС: информация о продуктах, информация о блюдах и информация, о рецептах. Основным пользователем ИС будет владелец холодильника. На выходе ИС должна формировать отчеты заданной формы. При функционировании ИС должны учитываться существующие формы отчетности.







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

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







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

Расчет расхода продуктов на блюдо и стоимости продуктов затраченных на блюдо происходит следующим образом: пользователь выбирает блюдо, для которого надо посчитать расход продуктов и их стоимость. По блюду ИС находит рецепт. По данным о рецепте и продуктах ИС рассчитывает расход каждого продукта в данном блюде и стоимость. Затем вклады всех продуктов суммируются, и на выходе мы получаем отчет о расходе продуктов и их общую стоимость.






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






Структура базы данных



Наша информационная система будет работать с такими объектами, как: продукты, блюда, рецепты. Для работы ИС нам важно знать о них следующую информацию:

1) о продуктах: 

1.1) наименование продукта;

1.2) код продукта (он будет однозначно характеризовать продукт (для каждого продукта код уникален) и короче, чем наименование, – по нему легче ориентироваться);

1.3) цена за единицу продукта – дает возможность подсчитать стоимость продуктов необходимых для приготовления блюда;

2) о блюдах:

2.1) код блюда (также однозначно характеризует блюда и удобен в использовании);

2.2) наименование блюда; 

2.3) время приготовления, сколько времени оно займет;

2.4) вид блюда (горячее, десерт и т.п.)

3) о рецептах: какие продукты и в каком количестве необходимы для приготовления одной порции данного блюда. То есть для каждого рецепта

будем указывать код продуктов и код блюда. Естественно, для приготовления блюда необходимо много продуктов (для каждого – свое количество), все они должны быть указаны в рецепте. А вот каждому блюду может соответствовать один и только один рецепт – разночтений по поводу рецептов к одному и тому же блюду быть не должно.



Логическая модель БД





Физическая модель БД:





Построенная таким образом база данных имеет третью нормальную форму.

Поддержание целостности системы.

В системе должны поддерживаться следующие правила:

а) Для продукта: при попытке удаления записи таблицы продукты ИС проверяет, есть ли в БД данные о рецептах, содержащих этот продукт. Если такие рецепты находятся, то система выдает сообщение: «Такое удаление невозможно, так как есть рецепты, для осуществления которых необходим этот продукт». И действительно, если мы удалим данные об этом продукте, рецепты, ссылающиеся на него, станут бесполезными.

При изменении записи о продуктах необходимо помнить, что изменять коды продуктов нельзя - это уникальный атрибут каждого продукта. Если изменим код, то, по сути, мы удалим данные об одном продукте и заменим их данными о другом. Поэтому если пользователь попробует изменить код продукта, то система выдаст ему сообщение вида: «Код продукта менять нельзя; он должен совпадать с кодом продукта в каталоге продуктов». Но нулевых кодов у продукта также не может быть. Поэтому если пользователь захочет изменить код, который был введен нулевым, то система позволит ему это сделать. 

Если пользователь не изменит нулевой код в ходе обновления записи, то система запретит такое обновление: «Код продукта не может быть нулевым».

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

Как и в случае с продуктами, коды блюд нельзя изменять. Поэтому пользователь, делая изменения в таблице блюда, не должен менять код – иначе это будет совершенно новое блюдо. ИС выдаст ошибку с объяснением: «Код блюда менять нельзя; он должен совпадать с кодом блюда в каталоге блюд». Но аналогично ситуации с продуктом замена нулевого кода позволяется, но оставить нулевой код нулевым нельзя.

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


Приложения



1) Для продуктов:

а) Триггер на удаление записи таблицы продукты.

TRIGGER PROCEDURE FOR DELETE OF Product.

IF CAN-FIND(FIRST Recipe WHERE 

Recipe.prod_code = Product.prod_code)

THEN DO: 

MESSAGE «Такое удаление не возможно, так как есть рецепты, для осуществления которых необходим этот продукт.».

RETURN ERROR.

END.

б) Триггер на изменение записи таблицы продукты.

TRIGGER PROCEDURE FOR WRITE OF Product

NEW inserted OLD deleted.

IF deleted.prod_code <> 0 AND

deleted.prod_code <> inserted.prod_code

THEN DO:

MESSAGE "Код продукта менять нельзя; он должен совпадать с кодом продукта в каталоге продуктов."

RETURN ERROR.

END.

IF inserted.prod_code = 0 

THEN DO:

ESSAGE "Код продукта не может быть нулевым."

RETURN ERROR.

END.

2) Для блюд:

а) Триггер на удаления записи таблицы блюда.

TRIGGER PROCEDURE FOR DELETE OF Dish.

IF CAN-FIND(FIRST Recipe WHERE 

Recipe.dish_code = Dish.dish_code)

THEN DO: 

MESSAGE «В БД хранится рецепт для этого блюда. Данные о блюде могут быть удалены только после удаления соответствующего рецепта.».

RETURN ERROR.

END.

б) Триггер на изменение записи таблицы блюда.

TRIGGER PROCEDURE FOR WRITE OF Dish

NEW inserted OLD deleted.

IF deleted.dish_code <> 0 AND

deleted.dish_code <> inserted.dish_code

THEN DO:

MESSAGE "Код блюда менять нельзя; он должен совпадать с кодом блюда в каталоге блюд."

RETURN ERROR.

END.

IF inserted.dish_code = 0

THEN DO:

MESSAGE "Код блюда не может быть нулевым.".

RETURN ERROR.

END.

3) Для рецептов.

а) Триггер на изменение записи таблицы рецепты.

TRIGGER PROCEDURE FOR WRITE OF Recipe

NEW inserted OLD deleted.

IF NOT(CAN-FIND(FIRST Dish WHERE

inserted.dish_code = Dish.dish_code))

THEN DO:

MESSAGE «Данных о таком блюде нет в БД. Внесите, пожалуйста, сначала информацию в таблицу блюда.».

RETURN ERROR.

END.

IF NOT(CAN-FIND(FIRST Product WHERE

inserted.prod_code = Product.prod_code))

THEN DO:

MESSAGE «Данных о таком продукте нет в БД. Внесите, пожалуйста, сначала информацию в таблицу продукты.»

RETURN ERROR.

END.





















Отчёт



Table Name Description

----------------------------------------------------------------------------

Dish

Product

Recipe

=========================================================================

============================= Table: Dish ===============================

Table Flags: "f" = frozen, "s" = a SQL table

Table Dump Table Field Index Table

Name Name Flags Count Count Label

----------------------------- -------- ----- ----- ----- -------------------

Dish Dish 4 1 ?

Storage Area: N/A

Trigger Event Trigger Procedure Overridable? Check CRC?

------------- -------------------- ------------ ---------

DELETE D_Dish.p no no

WRITE W_Dish.p no no

============================= FIELD SUMMARY =============================

============================= Table: Dish ===============================

Flags: <c>ase sensitive, <i>ndex component, <m>andatory, <v>iew component

Order Field Name Data Type Flags Format Initial

----- ------------------------- ----------- ----- --------------- ----------

10 dish_code inte i ->,>>>,>>9 0

20 dish_name char X(18)

30 level inte ->,>>>,>>9 0

40 feature char X(18)

Field Name Label Column Label

------------------------------ ---------------------- ----------------------

dish_code код блюда код блюда

dish_name наименование блюда наименование блюда

level уровень сложности уровень сложности

feature вид вид

============================= INDEX SUMMARY =============================

============================= Table: Dish ===============================

Flags: <p>rimary, <u>nique, <w>ord, <a>bbreviated, <i>nactive, + asc, - desc

Flags Index Name Cnt Field Name

----- -------------------------------- --- ---------------------------------

pu XPKDish 1 + dish_code

** Index Name: XPKDish

Storage Area: N/A

============================= FIELD DETAILS =============================

============================= Table: Dish ===============================

=========================================================================

============================= Table: Product ============================

Table Flags: "f" = frozen, "s" = a SQL table

Table Dump Table Field Index Table

Name Name Flags Count Count Label

----------------------------- -------- ----- ----- ----- -------------------

Product Product 3 1?

Storage Area: N/A

Trigger Event Trigger Procedure Overridable? Check CRC?

------------- -------------------- ------------ ----------

DELETE D_Product.p no no

WRITE W_Product.p no no

============================= FIELD SUMMARY =============================

============================= Table: Product ============================

Flags: <c>ase sensitive, <i>ndex component, <m>andatory, <v>iew component

Order Field Name Data Type Flags Format Initial

----- ------------------------- ----------- ----- --------------- ----------

10 prod_code inte i ->,>>>,>>9 0

20 prod_name char X(18)

30 unit_price deci-2 ->>,>>9.99 0

Field Name Label Column Label

------------------------------ ---------------------- ----------------------

prod_code код продукта код продукта

prod_name наименование продукта наименование продукта

unit_price цена за единицу цена за единицу

============================= INDEX SUMMARY =============================

============================= Table: Product ============================

Flags: <p>rimary, <u>nique, <w>ord, <a>bbreviated, <i>nactive, + asc, - desc

Flags Index Name Cnt Field Name

----- -------------------------------- --- ---------------------------------

pu XPKProduct 1 + prod_code

** Index Name: XPKProduct

Storage Area: N/A

============================= FIELD DETAILS =============================

============================= Table: Product ============================

=========================================================================

============================= Table: Recipe =============================

Table Flags: "f" = frozen, "s" = a SQL table

Table Dump Table Field Index Table

Name Name Flags Count Count Label

----------------------------- -------- ----- ----- ----- -------------------

Recipe Recipe 3 1?

Storage Area: N/A

Trigger Event Trigger Procedure Overridable? Check CRC?

------------- -------------------- ------------ ----------

CREATE C_Recipe.p no no

WRITE W_Recipe.p no no

============================= FIELD SUMMARY =============================

============================= Table: Recipe =============================

Flags: <c>ase sensitive, <i>ndex component, <m>andatory, <v>iew component

Order Field Name Data Type Flags Format Initial

----- ------------------------- ----------- ----- --------------- ----------

10 prod_code inte im ->,>>>,>>9 0

20 dish_code inte im ->,>>>,>>9 0

30 needed_amount deci-2 ->,>>>,>>9.99 0

Field Name Label Column Label

------------------------------ ---------------------- ----------------------

prod_code код продукта код продукта

dish_code код блюда код блюда

needed_amount необходимое количество необходимое количество

============================= INDEX SUMMARY =============================

============================= Table: Recipe =============================

Flags: <p>rimary, <u>nique, <w>ord, <a>bbreviated, <i>nactive, + asc, - desc

Flags Index Name Cnt Field Name

----- -------------------------------- --- ---------------------------------

pu XPKRecipe 2 + prod_code

+ dish_code

** Index Name: XPKRecipe

Storage Area: N/A

============================= FIELD DETAILS =============================

============================= Table: Recipe =============================

============================= SEQUENCES =================================