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

📄 userver.~pas

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls, ExtCtrls, Buttons, ComCtrls, Grids, DB,IniFiles,
  ADODB, IdBaseComponent, IdComponent, IdTCPServer, IdTimeServer, Psock,
  NMFngr;

type
  TFr_Server = class(TForm)
    ServerSocket1: TServerSocket;
    GroupBox1: TGroupBox;
    Panel1: TPanel;
    Label1: TLabel;
    Ed_IP: TEdit;
    Ed_port: TEdit;
    Label2: TLabel;
    StatusBar1: TStatusBar;
    Btn_SetPort: TSpeedButton;
    GroupBox2: TGroupBox;
    StringGrid1: TStringGrid;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    ListBox1: TListBox;
    Panel2: TPanel;
    StringGrid2: TStringGrid;
    Btn_Control: TSpeedButton;
    Memo1: TMemo;
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
    DateTimePicker1: TDateTimePicker;
    Label3: TLabel;
    IdTimeServer1: TIdTimeServer;
    Btn_Search: TBitBtn;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    Label4: TLabel;
    Label5: TLabel;
    Ed_manaName: TLabeledEdit;
    Ed_manaPwd: TLabeledEdit;
    Btn_Server: TBitBtn;
    Ed_name: TLabeledEdit;
    Ed_pwd: TLabeledEdit;
    Btn_user: TBitBtn;
    Ed_ID: TLabeledEdit;
    CheckBox1: TCheckBox;
    Btn_clear: TBitBtn;
    Btn_del: TBitBtn;
    NMFinger1: TNMFinger;
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Btn_ControlClick(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Btn_SetPortClick(Sender: TObject);
    procedure Btn_ServerClick(Sender: TObject);
    procedure Btn_clearClick(Sender: TObject);
    procedure Btn_userClick(Sender: TObject);
    procedure Btn_delClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Ed_manaNameKeyPress(Sender: TObject; var Key: Char);
    procedure Ed_manaPwdKeyPress(Sender: TObject; var Key: Char);
    procedure Ed_IDKeyPress(Sender: TObject; var Key: Char);
    procedure Ed_pwdKeyPress(Sender: TObject; var Key: Char);
    procedure Ed_nameKeyPress(Sender: TObject; var Key: Char);
    procedure Btn_SearchClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Fr_Server: TFr_Server;
  MiniFile: TiniFile;
  procedure working;
  procedure worked;
  Function Search(tempID:string;tempstatus:string):bool;
  Function EmpLogin(tempID:string;tempPwd:string):bool;
  Function Temptime(TempID:string):String;
  Function ReadLog(tempdate:Tdate):string;
implementation

{$R *.dfm}

procedure TFr_Server.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var Data:Tstringlist;
begin
   try
    Data:=Tstringlist.Create;
    Data.Text:=Socket.ReceiveText;
    if data.Text='' then exit;
    if data.Values['login']='login' then
       if EmpLogin(data.Values['user'],data.Values['password']) then
         begin
           socket.SendText('登录成功');
           Listbox1.Items.Insert(0,'已经通过编号:<'+data.Values['user']+'>员工的登录');
         end
       else
         begin
           socket.SendText('登录失败');
           Listbox1.Items.Insert(0,'编号:<'+data.Values['user']+'>的员工登录失败');
         end;
    if data.Values['Close']='Close' then
       Listbox1.Items.Insert(0,'编号:<'+data.Values['user']+'>的员工已经断开'+datetimetostr(now));
    if data.Values['GoWork']='GoWork' then
      try
         if Search(data.Values['user'],'正在上班') then
            begin
              Socket.SendText('错误:你正在上班中!');
              Exit;
            end;
         with ADOQuery1 do
           begin
             Close;
             SQL.Clear;
             SQL.Add('insert into Server(员工编号,考勤日期,上班时间,上班状态)');
             SQL.Add('values('+''''+data.Values['user']+''''+','+''''+datetostr(date)+''''+','+''''+timetostr(time)+''''+','+'"正在上班"'+')');
             ExecSQL;
             Socket.SendText('完成上班操作!');
             Listbox1.Items.Insert(0,'编号:<'+data.Values['user']+'>的员工已经上班'+datetimetostr(now));
           end;
      except
        Socket.SendText('添加考勤记录时出错');
      end;
    if data.Values['OverWork']='OverWork' then
      try
         if not Search(data.Values['user'],'正在上班') then
            begin
              Socket.SendText('错误:你没有在上班中!');
              Exit;
            end;
         with ADOQuery1 do
           begin
             Close;
             SQL.Clear;
             SQL.Add('update Server set 下班时间='+''''+timetostr(time)+''''+','+'上班状态='+'"上班结束"');
             SQL.Add(',合计时长='+''''+timetoStr(Time-Strtotime(Temptime(data.Values['user'])))+'''');
             SQL.Add('where 员工编号='+''''+data.Values['user']+'''');
             SQL.Add('and 上班状态='+'"正在上班"');
             ExecSQL;
             Socket.SendText('完成下班操作!');
             Listbox1.Items.Insert(0,'编号:<'+data.Values['user']+'>的员工已经下班'+datetimetostr(now));
           end;
      except
        Socket.SendText('下班考勤时出错!');
      end;
   finally
    data.Free;
    working;
   end;
end;

procedure TFr_Server.Btn_ControlClick(Sender: TObject);
begin
  ServerSocket1.Port:=strtoint(Ed_port.Text);
  ServerSocket1.Active:=not ServerSocket1.Active;
  if serversocket1.Active then
     Listbox1.Items.Insert(0,'服务器已启动:'+datetimetostr(now))
  else
     Listbox1.Items.Insert(0,'服务器已停止:'+datetimetostr(now))
end;

procedure TFr_Server.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   Listbox1.Items.Insert(0,'有客户机请求登录'+datetimetostr(now));
end;

procedure TFr_Server.FormCreate(Sender: TObject);
begin
  if fileexists(extractfilepath(application.exename)+'Server.ini') then
  begin
  MiniFile:=Tinifile.Create(extractfilepath(application.exename)+'Server.ini');
      Ed_port.Text:=MiniFile.ReadString('SET','port','');
  MiniFile.Free;
  end;
  if not fileexists(extractfilepath(application.ExeName)+'Db\db_Server.mdb') then
     begin
     Btn_Control.Enabled:=False;
     Btn_SetPort.Enabled:=False;
     MessageBox(handle,Pchar('数据库文件找不到,请检查'+extractfilepath(application.exename)+'Db目录下的数据库文件'),'数据库文件丢失',Mb_iconinformation);
     exit;
     end;
  ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'Db\db_Server.mdb'+';Persist Security Info=False';
  ADOConnection1.Connected:=True;
end;
procedure working;
var i,j:integer;
begin
  With Fr_server.ADOQuery1 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select Server.员工编号,Employee.员工姓名 from Server,Employee');
       SQL.Add('where Server.上班状态='+'"正在上班"');
       SQL.Add('and Server.员工编号=Employee.员工编号');
       open;
     end;
  with Fr_server do
    begin
     for i:=0 to Stringgrid1.RowCount do
        for j:=1 to 3 do
           stringgrid1.Cells[j,i]:='';
     if ADOQuery1.RecordCount>5 then Stringgrid1.RowCount:=ADOQuery1.RecordCount+1;
     if ADOQuery1.RecordCount>0 then
        for i:=1 to ADOQuery1.RecordCount do
           begin
              Stringgrid1.Cells[0,0]:='序号';
              stringgrid1.Cells[1,0]:='员工编号';
              Stringgrid1.Cells[2,0]:='员工姓名';
              Stringgrid1.Cells[0,i]:=inttostr(i);
              Stringgrid1.Cells[1,i]:=AdoQuery1.fieldbyname('员工编号').AsString;
              Stringgrid1.Cells[2,i]:=AdoQuery1.fieldbyname('员工姓名').AsString;
              if not ADOQuery1.Eof then ADOQuery1.Next;
           end;
    end;
end;
procedure worked;
var i,j:integer;
begin
  With Fr_server.ADOQuery1 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select Server.员工编号,Employee.员工姓名,Server.考勤日期,Server.上班时间,Server.下班时间 from Server,Employee');
       SQL.Add('where Server.员工编号=Employee.员工编号');
       SQL.Add('order by Server.员工编号,Server.考勤日期');
       open;
     end;
  with Fr_server do
    begin
     for i:=0 to Stringgrid2.RowCount do
        for j:=1 to 6 do
           stringgrid2.Cells[j,i]:='';
     if ADOQuery1.RecordCount>5 then Stringgrid2.RowCount:=ADOQuery1.RecordCount+1;
     if ADOQuery1.RecordCount>0 then
        for i:=1 to ADOQuery1.RecordCount do
           begin
              Stringgrid2.Cells[0,0]:='序号';
              stringgrid2.Cells[1,0]:='员工姓名';
              Stringgrid2.Cells[2,0]:='考勤日期';
              Stringgrid2.Cells[3,0]:='上班时间';
              stringgrid2.Cells[4,0]:='下班时间';
              Stringgrid2.Cells[5,0]:='员工编号';
              Stringgrid2.Cells[0,i]:=inttostr(i);
              Stringgrid2.Cells[1,i]:=AdoQuery1.fieldbyname('员工姓名').AsString;
              Stringgrid2.Cells[2,i]:=AdoQuery1.fieldbyname('考勤日期').AsString;
              Stringgrid2.Cells[3,i]:=AdoQuery1.fieldbyname('上班时间').AsString;
              Stringgrid2.Cells[4,i]:=AdoQuery1.fieldbyname('下班时间').AsString;
              Stringgrid2.Cells[5,i]:=AdoQuery1.fieldbyname('员工编号').AsString;
              if not ADOQuery1.Eof then ADOQuery1.Next;
           end;
    end;
end;
procedure TFr_Server.FormShow(Sender: TObject);
begin
  Ed_ip.Text:=Nmfinger1.LocalIP;
  working;
end;
Function Search(tempID:string;tempstatus:string):bool;
var MADOQuery:TADOQuery;
begin
    MADOQuery:=TADOQuery.Create(Application);
    MADOQuery.Connection:=Fr_Server.ADOConnection1;
    try
       with MADOQuery do
         begin
           Close;
           SQL.Clear;
           SQL.Add('select * from Server');
           SQL.Add('where 上班状态='+''''+tempstatus+'''');
           SQL.Add('and 员工编号='+''''+tempID+'''');
           Open;
         end;
       if MADOQuery.RecordCount>0 then result:=True
       else Result:=False;
    finally
      MADOQuery.Free;
    end;
end;
Function EmpLogin(tempID:string;tempPwd:string):bool;
var MADOQuery:TADOQuery;
begin
    MADOQuery:=TADOQuery.Create(Application);
    MADOQuery.Connection:=Fr_Server.ADOConnection1;
    try
       with MADOQuery do

⌨️ 快捷键说明

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