МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Московський Державний Інститут Електроніки та Математики
Курсова робота
на тему: «Книга рецептів»
з курсу «Інформаційні технології в економіці»
Москва, 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 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 січня?
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 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 ==================== =============