Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Poyasnitelnaya_zapiska_Ispravlennaya.docx
Скачиваний:
36
Добавлен:
10.02.2015
Размер:
481.35 Кб
Скачать

Приложение 1. Листинг программы

unitUnit1;

interface

uses

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

Dialogs, DB, Grids, DBGrids, ComCtrls, ADODB, Menus, StdCtrls,DateUtils;

type

TForm1 = class(TForm)

ADOConnection1: TADOConnection;

PageControl1: TPageControl;

free_room_query: TADOQuery;

reservations_query: TADOQuery;

busy_room_query: TADOQuery;

clients_query: TADOQuery;

room_query: TADOQuery;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

free_DBGrid: TDBGrid;

TabSheet3: TTabSheet;

TabSheet4: TTabSheet;

TabSheet5: TTabSheet;

free_room_DS: TDataSource;

reservations_DS: TDataSource;

busy_room_DS: TDataSource;

clients_DS: TDataSource;

room_DS: TDataSource;

find_room_query: TADOQuery;

query: TADOQuery;

DateTimePicker1: TDateTimePicker;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Button2: TButton;

Label6: TLabel;

Label7: TLabel;

reservations_PopupMenu: TPopupMenu;

reservations_PMButton: TMenuItem;

Label8: TLabel;

busy_PopupMenu: TPopupMenu;

busy_PMButton: TMenuItem;

clients_PopupMenu: TPopupMenu;

clients_PMButton: TMenuItem;

room_PopupMenu: TPopupMenu;

room_PMButton: TMenuItem;

Label18: TLabel;

TabSheet6: TTabSheet;

Button4: TButton;

Edit12: TEdit;

ComboBox2: TComboBox;

ComboBox1: TComboBox;

Edit11: TEdit;

room_DBGrid: TDBGrid;

Label14: TLabel;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

clients_DBGrid: TDBGrid;

Label10: TLabel;

Label11: TLabel;

Label12: TLabel;

Label13: TLabel;

Label9: TLabel;

Edit10: TEdit;

Edit9: TEdit;

Edit8: TEdit;

Edit7: TEdit;

Edit6: TEdit;

Button3: TButton;

busy_DBGrid: TDBGrid;

reservations_DBGrid: TDBGrid;

DateTimePicker2: TDateTimePicker;

DateTimePicker3: TDateTimePicker;

Button5: TButton;

free_DBGrid2: TDBGrid;

Label21: TLabel;

Label22: TLabel;

Label23: TLabel;

Label24: TLabel;

Label25: TLabel;

Edit13: TEdit;

Edit14: TEdit;

Edit15: TEdit;

Edit16: TEdit;

Edit17: TEdit;

Label27: TLabel;

Label28: TLabel;

free_room_query2: TADOQuery;

free_room_DS2: TDataSource;

Label19: TLabel;

Label20: TLabel;

Label29: TLabel;

Label30: TLabel;

Label31: TLabel;

Label32: TLabel;

Label33: TLabel;

Label34: TLabel;

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure DBGridMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure room_PMButtonClick(Sender: TObject);

procedure clients_PMButtonClick(Sender: TObject);

procedure busy_PMButtonClick(Sender: TObject);

procedure reservations_PMButtonClick(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure DateTimePicker3Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure DateTimePicker2Change(Sender: TObject);

procedure DateTimePicker1Change(Sender: TObject);

procedure free_DBGridCellClick(Column: TColumn);

procedure free_DBGrid2CellClick(Column: TColumn);

procedure Edit13Change(Sender: TObject);

procedure Edit1Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1:TForm1;

oldSkidka:boolean; //будет использоваться для проверки изменения скидки

implementation

{$R*.dfm}

//добавление клиента в базу

procedure TForm1.Button3Click(Sender: TObject);

begin

// проверяем заполненность полей

if (Trim(Edit6.Text) = '') then begin

ShowMessage('Не указана фамилия!');

abort;

end;

if (Trim(Edit7.Text) = '') then begin

ShowMessage('Не указано имя!');

abort;

end;

if (Trim(Edit8.Text) = '') then begin

ShowMessage('Не указано Отчество!');

abort;

end;

if (Trim(Edit9.Text) = '') then begin

ShowMessage('Не указаны паспортные данные!');

abort;

end;

with query do

begin

SQL.Clear;

SQL.Add('insertintoКлиенты (Фамилия, Имя, Отчество, Паспортные_данные, Комментарий)');

SQL.Add( ' VALUES( :fam, :name, :ot, :pasport, :comment)');

Parameters.ParamByName('fam').Value:=Trim(Edit6.Text);

Parameters.ParamByName('name').Value:=Trim(Edit7.Text);

Parameters.ParamByName('ot').Value:=Trim(Edit8.Text);

Parameters.ParamByName('pasport').Value:=Trim(Edit9.Text);

Parameters.ParamByName('comment').Value:=Trim(Edit10.Text);

ExecSql;

end;

//обновляем данные в таблице

clients_query.Close;

clients_query.Open;

//делаем активной добавленную строку

clients_DBGrid.DataSource.DataSet.RecNo:= clients_DBGrid.DataSource.DataSet.RecordCount;

//очищаем поля ввода данных

Edit6.Text:='';

Edit7.Text:='';

Edit8.Text:='';

Edit9.Text:='';

Edit10.Text:='';

end;

//добавление гостиничного номера в базу

procedure TForm1.Button4Click(Sender: TObject);

var

int:integer;

begin

// проверяем правильность заполненния полей

if (Trim(Edit11.Text) = '') then begin

ShowMessage('Не указан номер!');

abort;

end;

if not TryStrToInt(Trim(Edit11.Text),int) then begin

ShowMessage('Номер должен быть целым положительным числом, отличным от 0!');

abort;

end

else

if StrToInt(Trim(Edit11.Text))<=0 then begin

ShowMessage('Номер должен быть целым положительным числом, отличным от 0!');

abort;

end;

if Trim(ComboBox1.Text) = '' then begin

ShowMessage('Не указана вместимость номера!');

abort;

end;

if Trim(ComboBox2.Text) = '' then begin

ShowMessage('Не указана комфортность номера!');

abort;

end;

if (Trim(Edit12.Text) = '') then begin

ShowMessage('Не указана стоимость номера!');

abort;

end;

if TryStrToInt(Trim(Edit12.Text),int)=false then begin

ShowMessage('Не правильно введена стоимость номера!');

abort;

end;

if StrToInt(Trim(Edit12.Text))<0 then begin

ShowMessage('Цена не может быть отрицательной !');

abort;

end;

if StrToInt(Trim(Edit12.Text))=0 then begin

ShowMessage('Цена не может быть равна 0!');

abort;

end;

query.SQL.Clear;

query.SQL.Add('select Номер from Номера where Номер= :nomer');

query.Parameters.ParamByName('nomer').Value:= StrToInt(Trim(Edit11.Text));

query.Open;

if query.Fields[0].AsString <> '' then begin

ShowMessage('Такой номер уже есть в базе!');

abort;

end;

with query do

begin

SQL.Clear;

SQL.Add('insertintoНомера (Номер, Количество_человек, Комфортность, Цена)');

SQL.Add( ' VALUES( :nomer, :kolvo, :comf, :cost)');

Parameters.ParamByName('nomer').Value:=StrToInt(Trim(Edit11.Text));

Parameters.ParamByName('kolvo').Value:=StrToInt(Trim(ComboBox1.Text));

Parameters.ParamByName('comf').Value:=Trim(ComboBox2.Text);

Parameters.ParamByName('cost').Value:=StrToInt(Trim(Edit12.Text));

ExecSql;

end;

//обновляем данные в таблице

room_query.Close;

room_query.Open;

free_room_query.Close;

free_room_query.Open;

free_room_query2.Close;

free_room_query2.Open;

//делаем активной добавленную строку

room_DBGrid.DataSource.DataSet.RecNo:= room_DBGrid.DataSource.DataSet.RecordCount;

//очищаем поля ввода данных

Edit11.Text:='';

Edit12.Text:='';

ComboBox1.ItemIndex:=-1;

ComboBox2.ItemIndex:=-1;

end;

//Выводим контекстное меню с кнопкой удаления клиента или материала

//в зависимости от таблицы по которой мы кликнуты

//контекстное меню будет отображаться только над ячейками таблицы

procedure TForm1.DBGridMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (Button = mbRight) then begin

if ((Sender as TDBGrid).MouseCoord(X, Y).Y <> -1 ) and

((Sender as TDBGrid).MouseCoord(X, Y).Y <> 0 ) then begin

if (Sender as TDBGrid).Name = 'reservations_DBGrid' then

reservations_PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);

if (Sender as TDBGrid).Name = 'busy_DBGrid' then

busy_PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);

if (Sender as TDBGrid).Name = 'clients_DBGrid' then

clients_PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);

if (Sender as TDBGrid).Name = 'room_DBGrid' then

room_PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);

end;

end;

end;

procedure TForm1.room_PMButtonClick(Sender: TObject);

var

IDRow: Integer;

begin

IDRow:=room_DBGrid.DataSource.DataSet.RecNo; //индекс строки таблицы

//предупредительное сообщение

ifMessageBox(

Self.Handle

, PChar('Вы действительно хотите удалить номер из базы?')

, PChar('Подтверждение удаления')

, MB_YESNOCANCEL+MB_ICONINFORMATION

) = mrYesthen

begin

// запрос на удаление

with query do

begin

SQL.Clear;

SQL.Add('delete from Номера where Номер= :id');

Parameters.ParamByName('id').Value:=room_query.FieldByName('Номер').AsInteger;

ExecSql;

//обновление данных

room_query.Close;

room_query.Open;

//переходим в позицию над удалённой строкой

room_DBGrid.DataSource.DataSet.RecNo:= IDRow - 1 ;

end;

end;

end;

procedure TForm1.clients_PMButtonClick(Sender: TObject);

var

IDRow: Integer;

begin

IDRow:=clients_DBGrid.DataSource.DataSet.RecNo; //индекс строки таблицы

//предупредительное сообщение

ifMessageBox(

Self.Handle

, PChar('Вы действительно хотите удалить клиента из базы?')

, PChar('Подтверждение удаления')

, MB_YESNOCANCEL+MB_ICONINFORMATION

) = mrYesthen

begin

// запрос на удаление

with query do

begin

SQL.Clear;

SQL.Add('delete from Клиенты where ID_клиента= :id');

Parameters.ParamByName('id').Value:=clients_query.FieldByName('ID_клиента').AsInteger;

ExecSql;

//обновление данных

clients_query.Close;

clients_query.Open;

//переходим в позицию над удалённой строкой

clients_DBGrid.DataSource.DataSet.RecNo:= IDRow - 1 ;

end;

end;

end;

procedure TForm1.busy_PMButtonClick(Sender: TObject);

var

IDRow: Integer;

begin

IDRow:=busy_DBGrid.DataSource.DataSet.RecNo; //индекс строки таблицы

//предупредительное сообщение

ifMessageBox(

Self.Handle

, PChar('Освободить номер?')

, PChar('Подтверждение удаления')

, MB_YESNOCANCEL + MB_ICONINFORMATION

) = mrYes then

begin

// запрос на удаление

withquerydo

begin

SQL.Clear;

SQL.Add('updateПоселениеsetДата_освобождения = :datwhereID_поселения = :id');

Parameters.ParamByName('dat').Value:=Date;

Parameters.ParamByName('id').Value:=busy_room_query.FieldByName('ID_поселения').AsInteger;

ExecSql;

end;

//обновление данных

busy_room_query.Close;

busy_room_query.Open;

free_room_query.Close;

free_room_query.Open;

free_room_query2.Close;

free_room_query2.Open;

//переходим в позицию над удалённой строкой

if busy_DBGrid.DataSource.DataSet.RecNo>1 then

busy_DBGrid.DataSource.DataSet.RecNo:= IDRow - 1 ;

end;

end;

procedure TForm1.reservations_PMButtonClick(Sender: TObject);

var

IDRow: Integer;

begin

IDRow:=reservations_DBGrid.DataSource.DataSet.RecNo; //индекс строки таблицы

//предупредительное сообщение

ifMessageBox(

Self.Handle

, PChar('Освободить номер?')

, PChar('Подтверждение удаления')

, MB_YESNOCANCEL + MB_ICONINFORMATION

) = mrYes then

begin

// запрос на удаление

withquerydo

begin

SQL.Clear;

SQL.Add('delete from Бронирование where ID_брони= :id');

Parameters.ParamByName('id').Value:=reservations_query.FieldByName('ID_брони').AsInteger;

ExecSql;

//обновление данных

reservations_query.Close;

reservations_query.Open;

free_room_query.Close;

free_room_query.Open;

free_room_query2.Close;

free_room_query2.Open;

//переходим в позицию над удалённой строкой

if reservations_DBGrid.DataSource.DataSet.RecNo>1 then

reservations_DBGrid.DataSource.DataSet.RecNo:= IDRow - 1 ;

end;

end;

end;

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

procedure TForm1.Button2Click(Sender: TObject);

var

id_client,cost_one_day,total_cost,days_count : integer;

skidka:boolean;

dat: TDateTime;

begin

// проверяем заполненность полей

if (Trim(Edit1.Text) = '') then begin

ShowMessage('Не указана фамилия!');

abort;

end;

if (Trim(Edit2.Text) = '') then begin

ShowMessage('Не указано имя!');

abort;

end;

if (Trim(Edit3.Text) = '') then begin

ShowMessage('Не указано Отчество!');

abort;

end;

if (Trim(Edit4.Text) = '') then begin

ShowMessage('Не указаны паспортные данные!');

abort;

end;

//ищем клиента в базе по введённым данным

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit1.Text;

Parameters.ParamByName('name').Value := Edit2.Text;

Parameters.ParamByName('ot').Value := Edit3.Text;

Parameters.ParamByName('passport').Value := Edit4.Text;

Open;

end;

id_client:= query.Fields[0].AsInteger;

skidka:=query.Fields[1].AsBoolean;

dat:= DateTimePicker1.DateTime;

days_count:= DaysBetween(dat,date);

cost_one_day:= free_DBGrid.Fields[3].AsInteger;

total_cost:= cost_one_day * days_count;

if skidka=true then

total_cost:=Round(total_cost * 0.9);

label7.Caption:=IntToStr(total_cost);

//если клиента нет в базе

if id_client<=0 then begin

with query do

begin

SQL.Clear;

SQL.Add('insertintoКлиенты (Фамилия, Имя, Отчество, Паспортные_данные, Комментарий)');

SQL.Add( ' VALUES( :fam, :name, :ot, :pasport, :comment)');

Parameters.ParamByName('fam').Value:=Trim(Edit1.Text);

Parameters.ParamByName('name').Value:=Trim(Edit2.Text);

Parameters.ParamByName('ot').Value:=Trim(Edit3.Text);

Parameters.ParamByName('pasport').Value:=Trim(Edit4.Text);

Parameters.ParamByName('comment').Value:=Trim(Edit5.Text);

ExecSql;

end;

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit1.Text;

Parameters.ParamByName('name').Value := Edit2.Text;

Parameters.ParamByName('ot').Value := Edit3.Text;

Parameters.ParamByName('passport').Value := Edit4.Text;

Open;

end;

id_client:= query.Fields[0].AsInteger; //запоминаем ID нового клиента

//обновляем данные в таблице клиентов

clients_query.Close;

clients_query.Open;

end;

//проверяем сколько раз клиент останавливался в гостиннице

With query do begin

Close;

SQL.Clear;

SQL.Add('select count(ID_клиента) from Поселение where ID_клиента = :client ');

Parameters.ParamByName('client').Value := id_client;

Open;

end;

//если больше 2 раз, то делаем его постоянным клиентом

if query.Fields[0].AsInteger>2 then begin

With query do begin

Close;

SQL.Clear;

SQL.Add('update Клиенты set Постоянный_клиент = True where ID_клиента = :client ');

Parameters.ParamByName('client').Value := id_client;

ExecSql;

end;

end;

with query do

begin

SQL.Clear;

SQL.Add('insertintoПоселение (ID_клиента, Номер, Дата_поселения,Дата_Освобождения, Оплачено, Примечание)');

SQL.Add( ' VALUES( :client, :nomer, :dat,:dat1, :oplata, :comment)');

Parameters.ParamByName('client').Value:=id_client;

Parameters.ParamByName('nomer').Value:=free_DBGrid.Fields[0].AsInteger;

Parameters.ParamByName('dat').Value:= date;

Parameters.ParamByName('comment').Value:=Edit5.Text;

Parameters.ParamByName('oplata').Value:=StrToInt(Label7.Caption);

Parameters.ParamByName('dat1').Value:=DateTimePicker1.DateTime;

ExecSql;

end;

free_room_query.Close;

free_room_query.Open;

busy_room_query.Close;

busy_room_query.Open;

reservations_query.Close;

reservations_query.Open;

free_room_query2.Close;

free_room_query2.Open;

//очищаем поля ввода данных

Edit1.Text:='';

Edit2.Text:='';

Edit3.Text:='';

Edit4.Text:='';

Edit5.Text:='';

end;

//бронирование номеров

procedure TForm1.Button5Click(Sender: TObject);

var

id_client,cost_one_day,total_cost,days_count : integer;

skidka:boolean;

dat_in,dat_out: TDateTime;

begin

// проверяем заполненность полей

if (Trim(Edit13.Text) = '') then begin

ShowMessage('Не указана фамилия!');

abort;

end;

if (Trim(Edit14.Text) = '') then begin

ShowMessage('Не указано имя!');

abort;

end;

if (Trim(Edit15.Text) = '') then begin

ShowMessage('Не указано Отчество!');

abort;

end;

if (Trim(Edit16.Text) = '') then begin

ShowMessage('Не указаны паспортные данные!');

abort;

end;

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit13.Text;

Parameters.ParamByName('name').Value := Edit14.Text;

Parameters.ParamByName('ot').Value := Edit15.Text;

Parameters.ParamByName('passport').Value := Edit16.Text;

Open;

end;

id_client:= query.Fields[0].AsInteger;

skidka:=query.Fields[1].AsBoolean;

dat_in:= DateTimePicker2.DateTime;

dat_out:= DateTimePicker3.DateTime;

days_count:= DaysBetween(dat_out,dat_in);

cost_one_day:= free_DBGrid2.Fields[3].AsInteger;

total_cost:= cost_one_day * days_count;

if skidka=true then

total_cost:=Round(total_cost * 0.9);

label28.Caption:=IntToStr(total_cost);

if id_client<=0 then begin

with query do

begin

SQL.Clear;

SQL.Add('insertintoКлиенты (Фамилия, Имя, Отчество, Паспортные_данные, Комментарий)');

SQL.Add( ' VALUES( :fam, :name, :ot, :pasport, :comment)');

Parameters.ParamByName('fam').Value:=Trim(Edit13.Text);

Parameters.ParamByName('name').Value:=Trim(Edit14.Text);

Parameters.ParamByName('ot').Value:=Trim(Edit15.Text);

Parameters.ParamByName('pasport').Value:=Trim(Edit16.Text);

Parameters.ParamByName('comment').Value:=Trim(Edit17.Text);

ExecSql;

end;

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Trim(Edit13.Text);

Parameters.ParamByName('name').Value := Trim(Edit14.Text);

Parameters.ParamByName('ot').Value := Trim(Edit15.Text);

Parameters.ParamByName('passport').Value := Trim(Edit16.Text);

Open;

end;

id_client:= query.Fields[0].AsInteger;

//обновляем данные в таблице клиентов

clients_query.Close;

clients_query.Open;

end;

with query do

begin

SQL.Clear;

SQL.Add('insertintoБронирование (ID_клиента, Номер, Дата_поселения,Дата_Освобождения, Оплачено, Примечание)');

SQL.Add( ' VALUES( :client, :nomer, :dat,:dat2, :oplata, :comment)');

Parameters.ParamByName('client').Value:=id_client;

Parameters.ParamByName('nomer').Value:=free_DBGrid2.Fields[0].AsInteger;

Parameters.ParamByName('dat').Value:= DateTimePicker2.DateTime;

Parameters.ParamByName('dat2').Value:= DateTimePicker3.DateTime;

Parameters.ParamByName('comment').Value:=Edit17.Text;

Parameters.ParamByName('oplata').Value:=StrToInt(Label28.Caption);

ExecSql;

end;

free_room_query.Close;

free_room_query.Open;

busy_room_query.Close;

busy_room_query.Open;

reservations_query.Close;

reservations_query.Open;

free_room_query2.Close;

free_room_query2.Open;

//очищаем поля ввода данных

Edit1.Text:='';

Edit2.Text:='';

Edit3.Text:='';

Edit4.Text:='';

Edit5.Text:='';

end;

//при выборе даты прибывания в гостиннице будет изменяться список доступных номеров,

//так как некоторые номера могут быть забронированны на выбраннную дату

//также перерасчитываем стоимость проживания при изменении количества дней

procedure TForm1.DateTimePicker3Change(Sender: TObject);

var

id_client,cost_one_day,total_cost,days_count : integer;

skidka:boolean;

dat: TDateTime;

begin

with free_room_query2 do

begin

SQL.Clear;

SQL.Add('select Номер, Количество_человек, Комфортность, Цена');

SQL.Add('from Номера where Номер not in (select Номер from Поселение');

SQL.Add('where Дата_освобождения > :dat1) and (Номер not in (select Номер');

SQL.Add('from Бронирование where Дата_освобождения > :dat2) or');

SQL.Add(' Номер not in (select Номер from Бронирование where Дата_поселения < :dat3))');

SQL.Add('order by Номер');

Parameters.ParamByName('dat1').Value:=DateTimePicker2.DateTime;

Parameters.ParamByName('dat2').Value:=DateTimePicker2.DateTime;

Parameters.ParamByName('dat3').Value:=DateTimePicker3.DateTime;

Open;

end;

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit13.Text;

Parameters.ParamByName('name').Value := Edit14.Text;

Parameters.ParamByName('ot').Value := Edit15.Text;

Parameters.ParamByName('passport').Value := Edit16.Text;

Open;

end;

id_client:= query.Fields[0].AsInteger;

skidka:=query.Fields[1].AsBoolean;

oldSkidka:=skidka;

dat:= DateTimePicker3.DateTime;

days_count:= DaysBetween(dat,DateTimePicker2.DateTime);

cost_one_day:= free_DBGrid2.Fields[3].AsInteger;

total_cost:= cost_one_day * days_count;

if skidka=true then

total_cost:=Round(total_cost * 0.9);

label28.Caption:=IntToStr(total_cost);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

//задаём текущее время

//и минимальную дату для выбора

DateTimePicker1.MinDate:= Date+1;

DateTimePicker2.MinDate:= Date;

DateTimePicker3.MinDate:= Date+1;

DateTimePicker1.DateTime:=Date+1;

DateTimePicker2.DateTime:=Date;

DateTimePicker3.DateTime:=Date+1;

with free_room_query do

begin

SQL.Clear;

SQL.Add('selectНомер, Количество_человек, Комфортность, Цена');

SQL.Add('from Номера where Номер not in (select Номер from Поселение');

SQL.Add('where Дата_освобождения > :dat1) and (Номер not in (select Номер');

SQL.Add('from Бронирование where Дата_освобождения > :dat2) or');

SQL.Add(' Номер not in (select Номер from Бронирование where Дата_поселения < :dat3))');

SQL.Add('order by Номер');

Parameters.ParamByName('dat1').Value:=date;

Parameters.ParamByName('dat2').Value:=date;

Parameters.ParamByName('dat3').Value:=DateTimePicker3.DateTime;

Open;

end;

with free_room_query2 do

begin

SQL.Clear;

SQL.Add('select Номер, Количество_человек, Комфортность, Цена');

SQL.Add('from Номера where Номер not in (select Номер from Поселение');

SQL.Add('where Дата_освобождения > :dat1) and (Номер not in (select Номер');

SQL.Add('from Бронирование where Дата_освобождения > :dat2) or');

SQL.Add(' Номер not in (select Номер from Бронирование where Дата_поселения < :dat3))');

SQL.Add('order by Номер');

Parameters.ParamByName('dat1').Value:=DateTimePicker2.DateTime;

Parameters.ParamByName('dat2').Value:=DateTimePicker2.DateTime;

Parameters.ParamByName('dat3').Value:=DateTimePicker3.DateTime;

Open;

end;

with reservations_query do

begin

SQL.Clear;

SQL.Add('select Бронирование.ID_брони, Номера.Номер,Номера.Комфортность, ');

SQL.Add('Клиенты.Фамилия + Клиенты.Имя + Клиенты.ОтчествоasКлиент, ');

SQL.Add('Бронирование.Дата_поселения, Бронирование.Дата_освобождения, ');

SQL.Add('Бронирование.ПримечаниеfromНомера,Бронирование,Клиентыwhere');

SQL.Add('Бронирование.Номер = Номера.НомерandБронирование.ID_клиента = Клиенты.ID_клиента');

SQL.Add('andБронирование.ID_брониin(selectID_брониfromБронированиеwhere');

SQL.Add('Дата_освобождения > :dat)');

SQL.Add('order by Номера.Номер');

Parameters.ParamByName('dat').Value:=Date();

Open;

end;

with busy_room_query do

begin

SQL.Clear;

SQL.Add('select Поселение.ID_поселения, Номера.Номер,Номера.Комфортность, ');

SQL.Add('Клиенты.Фамилия + Клиенты.Имя + Клиенты.ОтчествоasКлиент, ');

SQL.Add('Поселение.Дата_поселения, Поселение.Дата_освобождения, ');

SQL.Add('Поселение.ПримечаниеfromНомера,Поселение,Клиентыwhere');

SQL.Add('Поселение.Номер = Номера.НомерandПоселение.ID_клиента = Клиенты.ID_клиента');

SQL.Add('andПоселение.Дата_освобождения > :dat');

SQL.Add('order by Номера.Номер');

Parameters.ParamByName('dat').Value:=date();

Open;

end;

end;

procedure TForm1.DateTimePicker2Change(Sender: TObject);

var

id_client,cost_one_day,total_cost,days_count : integer;

skidka:boolean;

dat: TDateTime;

begin

if DateTimePicker2.DateTime>=DateTimePicker3.DateTime then

DateTimePicker3.DateTime:=DateTimePicker2.DateTime+1;

with free_room_query2 do

begin

SQL.Clear;

SQL.Add('select Номер, Количество_человек, Комфортность, Цена');

SQL.Add('from Номера where Номер not in (select Номер from Поселение');

SQL.Add('where Дата_освобождения > :dat1) and (Номер not in (select Номер');

SQL.Add('from Бронирование where Дата_освобождения > :dat2) or');

SQL.Add(' Номер not in (select Номер from Бронирование where Дата_поселения < :dat3))');

SQL.Add('order by Номер');

Parameters.ParamByName('dat1').Value:=DateTimePicker2.DateTime;

Parameters.ParamByName('dat2').Value:=DateTimePicker2.DateTime;

Parameters.ParamByName('dat3').Value:=DateTimePicker3.DateTime;

Open;

end;

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit13.Text;

Parameters.ParamByName('name').Value := Edit14.Text;

Parameters.ParamByName('ot').Value := Edit15.Text;

Parameters.ParamByName('passport').Value := Edit16.Text;

Open;

end;

id_client:= query.Fields[0].AsInteger;

skidka:=query.Fields[1].AsBoolean;

oldSkidka:=skidka;

dat:= DateTimePicker3.DateTime;

days_count:= DaysBetween(dat,DateTimePicker2.DateTime);

cost_one_day:= free_DBGrid2.Fields[3].AsInteger;

total_cost:= cost_one_day * days_count;

if skidka=true then

total_cost:=Round(total_cost * 0.9);

label28.Caption:=IntToStr(total_cost);

end;

procedure TForm1.DateTimePicker1Change(Sender: TObject);

var

id_client,cost_one_day,total_cost,days_count : integer;

skidka:boolean;

dat: TDateTime;

begin

with free_room_query do

begin

SQL.Clear;

SQL.Add('select Номер, Количество_человек, Комфортность, Цена');

SQL.Add('from Номера where Номер not in (select Номер from Поселение');

SQL.Add('where Дата_освобождения > :dat1) and (Номер not in (select Номер');

SQL.Add('from Бронирование where Дата_освобождения > :dat2) or');

SQL.Add(' Номер not in (select Номер from Бронирование where Дата_поселения < :dat3))');

SQL.Add('order by Номер');

Parameters.ParamByName('dat1').Value:=date;

Parameters.ParamByName('dat2').Value:=date;

Parameters.ParamByName('dat3').Value:=DateTimePicker3.DateTime;

Open;

end;

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit1.Text;

Parameters.ParamByName('name').Value := Edit2.Text;

Parameters.ParamByName('ot').Value := Edit3.Text;

Parameters.ParamByName('passport').Value := Edit4.Text;

Open;

end;

id_client:= query.Fields[0].AsInteger;

skidka:=query.Fields[1].AsBoolean;

oldSkidka:=skidka;

dat:= DateTimePicker1.DateTime;

days_count:= DaysBetween(dat,date);

cost_one_day:= free_DBGrid.Fields[3].AsInteger;

total_cost:= cost_one_day * days_count;

if skidka=true then

total_cost:=Round(total_cost * 0.9);

label7.Caption:=IntToStr(total_cost);

end;

//при клике по другому номеру пересчитываем стоимость проживания

//также учитываем возможную скидку

procedureTForm1.free_DBGridCellClick(Column:TColumn);

var

id_client,cost_one_day,total_cost,days_count : integer;

skidka:boolean;

dat: TDateTime;

begin

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit1.Text;

Parameters.ParamByName('name').Value := Edit2.Text;

Parameters.ParamByName('ot').Value := Edit3.Text;

Parameters.ParamByName('passport').Value := Edit4.Text;

Open;

end;

id_client:= query.Fields[0].AsInteger;

skidka:=query.Fields[1].AsBoolean;

oldSkidka:=skidka;

dat:= DateTimePicker1.DateTime;

days_count:= DaysBetween(dat,date);

cost_one_day:= free_DBGrid.Fields[3].AsInteger;

total_cost:= cost_one_day * days_count;

if skidka=true then

total_cost:=Round(total_cost * 0.9);

label7.Caption:=IntToStr(total_cost);

end;

procedure TForm1.free_DBGrid2CellClick(Column: TColumn);

var

id_client,cost_one_day,total_cost,days_count : integer;

skidka:boolean;

dat: TDateTime;

begin

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit13.Text;

Parameters.ParamByName('name').Value := Edit14.Text;

Parameters.ParamByName('ot').Value := Edit15.Text;

Parameters.ParamByName('passport').Value := Edit16.Text;

Open;

end;

id_client:= query.Fields[0].AsInteger;

skidka:=query.Fields[1].AsBoolean;

oldSkidka:=skidka;

dat:= DateTimePicker3.DateTime;

days_count:= DaysBetween(dat,DateTimePicker2.DateTime);

cost_one_day:= free_DBGrid2.Fields[3].AsInteger;

total_cost:= cost_one_day * days_count;

if skidka=true then

total_cost:=Round(total_cost * 0.9);

label28.Caption:=IntToStr(total_cost);

end;

procedure TForm1.Edit13Change(Sender: TObject);

var

skidka:boolean;

begin

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit13.Text;

Parameters.ParamByName('name').Value := Edit14.Text;

Parameters.ParamByName('ot').Value := Edit15.Text;

Parameters.ParamByName('passport').Value := Edit16.Text;

Open;

end;

skidka:=query.Fields[1].AsBoolean;

if oldSkidka<>skidka then begin

if skidka=true then

label28.Caption:=IntToStr(Round(StrToInt(label28.Caption)*0.9))

else

label28.Caption:=IntToStr(Round(StrToInt(label28.Caption)/0.9));

end;

oldSkidka:=skidka;

end;

//изменение стоимости при вводе новых данных о клиенте(от возможной скидки)

procedure TForm1.Edit1Change(Sender: TObject);

var

skidka:boolean;

begin

With query do begin

Close;

SQL.Clear;

SQL.Add('select ID_клиента,Постоянный_клиент from Клиенты where Фамилия = :fam ');

SQL.Add('and Имя = :name and Отчество = :ot and Паспортные_данные =:passport');

Parameters.ParamByName('fam').Value := Edit1.Text;

Parameters.ParamByName('name').Value := Edit2.Text;

Parameters.ParamByName('ot').Value := Edit3.Text;

Parameters.ParamByName('passport').Value := Edit4.Text;

Open;

end;

skidka:=query.Fields[1].AsBoolean;

if oldSkidka<>skidka then begin

if skidka=true then

label7.Caption:=IntToStr(Round(StrToInt(label7.Caption)*0.9))

else

label7.Caption:=IntToStr(Round(StrToInt(label7.Caption)/0.9));

end;

oldSkidka:=skidka;

end;

end.

76

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