酒店客房餐饮管理系统功用完善,能管理普通酒店的客房住宿和餐饮等效劳。本系统采用DELPHI和SQL SERVER工具开发,分为前台和后台管理。前台与后台管理顺序相对独立,均共用一个数据库。下面对该系统的部份功用和模块以及代码停止剖析。
一.前台管理
1. 数据模块
该模块是整个顺序数据的提供者,以及包括大局部的处置函数和完成功用。 单元文件名:u_data.pas,数据模块名:DM_main。 局部代码剖析:
前往指表中某字段的最大值,前往值为整型。因此该函数只能运用字段为整型的表。 function TDM_main.GetMaxId(aTable,aField:string):integer; var
sSql:string; begin
Result:=0;
sSql:='select max(%s) from %s'; with Q_getmax do begin
SQL.Text:=Format(sSql,[aField,aTable]); Open;
if not IsEmpty then
Result:=Fields[0].AsInteger+1; Close; end; end;
接上去这个函数也是前往最大值,但是其为一个订单的最大编号为字符型。 function TDM_main.GetMaxOrderId:string; var
id:String; count:Integer; begin
with Q_count_order do begin Open;
count:=Fields[0].Value; Close; end;
id:='000'+IntToStr(count); id:=Copy(id, length(id)-3, 4);
id:='F'+FormatDateTime('yymmdd',now)+id; Result:=id; end;
系统登陆函数:在停止系统的操作处置时,必需登陆。该函数对用户输入的用户名和密码数据库验证。其密码是停止加密的〔加密模块稍后剖析〕 function TDM_main.Login(user, passwd:String):String; var
Flag:Boolean; begin
if Database.Connected=false then Database.Connected:=True;
passwd:=Copy(passwd+passwd, 1, 10); //加密处置 passwd:=Encrypt(passwd, 111); with Q_login do begin Close;
Params.ParamValues['ID']:=user;
Params.ParamValues['PASSWD']:=passwd; Open; //在用户请中查询该用户和密码能否存在 Flag:=( not IsEmpty); if Flag then begin
Login:=FieldValues['NAME']; IsPass:=Flag; end else begin
Login:='';
Application.MessageBox('请重新输入!', '登录失败', MB_OK); end; Close; end; end;
系统登出:
procedure TDM_main.Logout; begin
Database.Connected:=False; //断开数据库的衔接 end;
2. 加密模块:
单元文件名:crypt.pas。 复杂的加密算法。
const
C1 = 52845; C2 = 22719;
function Encrypt( S: String; Key: Word): String; //S:加密的字符串;Key:密钥 var
I: Integer; j: Integer; begin
Result := S;
for I := 1 to Length(S) do begin
Result[I] := char(byte(S[I]) xor (Key shr 8)); Key := (byte(Result[I]) + Key) * C1 + C2; end;
s:=Result; Result:='';
for i:=1 to length(s) do begin
j:=Integer(s[i]);
Result:=Result + Char(65+(j div 26))+Char(65+(j mod 26)); end; end;
3. 主模块
系统的主界面,包括系统登陆。在没有停止登陆之前4个功用按钮为灰色。
第一个按钮为客房管理,其次是餐饮管理,再次是客户查询,最后是收费管理。
4. 客房管理模块
客房管理包括客房预定,入住,调整。其界面如下:
操作引见:
预定:首先在证件编号文体框中输入相关的证件编号,按回车键,显示如下窗口:
输入完整后单击添加那么前往上一个界面,相关的数据将自动填写。然后在左边选择相应的客房等级。在网格中将显示该等级的一切闲暇房号。选择一个房间,再点击〝新建〞按钮,然后点击〝添加〞。客房预定终了。 入住:在证件编号文体框中输入相关的证件编号,按回车键。假设该客户曾经预定那么自动显示信息,否那么将弹出下面的窗口要求输入信息。
5. 餐饮管理
包括选菜、点菜、打单:
下面是其相代码说明:
procedure TF_foodorder.btnOkClick(Sender: TObject); var
id:integer; total:single; begin
if sid='' then begin
B_neworderClick(nil); end;
//订单明细
id:=DM_main.GetMaxId('order_detail','id'); with Q_foodetail do begin
Append;
Fields[0].AsInteger:=id; Fields[1].AsString:=sid;
Fields[2].AsString:=dbtext1.Caption; Fields[3].AsString:=edtNum.Text; Fields[4].AsString:=dbtext4.Caption; Post;
DisableControls; Close; Open;
EnableControls; end;
//更新总订单的总金额
with DM_main.T_foodorder do begin Edit;
total:=DM_main.GetSumPrice(sid); Fields[3].AsFloat:=total; Post; end; end;
//撤销选择的一项菜目
procedure TF_foodorder.btnCancelClick(Sender: TObject); var
total:Single; begin
with Q_foodetail do
begin
if IsEmpty then Exit;
if not Active then begin
ParamByName('sid').Value:=sid; Open; end; Delete; end;
total:=DM_main.GetSumPrice(sid); with DM_main.T_foodorder do begin
if not Active then Open; Locate('id',sid,[]); Edit;
Fields[3].AsFloat:=total; Post; end; end;
procedure TF_foodorder.B_neworderClick(Sender: TObject); begin
//新建总订单
sid:=DM_main.GetMaxOrderId; with DM_main.T_foodorder do begin Open; Append;
Fields[0].AsString:=sid;
Fields[1].AsString:=DateTimeToStr(Now); Fields[2].AsString:=Trim(edtName.Text); Post; end;
with Q_foodetail do begin Close;
ParamByName('sid').Value:=sid; Prepare; Open; end; end;
打单:票据例如如下。
二.后台管理
1. 数据模块
该模块是整个顺序数据的提供者,以及包括大局部的处置函数和完成功用。 单元文件名:u_data.pas,数据模块名:DM_main。 局部代码剖析:
设置前台操作员的密码:
procedure TDM_main.SetOperatorPassword(password:String); begin
password:=Copy(password+password, 1, 10); password:=Encrypt(password, 111); //加密单元 with T_operator do begin Edit;
FieldValues['PASSWD']:=password; end; end;
依据客房ID 挑选客房:
procedure TDM_main.SetModifyFilter(RoomID:String); begin
with T_room_modify do begin Close;
if length(RoomID)>0 then begin
Filter:='ID='''+RoomID+''''; Filtered:=True; end else
Filtered:=False; Open; end; end;
取得客房级别:
procedure TDM_main.GetRoomLevel(RoomLevel:TStrings); begin
RoomLevel.Clear;
RoomLevel.Add('全部级别'); with Q_room_level do begin Open; First;
while not Eof do begin
RoomLevel.Add(FieldValues['DESCRIPT']); Next; end; Close; end; end;
客房统计图完成函数:
//StarDate:末尾日期;EndDate:完毕日期;
procedure TDM_main.GetRoomStat(StartDate,EndDate:TDate; TimeStep, StatType:Boolean;RoomLevel:Integer; BarSeries:TBarSeries); var
StatResult:integer; MidDate:TDate; StatLabel:String; begin
BarSeries.Clear;
while StartDate StatResult:=SumTurnover(StartDate, MidDate) else StatResult:=SumUsedRoom(StartDate, MidDate, RoomLevel); if TimeStep then StatLabel:=FormatDateTime('dd', StartDate)+'日' else StatLabel:=FormatDateTime('mm', StartDate)+'月'; BarSeries.AddY(StatResult,StatLabel); StartDate:=MidDate; end; end; 换算下个月〔日〕日期: function TDM_main.GetNextDate(StartDate:TDate;TimeStep:Boolean):TDate; var TimeYear,TimeMonth:String; begin if TimeStep then Result:=StartDate+1 else begin TimeYear:=FormatDateTime('yyyy', StartDate); TimeMonth:=FormatDateTime('mm', StartDate); if TimeMonth='12' then begin TimeYear:=IntToStr(StrToInt(TimeYear)+1); TimeMonth:='01'; end else TimeMonth:=IntToStr(StrToInt(TimeMonth)+1); Result:=StrToDate(TimeYear+'-'+TimeMonth+'-01'); end; end; 2. 系统登陆模块 该系统登陆将衔接数据库的管理员用户表停止验证: procedure TF_login.b_loginClick(Sender: TObject); var sSql:string; begin if (Trim(i_admin.Text)='')or(i_passwd.Text='') then begin MessageDlg('请输入管理员帐号和密码!', mtWarning, [mbOK, mbHelp], 6); i_admin.SetFocus; Exit; end; sSql:='select * from admin_user where name=''%s'' and passwd=''%s'''; with DM_main.Q_admin do begin SQL.Text:=Format(sSql,[Trim(i_admin.Text),i_passwd.Text]); Open; if IsEmpty then begin MessageDlg('衔接错误!请确认管理员帐号和密码!', mtWarning, [mbOK, mbHelp], 6); i_admin.SetFocus; Exit; end else begin Close; self.Close; end; end; end; 登陆界面: 3. 主控顺序 后台管理主窗口如下: 后台管理顺序采用MDI作风窗体。 并采用事情管理机制ActionList管理一切功用模块的点击事情: procedure TF_main.RoomAddExecute(Sender: TObject); begin Application.CreateForm(TF_add, F_add); RoomAdd.Enabled:=False; end; procedure TF_main.RoomModifyExecute(Sender: TObject); begin Application.CreateForm(TF_modify, F_modify); RoomModify.Enabled:=False; end; procedure TF_main.HelpAboutExecute(Sender: TObject); begin F_about.ShowModal; end; procedure TF_main.SystemExitExecute(Sender: TObject); begin Close; end; procedure TF_main.OtherOperatorExecute(Sender: TObject); begin Application.CreateForm(TF_operator, F_operator); OtherOperator.Enabled:=False; end; procedure TF_main.OtherCodeExecute(Sender: TObject); begin Application.CreateForm(TF_code, F_code); OtherCode.Enabled:=False; end; procedure TF_main.RoomStatExecute(Sender: TObject); begin Application.CreateForm(TF_stat, F_stat); RoomStat.Enabled:=False; end; 后台数据管理包括:客房管理、餐饮管理、操作员管理,基础数据维护等。 4. 客房统计表 该统计表能统计某个时间段的一切客房的营业额和运用频率,经过生成统计表以支持下层决策。如以下图: 〔其实现代码以上有引见〕 因篇幅问题不能全部显示,请点此查看更多更全内容