Здавалка
Главная | Обратная связь

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



 

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

На рисунке 2 изображен внешний вид вкладки «Заселение». Данная вкладка служит для ввода данных по клиентам, которые заселяются в гостиницу и изучения свободных номеров. Для записи клиента в базу данных и заселения, необходимо заполнить поля Фамилия, Имя, Отчество, Паспортные данные, а так же примечание, так же нужно выбрать дату освобождения. Слева в таблице «Свободные номера» необходимо выбрать номер комнаты для заселения, которая доступна в данный момент. После всех выше перечисленных действий, будет рассчитана стоимость, и если клиента будут устраивать условия заселения, необходимо нажать кнопку «Заселить» для записи данных в базу.

 

Рисунок 2. Вкладка «Заселение»

 

Так же у клиентов существует возможность забронировать номер на некоторое время. Для этого необходимо переключиться на вкладку «Бронирование». Данная вкладка отображает таблицу со свободными номерами, при бронировании которых, необходимо выбрать в таблице. Так же для того что бы забронировать номер, необходимо ввести дату поселения и дату освобождения комнат. После будет рассчитана стоимость и необходимо будет ввести данные в полях Фамилия, Имя, Отчество, Паспортные данные, примечания. После всех выше перечисленных действий, для того что бы клиент был занесен в базу и номер был забронирован, необходимо нажать кнопку «Забронировать». Вкладка «Бронирование» изображена на рисунке 3.

 

Рисунок 3. Вкладка «Бронирование»

 

Все забронированные номера хранятся в отдельной таблицы базы данных. Программа поддерживает отображение таблицы «Забронированные номера», для удобства пользователя и работы с таблицей. Для того что бы увидеть таблицу «Забронированные номера», необходимо переключиться на вкладку «Забронированные номера». После выбора данной вкладки, в окне программы отобразится таблица по номерам с необходимой информацией, а именно номер комнаты, степень комфортности, клиент, дата подселения, дата освобождения, а так е примечания, необходимые для записи важных деталей по забронированному номеру.

Внешний вид вкладки «Забронированные номера» изображен на рисунке 4.

 

Рисунок 4. Вкладка «Забронированные номера»

 

Так же для удобства необходимо иметь информацию по заселенным номерам. Для этого существует таблица «Заселенные номера». Для того что бы пользователь мог увидеть таблицу, необходимо переключиться на вкладку «Заселенные номера». После переключения на данную вкладку, в окне программы отобразится таблица «Заселенные номера», содержащая всю необходимую информацию, а именно номер комнаты, степень комфортности, клиент, дата поселения, дата освобождения и примечения.

Внешний вид вкладки и таблицы «Заселенные номера» изображен на рисунке 5.

 

Рисунок 5. Вкладка «Заселенные номера»

 

Существует функция по добавлению отдельного клиента в базу данных, а именно в таблицу Клиенты. Кроме отчета по клиентам эта таблица дает понять управляющему, какой клиент является частым и будет ли осуществлена скидка для него. Для того что бы перейти к таблице Клиенты и взаимодействовать с ней, добавляя или удаляя данные, необходимо переключиться на вкладку «Клиенты».

После переключения, а вкладку «Клиенты», пользователю открывается таблица с клиентами, содержащая информацию по каждому клиенты, а также поле «Постоянный клиент». Если клиент является постоянным, в поле стоит утвердительное слово и для этого клиента осуществляются скидки при заселении или бронировании номера.

Так же существует возможность редактирования таблицы «Клиенты». Для добавления клиента, необходимо заполнить поля Фамилия, Имя, Отчество, Паспортные данные, Комментарий, а затем нажать на кнопку «Добавить клиента».

Для удаления клиента из таблицы необходимо выбрать клиента, которого нужно удалить, нажать правой кнопкой мыши, и в контекстном меню выбрать «Удалить клиента». После этого, клиент будет удален из базы данных.

Внешний вид таблицы и вкладки «Клиенты» изображен на рисунке 6.

 

Рисунок 6. Вкладка «Клиенты»

 

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

Для того что бы перейти к таблице «Гостиничные номера», необходимо переключиться на вкладку «Номера». Пользователю отобразится таблица, а так же данные занесенные в нее. Пользователь может редактировать и удалять данные используя мышь и выделяя нужные данные.

Для того что бы добавить номер в таблицу, необходимо заполнить поля Номер, Количество человек, Комфортность, а так же цену. После этого необходимо нажать кнопку «Добавить». После этого вся информация по новой комнате будет занесена в базу данных таблицы «Гостиничные номера».

Внешний вид вкладки «Клиенты» изображен на рисунке 7.

 

Рисунок 7. Вкладка «Номера»


 

Заключение

 

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

База данных для гостиницы, разрабатываемая в рамках данной работы, содержит все необходимые возможности для работы с клиентами гостиницы. Она содержит информацию о клиентах, номерах, дополнительных сервисах. Конечно нельзя говорить о полной автоматизации работы служб гостиницы, но работа с клиентами, благодаря разработанной базе данных становится намного проще.

В результате проделанной работы был построен проект информационной системы регистратуры гостиницы.

Данная система удовлетворяет всем требованиям, предъявленным в задании, и реализует большинство необходимых сотрудникам гостиницы функций.

В результате выполнения работы был сделан вывод, что сегодня внедрение информационных систем может способствовать:

- получению более рациональных вариантов решения управленческих задач за счет внедрения математических методов и интеллектуальных систем и т.д.

- освобождению работников от рутинной работы за счет ее автоматизации;

- обеспечению достоверности информации;

- замене бумажных носителей данных на магнитные и оптические, что приводит к более рациональной организации переработки информации на компьютере и снижению объемов бумажных документов;

- уменьшению затрат на производство продуктов и услуг.


 

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

 

1. Архангельский А.Я. Программирование в Delphi. М.: Бином, 2015. 332с.

2. Архангельский А.Я. Delphi 7 Справочное пособие. М.: Бином-Пресс, 2014. 1024с.

3. Ахметов А.Р. Программирование в Delphi 7. М.: Бином-Пресс, 2013. 780с.

4. Бобровский С.И. Delphi7 – Учебный курс. СПб.: Питер, 2014. 736с.

5. Глушаков С.В. Delphi 2007. М.: Хранитель, 2008. 635с.

6. Глушаков С.В., Клевцов А.Л. Программирование в среде Delphi 7.0. М.: Фолио, 2013. 415с.

7. Дарахвелидзе П.Г., Марков Е.П. Delphi 2005 для Win32 наиболее полное руководство. СПб.: БХВ-Петербург, 2015. 618c.

8. Ефимов C.Л. Управление персоналом: гостиничный бизнес. М. ТрансЛит, 2008. 681с.

9. Жуков А.В. Изучаем Delphi. СПб.: Питер, 2011. 352с.

10. Локир К. Гордон Д. Управление проектами. Ступени высшего мастерства. М. Гревцов Паблишер, 2008. 816с.

11. Локк Д. Основы управления проектами. М. Hippo, 2014. 739с.

12. Мазур И.И., Шапиро В.Д., Ольдерогге Н.Г., Полковников A.B. Управление проектами. М. Омега-Л, 2009. 479с.

13. Маслобоев А.В. Delphi. СПб.: БХВ-Петербург, 2015. 496с.

14. Нагимова З.А. Управление персоналом на предприятиях гостиничного бизнеса: Формирование кадровой политики гостиничного предприятия. СПб.: Питер, 2014. 813с.

15. Стивенс Р.А. Delphi. Готовые алгоритмы. М.: ДМК пресс, 2011. 384с.

16. Сухарев М.В. Основы Delphi. Профессиональный подход. М.: Наука и техника, 2014. 600 c.

17. Фаронов В.В. Delphi. Программирование на языке высокого уровня. СПб.: Питер, 2007. 640с.

18. Фленов М.В. Программирование в Delphi глазами хакера + CD. СПб.: BHV-Санкт-Петербург, 2014. 330с.

19. Хузятов Ш.Ш. Delphi 7. Основные компоненты и элементы языка программирования. Набережные Челны: издательство КамПИ, 2015. 116 с.

20. Шумаков П.В. Delphi 3 и разработка приложений баз данных. М.: Нолидж, 2008. 704c.

 

 


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

 

unit Unit1;

 

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('insert into Клиенты (Фамилия, Имя, Отчество, Паспортные_данные, Комментарий)');

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('insert into Номера (Номер, Количество_человек, Комфортность, Цена)');

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; //индекс строки таблицы

 

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

if MessageBox(

Self.Handle

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

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

, MB_YESNOCANCEL + MB_ICONINFORMATION

) = mrYes then

 

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; //индекс строки таблицы

 

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

if MessageBox(

Self.Handle

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

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

, MB_YESNOCANCEL + MB_ICONINFORMATION

) = mrYes then

 

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; //индекс строки таблицы

 

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

if MessageBox(

Self.Handle

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

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

, MB_YESNOCANCEL + MB_ICONINFORMATION

) = mrYes then

 

begin

 

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

with query do

begin

SQL.Clear;

SQL.Add('update Поселение set Дата_освобождения = :dat where ID_поселения = :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; //индекс строки таблицы

 

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

if MessageBox(

Self.Handle

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

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

, MB_YESNOCANCEL + MB_ICONINFORMATION

) = mrYes then

 

begin

 

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

with query do

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('insert into Клиенты (Фамилия, Имя, Отчество, Паспортные_данные, Комментарий)');

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('insert into Поселение (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('insert into Клиенты (Фамилия, Имя, Отчество, Паспортные_данные, Комментарий)');

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('insert into Бронирование (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 (select ID_брони 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;

 

 

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

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

procedure TForm1.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.

 

[В1]Мне не нравится согласование. Фраз «разработка автоматизированной информационной системы «Гостиница» звучала бы лучше

[В2]Чьей?

[В3]







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.