📄 ucheckin.pas
字号:
unit UCheckIn;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls, Mask, DB, ADODB, Grids,
DBGrids, ImgList, ValEdit;
type
TFCheckIn = class(TForm)
Splitter1: TSplitter;
Panel2: TPanel;
Panel3: TPanel;
LBbianhao: TLabel;
LBBumen: TLabel;
LBloucheng: TLabel;
LBGuige: TLabel;
PageControl1: TPageControl;
LBname: TLabel;
LBsex: TLabel;
LBcountry: TLabel;
LBsfz: TLabel;
LBwork: TLabel;
LBAddress: TLabel;
LBshiyou: TLabel;
CboxCountry: TComboBox;
CBoxShiyou: TComboBox;
Pruzhu: TPanel;
LBCount: TLabel;
LBleibie: TLabel;
LBjibie: TLabel;
LBTime: TLabel;
LBbackTime: TLabel;
LByujia: TLabel;
LBshijia: TLabel;
LBfuwu: TLabel;
LByajin: TLabel;
EDyujia: TEdit;
EDfuwu: TEdit;
EDyajin: TEdit;
CBoxLeibie: TComboBox;
CBoxJibie: TComboBox;
TabSheet1: TTabSheet;
Panel4: TPanel;
LBQname: TLabel;
LBQsex: TLabel;
LBQcountry: TLabel;
LBQsfz: TLabel;
LBQwork: TLabel;
LBQAddress: TLabel;
LBQshiyou: TLabel;
EDQname: TEdit;
CBoxQsex: TComboBox;
CBoxQcountry: TComboBox;
EDQsfz: TEdit;
EDQwork: TEdit;
EDQaddress: TEdit;
CBoxQshiyou: TComboBox;
Panel5: TPanel;
LBQcount: TLabel;
LBQtime: TLabel;
LBQBackTime: TLabel;
LBQyushe: TLabel;
Label53: TLabel;
EDQcount: TEdit;
EDQtime: TEdit;
EDQBackTime: TEdit;
EDQyuse: TEdit;
EDQshiji: TEdit;
EDsfz: TEdit;
CBoxSex: TComboBox;
SBTtime: TSpeedButton;
Pkehu: TPanel;
EDname: TEdit;
EDAddress: TEdit;
EDWork: TEdit;
EDCount: TEdit;
EDshijia: TEdit;
EDBianhao: TEdit;
EDBumen: TComboBox;
CBoxLoucheng: TComboBox;
CBoxGuige: TComboBox;
Panel1: TTabSheet;
Panel6: TPanel;
PanelDengji: TPanel;
Panel7: TPanel;
Panel8: TPanel;
LByixuan: TLabel;
BTok: TBitBtn;
BTCenter: TBitBtn;
BTBack: TBitBtn;
EDtime: TMaskEdit;
EDbackTime: TMaskEdit;
EDbirthday: TEdit;
Label1: TLabel;
Timer1: TTimer;
Label2: TLabel;
EDQbirthday: TEdit;
smallimagelist: TImageList;
Bigimagelist: TImageList;
ListView1: TListView;
Label3: TLabel;
LBbian: TLabel;
Label4: TLabel;
LBceng: TLabel;
Label5: TLabel;
LBgui: TLabel;
Label6: TLabel;
LBjia: TLabel;
ListBox1: TListBox;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
Bevel1: TBevel;
Pnumber: TPanel;
Lcount: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BTBackClick(Sender: TObject);
procedure setTime;
procedure SBTtimeClick(Sender: TObject);
function SFZNumberToxy(SFZNumber:String):String;
function FindSFZ(SFZNumber:String):string;
procedure EDsfzExit(Sender: TObject);
procedure BTokClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BTCenterClick(Sender: TObject);
procedure EDQsfzExit(Sender: TObject);
procedure Readinfo;
procedure DisplayInfo;
procedure clearInfo;
procedure EDBumenChange(Sender: TObject);
procedure CBoxLouchengChange(Sender: TObject);
procedure CBoxGuigeChange(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ListView1DblClick(Sender: TObject);
procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FCheckIn: TFCheckIn;
address:string;
implementation
uses UDmo, Uinfo;
{$R *.dfm}
const
SFZXYL:array [0..17] of integer=(0,7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
procedure TFCheckin.clearInfo;
begin
EDname.Text:=''; EDQname.Text:='';
EDbirthday.Text:=''; EDQbirthday.Text:='';
Cboxsex.ItemIndex:=0; CBoxQsex.ItemIndex:=0;
EDwork.Text:=''; EDQwork.Text:='';
EDaddress.Text:=''; EDQaddress.Text:='';
Cboxshiyou.Text:=''; CBoxQshiyou.Text:='';
EDCount.Text:='1'; EDQcount.Text:='1';
CBoxleibie.ItemIndex:=0; EDsfz.Text:='';
CBoxjibie.ItemIndex:=0; EDQsfz.Text:='';
EDtime.Text:=''; EDQtime.Text:='';
EDbackTime.Text:=''; EDQbacktime.Text:='';
EDyujia.Text:='0.00'; EDQyuse.Text:='0.00';
EDshijia.Text:='0.00'; EDQshiji.Text:='0.00';
EDyajin.Text:='0.00';
EDfuwu.Text:='0.00';
Listbox1.Items.Clear; Pnumber.Caption:='';
Lcount.Tag:=0; LCount.Caption:='0';
Readinfo; BTok.Enabled:=false;
DisplayInfo; BTCenter.Enabled:=false;
end;
//在listview上显示客房信息
procedure TFCheckIn.DisplayInfo;
var
iconindex:integer;
ID:string;
zt:string;
count:integer;
begin
count:=0;
listView1.Clear;
while Dmo.ADOQuery1.Eof=false do //当数据集没有结束时
begin
if EDbumen.Text='客房' then iconIndex:=2//判断所属部门,确定图标下标
else if EDbumen.Text='商务中心' then iconIndex:=7
else if EDbumen.Text='餐饮' then iconIndex:=5
else if EDbumen.Text='桑拿' then iconindex:=6
else iconIndex:=2;
id:=Dmo.ADOQuery1.Fields.Fields[0].DisplayText;
zt:=Dmo.ADOQuery1.Fields.Fields[11].DisplayText;
id:=trimright(id);
zt:=trimright(zt);
if zt='有客' then iconindex:=0
else if zt='清理中' then iconindex:=1
else if zt='待修理' then iconindex:=4
else if zt='有预约' then iconindex:=3;
listView1.Items.Add;
with listview1.Items.Item[count] do //向listview中添加数据
begin
Caption:=id;
ImageIndex:=iconIndex;
SubItems.Add(Dmo.ADOQuery1.Fields.Fields[1].DisplayText);
SubItems.Add(Dmo.ADOQuery1.Fields.Fields[3].displaytext);
Subitems.Add(Dmo.ADOQuery1.Fields.Fields[4].DisplayText);
Subitems.Add(Dmo.ADOQuery1.Fields.Fields[5].DisplayText);
Subitems.Add(Dmo.ADOQuery1.Fields.Fields[6].DisplayText);
Subitems.Add(Dmo.ADOQuery1.Fields.Fields[2].DisplayText);
Subitems.Add(Dmo.ADOQuery1.Fields.Fields[8].DisplayText);
Subitems.Add(Dmo.ADOQuery1.Fields.Fields[11].DisplayText);
end;
count:=count+1;
Dmo.ADOQuery1.Next;
end;
end;
//读取数据库各部门信息
procedure TFCheckIn.Readinfo;
var
bumen:string;
louceng:string;
guige:string;
begin
//设置查询条件
if EDbumen.Text='客房' then bumen:='kf'
else if EDbumen.Text='商务中心' then bumen:='sl'
else if EDbumen.Text='餐饮' then bumen:='cz'
else if EDbumen.Text='桑拿' then bumen:='xs'
else bumen:='yb';
if CBoxloucheng.Text='全部' then louceng:='*'
else louceng:=CBoxloucheng.Text;
if CBoxguige.Text='全部' then guige:='*'
else guige:=CBoxguige.Text;
//添加sql语句
Dmo.ADOQuery1.Close;
Dmo.ADOQuery1.SQL.Clear;
Dmo.ADOQuery1.SQL.Add('select * from Vzhuangtai where');
Dmo.ADOQuery1.SQL.Add('sangpinName like ''%'+bumen+'%''');
if louceng<>'*' then
begin
Dmo.ADOQuery1.SQL.Add('and louceng=:louceng');
Dmo.ADOQuery1.Parameters.ParamByName('louceng').Value:=louceng;
end;
if guige<>'*' then
begin
Dmo.ADOQuery1.SQL.Add('and guige=:guige');
Dmo.ADOQuery1.Parameters.ParamByName('guige').Value:=guige;
end;
Dmo.ADOQuery1.SQL.Add('and zhuangtai=:zhuangtai');
Dmo.ADOQuery1.Parameters.ParamByName('zhuangtai').Value:='清洁';
Dmo.ADOQuery1.Open; //生成数据集
end;
//把旧身份证转换为信身份证号码
function TFCheckIn.SFZNumberToxy(SFZNUmber:String):String;
var
XYM:String;
SfzXy:longint;
i:integer;
begin
XYM:='';
SfzXy:=0;
for i:=1 to 16 do
SfzXy:=SfzXy+StrToInt(copy(SFZNumber,i,1)) * SFZXYL[i];
case (SfzXy mod 11) of
0:XYM:='1';
1:XYM:='0';
2:XYM:='X';
3:XYM:='9';
4:XYM:='8';
5:XYM:='7';
6:XYM:='6';
7:XYM:='5';
8:XYM:='4';
9:XYM:='3';
10:XYM:='2';
end;
SFZNumberToxy:=XYM;
end;
//判断客人的住址,生日,性别
function TFCheckIn.FindSFZ(SFZnumber:string):string;
var
newSFZNumber,QWnumber:string;
begin
//判断身份证是否大于15位
if Length(SFZNumber)>=15 then
begin
QWnumber:=copy(SFZNumber,1,6);//取出身份证前6位
Dmo.ADOQuery1.SQL.Clear;
Dmo.ADOQuery1.SQL.Add('select * from sfz');
Dmo.ADOQuery1.SQL.Add(' where BM='+QWnumber);
Dmo.ADOQuery1.Open;
//EDwork.text:=Dmo.ADOQuery1.Fields.FieldByName('dq').AsString;
if Dmo.ADOQuery1.RecordCount<>1 then
begin
Dmo.ADOQuery1.Close;
QWnumber:=copy(QWnumber,1,4)+'00';
Dmo.ADOQuery1.SQL.Clear;
Dmo.ADOQuery1.SQL.Add('select * from sfz');
Dmo.ADOQuery1.SQL.Add(' where BM='+QWnumber);
Dmo.ADOQuery1.Open;
if Dmo.ADOQuery1.RecordCount<>1 then
begin
Dmo.ADOQuery1.Close;
QWnumber:=Copy(QWnumber,1,2)+'0000';
Dmo.ADOQuery1.SQL.Clear;
Dmo.ADOQuery1.SQL.Add('select * from sfz');
Dmo.ADOQuery1.SQL.Add(' where BM='+QWnumber);
Dmo.ADOQuery1.Open;
end;
end;
if Dmo.ADOQuery1.RecordCount<>1 then//如果返回的结果不唯一
address:=''
else address:=Dmo.ADOQuery1.Fields.Fields[1].DisplayText;
if (length(SFZNumber)<18) then//如果身份证是15位,则先把它转换成新的身份证
begin
NEWSFZnumber:=copy(SFZnumber,1,6)+'19'+copy(SFZnumber,7,9);
NEWSFZnumber:=NEWSFZnumber+SFZNumberToxy(NEWSFZNumber);
end
else NEWSFZnumber:=SFZnumber;
end else showmessage('身份证号码有误,请重新输入');
FindSfz:=NEWSFZnumber;
end;
//设置时间
procedure TFCheckIn.setTime;
begin
EDtime.Text:=FormatDateTime('yyyy-mm-dd hh:nn:ss',NOW);
EDbacktime.Text:=FormatDateTime('yyyy-mm-dd 12:00:00',NOW+1);
EDQtime.Text:=FormatDateTime('yyyy-mm-dd hh:nn:ss',NOW);
EDQbackTime.Text:=FormatDateTime('yyyy-mm-dd hh:nn:ss',NOW+1);
end;
procedure TFCheckIn.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
//返回按钮
procedure TFCheckIn.BTBackClick(Sender: TObject);
begin
Close;
end;
//刷新按钮
procedure TFCheckIn.SBTtimeClick(Sender: TObject);
begin
SetTime;
end;
//当EDSfz遗失焦点的时候
procedure TFCheckIn.EDsfzExit(Sender: TObject);
var
NEWsfzNumber:string;
begin
NEWsfzNumber:=findSFZ(EDsfz.Text);
if length(NEWsfzNumber)<15 then
begin
exit;
EDsfz.SetFocus;
end;
EDBirthday.Text:=copy(NEWSFZnumber,7,4)+'-'+
copy(NEWSFZnumber,11,2)+'-'+copy(NEWSFZNumber,13,2); //判断生日
if (strToint(copy(NEWSFZnumber,17,1)) mod 2)=0 then //判断性别
CBoxsex.ItemIndex:=1
else CBoxsex.ItemIndex:=0;
EDaddress.Text:=address;
end;
//激活按钮事件,开始写入数据库
procedure TFCheckIn.BTokClick(Sender: TObject);
var
str:string;
i:integer;
zh:string;
xiaofei:string;
ID:string;
begin
try
Dmo.ADOQuery1.Close;
Dmo.ADOQuery1.SQL.Clear;
//判断顾客是否来过
Dmo.ADOQuery1.SQL.Add('select * from binkeInfo where sfz=:SFZ');
Dmo.ADOQuery1.Parameters.ParamByName('sfz').Value:=EDsfz.Text;
Dmo.ADOQuery1.Open;
//如果顾客来过更新他的一些信息
if Dmo.ADOQuery1.RecordCount=1 then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -