Программное и аппаратное обеспечение программы




минимальное

Требования для разработчика:

- процессор с тактовой частотой 600 Мгц;

- наличие монитора VGA с разрешением экрана 800x600;

- объём оперативной памяти 128 Мб

- операционная система WindowsXP;

- 5 МБ свободного места на жестком диске.


 

Руководство пользователя

Для работы в данной программе, необходимо:

 

1. Запустить исполняемый файл Cafe.exe на компьютере двойным щелчком

левой кнопки мыши. После чего на экране появится окно главной формы.

2. При помощи пункта, главного меню, «Данные» выбрать необходимую

таблицу, данные содержащиеся в таблице отобразятся на форме.

3. Произвести необходимые манипуляции с данными при помощи

навигатора, который активируется при выборе таблицы.

4. При помощи пункта, главного меню, «Действия…» сформировать запрос с

вычислением.

Закрыть программу при помощи пункта, главного меню, «Файл».

 

 

Заключение

В данной работе рассмотрен пример создания базы данных, для предприятия быстрого обслуживания, кафе или им подобных.

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

В разработанной базе данных предусмотрены таблицы для хранения информации о блюдах, меню, заказах и менеджерах.

В качестве системы управления базой данных использована СУБД MySQL, в качестве языка программирования Delphi 2010. Механизмом взаимодействия приложения с базой выбрана технология dbExpress.

 

 

Список используемой литературы

1. Давыдов В.Г. Программирование и основы алгоритмизации: учеб. пособие. – М.: Высш. шк., 2003. – 447 с.

2. Сухарев М. Delphi. Полное руководство. Включая версию 2010. – СПб.: Наука и техника, 2010. – 1035 с.

3. Фаронов В.В. Delphi. Программирование на языке высокого уровня: учеб. для вузов. – СПб.: Питер, 2009. – 640 с.

4. Истомин Е.П. Программирование на языках высокого уровня: учеб/ Е.П. Истомин, С.Ю. Неклюдов. – СПб: Изд-во Михайлова В.А., 2003. – 719 с.

5. Бобровский С.И. Delphi 7: Учебный курс. – СПб.: Питер, 2008. – 736 с.

6. Культин Н.Б. Delphi в задачах и примерах. – СПб.: БХВ-Петербург, 2007. – 288 с.

7. Архангельский А.Я. Программирование в Delphi: учебник по классическим версиям Delphi. – М.: Бином, 2008. – 804 с.

8. Фленов М.Е. Библия Delphi. – СПб.: БХВ-Петербург, 2009. – 799с.

9. Голованов М.Е. Создание компонентов в среде Delphi/ М.Е. Голованов, Е.О. Веселов. – БХВ-Петербург, 2004. – 320 с.

10. Фаронов В.В. Паскаль и Windows. - М.:МВТУ-ФЕСТО Дидактик, 1995. – 639 с.

Приложение 1

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, Menus, ExtCtrls, DBCtrls,

FMTBcd, DBClient, Provider, SqlExpr,

Mbd_MySql, uMenuRec, uOrderRec;

type

TForm1 = class(TForm)

Button1: TButton;

DataSource1: TDataSource;

DBGrid1: TDBGrid;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

Panel1: TPanel;

Panel2: TPanel;

dbNav: TDBNavigator;

N8: TMenuItem;

N9: TMenuItem;

qDish: TSQLQuery;

DataSetProvider1: TDataSetProvider;

ClientDataSet1: TClientDataSet;

qMenu: TSQLQuery;

qDishtitle: TStringField;

qDishweight: TFloatField;

qDishcompos: TStringField;

qDishid_dish: TIntegerField;

qMenuprice: TFloatField;

qMenutitle: TStringField;

qMng: TSQLQuery;

qMngid_manager: TIntegerField;

qMngf: TStringField;

qMngi: TStringField;

qMngo: TStringField;

qMngtel: TStringField;

qMenuid_menu: TIntegerField;

qMenuid_dish: TIntegerField;

qOrders: TSQLQuery;

qOrdersid_orders: TIntegerField;

qOrdersid_dish: TIntegerField;

qOrdersid_manager: TIntegerField;

qOrderscnt: TIntegerField;

qOrderscreated_at: TSQLTimeStampField;

qOrderstitle: TStringField;

qOrdersf: TStringField;

q: TSQLQuery;

procedure N2Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure ClientDataSet1AfterPost(DataSet: TDataSet);

procedure dbNavBeforeAction(Sender: TObject; Button: TNavigateBtn);

private

_state: integer;

_db: TMbd_MySql;

Public

end;

const

ST_NONE = 0;

ST_DISH = 1;

ST_MENU = 2;

ST_MNG = 3;

ST_ORDER = 4;

var

Form1: TForm1;

Implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

_state:= ST_NONE;

_db:= TMbd_MySql.Create;

_db.PutDoDirDll:= ExtractFileDir(Application.ExeName);

_db.ConnectionFile:= 'connekt';

end;

procedure TForm1.FormActivate(Sender: TObject);

var

res: Boolean;

begin

res:= false;

// подключаемся к БД

try

if _db.ConnectDb('045595112_admin', 'admin') then

begin

//SQLQuery1.SQLConnection:= _db.MySqlConnection;

//SQLQuery2.SQLConnection:= _db.MySqlConnection;

//qDish.Open;

//qMenu.Open;

q.SQLConnection:= _db.MySqlConnection;

qDish.SQLConnection:= _db.MySqlConnection;

qMenu.SQLConnection:= _db.MySqlConnection;

qOrders.SQLConnection:= _db.MySqlConnection;

qMng.SQLConnection:= _db.MySqlConnection;

res:= true;

end

else

begin

MessageBox(0, 'Не удалось подключиться к базе данных.' + #13#10 + 'Программа будет закрыта.',

'Внимание', MB_ICONEXCLAMATION + MB_OK);

Application.Terminate;

end;

except on e:Exception do

MessageBox(0, 'Ошибка подключения к базе данных.' + #13#10 + 'Программа будет закрыта.',

'Внимание', MB_ICONERROR + MB_OK);

end;

if (not res) then

Close;

end;

 

procedure TForm1.N2Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);

begin

if (ClientDataSet1.Active) then

ClientDataSet1.ApplyUpdates(0);

end;

procedure TForm1.dbNavBeforeAction(Sender: TObject; Button: TNavigateBtn);

var

sql: string;

begin

case _state of

ST_NONE: Abort;

ST_MENU:

begin

if (Button = nbInsert) then

begin

FormMenuRec.showNew(_db);

DataSource1.DataSet.Refresh;

Abort;

end;

if (Button = nbEdit) then

begin

with DBGrid1.DataSource.DataSet do

FormMenuRec.showEdit(_db, FieldByName('id_menu').AsInteger,

FieldByName('id_dish').AsInteger, FieldByName('price').AsCurrency);

DataSource1.DataSet.Refresh;

Abort;

end;

if (Button = nbDelete) then

begin

with DBGrid1.DataSource.DataSet do

sql:= 'delete from menu where id_menu = ' +

FieldByName('id_menu').AsString;

if (_db.DdlExecute(sql) = 1) then

MessageBox(0, 'Запись успешно удалена.', 'Удаление', MB_ICONINFORMATION + MB_OK)

else

MessageBox(0, 'Не удалось удалить запись.', 'Ошибка', MB_ICONWARNING + MB_OK);

DataSource1.DataSet.Refresh;

Abort;

end;

end;

ST_ORDER:

begin

if (Button = nbInsert) then

begin

FormOrders.showNew(_db);

DataSource1.DataSet.Refresh;

Abort;

end;

if (Button = nbEdit) then

begin

with DBGrid1.DataSource.DataSet do

FormOrders.showEdit(_db, FieldByName('id_orders').AsInteger, FieldByName('id_dish').AsInteger,

FieldByName('id_manager').AsInteger, FieldByName('cnt').AsInteger);

DataSource1.DataSet.Refresh;

Abort;

end;

if (Button = nbDelete) then

begin

with DBGrid1.DataSource.DataSet do

sql:= 'delete from orders where id_orders = ' + FieldByName('id_orders').AsString;

if (_db.DdlExecute(sql) = 1) then

MessageBox(0, 'Запись успешно удалена.', 'Удаление', MB_ICONINFORMATION + MB_OK)

else

MessageBox(0, 'Не удалось удалить запись.', 'Ошибка', MB_ICONWARNING + MB_OK);

DataSource1.DataSet.Refresh;

Abort;

end;

end;

end;

end;

{ Вывести таблицу Блюд }

procedure TForm1.N4Click(Sender: TObject);

begin

Caption:= 'Блюда';

_state:= ST_DISH;

ClientDataSet1.Close;

DataSetProvider1.DataSet:= qDish;

ClientDataSet1.Active:= true;

DBGrid1.Columns[0].Visible:= false;

DBGrid1.Columns[1].Title.Caption:= 'Наименование блюда';

DBGrid1.Columns[1].Width:= 200;

DBGrid1.Columns[2].Title.Caption:= 'Вес (г)';

DBGrid1.Columns[2].Width:= 60;

DBGrid1.Columns[3].Title.Caption:= 'Состав';

DBGrid1.Columns[3].Width:= 400;

DBGrid1.Options:= DBGrid1.Options + [dgEditing];

end;

{ вывести меню }

procedure TForm1.N5Click(Sender: TObject);

var

f: TField;

begin

Caption:= 'Меню';

_state:= ST_MENU;

ClientDataSet1.Close;

DataSetProvider1.DataSet:= qMenu;

ClientDataSet1.Open;

DBGrid1.Columns[0].Visible:= false;

DBGrid1.Columns[1].Visible:= false;

DBGrid1.Columns[2].Title.Caption:= 'Название блюда';

DBGrid1.Columns[2].Width:= 200;

DBGrid1.Columns[3].Title.Caption:= 'Цена (р)';

DBGrid1.Columns[3].Width:= 60;

DBGrid1.Columns[3].Field.SetFieldType(ftCurrency);

DBGrid1.Options:= DBGrid1.Options - [dgEditing];

end;// заказы

procedure TForm1.N6Click(Sender: TObject);

begin

Caption:= 'Заказы';

_state:= ST_ORDER;

ClientDataSet1.Close;

DataSetProvider1.DataSet:= qOrders;

ClientDataSet1.Open;

DBGrid1.Columns[0].Visible:= false;

DBGrid1.Columns[1].Visible:= false;

DBGrid1.Columns[2].Visible:= false;

DBGrid1.Columns[3].Title.Caption:= 'Название блюда';

DBGrid1.Columns[3].Width:= 200;

DBGrid1.Columns[4].Title.Caption:= 'Кол-во';

DBGrid1.Columns[4].Width:= 50;

DBGrid1.Columns[5].Title.Caption:= 'Дата создания';

DBGrid1.Columns[5].Width:= 120;

DBGrid1.Columns[5].Field.SetFieldType(ftDateTime);

DBGrid1.Columns[6].Title.Caption:= 'Менеджер';

DBGrid1.Columns[6].Width:= 100;

DBGrid1.Options:= DBGrid1.Options - [dgEditing];

end;// менеджеры

procedure TForm1.N7Click(Sender: TObject);

begin

Caption:= 'Менеджеры';

_state:= ST_MNG;

ClientDataSet1.Close;

DataSetProvider1.DataSet:= qMng;

ClientDataSet1.Open;

DBGrid1.Refresh;

DBGrid1.Columns[0].Visible:= false;

DBGrid1.Columns[1].Title.Caption:= 'Фамилия';

DBGrid1.Columns[1].Width:= 200;

DBGrid1.Columns[2].Title.Caption:= 'Имя';

DBGrid1.Columns[2].Width:= 200;

DBGrid1.Columns[3].Title.Caption:= 'Отчество';

DBGrid1.Columns[3].Width:= 200;

DBGrid1.Columns[4].Title.Caption:= 'Телефон';

DBGrid1.Columns[4].Width:= 200;

DBGrid1.Options:= DBGrid1.Options + [dgEditing];

end;

procedure TForm1.N9Click(Sender: TObject);

begin

_state:= ST_NONE;

Caption:= 'Итого';

try

ClientDataSet1.Close;

q.Close;

q.SQL.Text:=

'select orders.id_orders as "Номер заказа", dish.title as "Блюдо", ' +

'orders.cnt as "Количество", menu.price as "Цена", ' +

'(orders.cnt * menu.price) as "Итого" ' +

'from orders ' +

'left join dish on (orders.id_dish = dish.id_dish) ' +

'left join menu on (dish.id_dish = menu.id_dish)' +

'order by orders.id_orders';

q.Open;

q.FieldByName('Цена').AsCurrency;

q.FieldByName('Итого').AsCurrency;

DataSetProvider1.DataSet:= q;

ClientDataSet1.Open;

DBGrid1.Columns[1].Width:= 200;

except on e:Exception do

MessageBox(0, 'Ошибка запроса "Итого"!', 'Внимание', MB_OK + MB_ICONWARNING);

end;

DBGrid1.Options:= DBGrid1.Options - [dgEditing];

end;

end.

Модуль uMenuRec:

unit uMenuRec;

interface

uses

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

StdCtrls, ExtCtrls,

Mbd_MySql;

Type

TDishRec = class

id_dish: integer;

title: string;

end;

TFormMenuRec = class(TForm)

cbDish: TComboBox;

Panel1: TPanel;

edPrice: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

_mode: integer; // 1 - new, 2 - edit

_db: TMbd_MySql;

_id_menu: integer;

public

procedure showNew(aDB: TMbd_MySql);

procedure showEdit(aDB: TMbd_MySql; id_menu: integer; id_dish: integer; price: Currency);

end;

var

FormMenuRec: TFormMenuRec;

Implementation

{$R *.dfm}

const

sql_req: string = 'select * from dish';// отмена

procedure TFormMenuRec.Button1Click(Sender: TObject);

begin

Close;

end;

// ok

procedure TFormMenuRec.Button2Click(Sender: TObject);

var

req: string;

rec: TDishRec;

begin

// проверка корректности введёных значений

if (cbDish.ItemIndex < 0) then

begin

MessageBox(0, 'Необходимо выбрать название блюда из списка.',

'Внимание', MB_ICONWARNING + MB_OK);

cbDish.SetFocus;

Exit;

end;

if (Length(edPrice.Text) <= 0) then

begin

MessageBox(0, 'Цена не может быть пустой.', 'Внимание', MB_ICONWARNING + MB_OK);

edPrice.SetFocus;

Exit;

end;

case _mode of

1: // new

begin

rec:= cbDish.Items.Objects[cbDish.ItemIndex] as TDishRec;

req:= 'insert into menu (id_dish, price) values(' + IntToStr(rec.id_dish) + ', ' + edPrice.Text + ')';

if (_db.DdlExecute(req) = 1) then

begin

MessageBox(0, 'Запись успешно добавлена.', 'Добавление', MB_ICONINFORMATION + MB_OK);

Close;

end

else

begin

MessageBox(0, 'Не удалось добавить запись.', 'Внимание', MB_ICONWARNING + MB_OK);

end;

end;

2: // edit

begin

rec:= cbDish.Items.Objects[cbDish.ItemIndex] as TDishRec;

req:= 'update menu set id_dish = ' + IntToStr(rec.id_dish) + ', price = ' + edPrice.Text + ' where id_menu = ' + IntToStr(_id_menu);

if (_db.DdlExecute(req) = 1) then

begin

MessageBox(0, 'Запись успешно изменена.', 'Изменение', MB_ICONINFORMATION + MB_OK);

Close;

end

else

begin

MessageBox(0, 'Не удалось изменить запись.', 'Внимание', MB_ICONWARNING + MB_OK);

end;

end;

end;

end;

procedure TFormMenuRec.showNew(aDB: TMbd_MySql);

var

rec: TDishRec;

begin

Caption:= 'Добавить запись меню';

_mode:= 1;

_db:= aDB;

cbDish.Items.Clear;

cbDish.ItemIndex:= -1;

edPrice.Text:= '';

// SELECT запрос серверу с получением результата

aDB.M_Open(sql_req); // Делаем запрос и получаем набор данных

while aDB.M_NoEnd do // делаем пока не конец набора полей результата

begin

rec:= TDishRec.Create;

rec.id_dish:= aDB.M_Value('id_dish');

rec.title:= aDB.M_Value('title');

cbDish.Items.AddObject(rec.title, rec);

aDB.M_Next; // переходим на следующие поле

end;

aDB.M_Close; // после получения данных уничтожаем полученный набор данных

ShowModal;

end;

procedure TFormMenuRec.showEdit(aDB: TMbd_MySql; id_menu: integer; id_dish: integer; price: Currency);

var

rec: TDishRec;

begin

Caption:= 'Изменить запись меню';

_mode:= 2;

_db:= aDB;

_id_menu:= id_menu;

cbDish.Items.Clear;

// SELECT зарос серверу с получением результата

aDB.M_Open(sql_req); // Делаем запрос и получаем набор данных

while aDB.M_NoEnd do // делаем пока не конец набора полей результата

begin

rec:= TDishRec.Create;

rec.id_dish:= aDB.M_Value('id_dish');

rec.title:= aDB.M_Value('title');

cbDish.Items.AddObject(rec.title, rec);

if (rec.id_dish = id_dish) then

cbDish.ItemIndex:= cbDish.Items.Count - 1;

aDB.M_Next; // переходим на следующие поле

end;

aDB.M_Close; // после получения данных уничтожаем полученный набор данных

 

edPrice.Text:= CurrToStr(price);

ShowModal;

end;

end.

Модуль uOrderRec:

unit uOrderRec;

interface

uses

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

StdCtrls, ExtCtrls,

Mbd_MySql;

type

TDishRec = class

id_dish: integer;

title: string;

end;

TMngRec = class

id_mng: integer;

fam: string;

end;

TFormOrders = class(TForm)

Label1: TLabel;

cbDish: TComboBox;

Label2: TLabel;

edCnt: TEdit;

Panel1: TPanel;

Button1: TButton;

Button2: TButton;

cbMng: TComboBox;

Label3: TLabel;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

_mode: integer; // 1 - new, 2 - edit

_db: TMbd_MySql;

_id_orders: integer;

procedure fillMngs();

procedure fillDishes();

public

procedure showNew(aDB: TMbd_MySql);

procedure showEdit(aDB: TMbd_MySql; id_orders, id_dish, id_mng: integer; cnt: integer);

end;

var

FormOrders: TFormOrders;

Implementation

{$R *.dfm}

procedure TFormOrders.fillMngs();

var

rec: TMngRec;

begin

cbMng.Items.Clear;

cbMng.ItemIndex:= -1;

// заполняем менеджеров

_db.M_Open('select * from manager order by f'); // Делаем запрос и получаем набор данных

while _db.M_NoEnd do // делаем пока не конец набора полей результата

begin

rec:= TMngRec.Create;

rec.id_mng:= _db.M_Value('id_manager');

rec.fam:= _db.M_Value('f');

cbMng.Items.AddObject(rec.fam, rec);

_db.M_Next; // переходим на следующие поле

end;

_db.M_Close; // после получения данных уничтожаем полученный набор данных

end;

procedure TFormOrders.Button1Click(Sender: TObject);

begin

Close;

end;

procedure TFormOrders.Button2Click(Sender: TObject);

var

req: string;

drec: TDishRec;

mrec: TMngRec;

begin

// проверка корректности введёных значений

if (cbDish.ItemIndex < 0) then

begin

MessageBox(0, 'Необходимо выбрать название блюда из списка.', 'Внимание', MB_ICONWARNING + MB_OK);

cbDish.SetFocus;

Exit;

end;

if (cbMng.ItemIndex < 0) then

begin

MessageBox(0, 'Необходимо выбрать менеджера из списка.', 'Внимание', MB_ICONWARNING + MB_OK);

cbMng.SetFocus;

Exit;

end;

if (Length(edCnt.Text) <= 0) then

begin

MessageBox(0, 'Кол-во не может быть пустым.', 'Внимание', MB_ICONWARNING + MB_OK);

edCnt.SetFocus;

Exit;

end;

drec:= cbDish.Items.Objects[cbDish.ItemIndex] as TDishRec;

mrec:= cbMng.Items.Objects[cbMng.ItemIndex] as TMngRec;

case _mode of

1: // new

begin

req:= 'insert into orders (id_dish, id_manager, cnt) values(' + IntToStr(drec.id_dish) + ', ' + IntToStr(mrec.id_mng) + ', ' + edCnt.Text + ')';

if (_db.DdlExecute(req) = 1) then

begin

MessageBox(0, 'Запись успешно добавлена.', 'Добавление', MB_ICONINFORMATION + MB_OK);

Close;

end

else

begin

MessageBox(0, 'Не удалось добавить запись.', 'Внимание', MB_ICONWARNING + MB_OK);

end;

end;

2: // edit

begin

req:= 'update orders set id_dish = ' + IntToStr(drec.id_dish) + ', id_manager = ' + IntToStr(mrec.id_mng) + ', cnt = ' + edCnt.Text + ' where id_orders = ' + IntToStr(_id_orders);

if (_db.DdlExecute(req) = 1) then

begin

MessageBox(0, 'Запись успешно изменена.', 'Изменение', MB_ICONINFORMATION + MB_OK);

Close;

end

else

MessageBox(0, 'Не удалось изменить запись.', 'Внимание', MB_ICONWARNING + MB_OK);

end;

end;

end;

procedure TFormOrders.fillDishes();

var

rec: TDishRec;

begin

cbDish.Items.Clear;

cbDish.ItemIndex:= -1;

// заполняем менеджеров

_db.M_Open('select * from menu left join dish on menu.id_dish = dish.id_dish order by title'); // Делаем запрос и получаем набор данных

while _db.M_NoEnd do // делаем пока не конец набора полей результата

begin

rec:= TDishRec.Create;

rec.id_dish:= _db.M_Value('id_dish');

rec.title:= _db.M_Value('title');

cbDish.Items.AddObject(rec.title, rec);

_db.M_Next; // переходим на следующие поле

end;

_db.M_Close; // после получения данных уничтожаем полученный набор данных

end;

procedure TFormOrders.showNew(aDB: TMbd_MySql);

begin

Caption:= 'Создаие заказа';

_mode:= 1;

_db:= aDB;

edCnt.Text:= '1';

fillMngs;

fillDishes;

ShowModal;

end;

procedure TFormOrders.showEdit(aDB: TMbd_MySql; id_orders, id_dish, id_mng: integer; cnt: integer);

var

rec: TDishRec;

i: Integer;

begin

Caption:= 'Изменение заказа';

_mode:= 2;

_db:= aDB;

_id_orders:= id_orders;

fillMngs;

fillDishes;

for i:= 0 to cbDish.Items.Count - 1 do

if (TDishRec(cbDish.Items.Objects[i]).id_dish = id_dish) then

cbDish.ItemIndex:= i;

for i:= 0 to cbMng.Items.Count - 1 do

if (TMngRec(cbMng.Items.Objects[i]).id_mng = id_mng) then

cbMng.ItemIndex:= i;

edCnt.Text:= intToStr(cnt);

ShowModal;

end;

end.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: