Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vova_diplom!!!!!!!!!!!!!!!!1.doc
Скачиваний:
5
Добавлен:
05.09.2019
Размер:
3.62 Mб
Скачать

3.1 Проектирование таблиц и схемы базы данных

Все данные, с которыми работает пользователь системы, хранятся в базе данных MS Access. При загрузке приложения происходит подключение к базе данных (bd.mdb), которая является основным хранилищем данных программного продукта.

Организация хранения данных о заказах представлена на рисунке 3.1.

Рисунок 3.1 – Организация хранения данных о заказах

Главной таблицей базы данных является таблица main, в которой хранятся данные о заказах СТО. Структура данных таблицы main представлена на рисунке 3.2.

Рисунок 3.2 – Структура данных таблицы main

Каждая запись таблицы book состоит из следующих полей: «FIO mastera» – бригада рабочих, «Model» – модель автомобиля, «N avto» – номер автомобиля, «Vid raboty» – вид ремонтных работ, «Tip raboty» – ремонтная работа, «Cena» – стоимость услуг, «Data priema» – дата приема заказа, «Data sdachi» – дата выдачи заказа, «addwork» – дополнительные работы с автомобилем, «Cost_add» – стоимость дополнительных работ.

Данные о ценовых категориях услуг СТО хранятся в таблице Price. Структура данных таблицы Price представлена на рисунке 3.3.

Рисунок 3.3 – Структура данных таблицы Price

Каждая запись таблицы Price состоит из следующих полей: «Model» – информация о модели автомобиля, «Vid» – вид работы, «Tip» – тип работы, «Nch» – нормо-часы, «Stavka» – ставка нормо-часа, «Cena» – стоимость услуг.

В данной БД используются следующие таблицы-справочники: masters, works, types, models.

В справочнике masters хранится информация о бригадах СТО. Структура данных справочника masters представлена на рисунке 3.4.

Рисунок 3.4 – Структура данных справочника masters

В справочнике works хранится информация о видах работ, производимых СТО. Структура данных справочника works представлена на рисунке 3.5.

Рисунок 3.5 – Структура данных справочника works

В справочнике types хранится информация о бригадах СТО. Структура данных справочника types представлена на рисунке 3.6.

Рисунок 3.6 – Структура данных справочника types

3.2 Технология разработки модуля редактирования информации

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

Рисунок 3.7 – Добавление новой записи в базу данных

Программный код, соответствующий процедуре добавления информации, представлен в листинге 3.1.

Листинг 3.1 – Процедура добавления информации

procedure TFEdit.BitBtn2Click(Sender: TObject);

begin

if DBEdit2.Text <> '' then begin

DataModule2.main.insert;

end

else ShowMessage('Ввод новой записи уже активирован!');

DateTimePicker1.Date:= now;

DataModule2.mainDatapriema.Text := DateToStr(DateTimePicker1.Date);

Edit9.Text:= 'Нет';

Edit10.Text:= '0,00';

DBEdit12.Text:= 'Нет';

DBEdit15.Text:= '0,00';

end;

//сохранить

procedure TFEdit.Button7Click(Sender: TObject);

var dates, datef, number, addwork, s1, s2: string; cost, costadd: Real;

er: integer;

begin

try

//запоминание текущих значений таблицы

s1 := FormatDateTime('dd/mm/yyyy', DataModule2.mainDatapriema.AsDateTime);

DateTimePicker1.Date:= strtodate(s1) ;

s2 := FormatDateTime('dd/mm/yyyy', DataModule2.maindatasdachi.AsDateTime);

DateTimePicker2.Date:= strtodate(s2) ;

number:= DBEdit2.Text; //номер авто

cost:= StrToFloat(Edit8.Text); //цена

costadd:= StrToFloat(DBEdit15.Text); //дополнительная стоимость

addwork:= DBEdit12.Text; //дополнительные работы

edit4.Text:= DBLookupComboBox2.Text; //фио

edit5.Text:= DBLookupComboBox3.Text; //модель

edit7.Text:= ComboBox3.Text; //вид

edit6.Text:= ComboBox2.Text; //тип

//активирование запроса на добавление ФИО

DataModule2.NewFIO.Active:=false;

DataModule2.NewFIO.SQL.Clear;

DataModule2.NewFIO.SQL.Text:='select * from masters where master='+QuotedStr(Edit4.Text);

DataModule2.NewFIO.Active:=true;

//активирование запроса на добавление вида работы

DataModule2.NewVid.Active:=false;

DataModule2.NewVid.SQL.Clear;

DataModule2.NewVid.SQL.Text:='select * from works where [vid raboty]='+QuotedStr(Edit7.Text);

DataModule2.NewVid.Active:=true;

//активирование запроса на добавление модели

DataModule2.NewModel.Active:=false;

DataModule2.NewModel.SQL.Clear;

DataModule2.NewModel.SQL.Text:='select * from models where model='+QuotedStr(Edit5.Text);

DataModule2.NewModel.Active:=true;

//активирование запроса на добавление типа работы

DataModule2.NewTip.Active:=false;

DataModule2.NewTip.SQL.Clear;

DataModule2.NewTip.SQL.Text:='select * from types where tip='+QuotedStr(Edit6.Text);

DataModule2.NewTip.Active:=true;

//перевод таблицы в режим добавления записи

DataModule2.main.Insert;

//добавление записей

DataModule2.mainFIOmastera.AsInteger:= DataModule2.NewFIOid.AsInteger; //фио мастера

DataModule2.mainModel.AsInteger:= DataModule2.NewModelid.AsInteger; //модель авто

DataModule2.mainVidraboty.AsInteger:= DataModule2.NewVidid.AsInteger; //вид работы

DataModule2.mainTipraboty.AsInteger:= DataModule2.NewTipid.AsInteger; //тип работы

dbedit4.Text := DateToStr(DateTimePicker1.Date);

dbedit5.Text := DateToStr(DateTimePicker2.Date);

dbedit2.Text:= number; //номер авто

dbedit3.Text:= FloatToStr(cost); //стоимость

dbedit12.Text:= 'Нет'; //дополнительная работа

dbedit15.Text:= FloatToStr(costadd); //дополнительная стоимость

//сохранение изменений

DataModule2.main.Post;

except

er:=1;

end; end;

procedure TFEdit.Button1Click(Sender: TObject);

var dates, datef, number, addwork, s1, s2: string; costadd, cost: real;

er:integer;

begin

try

//запоминание текущих значений таблицы

s1 := FormatDateTime('dd/mm/yyyy', DataModule2.mainDatapriema.AsDateTime);

DateTimePicker1.Date:= strtodate(s1) ;

s2 := FormatDateTime('dd/mm/yyyy', DataModule2.maindatasdachi.AsDateTime);

DateTimePicker2.Date:= strtodate(s2) ;

number:= DBEdit2.Text; //номер авто

cost:= StrToFloat(DBEdit3.Text); //цена

costadd:= StrToFloat(Edit10.Text); //дополнительная стоимость

addwork:= Edit9.Text; //дополнительные работы

edit4.Text:= DBLookupComboBox2.Text; //фио

edit5.Text:= DBLookupComboBox3.Text; //модель

edit7.Text:= DBLookupComboBox4.Text; //вид

ComboBox1.Text:= DataModule2.mainTipRaboty2.Text;

edit6.Text:= ComboBox1.Text; //тип

//активирование запроса на добавление ФИО

DataModule2.NewFIO.Active:=false;

DataModule2.NewFIO.SQL.Clear;

DataModule2.NewFIO.SQL.Text:='select * from masters where master='+QuotedStr(Edit4.Text);

DataModule2.NewFIO.Active:=true;

//активирование запроса на добавление вида работы

DataModule2.NewVid.Active:=false;

DataModule2.NewVid.SQL.Clear;

DataModule2.NewVid.SQL.Text:='select * from works where [vid raboty]='+QuotedStr(Edit7.Text);

DataModule2.NewVid.Active:=true;

//активирование запроса на добавление модели

DataModule2.NewModel.Active:=false;

DataModule2.NewModel.SQL.Clear;

DataModule2.NewModel.SQL.Text:='select * from models where model='+QuotedStr(Edit5.Text);

DataModule2.NewModel.Active:=true;

//активирование запроса на добавление типа работы

DataModule2.NewTip.Active:=false;

DataModule2.NewTip.SQL.Clear;

DataModule2.NewTip.SQL.Text:='select * from types where tip='+QuotedStr(Edit6.Text);

DataModule2.NewTip.Active:=true;

//перевод таблицы в режим добавления записи

DataModule2.main.Append;

//добавление записей

DataModule2.mainFIOmastera.AsInteger:= DataModule2.NewFIOid.AsInteger; //фио мастера

DataModule2.mainModel.AsInteger:= DataModule2.NewModelid.AsInteger; //модель авто

DataModule2.mainVidraboty.AsInteger:= DataModule2.NewVidid.AsInteger; //вид работы

DataModule2.mainTipraboty.AsInteger:= DataModule2.NewTipid.AsInteger; //тип работы

dbedit4.Text := DateToStr(DateTimePicker1.Date);

dbedit5.Text := DateToStr(DateTimePicker2.Date);

dbedit2.Text:= number; //номер авто

dbedit12.Text:= addwork; //дополнительная работа

dbedit15.Text:= FloatToStr(costadd); //дополнительная стоимость

DataModule2.mainCena.Text:= '0';

//сохранение изменений

DataModule2.main.Post;

except

er:=1;

end; end;

procedure TFEdit.Button21Click(Sender: TObject);

begin

FDialog.Show;

if FDialog.Edit1.Text = '1' then begin

DateTimePicker1.Visible:= false;

DateTimePicker2.Visible:= false;

End; end;

procedure TFEdit.Button25Click(Sender: TObject);

begin

with DataModule2.Price do begin

DataModule2.Price.First;

while not DataModule2.Price.Eof do begin

if ((DataModule2.PriceMod.Text = DBLookupComboBox3.Text) and

(DataModule2.PriceVidr.Text = DBLookupComboBox4.Text) and

(DataModule2.PriceTipr.Text = combobox1.Text)) then begin

Edit12.Text := DataModule2.PriceCena.Text;

Edit12.Visible:= true;

end;

DataModule2.Price.Next;

end; end; end;

procedure TFEdit.Button26Click(Sender: TObject);

var s1: string;

begin

if Edit13.Text = '' then

MessageBox(FEdit.Handle,'Сначала укажите номер авто в поле фильтра!','Внимание!!!', MB_OK)

Else begin

FFind.Show;

FFind.Edit2.Text:= Edit13.Text;

s1 := FormatDateTime('dd/mm/yyyy', DataModule2.mainDatapriema.AsDateTime);

FFind.DateTimePicker1.Date:= strtodate(s1) ;

end; end;

procedure TFEdit.Button27Click(Sender: TObject);

begin

with DataModule2.Price do begin

DataModule2.Price.First;

while not DataModule2.Price.Eof do begin

if ((DataModule2.PriceMod.Text = DBLookupComboBox3.Text) and

(DataModule2.PriceVidr.Text = ComboBox3.Text) and

(DataModule2.PriceTipr.Text = combobox2.Text)) then

Edit8.Text := DataModule2.PriceCena.Text;

DataModule2.Price.Next;

end; end; end;

procedure TFEdit.Button22Click(Sender: TObject);

begin

with DataModule2.Price do begin

DataModule2.Price.First;

while not DataModule2.Price.Eof do begin

if ((DataModule2.PriceMod.Text = DBLookupComboBox7.Text) and

(DataModule2.PriceVidr.Text = DBLookupComboBox5.Text) and

(DataModule2.PriceTipr.Text = combobox7.Text)) then begin

Edit14.Text := DataModule2.PriceCena.Text;

Edit14.Visible:= true;

DataModule2.main.Edit;

DataModule2.mainCena.Text:= Edit14.Text;

DataModule2.main.Post;

end;

DataModule2.Price.Next;

end; end; end;

procedure TFEdit.BitBtn1Click(Sender: TObject);

var er:integer;

begin

try

if Edit12.Text <> '' then DataModule2.mainCena.Text:= Edit12.Text;

Edit12.Visible:= false;

if DBEdit12.Text = '' then DBEdit12.Text:= 'Нет';

if DBEdit15.Text = '' then DBEdit15.Text:= '0';

if ((DataModule2.mainModel_avto.Text='') or (DataModule2.mainNavto.Text='') or (DataModule2.mainRabota.Text='') or (DataModule2.mainCena.Text='') or (DataModule2.mainFIO.Text='') or

(DataModule2.mainTipRaboty2.Text=''))

then ShowMessage('В таблице имеется пустое значение поля!')

Else begin

dataModule2.main.Post;

Edit13.Text:= DataModule2.mainNavto.Text;

end;

except

er:=1;

end;

3.3 Технология разработки модуля фильтрации информации

3.3.1 Технология разработки модуля фильтрации по номеру автомобиля

Фильтрация по номеру автомобиля позволяет составить отчет о проделанной работе по данному автомобилю. В отчет можно включить временной интервал. Результаты фильтрации показаны на рисунке 3.8.

Рисунок 3.8 – Фильтр по номеру автомобиля

Программный код, соответствующий процедуре фильтрации информации по номеру автомобиля, представлен в листинге 3.2.

Листинг 3.2 – Фильтр по номеру автомобиля

procedure TFFind.Button1Click(Sender: TObject);

var j: integer; s, s1: string; c1, c: integer;

begin

s := FormatDateTime('mm/dd/yyyy', DateTimePicker1.Date);

for j:= 0 to length(s) do

if s[j]='.' then s[j]:= '/';

s1:=DatetoStr(DateTimePicker1.Date);

// суммирование стоимости дополнительных работ

Edit2.Text:= DataModule2.mainNavto.Text;

DataModule2.main.Active:=true;

DataModule2.main.First;

c1:= 0;

while not DataModule2.main.Eof do begin

if ((DataModule2.mainNavto.AsString = Edit2.Text)

and (DataModule2.mainCost_add.Text <> '0')

and (DataModule2.mainDatapriema.AsString = s1 )) then begin

c1:= c1 + DataModule2.mainCost_add.AsInteger;

end;

DataModule2.main.Next;

end;

Edit1.Text:= IntToStr(c1);

//суммирование стоимости работ, которые не дополнительные

DataModule2.main.First;

while not DataModule2.main.Eof do begin

if ((DataModule2.mainNavto.AsString = Edit2.Text)

and (DataModule2.mainCena.Text <> '0')

and (DataModule2.mainDatapriema.AsString = s1 )) then begin

c:= c + DataModule2.mainCena.AsInteger;

end;

DataModule2.main.Next;

end;

//суммирование общей стоимости работ

c:= c + c1;

Edit3.Text:= IntToStr(c);

//вставка в таблицу результата подсчета

DataModule2.rezerv.Edit;

DataModule2.rezervrezerv.Text:= Edit1.Text;

DataModule2.rezervrezsum.Text:= Edit3.Text;

DataModule2.rezerv.Post;

//фильтр по дате приема

// передача значений фильтра в скл-таблицу для печати отчета

Edit2.Text:= DataModule2.mainNavto.Text;

DataModule2.FiltrPrice.Active:= false;

DataModule2.FiltrPrice.SQL.Clear;

DataModule2.FiltrPrice.SQL.Text:= 'select * from main,models,works, types,masters where (main.model=models.id)and(main.[FIO mastera]=masters.id) and(works.id=types.vid)and(main.[tip raboty]= types.id) and(main.[cena]>0)and(main.[data priema]=#'+s+'#)and(main.[N avto]='+QuotedStr(Edit2.Text)+')';

DataModule2.FiltrPrice.Active:= true;

RvProject2.Execute;

//очистить прошлые результаты таблицы

DataModule2.rezerv.Edit;

DataModule2.rezerv.ClearFields;

DataModule2.rezerv.Post;

end;

Результатом выполнения данной процедуры является отчет о проделанной работе по данному автомобилю, пример которого представлен на рисунке 3.9.

Рисунок 3.9 – Отчет о проделанной работе по данному автомобилю

3.3.2 Технология разработки модуля фильтрации информации об итогах выручки СТО

Фильтрация информации об итогах выручки СТО позволяет составить отчет о проделанной работе определенной бригады. В отчет можно включить временной интервал. Результаты фильтрации показаны на рисунке 3.8.

Рисунок 3.8 – Фильтрация информации об итогах выручки СТО

Программный код, соответствующий процедуре фильтрации об итогах выручки СТО, представлен в листинге 3.3.

Листинг 3.3 – Фильтрация информации об итогах выручки СТО

procedure TFeveryDayItog.Button2Click(Sender: TObject);

var c1: currency; s1:string;

begin

c1:= 0;

DataModule2.main.Active:=true;

DataModule2.main.First;

while not DataModule2.main.Eof do begin

s1:=DatetoStr( FeveryDayItog.DateTimePicker1.Date);

if DataModule2.mainDatapriema.AsString =s1 then begin

c1:= c1 + DataModule2.mainCena.AsCurrency + DataModule2.mainCost_add.AsCurrency;

end;

DataModule2.main.Next;

end;

Edit1.Text:= CurrToStr(c1) + ',00 руб.';

end;

//подсчет прибыли за день по мастеру

procedure TFeveryDayItog.Button3Click(Sender: TObject);

var c2: currency; s2, s1 :string;

begin

c2:= 0;

DataModule2.main.Active:=true;

DataModule2.main.First;

while not DataModule2.main.Eof do begin

s1:=DatetoStr(FeveryDayItog.DateTimePicker1.Date);

s2:= FeveryDayItog.ComboBox1.Text;

if ((DataModule2.mainDatapriema.AsString =s1)

and (DataModule2.mainFIO.AsString = s2)) then

c2:= c2 + DataModule2.mainCena.AsCurrency + DataModule2.mainCost_add.AsCurrency;

DataModule2.main.Next;

end;

Edit2.Text:= CurrToStr(c2) + ',00 руб.';

end;

procedure TFeveryDayItog.FormClick(Sender: TObject);

begin

DataModule2.main.Refresh;

ComboBox1.Refresh;

end;

procedure TFeveryDayItog.Button5Click(Sender: TObject);

var j: integer;

begin i:=0;

//фильтр по дате приема

s := FormatDateTime('mm/dd/yyyy', DateTimePicker1.Date);

for j:= 0 to length(s) do

if s[j]='.' then s[j]:= '/';

DBGrid2.Visible:= true;

DBNavigator2.Visible:= true;

DataModule2.FiltrDateMaster.Active:= false;

DataModule2.FiltrDateMaster.SQL.Clear;

DataModule2.FiltrDateMaster.SQL.Text:=

'select * from main,models,works,types,masters where (main.model= models.id) and(main.[FIO mastera]=masters.id)and(works.id=types.vid) and(main.[tip raboty]=types.id)and(main.[data priema]=#'+s+'#)';

DataModule2.FiltrDateMaster.Active:= true;

if DataModule2.FiltrDateMaster.Active = true then i:=1;

end;

procedure TFeveryDayItog.Button1Click(Sender: TObject);

var j: integer;

begin

s := FormatDateTime('mm/dd/yyyy', DateTimePicker1.Date);

for j:= 1 to 10 do

if s[j]='.' then s[j]:= '/';

// фильтр по дате и мастеру

DBGrid2.Visible:= true;

DBNavigator2.Visible:= true;

DataModule2.FiltrDateMaster.Active:= false;

DataModule2.FiltrDateMaster.SQL.Clear;

DataModule2.FiltrDateMaster.SQL.Text:= 'select [master],[N avto], works.[Vid raboty],types.[Tip raboty]from main,masters,works,types where (main.[FIO mastera]=masters.id)and(works.id=types.vid)and(main.[tip raboty]=types.id)and(main.[vid raboty]=works.id)and[data priema]= #'+s+'#';

DataModule2.FiltrDateMaster.Active:= true;

if DataModule2.FiltrDateMaster.Active = true then

i:=1;

end;

procedure TFeveryDayItog.Button6Click(Sender: TObject);

begin

if i<>1 then ShowMessage('Не указан диапазон фильтра!')

else

RvProject3.Execute;

end;

Результатом выполнения данной процедуры является отчет об итогах выручки СТО за указанные сутки, пример которого представлен на рисунке 3.10.

Рисунок 3.10 – Отчет об итогах выручки СТО

3.3.3 Технология разработки модуля фильтрации прайс-листа

Фильтрация прайс-листа позволяет упростить работу с довольно большими объемами ценовых категорий и вывести на печать конкретную информацию. Результаты фильтрации показаны на рисунке 3.11.

Рисунок 3.11 – Фильтрация прайс-листа

Программный код, соответствующий процедуре фильтрации прайс-листа, представлен в листинге 3.4.

Листинг 3.4 – Фильтрация прайс-листа

procedure TFprice.FormActivate(Sender: TObject);

var i: integer;

begin

ComboBox1.Clear;

ComboBox2.Clear;

DBNavigator2.Visible:= false;

//заполнение списка видами работ

DataModule2.works.First;

while not (DataModule2.works.Eof) do begin

combobox1.Items.Add(DataModule2.works['vid raboty']);

DataModule2.works.Next;

end;

//заполнение списка моделями

DataModule2.models.First;

while not (DataModule2.models.Eof) do begin

combobox2.Items.Add(DataModule2.models['model']);

DataModule2.models.Next;

end;

end;

procedure TFprice.FormClick(Sender: TObject);

begin

DataModule2.main.Refresh;

end;

procedure TFprice.FormCreate(Sender: TObject);

begin

DataModule2.main.Refresh;

end;

procedure TFprice.Button4Click(Sender: TObject);

begin

//фильтр по моделям авто

DBGrid2.Visible:= false;

DBNavigator2.Visible:= true;

DataModule2.priceModel.Active:= false;

DataModule2.priceModel.SQL.Clear;

DataModule2.priceModel.SQL.Text:=

'select distinct * from price,models,works,types where (price.model=models.id)and(price.vid=works.id)and(price.tip=types.id)and (models.model='+QuotedStr(Combobox2.Text)+')';

DataModule2.priceModel.Active:= true;

if DataModule2.priceModel.Active= true then

i:= 1;

end;

procedure TFprice.Button2Click(Sender: TObject);

begin

//убрать фильтрацию

DBGrid2.Visible:= true;

DBNavigator2.Visible:= false;

end;

procedure TFprice.Button3Click(Sender: TObject);

begin

//фильтр по виду работ

DBGrid2.Visible:= false;

DBNavigator2.Visible:= true;

DataModule2.priceModel.Active:= false;

DataModule2.priceModel.SQL.Clear;

DataModule2.priceModel.SQL.Text:=

'select distinct * from price,models,works,types where (price.model=models.id)and(price.vid=works.id)and(price.tip=types.id)and(works.[vid raboty]='+QuotedStr(ComboBox1.Text)+')';

DataModule2.priceModel.Active:= true;

if DataModule2.priceModel.Active = true then

i:= 1;

end;

procedure TFprice.Button1Click(Sender: TObject);

begin

//фильтр по видам работ и модели авто

DBGrid2.Visible:= false;

DBNavigator2.Visible:= true;

DataModule2.priceModel.Active:= false;

DataModule2.priceModel.SQL.Clear;

DataModule2.priceModel.SQL.Text:=

'select distinct * from price,models,works,types where (price.model=models.id)and(price.vid=works.id)and(price.tip=types.id)and(models.model='+QuotedStr(Combobox2.Text)+')and(works.[vid raboty]='+QuotedStr(ComboBox1.Text)+')';

DataModule2.priceModel.Active:= true;

if DataModule2.priceModel.Active = true then

i:= 1;

end;

procedure TFprice.Button6Click(Sender: TObject);

begin

if i<>1 then

ShowMessage('Не указан диапазон фильтра!')

else

RvProject5.Execute;

end;

procedure TFprice.Button7Click(Sender: TObject);

begin

FEditPrice.Show;

end;

procedure TFprice.Button8Click(Sender: TObject);

begin

if i<>1 then

ShowMessage('Не указан диапазон фильтра!')

else

RvProject1.Execute;

end;

procedure TFprice.Button9Click(Sender: TObject);

begin

if i<>1 then ShowMessage('Не указан диапазон фильтра!')

else RvProject6.Execute;

end;

Результатом выполнения данной процедуры является печать прайс-листа, где данными для фильтрации являлись значения модели автомобиля и вид работ. Пример фильтрации представлен на рисунке 3.12.

Рисунок 3.12 – Печать прайс-листа по результатам фильтрации

3.4 Технология разработки модуля планирования работ по ремонту и обслуживанию автомобиля

Модуль планирования работ по ремонту и обслуживанию автомобиля позволяет определить степень загруженности бригад и выбрать из списка свободных бригад команду, которая будет работать с новым заказом. График работ также можно просмотреть за определенную дату, как показано на рисунке 3.13.

Рисунок 3.13 – График загруженности бригад автосервисного центра

Программный код, соответствующий процедуре формирования графика загруженности бригад автосервисного центра, представлен в листинге 3.5.

Листинг 3.5 – Процедура формирования графика загруженности бригад автосервисного центра

procedure TGrafic.FormActivate(Sender: TObject);

var j: integer;

begin

master_string:='';

s_now := FormatDateTime('mm/dd/yyyy',Date);

for j:= 0 to length(s_now) do

if s_now[j]='.' then s_now[j]:= '/';

DataModule2.Plan.Active := false;

DataModule2.Plan.SQL.Clear;

DataModule2.Plan.SQL.Text :=

'select distinct [master],[N avto],works.[Vid raboty],types.[Tip] from main,masters,works,types where (main.[FIO mastera]=masters.id)and(works.id=types.vid)and(main.[tip raboty]=types.id)and main.[data priema]=#'+s_now+'#';

DataModule2.Plan.Active := true;

DataModule2.Plan2.Active := false;

DataModule2.Plan2.SQL.Clear;

DataModule2.Plan2.SQL.Text :='select distinct [master] from main, masters, works,types where (main.[FIO mastera]=masters.id)and (works.id= types.vid)and(main.[tip raboty]=types.id)and main.[data priema]=#'+s_now+'#';

DataModule2.Plan2.Active := true;

end;

procedure TGrafic.BitBtn2Click(Sender: TObject);

var i: integer; id:integer; st:string;

begin

s := FormatDateTime('mm/dd/yyyy', DateTimePicker1.Date);

for i:= 0 to length(s) do

if s[i]='.' then s[i]:= '/';

DataModule2.Plan.Active := false;

DataModule2.Plan.SQL.Clear;

DataModule2.Plan.SQL.Text :=

'select distinct [master],[N avto],works.[Vid raboty],types.[Tip] from main,masters,works,types where (main.[FIO mastera]=masters.id)and(works.id=types.vid)and(main.[tip raboty]=types.id)and main.[data priema]=#'+s+'#';

DataModule2.Plan.Active := true;

DataModule2.Plan2.Active := false;

DataModule2.Plan2.SQL.Clear;

DataModule2.Plan2.SQL.Text :=

'select distinct [master] from main,masters,works,types where (main.[FIO mastera]=masters.id)and(works.id=types.vid)and(main.[tip raboty]=types.id) and main.[data priema]=#'+s+'#';

DataModule2.Plan2.Active := true;

with DataModule2.free do begin

Active:=false;

st:='';

DataModule2.Plan2.First;

for id:=1 to DataModule2.plan2.RecordCount do begin

if id=1 then st:=QuotedStr(DataModule2.Plan2master.AsString) else st:=st+','+QuotedStr(DataModule2.Plan2master.AsString);

DataModule2.Plan2.Next;

end;

SQL.Text:=

'select [master],id from masters where not([master] in ('+st+'))';

Active:=true;

end;

end;

3.5 Технология разработки процедуры создания резервной копии базы данных

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

Рисунок 3.14 – Форма для создания резервной копии базы данных

Программный код создание резервной копии базы данных представлен в листинге 3.6.

Листинг 3.6 – Создание резервной копии базы данных

procedure TFservis.Button1Click(Sender: TObject);

begin

CopyFile('bd.mdb','reserve.bac',false); end;

procedure TFservis.Button2Click(Sender: TObject);

begin

FDialogZagr.Show; end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]