Наименование реквизита
|
Идентификатор реквизита
|
Характеристика реквизита
|
Источник информации
|
Идентификатор источника
|
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 -Видеограмма меню
Панель инструментальных кнопок расположенных в верхней части формы
предназначены для работы с отчётом, а также для управления печатью документа.
Кнопки масштабирования:
- Страница полностью показывается в окне;
- Страница в масштабе 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);
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.