Автоматизация заказа блюд в ресторане

Автоматизация заказа блюд в ресторане

Автоматизация заказа блюд в ресторане
Волжский университет имени В.Н. Татищева
Факультет “Информатика и телекоммуникации”
Кафедра “Информатика и системы управления”

КУРСОВАЯ РАБОТА
по дисциплине “Базы данных и знаний”
Тема “Автоматизация заказа блюд в ресторане ”

Выполнил студент гр. ИТЗ-312
Бондарев А.А.
Преподаватель Горбачевская Е.В

Тольятти
2004
СОДЕРЖАНИЕ

ВВЕДЕНИЕ
1 ОБЩИЙ РАЗДЕЛ
1.1 Описание предметной области рассматриваемого объекта
1.2 Постановка задачи
1.2.1 Организационно-экономическая сущность задачи
1.2.2 Описание выходной информации
1.2.3 Описание входной информации
1.3 Разработка информационного обеспечения задачи
1.3.1 Структурный анализ с помощью диаграмм SADT
1.3.2 Определение информационных объектов и связей между ними
1.3.3 Структурный анализ с помощью диаграмм “сущность — связь”
2 СПЕЦИАЛЬНЫЙ РАЗДЕЛ.
2.1 Конфигурация системы с помощью утилиты BDE ADMINISTRATOR или средств связи приложения и БД DELPHI
2.2 Создание таблиц базы данных с помощью утилиты DATABASE DESKTOP или ACCESS
2.3 Организация пользовательского интерфейса
2.3.1 Создание меню, реализующего основные функции информационной системы
2.3.2 Проектирование форм для работы с базой данных
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
Приложение А Листинг программы

ВВЕДЕНИЕ

Использование вычислительной техники позволяет ускорить работу, связанную с документооборотом, уменьшить персонал, а значит увеличить производительность труда.
Фирмы, занимающиеся торговлей конкурентоспособной продукцией, необходимой широкому потребителю, сталкиваются с проблемой увеличения количества клиентов. А так как при ручном ведении документации требуется много времени, трудозатрат и материалов, необходима автоматизация процессов заполнения, обновления, хранения и обработки документации. Эти технологии позволяют избежать бумажной работы, уменьшают затраты времени на обработку и накопление информации и снижают финансовые затраты на обслуживание.
Автоматизация приема заказов позволит оперативно получать и обрабатывать информацию о клиенте и продукции, купленной им, о количестве обслуженных покупателей определенным работником. Ускорится получение службой доставки адресов назначения, по которым развозится продукция. Вследствие экономии времени, работник получает возможность обслужить большее количество клиентов.
В целом автоматизация задачи выгодна для предприятия, из-за очевидного удобства и выгодности последующей работы.

1 ОБЩИЙ РАЗДЕЛ

1.1 Описание предметной области рассматриваемого объекта

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

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

Отчетность, реализуемая при автоматизации процесса

формирование меню ресторана;
составление бланка заказанных блюд, передаваемого на кухню.

Из всего вышесказанного вытекает несколько ограничений предметной области

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

1.2 Постановка задачи

1.2.1 Организационно-экономическая сущность задачи
Для предприятий работающих в сфере общественного питания очень важно оперативно и своевременно вести учёт продуктов и заказов. Поэтому задача автоматизации обработки данных ресторана является одной из приоритетных задач развития предприятия.
Основной целью задачи является своевременный оперативный учёт заказов клиентов, а также решаются задачи составления отчётов и других необходимых документов.
Автоматизация позволит снизить трудозатраты и число ошибок работников предприятия при обработке данных. Также она приведет к экономии времени сотрудников и повысит оперативность принимаемых решений. Централизованное хранение данных повышает точность и достоверность предоставляемых сведений.
Вся информация необходимая для решения задачи «Автоматизация заказа блюд в ресторане» хранится в файлах баз данных на магнитном носителе.
Автоматизация позволит получать отчёты по заданным условиям, с подсчётом итоговых значений, и организовать хранение данных для последующего анализа.
Условием прекращения использования задачи «Автоматизация заказа блюд в ресторане» является прекращение деятельности предприятия.

1.2.2 Описание выходной информации
В процессе решения задачи могут быть получены следующие выходные документы
«Меню ресторана», которое отражает информацию о блюдах, которые может заказать клиент;
«Заказ», содержащий информацию о заказанных блюдах, передаваемый на кухню;
Перечень и описание выходных документов показаны в таблице 1.1. Описание их реквизитов приведено в таблице 1.2. Формы документов представлены на рисунках 1.1-1.2

Таблица – 1.1
Перечень и описание выходных документов

Название документа
Идентификатор документа
Форма представления
Период выдачи
Срок выдачи
Получатель информации

1
2
3
4
5
6

Меню ресторана
D01
Документ
ежедневно
немедленно
предприятие

Заказ
D02
Документ
по требованию
немедленно
предприятие

D01

(Ресторан)______
(Дата)_________

МЕНЮ_____( Наименование типа блюда)____Наименование Цена приготовленияПродукт Кол-во Стоимость(ед. изм)Сумма ________

Рисунок 1.1 – Форма выходного документа «Меню ресторана»

D02

(Ресторан)______

(Дата)_________

ЗАКАЗ

Блюдо
Количество

Рисунок 1.2 – Форма выходного документа «Отчёт за период»

Таблица 1.2
Перечень и описание реквизитов выходных сообщений

Наименование реквизита
Идентификаторы выходных документов
Условное обозначение
Характеристика реквизитов

1
2
3
4

Единица измерения
D01
NAME_EI
A(5)

Ресторан
D01, D02
ORG
A(25)

Текущая дата
D01, D02
NOW
9(2).9(2).9(4)

Наименование типа блюда
D01
NAME_TYPE_B
A(25)

Наименование блюда
D01, D02
NAME_B
A(25)

Цена приготовления
D01
CENA_B
9(6),9(2)

Наименование продукта
D01
NAME_PROD
A(25)

Количество продукта
D01
KOL_VO_IN_B
9(5)

Стоимость продукта
D01
STOIM_P
9(6),9(2)

Стоимость рецепта
D01
ALL_B_STOI
9(6),9(2)

Количество блюд
D02
KOL_VO_B
9(6)

1.2.3 Описание входной информации
Входные документы задачи «Автоматизация заказа блюд в ресторане» подразделяются на оперативно-учетную, условно-постоянную и нормативно справочную информацию.
Для решения задачи оперативно-учётной информацией используется документ «перечень блюд на текущий день» (форма входного документа представлена на рисунке 1.3), в котором указаны тип блюда и его наименование.
Перечень входных документов представлен в таблице 1.3, описание реквизитов в таблице 1.4.

Таблица 1.3
Перечень и описание входных документов

Наименование документа
Идентификатор входных сообщений
Форма представления
Частота поступления

1
2
3
4

Перечень блюд на текущий день
Spisok
Первичный документ
Ежедневно

Таблица 1.4
Перечень и описание реквизитов входных сообщений

Наименование реквизита
Идентификатор реквизита
Характеристика реквизита
Источник информации
Идентификатор источника

1
2
3
4
5

Дата
CURDATA
9(2).9(2).9(4)
Первичный документ
Spisok

Наименование типа блюда
NAME_TYPE_B
A(25)
Первичный документ
Spisok

Наименование блюда
NAME_B
A(25)
Первичный документ
Spisok

Spisok

(Ресторан)______
(Дата)_________

Перечень блюд на текущий день_____( Наименование типа блюда)____Наименование

Рисунок 1.3 – Форма входного документа «Перечень блюд на текущий день»
Условно-постоянной информацией для решения задачи являются справочники блюд и продуктов, в которых отражена информация о блюдах и продуктах соответственно. Также используется справочник продуктов в блюде. Документы условно-постоянной информации представлены в таблице 1.4, а их реквизиты в таблице 1.5.

Таблица 1.4
Перечень и описание условно-постоянной информации

Наименование документа
Идентификатор входных сообщений
Форма представления

1
2
3

Справочник блюд
SpisokB
Массив данных на магнитном диске

Справочник продуктов
Products
Массив данных на магнитном диске

Справочник продуктов в блюде
ProdInRec
Массив данных на магнитном диске

Таблица 1.5
Перечень и описание реквизитов условно-постоянной информации

Наименование реквизита
Условное обозначение
Идентификатор источника
Характеристика реквизитов

1
2
3
4

Код блюда
IdB
SpisokB, ProdInRec
9(4)

Наименование блюда
NAME_B
SpisokB
A(30)

Цена приготовления
CENA_B
SpisokB
9(5),9(2)

Код типа блюда
IdTB
SpisokB
9(2)

Код продукта
IdP
Products
9(4)

Количество продукта
KOL_VO
Products
9(5),9(3)

Стоимость продукта
STOIM_P
Products
9(5),9(2)

Наименование продукта
NAME_PROD
Products, ProdInRec
A(30)

Код единицы измерения
IdEI
Products
9(2)

Количество продукта в блюде
KOL_VOPvB
ProdInRec
9(5),9(3)

Нормативно-справочной информацией являются справочники единиц измерения и типов блюд. В нём находится вся информация о единицах измерения и типах блюд соответственно. Документы нормативно-справочной информации представлены в таблице 1.6, а их реквизиты в таблице 1.7.

Таблица 1.6
Перечень и описание нормативно-справочной информации.

Наименование документа
Идентификатор входных сообщений
Форма представления

1
2
3

Справочник единиц измерения
EI
Массив данных на магнитном диске

Справочник типов блюд
TypeB
Массив данных на магнитном диске

Таблица 1.7
Перечень и описание реквизитов нормативно-справочной информации

Наименование реквизита
Условное обозначение
Идентификатор источника
Характеристика реквизитов

1
2
3
4

Код типа блюда
IdTB
TypeB
9(2)

Наименование типа блюда
NameTB
TypeB
A(30)

Код единицы измерения
IdEI
EI
9(2)

Наименование единицы измерения
NameEI
EI
A(30)

1.3 Разработка информационного обеспечения задачи

1.3.1 Структурный анализ с помощью диаграмм SADT

Рисунок 1.4 – 0 уровень диаграммы IDEF0

Рисунок 1.5 – 1 уровень диаграммы IDEF0

1.3.2 Определение информационных объектов и связей между ними
На основе проведённого информационного анализа установлены зависимости для реквизитов, имеющихся в справочниках, и построена логическая модель данных. Эта структура данных представлена на рисунке 1.4.

1.3.3 Структурный анализ с помощью диаграмм “сущность — связь”

Рисунок 1.6 – Информационно-логическая модель данных

Рисунок 1.7 –диаграмма «сущность – связь» созданная в ErWin

2 СПЕЦИАЛЬНЫЙ РАЗДЕЛ

2.1 Конфигурация системы с помощью утилиты BDE ADMINISTRATOR или средств связи приложения и БД DELPHI

Для работы приложения необходимо используемую им базу данных подключить через соответствующий системный драйвер. В Windows это реализуется через ODBC (Open DataBase Connectivity) открытый интерфейс доступа к базам данных, определяющий набор функций, которые можно использовать для доступа к любой реляционной СУБД. Пользователь программы, которая не предусматривает автоматическое подключение к алиасам ODBC, может вручную прописать местонахождение базы данных. Это делается либо через Администратор источников данных ODBC, либо через BDE Administrator, как функциональное расширение администратора. Так как BDE Administrator требует своей предустановки, а администратор ODBC наличествует на всех компьютерах с установленной ОС Windows, то подключение базы данных программы будет идти через«Администратор ODBC».
«Администратор ODBC» открывается через «Панель управления» Windows.

Рисунок 2.1 –окно «Администратор ODBC»
Для добавления алиаса требуется нажать кнопку «Добавить…». Появляется окно добавления нового источника данных.

Рисунок 2.2 –окно создания нового источника данных

Далее требуется выбрать строчку «Microsoft Access Driver», тем самым выбрав управляющий драйвер. Появится окошко настройки драйвера, где следует прописать путь к файлу базы данных и наименование алиаса. Далее нажать «Ок», и программа готова к работе.

Рисунок 2.3 –Окно настройки драйвера

2.2 Создание таблиц базы данных с помощью утилиты DATABASE DESKTOP или ACCESS

Таблицы задачи были созданы в СУБД ACCESS. Таблицы создаются с помощью конструктора.

Рисунок 2.4 – ACCESS с выведенным списком таблиц задачи

Рисунок 2.5 –Окно конструктора таблиц

2.3 Организация пользовательского интерфейса

2.3.1 Создание меню, реализующего основные функции информационной системы
При запуске программы на экране появиться главное меню, которое дает наиболее удобный доступ к функциям программы. Иерархическое вложенное меню удобно, им легко пользоваться, так как оно отображает структуру функций, реализуемых программой
Также в программе реализованы всплывающие подсказки, появляющиеся при наведении курсора на какой-либо объект и кнопки быстрого вызова, вынесенные на панель инструментов.
Так как цвет является мощным средством воздействия на психику пользователя, в программе удачно использована стандартная цветовая гамма цветов Windows, регулируемая в соответствии с настройками экрана. Осмысленные цветовые акценты снижают утомляемость, сосредоточивают внимание пользователя на выполняемых в данный момент операциях, повышают эффективность работы.
При работе с программой пользователь может пользоваться как клавиатурой, так и “мышью”.
Таким образом, в программе реализован удобный интерфейс, позволяющий пользователю, не имеющему специального образования, хорошо ориентироваться в программе и достаточно изучить порядок работы с программой.
Для решения задачи необходимо преждевременно ввести исходные данные в справочники. Формы для ввода этих данных, представленные в п.1.2, были изменены с помощью встроенных элементов языка программирования Delphi 6.0, таких как панель навигации и предварительный просмотр.
Формы, применяемые для ввода данных, снабжены как встроенной панелью навигации, которая представлена на рисунке 2.1, так и собственными элементами ввода и корректировки данных БД.

Рисунок 2.6 – Вид панели навигации

Форма для ввода и корректировки данных в справочнике номеров и настроек программы имеет табличную структуру. В таблице отражаются записи уже введенные в справочники. Форма для ввода и корректировки данных в справочниках представлена на рисунке 2.2.
На основе полученных требований задача была разделена на модули и показана в виде иерархической схемы на рисунке 2.3.

Рисунок 2.7 –Схема меню задачи

Таблицы не содержат кодов записей и не позволяют сотруднику изменить их. Это обусловлено тем, что программа автоматически ведёт контроль целостности данных, что приводит к снижению количества ошибок при вводе.

Рисунок 2.8 –Видеограмма меню

Формы вывода представляют собой стандартное окно предварительного просмотра отчета, встроенного в Delphi 6. Окно предварительного просмотра содержит панель инструментальных кнопок.
Панель инструментальных кнопок расположенных в верхней части формы предназначены для работы с отчётом, а также для управления печатью документа.
Кнопки масштабирования
— Страница полностью показывается в окне;
— Страница в масштабе 1 1;
— Ширина страницы соответствует ширине окна.
Кнопки перемещения по страницам отчета
— Показывает первую страницу отчета;
— Показывает последнюю страницу отчета;
— Показывает предыдущую страницу отчета;
— Показывает следующую страницу отчета.
Кнопки работы с принтером
— Вызывает стандартное окно настройки принтера;
— Печатает отчет.
Дополнительные кнопки
— Сохраняет отчет в файле;
— Загружает отчет из файла.

2.3.2 Проектирование форм для работы с базой данных
Проектировани форм программы происходило в среде визуального программирования Delphi. Некоторые результирующие формы показаны на рисунках.

Рисунок 2.9 – Главная форма

Рисунок 2.10 – Форма ввода и корректировки справочников

ЗАКЛЮЧЕНИЕ

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Вендров А.М. Case — технологии. Современные методы и средства проектирования информационных систем. — Internet, http/www.citforum.ru/case….-158 с., ил.
2. Марка Д., МакГоуэн К. Методология структурного анализа и проектирования Пер. с англ. — М. 1999.- 240 с., ил.
3. Шумаков П.В. Delphi 5 и разработка приложений баз данных. — М. “Нолидж”, 2001. — 704 с., ил.
4. Грабер М. Введение в SQL Пер. с англ. — М. “ЛОРИ”, 1996.- 341с., ил.
5. Дейт К. Дж. Введение в системы баз данных Пер. с англ. — 6-е изд. — К. Диалектика, 1998. — 784с., ил.
6. Калянов Г.Н. Case-средства. Структурный и системный анализ (автоматизация и применение). — М. “ЛОРИ”, 1999. — 249 с., ил.
7. Хендерсон Кен Delphi 5 и системы клиент/сервер. Руководство разработчика. Пер. с англ. — К. Диалектика, 2000. — 736 с., ил.

Приложение А

Листинг программы

unit About;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;

type
TAboutBox = class(TForm)
Panel1 TPanel;
ProductName TLabel;
Version TLabel;
Comments TLabel;
OKButton TButton;
Label1 TLabel;
procedure OKButtonClick(Sender TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
AboutBox TAboutBox;

implementation
uses Main, InformUnit;

{$R *.dfm}

procedure TAboutBox.OKButtonClick(Sender TObject);
begin
close;
MainForm.Show;
InformForm.Show;
end;

end.

unit InformUnit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls, Buttons;

type
TInformForm = class(TForm)
PageControl1 TPageControl;
TabSheet1 TTabSheet;
TabSheet2 TTabSheet;
TabSheet3 TTabSheet;
DBGrid1 TDBGrid;
DBNavigator1 TDBNavigator;
GroupBox1 TGroupBox;
DBGrid2 TDBGrid;
GroupBox2 TGroupBox;
DBNavigator2 TDBNavigator;
DBGrid3 TDBGrid;
DBNavigator3 TDBNavigator;
GroupBox3 TGroupBox;
DBGrid4 TDBGrid;
DBNavigator4 TDBNavigator;
GroupBox4 TGroupBox;
GroupBox5 TGroupBox;
DBGrid5 TDBGrid;
DBNavigator5 TDBNavigator;
BitBtn1 TBitBtn;
Panel1 TPanel;
procedure BitBtn1Click(Sender TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
InformForm TInformForm;

implementation

uses Main;

{$R *.dfm}

procedure TInformForm.BitBtn1Click(Sender TObject);
begin
informform.Hide;
end;

end.

unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, ToolWin, ActnMan,
ActnCtrls, Menus, Grids, DBGrids, DBCtrls, QuickRpt, QRCtrls, DBTables,
DB, AppEvnts, Buttons, jpeg;

type
TMainForm = class(TForm)
TreeView1 TTreeView;
WorkArea TPanel;
Panel2 TPanel;
GroupBox1 TGroupBox;
Memo1 TMemo;
DS_spisokB TDataSource;
T_typeB TTable;
T_products TTable;
T_EI TTable;
T_ProdinRec TTable;
T_spisokB TTable;
DS_EI TDataSource;
Session1 TSession;
DS_ProdinRec TDataSource;
DS_products TDataSource;
DS_TypeB TDataSource;
T_productsIdP TIntegerField;
T_productsNameProduct TStringField;
T_productsKol_vo TFloatField;
T_productsCenaP TFloatField;
T_productsIdEI TIntegerField;
T_productsRelatEI TStringField;
T_spisokBIDB TIntegerField;
T_spisokBNameB TStringField;
T_spisokBCenaB TFloatField;
T_spisokBIdTB TIntegerField;
T_spisokBFlagCur TBooleanField;
T_spisokBRelatTypeB TStringField;
T_ProdinRecIDB TIntegerField;
T_ProdinRecIDP TIntegerField;
T_ProdinRecKol_voPvB TFloatField;
T_ProdinRecRelatEIonP TStringField;
T_ProdinRecRelatP TStringField;
T_spisokBStoim TFloatField;
T_ProdinRecRelatPCena TFloatField;
DS_Zakaz TDataSource;
T_zakaz TTable;
T_zakazIDB TIntegerField;
T_zakazKol_voZ TIntegerField;
T_zakazRelatNB TStringField;
T_EIIdEI TIntegerField;
T_EINameEI TStringField;
T_typeBIdTB TIntegerField;
T_typeBNameTB TStringField;
BitBtn1 TBitBtn;
Image1 TImage;
BitBtn2 TBitBtn;
FontDialog1 TFontDialog;
T_zakazLU_CEnaB TVariantField;
T_zakazCalc_stoim TVariantField;

procedure T_spisokBFlagCurGetText(Sender TField; var Text String;
DisplayText Boolean);
procedure T_spisokBFlagCurSetText(Sender TField; const Text String);
procedure T_spisokBCalcFields(DataSet TDataSet);
procedure T_zakazRelatNBSetText(Sender TField; const Text String);
procedure T_zakazKol_voZSetText(Sender TField; const Text String);
procedure T_zakazAfterInsert(DataSet TDataSet);
procedure T_zakazAfterPost(DataSet TDataSet);
procedure T_spisokBAfterInsert(DataSet TDataSet);
procedure T_spisokBBeforeInsert(DataSet TDataSet);
procedure T_spisokBAfterPost(DataSet TDataSet);
procedure T_productsBeforeInsert(DataSet TDataSet);
procedure T_productsAfterInsert(DataSet TDataSet);
procedure T_productsAfterPost(DataSet TDataSet);
procedure T_EIBeforeInsert(DataSet TDataSet);
procedure T_EIAfterInsert(DataSet TDataSet);
procedure T_EIAfterPost(DataSet TDataSet);
procedure T_typeBBeforeInsert(DataSet TDataSet);
procedure T_typeBAfterInsert(DataSet TDataSet);
procedure BitBtn2Click(Sender TObject);
procedure FormShow(Sender TObject);
procedure TreeView1Click(Sender TObject);
procedure FormActivate(Sender TObject);
procedure T_zakazCalcFields(DataSet TDataSet);

private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm TMainForm;
flager byte;
mkeyvalue integer;
implementation

uses InformUnit, RepMenu, ZakazUnit, RepZakaz, About;

{$R *.dfm}

procedure TMainForm.T_spisokBFlagCurGetText(Sender TField; var Text String;
DisplayText Boolean);
begin
If T_spisokBFlagCur.Value then text =’+’
else text =’-‘;
end;

procedure TMainForm.T_spisokBFlagCurSetText(Sender TField;
const Text String);
begin
T_spisokBFlagCur.Value =false;
if text=’+’ then T_spisokBFlagCur.Value =True;
if text=’-‘ then T_spisokBFlagCur.Value =False;

end;
{Подсчет стоимости блюда}
procedure TMainForm.T_spisokBCalcFields(DataSet TDataSet);
var s1 real;
begin
s1 =0;
While not (T_ProdinRec.Eof) do begin
S1 =S1+T_ProdinRecRelatPCena.value*T_ProdinRecKol_voPvB.Value;
T_ProdinRec.Next;
end;
T_spisokBStoim.value =T_spisokBCenaB.value+S1;
end;

procedure TMainForm.T_zakazRelatNBSetText(Sender TField; const Text String);
begin

With T_spisokB do
if Locate(‘NameB’,Text,[]) then begin
T_zakazIDB.value =T_spisokBIDB.Value;
T_zakazIDB.RefreshLookupList;
end;

end;
{**********************************************************8}
procedure TMainForm.T_zakazKol_voZSetText(Sender TField; const Text String);
var number integer;prodZak real;flag boolean;
begin
flag =true;
number =strtoint(Text);
ZakazForm.memo1.Clear;
If not(strtoInt(Text) in [1..50]) then ZakazForm.memo1.Lines.Text =’Количество блюд превзошло разумные пределы!’

else begin

T_spisokB.locate(‘IDB’,T_zakazIDB.value,[]); {Нашли блюдо}
T_ProdinRec.First;
{Оценивающий цикл}
{} While not(T_ProdinRec.Eof) and flag do begin {Ищем запись продукта}
if T_products.Locate(‘IDP’,T_ProdinRecIDP.Value,[]) then
{Сравниваем заказанное и наличествующее}
{} begin
ProdZak =T_ProdinRecKol_voPvB.Value*number;
if ProdZak<T_productsKol_vo.Value then flag =true
else flag =false;
end;
T_ProdinRec.Next;
end;
{Проверка}
T_ProdinRec.First;

if flag then
{} begin
{Редактирующий цикл}
{} While not(T_ProdinRec.Eof) do begin {Ищем запись продукта}
if T_products.Locate(‘IDP’,T_ProdinRecIDP.Value,[]) then
{} begin
ProdZak =T_ProdinRecKol_voPvB.Value*(number-T_zakazKol_voZ.Value);
T_products.Edit;
T_productsKol_vo.Value =T_productsKol_vo.Value-ProdZak;
T_products.Post;
end;
T_ProdinRec.Next;
end;

T_zakazKol_voZ.Value =number
end
else begin
ZakazForm.memo1.Lines.Text =’Заказ превысил количество продуктов! Пожалуйста, повторите ввод’;
T_zakazKol_voZ.Value =1;
ZakazForm.DBGrid1.Refresh;
end;

end;

end;

procedure TMainForm.T_zakazAfterInsert(DataSet TDataSet);
begin
T_zakazKol_voZ.Value =1;
end;

procedure TMainForm.T_zakazAfterPost(DataSet TDataSet);
var money,sum real;MMark TBookMark;
begin
try
money =strtofloat(ZakazForm.MaskEdit1.Text);
except
ZakazForm.maskEdit1.Text =»;
ZakazForm.maskEdit1.ReadOnly =True;
ZakazForm.maskEdit1.Color =clBtnFace;
end;
sum =0;
if money<>0 then begin
MMark =T_zakaz.GetBookmark;
T_zakaz.First;
while not(T_zakaz.Eof) do begin
T_spisokB.locate(‘IDB’,T_zakazIDB.value,[]); {Нашли блюдо}
sum =T_spisokBStoim.Value*T_zakazKol_voZ.value+sum;
T_zakaz.Next;
end;
if T_zakaz.BookmarkValid(mmark) then T_zakaz.GotoBookmark(mmark);
if T_zakaz.BookmarkValid(mmark) then T_zakaz.FreeBookmark(mmark);
if sum>money then ZakazForm.memo1.Lines.Text =’Заказ превысил денежный предел!’
else ZakazForm.memo1.Clear;
end;

end;

{****************************SpisokB**********************888}
procedure TMainForm.T_spisokBAfterInsert(DataSet TDataSet);
begin
T_spisokB.edit;
T_spisokBIDB.Value =MKeyvalue;
T_spisokBFlagCur.Value =false;
T_spisokBIdTB.Value =1;
T_spisokB.Post;
InformForm.DBGrid1.Refresh;
end;

procedure TMainForm.T_spisokBBeforeInsert(DataSet TDataSet);
begin
MKeyvalue =0;
repeat
MKeyvalue =MKeyvalue+1;
until varType(T_spisokB.lookup(‘IDB’,MKeyvalue,’IDB’))=varnull;

end;

procedure TMainForm.T_spisokBAfterPost(DataSet TDataSet);
begin
T_spisokB.Refresh;
end;
{****************************Products********************888}

procedure TMainForm.T_productsBeforeInsert(DataSet TDataSet);
begin
MKeyvalue =0;
repeat
MKeyvalue =MKeyvalue+1;
until varType(T_products.lookup(‘IDP’,MKeyvalue,’IDP’))=varnull;

end;

procedure TMainForm.T_productsAfterInsert(DataSet TDataSet);
begin
T_products.edit;
T_productsIDP.Value =MKeyvalue;
T_productsIdEI.Value =1;
T_products.Post;
InformForm.DBGrid3.Refresh;
end;

procedure TMainForm.T_productsAfterPost(DataSet TDataSet);
begin
T_products.Refresh;
end;
{*********************TypeB****************************}

procedure TMainForm.T_EIBeforeInsert(DataSet TDataSet);
begin
MKeyvalue =0;
repeat
MKeyvalue =MKeyvalue+1;
until varType(T_EI.lookup(‘IdEI’,MKeyvalue,’IdEI’))=varnull;
end;

procedure TMainForm.T_EIAfterInsert(DataSet TDataSet);
begin
T_EI.edit;
T_EIIdEI.Value =MKeyvalue;
T_EINameEI.Value =’ ‘;
T_EI.Post;
InformForm.DBGrid5.Refresh;
end;

procedure TMainForm.T_EIAfterPost(DataSet TDataSet);
begin
T_EI.Refresh;
end;
{*********************TypeB****************************}

procedure TMainForm.T_typeBBeforeInsert(DataSet TDataSet);
begin
MKeyvalue =0;
repeat
MKeyvalue =MKeyvalue+1;
until varType(T_typeB.lookup(‘IdTB’,MKeyvalue,’IdTB’))=varnull;
end;

procedure TMainForm.T_typeBAfterInsert(DataSet TDataSet);
begin
T_typeB.edit;
T_typeBIdTB.Value =MKeyvalue;
T_typeBNameTB.Value =’ ‘;
T_typeB.Post;
InformForm.DBGrid4.Refresh;
end;

procedure TMainForm.BitBtn2Click(Sender TObject);
begin
AboutBox.showmodal;
end;

procedure TMainForm.FormShow(Sender TObject);
begin
memo1.Text =’Добро пожаловать в программу Ресторан»‘;
end;
{————————————————-}
procedure TMainForm.TreeView1Click(Sender TObject);
var F integer;
begin
{определение текущей выделеннки}
for f =0 to 15 do if TreeView1.Items[f].Selected then break;
memo1.Clear;
case f of
0 begin
ZakazForm.Show;
InformForm.Hide;
Aboutbox.Hide;
memo1.Text =’Ведение заказов’;
end;
1 begin
InformForm.Show;Aboutbox.Hide;
InformForm.PageControl1.ActivePageIndex =0;
InformForm.SetFocus;
memo1.Text =’Ведение справочников’;
end;
2 begin
InformForm.PageControl1.ActivePageIndex =0;
memo1.Text =’Определение меню, заполение списка блюд’;
end;
3 begin //InformFrame1.PageControl1.ActivePageIndex =1;
InformForm.PageControl1.ActivePageIndex =1;
memo1.Text =’Ведение состояния продуктов’;
end;
4 begin
InformForm.PageControl1.ActivePageIndex =2;
memo1.Text =’Дополнительные справочники, типы ед. измерения, типы блюд’;
end;
{Reports}
5 begin
InformForm.Hide;
Aboutbox.Hide;
ZakazForm.Hide;
memo1.Text =’Отчеты’;
end;

{Menu} 6 begin
MenuForm.QuickRep1.Refresh;
memo1.Text =’Просмотр меню, печать’;
end;
{Preview}7 begin
memo1.Text =’Просмотр меню’;
MenuForm.Query1.Close;
MenuForm.Query1.Open;
MenuForm.QuickRep1.Preview;
end;
{Print}8 begin
memo1.Text =’Печать меню’;
MenuForm.Query1.Close;
MenuForm.Query1.Open;
MenuForm.QuickRep1.Print;
end;
{Zakaz} 9 FRepZakaz.QuickRep1.Preview;
10 begin
memo1.Text =’Настройка шрифта меню’;
FontDialog1.Font = MainForm.Font;
if FontDialog1.Execute then TreeView1.font =FontDialog1.Font
end;

end;

end;

procedure TMainForm.FormActivate(Sender TObject);
begin
T_EI.open;
T_Prodinrec.open;
T_products.open;
T_spisokB.open;
T_zakaz.open;
T_typeB.open;
end;

procedure TMainForm.T_zakazCalcFields(DataSet TDataSet);
begin

T_zakazCalc_stoim.AsCurrency =T_zakazKol_voZ.AsCurrency + T_zakazLU_CEnaB.AsCurrency

end;

end.

unit RepMenu;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, QuickRpt, QRCtrls, ExtCtrls, DB, DBTables;

type
TMenuForm = class(TForm)
QuickRep1 TQuickRep;
QRBand1 TQRBand;
QRLabel1 TQRLabel;
Query1 TQuery;
DataSource1 TDataSource;
QRDBText1 TQRDBText;
QRDBText2 TQRDBText;
QRBand2 TQRBand;
QRDBText3 TQRDBText;
QRDBText4 TQRDBText;
QRDBText5 TQRDBText;
QRDBText6 TQRDBText;
QRBand3 TQRBand;
QRExpr1 TQRExpr;
QRDBText7 TQRDBText;
QRLabel2 TQRLabel;
QRLabel3 TQRLabel;
QRLabel4 TQRLabel;
QRExpr2 TQRExpr;
QRLabel5 TQRLabel;
QRLabel6 TQRLabel;
QRShape2 TQRShape;
QRShape3 TQRShape;
QRShape4 TQRShape;
QRLabel7 TQRLabel;
QRShape5 TQRShape;
QRShape1 TQRShape;
QRShape6 TQRShape;
private
{ Private declarations }
public
{ Public declarations }
end;
var
MenuForm TMenuForm;

implementation

{$R *.dfm}

end.

unit RepZakaz;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, QuickRpt, QRCtrls, ExtCtrls;

type
TFRepZakaz = class(TForm)
QuickRep1 TQuickRep;
QRBand1 TQRBand;
QRBand2 TQRBand;
QRDBText1 TQRDBText;
QRDBText2 TQRDBText;
QRLabel1 TQRLabel;
QRBand3 TQRBand;
QRLabel2 TQRLabel;
QRLabel3 TQRLabel;
QRShape1 TQRShape;
private
{ Private declarations }
public
{ Public declarations }
end;

var
FRepZakaz TFRepZakaz;

implementation

uses Main;

{$R *.dfm}

end.

unit ZakazUnit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Buttons, Mask;

type
TZakazForm = class(TForm)
DBGrid1 TDBGrid;
DBNavigator1 TDBNavigator;
BitBtn1 TBitBtn;
Clear TBitBtn;
Panel1 TPanel;
Preview TBitBtn;
Print TBitBtn;
Memo1 TMemo;
MaskEdit1 TEdit;
procedure ClearClick(Sender TObject);
procedure PreviewClick(Sender TObject);
procedure PrintClick(Sender TObject);
procedure FormActivate(Sender TObject);
procedure BitBtn1Click(Sender TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
ZakazForm TZakazForm;

implementation

uses Main, RepZakaz;

{$R *.dfm}

procedure TZakazForm.ClearClick(Sender TObject);
begin
MainForm.T_zakaz.close;
MainForm.T_zakaz.EmptyTable;
MainForm.T_zakaz.Open;
end;

procedure TZakazForm.PreviewClick(Sender TObject);
begin
FRepZakaz.QuickRep1.Preview;
end;

procedure TZakazForm.PrintClick(Sender TObject);
begin
FRepZakaz.QuickRep1.Print;
end;

procedure TZakazForm.FormActivate(Sender TObject);
begin
if not(MainForm.T_zakaz.Active) then MainForm.T_zakaz.Open;
end;

procedure TZakazForm.BitBtn1Click(Sender TObject);
begin
ZakazForm.Hide;
end;

end.

«