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,'已经通过编号:员工的登录');
end
else
begin
socket.SendText('登录失败');
Listbox1.Items.Insert(0,'编号:的员工登录失败');
end;
if data.Values['Close']='Close' then
Listbox1.Items.Insert(0,'编号:的员工已经断开'+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,'编号:的员工已经上班'+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,'编号:的员工已经下班'+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
begin
Close;
SQL.Clear;
SQL.Add('select * from Employee');
SQL.Add('where 员工口令='+''''+tempPwd+'''');
SQL.Add('and 员工编号='+''''+tempID+'''');
Open;
end;
if MADOQuery.RecordCount>0 then result:=True
else Result:=False;
finally
MADOQuery.Free;
end;
end;
Function Temptime(TempID:string):String;
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 上班状态='+'"正在上班"');
SQL.Add('and 员工编号='+''''+tempID+'''');
Open;
end;
if MADOQuery.RecordCount>0 then result:=MADOQuery.fieldbyname('上班时间').AsString
else Exit;
finally
MADOQuery.Free;
end;
end;
procedure TFr_Server.Btn_SetPortClick(Sender: TObject);
begin
MiniFile:=Tinifile.Create(extractfilepath(application.exename)+'Server.ini');
MiniFile.WriteString('SET','port',Ed_port.Text);
MiniFile.Free;
showmessage('完成设置!');
listbox1.Items.Insert(0,'修改了端口'+datetimetostr(now));
end;
procedure TFr_Server.Btn_ServerClick(Sender: TObject);
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 Employee');
SQL.Add('where 员工口令='+''''+Ed_manapwd.Text+'''');
SQL.Add('and 员工姓名='+''''+Ed_manaName.Text+'''');
SQL.Add('and 员工身份='+'"系统管理"');
Open;
end;
if MADOQuery.RecordCount>0 then
begin
Btn_setport.Enabled:=True;
Btn_control.Enabled:=True;
Btn_user.Enabled:=True;
Btn_search.Enabled:=True;
Btn_clear.Enabled:=True;
Btn_del.Enabled:=True;
Btn_Server.Enabled:=False;
showmessage('登录成功!');
Listbox1.Items.Insert(0,'管理员:'+Ed_manaName.Text+'登录成功'+datetimetostr(now));
Ed_manapwd.Text:='';
working;
worked;
Memo1.Lines.LoadFromFile(ReadLog(date));
end
else
begin
Btn_setport.Enabled:=False;
Btn_control.Enabled:=False;
Btn_user.Enabled:=False;
Btn_search.Enabled:=False;
Btn_clear.Enabled:=False;
Btn_del.Enabled:=False;
Btn_Server.Enabled:=True;
showmessage('登录失败!');
Ed_manapwd.Text:='';
Listbox1.Items.Insert(0,'管理员:'+Ed_manaName.Text+'登录失败'+datetimetostr(now));
end;
finally
MADOQuery.Free;
end;
end;
procedure TFr_Server.Btn_clearClick(Sender: TObject);
begin
Btn_setport.Enabled:=False;
Btn_control.Enabled:=False;
Btn_user.Enabled:=False;
Btn_search.Enabled:=False;
Btn_clear.Enabled:=False;
Btn_del.Enabled:=False;
Btn_Server.Enabled:=True;
showmessage('注销成功!');
Listbox1.Items.Insert(0,'管理员已注销'+datetimetostr(now));
end;
procedure TFr_Server.Btn_userClick(Sender: TObject);
var temp:string;
begin
if Ed_ID.Text='' then Exit;
if Ed_pwd.Text='' then Exit;
if CheckBox1.Checked then temp:='系统管理'
else temp:='普通用户';
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from Employee');
SQL.Add('where 员工编号='+''''+Ed_ID.Text+'''');
Open;
end;
if ADOQuery1.RecordCount>0 then
begin
Showmessage('该员工编号已经存在!');
Exit;
end
else with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into Employee(员工编号,员工姓名,员工口令,员工身份)');
SQL.Add('values('+''''+Ed_ID.Text+''''+','+''''+Ed_name.Text+''''+','+''''+Ed_pwd.Text+''''+','+''''+temp+''''+')');
ExecSQL;
Showmessage('添加成功');
Listbox1.Items.Insert(0,'添加了编号为:的员工'+datetimetostr(now));
end;
end;
procedure TFr_Server.Btn_delClick(Sender: TObject);
var tempID:string;
begin
inputQuery('请输入要删除的员工编号:','确认删除',tempID);
if tempID<>'' then
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from Employee');
SQL.Add('where 员工编号='+''''+tempID+'''');
Open;
end;
if ADOQuery1.RecordCount<0 then
begin
Showmessage('该员工编号不存在!');
Exit;
end
else
if ADOQuery1.FieldByName('员工身份').AsString='系统管理' then
if MessageBox(handle,'该员工是管理员,真的删除吗?','删除确认',Mb_iconQuestion or Mb_YESNO)=IDNo then Exit;
With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('update Employee set 删除标志='+'"是"');
SQL.Add('where 员工编号='+''''+tempID+'''');
ExecSQL;
Showmessage('删除成功!');
listbox1.Items.Insert(0,'删除了员工:'+tempID+datetimetostr(now));
end;
end;
procedure TFr_Server.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
var TempMemo:Tmemo;
i:integer;
begin
if trim(Stringgrid1.Cells[1,1])<>'' then
if MessageBox(handle,'还有员工未下班,你确认退出吗?','退出确认',Mb_iconQuestion or Mb_YESNO)=IDNO then
begin
CanClose:=False;
exit;
end;
TempMemo:=TMemo.Create(Application);
TempMemo.Parent:=Fr_server;
TempMemo.Clear;
if Btn_control.Enabled then listbox1.Items.insert(0,'系统已经关闭'+datetimetostr(now));
try
try
TempMemo.Lines.LoadFromFile(ReadLog(date));
for i:=0 to listbox1.Items.Count-1 do
begin
TempMemo.Lines.Add(listbox1.Items.Strings[i]);
TempMemo.Lines.SaveToFile(ReadLog(date));
end;
except
CanClose:=True;
end;
finally
tempmemo.Free;
end;
end;
procedure TFr_Server.Ed_manaNameKeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then
postmessage(handle,wm_keydown,vk_Tab,0);
end;
procedure TFr_Server.Ed_manaPwdKeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then Btn_server.Click;
end;
procedure TFr_Server.Ed_IDKeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then
postmessage(handle,wm_keydown,vk_Tab,0);
end;
procedure TFr_Server.Ed_pwdKeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then
postmessage(handle,wm_keydown,vk_Tab,0);
end;
procedure TFr_Server.Ed_nameKeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then
postmessage(handle,wm_keydown,vk_Tab,0);
end;
Function ReadLog(tempdate:Tdate):string;
var i:integer;
begin
for i:=1 to 10 do
if not fileexists(Extractfilepath(Application.ExeName)+'Log\'+datetostr(tempdate)+'.Txt') then
tempdate:=date-i
else break;
if i<10 then result:=Extractfilepath(Application.ExeName)+'Log\'+datetostr(tempdate)+'.Txt'
else
try
begin
filecreate(Extractfilepath(Application.ExeName)+'Log\'+datetostr(date)+'.Txt');
result:=Extractfilepath(Application.ExeName)+'Log\'+datetostr(date)+'.Txt';
end;
except
end;
end;
procedure TFr_Server.Btn_SearchClick(Sender: TObject);
var tempY,tempM,tempD:word;
temp:string;
i,j:integer;
begin
decodedate(datetimepicker1.Date,tempY,tempM,tempD);
temp:=inttostr(tempY)+'-'+inttostr(tempM)+'-'+inttostr(tempD);
delete(temp,1,2);
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('and 考勤日期='+''''+temp+'''');
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;
end.
更多源码 | 好库简介 | 网站地图 | 帮助中心 | 版权说明
Copyright© 2009-2012 OKBASE.NET All Rights Reserved 好库网 版权所有