📄 userver.~pas
字号:
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 + -