delphi CS 文件 服务器,CS架构的小型考勤管理软件Delphi版

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 好库网 版权所有

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值