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

📄 uclient.~pas

📁 delphi简单的考勤系统 使用tcp ip 协议 包括服务器端和客户端 使用了 ClientSocket和ServerSocket组件
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
unit uClient;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, Buttons, ComCtrls, Mask, ScktComp,IniFiles,
  DB, ADODB, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdTime;

type
  TFrClient = class(TForm)
    GroupBox1: TGroupBox;
    StringGrid1: TStringGrid;
    Panel1: TPanel;
    Label1: TLabel;
    StatusBar1: TStatusBar;
    CBox_ID: TComboBox;
    Label2: TLabel;
    Ed_Pwd: TEdit;
    Btn_login: TSpeedButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Ed_host: TLabeledEdit;
    Ed_port: TLabeledEdit;
    Btn_Go: TSpeedButton;
    Btn_Over: TSpeedButton;
    ClientSocket1: TClientSocket;
    Btn_History: TSpeedButton;
    Label4: TLabel;
    DatetimePicker1: TDateTimePicker;
    ADOQuery1: TADOQuery;
    CBox_local: TCheckBox;
    CBox_Record: TCheckBox;
    CBox_Time: TCheckBox;
    IdTime1: TIdTime;
    ADOConnection1: TADOConnection;
    Btn_Search: TBitBtn;
    procedure Btn_loginClick(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure Btn_GoClick(Sender: TObject);
    procedure Btn_OverClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Btn_HistoryClick(Sender: TObject);
    procedure Btn_SearchClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrClient: TFrClient;
  MiniFile: TiniFile;
  Function Search(tempID:string;tempstatus:string):bool;
  procedure worked(str:string);
  procedure working;
implementation

{$R *.dfm}
procedure TFrClient.Btn_loginClick(Sender: TObject);
begin
    if CBox_ID.Text='' then exit;
    if ((CBox_local.Checked) and (Btn_login.Caption='登录')) then
       begin
          ADOQuery1.Connection:=FrClient.ADOConnection1;
          With ADOQuery1 do
             begin
               Close;
               SQL.Clear;
               SQL.Add('select * from Client');
               SQL.Add('where 员工编号='+''''+CBox_ID.Text+'''');
               SQL.Add('and 登录口令='+''''+Ed_pwd.Text+'''');
               Open;
             end;
          if ADOQuery1.RecordCount>0 then
             begin
               Showmessage('本地登录成功,你可以浏览你的考勤历史记录!');
               Btn_History.Enabled:=True;
               Btn_Search.Enabled:=True;
               Statusbar1.Panels[0].Text:='本地登录完成!';
               CBox_ID.Enabled:=False;
             end
          else Showmessage('本地登录失败!');
          Exit;
       end;
    if Btn_login.Caption='登录' then
    begin
    Clientsocket1.Host:=Ed_host.Text;
    Clientsocket1.Port:=strtoint(Ed_port.text);
    Clientsocket1.Active:=True;
    Statusbar1.Panels[0].Text:='开始连接....';
    end
    else
      begin
        Clientsocket1.Active:=False;
        Statusbar1.Panels[0].Text:='已和服务器断开!';
        Btn_login.Caption:='登录';
        CBox_ID.Enabled:=True;
      end;
end;

procedure TFrClient.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
var Data:Tstringlist;
begin
  try
    Data:=Tstringlist.Create;
    Data.Clear;
    Data.Values['login']:='login';
    Data.Values['user']:=CBox_ID.Text;
    Data.Values['password']:=Ed_Pwd.Text;
    socket.SendText(data.text);
  finally
    data.free;
  end;
end;

procedure TFrClient.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var temp:string;
begin
  temp:=socket.ReceiveText;
  if temp='登录成功' then
     begin
       Btn_Go.Enabled:=True;
       Btn_Over.Enabled:=True;
       Btn_History.Enabled:=True;
       Statusbar1.Panels[0].Text:='登录成功';
       CBox_ID.Enabled:=False;
       Btn_Search.Enabled:=True;
       if not CBox_record.Checked then Ed_Pwd.Text:='';
       Btn_login.Caption:='断开';
     end;
  if temp='登录失败' then
     begin
       Btn_Go.Enabled:=False;
       Btn_Over.Enabled:=False;
       Btn_History.Enabled:=False;
       ClientSocket1.Active:=False;
       Statusbar1.Panels[0].Text:='非法员工,登录失败';
       CBox_ID.Enabled:=True;
       Ed_Pwd.Text:='';
     end;
  showmessage(temp);
end;

procedure TFrClient.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
      Statusbar1.Panels[0].Text:='请稍等,正在连接....';
end;

procedure TFrClient.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var Data:Tstringlist;
begin
  try
    Data:=Tstringlist.Create;
    Data.Clear;
    Data.Values['Close']:='Close';
    Data.Values['user']:=CBox_ID.Text;
    socket.SendText(data.text);
  finally
    data.free;
  end;
end;

procedure TFrClient.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
   if errorcode=10061 then
       if messageBox(Handle,'远程服务器没有启动,是否用本地登录?','登录确认',Mb_iconQuestion or Mb_YesNo)=IDYES then
          begin
           CBox_local.Checked:=True;
           Statusbar1.Panels[0].Text:='正在进行本地登录...';
           Btn_login.Click;
          end
       else Statusbar1.Panels[0].Text:='服务器没有启动,登录失败!';
   errorcode:=0;
end;

procedure TFrClient.Btn_GoClick(Sender: TObject);
var Data:Tstringlist;
begin
  try
    Data:=Tstringlist.Create;
    Data.Clear;
    Data.Values['GoWork']:='GoWork';
    Data.Values['user']:=CBox_ID.Text;
    Clientsocket1.socket.SendText(data.text);
    if CBox_record.Checked then
    begin
    ADOQuery1.Connection:=FrClient.ADOConnection1;
     if Search(CBox_ID.Text,'正在上班') then Exit;
     with ADOQuery1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('insert into Client(员工编号,登录口令,考勤日期,上班时间,上班状态)');
          SQL.Add('values('+''''+CBox_ID.Text+''''+','+''''+Ed_pwd.Text+''''+','+''''+datetostr(date)+''''+','+''''+timetostr(time)+''''+','+'"正在上班"'+')');
          ExecSQL;
        end;
     end;
  finally
    data.free;
    Working;
  end;
end;

procedure TFrClient.Btn_OverClick(Sender: TObject);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -