unit UserInfo;interfaceuses Windows,SysUtils,Classes,Dialogs; type TPurview = (tpRead,tpReadWrite); TAccessLog = record Count : LongInt; Time : array[0..100]of TDateTime; end;
TFileHead = record Counter : LongInt; end; TFileData = record Index : LongInt; UserName : array[0..100] of Char; UserPwd : array[0..100] of Char; UserPuw : TPurview; AccessLog : TAccessLog; end; TUserInfo = class private FFileName : String; FFileHandle : Integer; FFileHead : TFileHead; FFileData : TFileData; FLogined : Boolean; FPwdChanged : Boolean; procedure CreateLDLFile; function GetUserIndex(Name : String): LongInt; procedure SaveLoginTime; procedure SetPwdChanged(Value : Boolean); public constructor Create(Fn:String;Mode:Word;Name,Pwd:String); destructor Destroy;override; procedure Free; procedure LoadLDLFile(Pos:LongInt); procedure SaveLDLFile(New:Boolean;Pos:LongInt); property FileName : String read FFileName; property FileData : TFileData read FFileData write FFileData; property FileHead : TFileHead read FFileHead write FFileHead; property Logined : Boolean read FLogined write FLogined; property PwdChanged : Boolean read FPwdChanged write SetPwdChanged; end; implementationprocedure TUserInfo.CreateLDLFile ; begin with FFileHead,FFileData do begin Counter := 0; Index := 0; UserName := ''; UserPwd := ''; UserPuw := tpRead; AccessLog.Count := 1; AccessLog.Time[AccessLog.Count-1]:=Now; end; end;function TUserInfo.GetUserIndex(Name : String):LongInt; var i : LongInt; begin Result := 0; if Name='' then Exit; FileSeek(FFileHandle,0,0); FileRead(FFileHandle,FFileHead,Sizeof(TFilehead)); for i := 1 to FFileHead.Counter do begin FileRead(FFileHandle,FFileData,Sizeof(TFileData)); if FFileData.UserName = Name then begin Result := FFileData.Index ; Break; end; end; end;constructor TUserInfo.Create(Fn:String;Mode:Word;Name,Pwd:String); var Pos : LongInt; begin FFileName := Fn; FLogined := False; FPwdChanged := False; if Mode = fmOpenReadWrite then begin FFileHandle := FileOpen(FFileName,fmOpenReadWrite); Pos := GetUserIndex(Name)-1; LoadLDLFile(Pos); if (Pwd<>'')and(FFileData.UserPwd = Pwd) then begin SaveLoginTime; FLogined := True; end else if (Pwd<>'')and(FFileData.UserPwd <> Pwd) then begin ShowMessage('The User's Password wrong!'); end; end; if Mode = fmCreate then begin FFileHandle := FileCreate(FFileName); CreateLDLFile; // FLogined := True; end; end;destructor TUserInfo.Destroy; begin if FFileHandle<>-1 then begin FileClose(FFileHandle); FFileHandle:=-1; FLogined := False; end; inherited; end;procedure TUserInfo.Free ; begin if Assigned(Self) then Destroy; end;procedure TUserInfo.LoadLDLFile(Pos: Integer); begin FileSeek(FFileHandle,0,0); FileRead(FFileHandle,FFileHead,Sizeof(TFileHead)); FileSeek(FFileHandle,(Pos)*Sizeof(TFileData),1); FileRead(FFileHandle,FFileData,Sizeof(TFileData)); end;procedure TUserInfo.SaveLoginTime ; begin FileSeek(FFileHandle,0-Sizeof(TFileData),1); with FFileData do begin Inc(AccessLog.Count); AccessLog.Time[AccessLog.Count-1] := Now; end; FileWrite(FFileHandle,FFileData,Sizeof(TFileData)); end;procedure TUserInfo.SaveLDLFile(New: Boolean; Pos: Integer); var AFileData : TFileData; Str : String; begin if New then begin AFileData := FFileData; if GetUserIndex(FFileData.UserName)<>0 then begin ShowMessage('The User was exists!'); Exit; end; FFileData := AFileData; with FFileData,FFileHead do begin Inc(Counter); Index := Counter; AccessLog.Count := 1 ; AccessLog.Time[AccessLog.Count-1] := Now; end; FileSeek (FFileHandle,0,0); FileWrite(FFileHandle,FFileHead,Sizeof(TFileHead)); FileSeek (FFileHandle,0,2); FileWrite(FFileHandle,FFileData,Sizeof(TFileData)); end else if (not New)and(Pos<>-1) then begin FileSeek (FFileHandle,(Pos-1)*Sizeof(TFileData)+Sizeof(TFileHead),0); FileWrite(FFileHandle,FFileData,Sizeof(TFileData)); end; end;procedure TUserInfo.SetPwdChanged(Value: Boolean); begin FPwdChanged := Value; end;end. 这个单元是我以前写的一个用来保存用户信息,没改过,不太好用,你看看吧,参考一下自己写一个,也许你能用的上,不过加密部分我没写,下面有一个加密的便子,你可以看一下. procedure TForm1.Button1Click(Sender:TObject); var s : string[255]; c : array[0..255] of Byte absolute s; i:Integer; begin {加密} s:='siro_com developers'; For i:=1 to ord(s[0]) do c[i] := 23 XOr c[i]; Label1.Caption:=s; {解密} s:=Label1.Caption; For i:=1 to Length(s) do s[i] := char(23 Xor ord(c[i])); Label2.Caption:=s; end;
Windows,SysUtils,Classes,Dialogs;
type
TPurview = (tpRead,tpReadWrite); TAccessLog = record
Count : LongInt;
Time : array[0..100]of TDateTime;
end;
TFileHead = record
Counter : LongInt;
end; TFileData = record
Index : LongInt;
UserName : array[0..100] of Char;
UserPwd : array[0..100] of Char;
UserPuw : TPurview;
AccessLog : TAccessLog;
end;
TUserInfo = class
private
FFileName : String;
FFileHandle : Integer;
FFileHead : TFileHead;
FFileData : TFileData;
FLogined : Boolean;
FPwdChanged : Boolean;
procedure CreateLDLFile;
function GetUserIndex(Name : String): LongInt;
procedure SaveLoginTime;
procedure SetPwdChanged(Value : Boolean);
public
constructor Create(Fn:String;Mode:Word;Name,Pwd:String);
destructor Destroy;override;
procedure Free;
procedure LoadLDLFile(Pos:LongInt);
procedure SaveLDLFile(New:Boolean;Pos:LongInt);
property FileName : String read FFileName;
property FileData : TFileData read FFileData write FFileData;
property FileHead : TFileHead read FFileHead write FFileHead;
property Logined : Boolean read FLogined write FLogined;
property PwdChanged : Boolean read FPwdChanged write SetPwdChanged;
end;
implementationprocedure TUserInfo.CreateLDLFile ;
begin
with FFileHead,FFileData do
begin
Counter := 0;
Index := 0;
UserName := '';
UserPwd := '';
UserPuw := tpRead;
AccessLog.Count := 1;
AccessLog.Time[AccessLog.Count-1]:=Now;
end;
end;function TUserInfo.GetUserIndex(Name : String):LongInt;
var
i : LongInt;
begin
Result := 0;
if Name='' then Exit;
FileSeek(FFileHandle,0,0);
FileRead(FFileHandle,FFileHead,Sizeof(TFilehead));
for i := 1 to FFileHead.Counter do
begin
FileRead(FFileHandle,FFileData,Sizeof(TFileData));
if FFileData.UserName = Name then
begin
Result := FFileData.Index ;
Break;
end;
end;
end;constructor TUserInfo.Create(Fn:String;Mode:Word;Name,Pwd:String);
var
Pos : LongInt;
begin
FFileName := Fn;
FLogined := False;
FPwdChanged := False;
if Mode = fmOpenReadWrite then
begin
FFileHandle := FileOpen(FFileName,fmOpenReadWrite);
Pos := GetUserIndex(Name)-1;
LoadLDLFile(Pos);
if (Pwd<>'')and(FFileData.UserPwd = Pwd) then
begin
SaveLoginTime;
FLogined := True;
end else
if (Pwd<>'')and(FFileData.UserPwd <> Pwd) then
begin
ShowMessage('The User's Password wrong!');
end;
end;
if Mode = fmCreate then
begin
FFileHandle := FileCreate(FFileName);
CreateLDLFile;
// FLogined := True;
end;
end;destructor TUserInfo.Destroy;
begin
if FFileHandle<>-1 then
begin
FileClose(FFileHandle);
FFileHandle:=-1;
FLogined := False;
end; inherited;
end;procedure TUserInfo.Free ;
begin
if Assigned(Self) then Destroy;
end;procedure TUserInfo.LoadLDLFile(Pos: Integer);
begin
FileSeek(FFileHandle,0,0);
FileRead(FFileHandle,FFileHead,Sizeof(TFileHead));
FileSeek(FFileHandle,(Pos)*Sizeof(TFileData),1);
FileRead(FFileHandle,FFileData,Sizeof(TFileData));
end;procedure TUserInfo.SaveLoginTime ;
begin
FileSeek(FFileHandle,0-Sizeof(TFileData),1);
with FFileData do
begin
Inc(AccessLog.Count);
AccessLog.Time[AccessLog.Count-1] := Now;
end;
FileWrite(FFileHandle,FFileData,Sizeof(TFileData));
end;procedure TUserInfo.SaveLDLFile(New: Boolean; Pos: Integer);
var
AFileData : TFileData;
Str : String;
begin
if New then
begin
AFileData := FFileData;
if GetUserIndex(FFileData.UserName)<>0 then
begin
ShowMessage('The User was exists!');
Exit;
end;
FFileData := AFileData;
with FFileData,FFileHead do
begin
Inc(Counter);
Index := Counter;
AccessLog.Count := 1 ;
AccessLog.Time[AccessLog.Count-1] := Now;
end;
FileSeek (FFileHandle,0,0);
FileWrite(FFileHandle,FFileHead,Sizeof(TFileHead));
FileSeek (FFileHandle,0,2);
FileWrite(FFileHandle,FFileData,Sizeof(TFileData));
end else
if (not New)and(Pos<>-1) then
begin
FileSeek (FFileHandle,(Pos-1)*Sizeof(TFileData)+Sizeof(TFileHead),0);
FileWrite(FFileHandle,FFileData,Sizeof(TFileData));
end;
end;procedure TUserInfo.SetPwdChanged(Value: Boolean);
begin
FPwdChanged := Value;
end;end.
这个单元是我以前写的一个用来保存用户信息,没改过,不太好用,你看看吧,参考一下自己写一个,也许你能用的上,不过加密部分我没写,下面有一个加密的便子,你可以看一下.
procedure TForm1.Button1Click(Sender:TObject);
var
s : string[255];
c : array[0..255] of Byte absolute s;
i:Integer;
begin
{加密} s:='siro_com developers';
For i:=1 to ord(s[0]) do c[i] := 23 XOr c[i];
Label1.Caption:=s; {解密} s:=Label1.Caption;
For i:=1 to Length(s) do s[i] := char(23 Xor ord(c[i]));
Label2.Caption:=s;
end;