- •Глава 1. Теоретические основы разработки программных продуктов 5
- •Глава 2. Разработка программного продукта «Гостиница» 21
- •Введение
- •Глава 1. Теоретические основы разработки программных продуктов
- •1.1. Назначение и область применения разработки
- •1.2. Установление требований к разрабатываемой системе
- •1.3. Анализ существующих разработок
- •Глава 2. Разработка программного продукта «Гостиница»
- •2.1. Описание и обоснование выбора состава технических и программных средств разработки
- •2.2. Описание алгоритма программы
- •2.3. Руководство разработчика
- •2.4. Руководство пользователя
- •Заключение
- •Список использованной литературы
- •Приложение 1. Листинг программы
Приложение 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.