⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucheckin.pas

📁 前言 随着旅游业的发展
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -