📄 wsuser.pas
字号:
unit wsUser;
interface
uses
Windows,SysUtils,Classes, WinProcs,wsCores,
wsTypes,Dialogs,resDll;
type
TUserPro = class(TObject)
private
FileName:String;
UserLevel:Word;
FCurrent,FFirstNode:PUserInfo;
public
Function NewNode():PUserInfo;
Function LoadUserFile():Boolean;
Procedure CreateUserFile();
Function UserCount():Integer;
Procedure DeleteNode(PNode:PUserInfo);
Procedure AddNode(PNewNode:PUserInfo);
Procedure ModifyNode(ModiNode:TUserInfo);
Procedure SetFileName(strFileName:String);
Procedure First();
Procedure Last();
Procedure Prior();
Procedure Next();
Procedure FreeAll();
Function Find(strFinding:String):PUserInfo;
Function IsUserMatch(strUserName,strPassword:String):Boolean;
Function GetFirstNode():PUserInfo;
Function GetNextNode():PUserInfo;
Function GetCurrentNode():PUserInfo;
Constructor Create;
Destructor Destroy;
end;
implementation
Constructor TUserPro.Create;
begin
inherited;
FileName:='';
UserLevel:=0;
FCurrent:=nil;
FFirstNode:=nil;
end;
Destructor TUserPro.Destroy;
begin
FreeAll();
inherited;
end;
Procedure TUserPro.CreateUserFile();
var
F :File of TUserInfo;
Head :PUserInfo;
begin
if FileName='' then
FileName:='User.ID';
System.Assign(F,FileName);
ReWrite(F);
Head:=FFirstNode;
while (Head<>nil) do
begin
Head^.UserID:=EncryptMsg(Head^.UserID,7);
Head^.UserName:=EncryptMsg(Head^.UserName,7);
Head^.UserDescription:=EncryptMsg(Head^.UserDescription,7);
Head^.Password:=EncryptMsg(Head^.Password,7);
Head^.UserLevel:=Head^.UserLevel;
Head^.Date:=EncryptMsg(Head^.Date,7);
Head^.Time:=EncryptMsg(Head^.Time,7);
Write(F,Head^);
Head:=Head^.next;
end;
System.Close(F);
end;
Function TUserPro.LoadUserFile():Boolean;
var
F :File of TUserInfo;
Prev :PUserInfo;
begin
Result:=False;
if FileName='' then
FileName:='UserInfo.ID';
if FileExists(FileName) Then
begin
System.Assign(F,FileName);
try
Reset(F);
except
On E:EInOutError do
begin
MessageDlg(SFileNotOpen,mtWarning,[mbOK],0);
end;
end;
if not Eof(F) then
begin
FCurrent:=NewNode();
Read(F,FCurrent^);
FCurrent^.UserID:=DecryptMsg(FCurrent^.UserID,7);
FCurrent^.UserName:=DecryptMsg(FCurrent^.UserName,7);
FCurrent^.UserDescription:=DecryptMsg(FCurrent^.UserDescription,7);
FCurrent^.Password:=DecryptMsg(FCurrent^.Password,7);
// FCurrent^.UserLevel:=FCurrent^.UserLevel;
FCurrent^.Date:=DecryptMsg(FCurrent^.Date,7);
FCurrent^.Time:=DecryptMsg(FCurrent^.Time,7);
FFirstNode:=FCurrent;
end;
While not Eof(F) Do
begin
Prev:=FCurrent;
FCurrent:=NewNode();
Read(F,FCurrent^);
FCurrent^.UserID:=DecryptMsg(FCurrent^.UserID,7);
FCurrent^.UserName:=DecryptMsg(FCurrent^.UserName,7);
FCurrent^.UserDescription:=DecryptMsg(FCurrent^.UserDescription,7);
FCurrent^.Password:=DecryptMsg(FCurrent^.Password,7);
// FCurrent^.UserLevel:=FCurrent^.UserLevel;
FCurrent^.Date:=DecryptMsg(FCurrent^.Date,7);
FCurrent^.Time:=DecryptMsg(FCurrent^.Time,7);
Prev^.Next:=FCurrent;
end;
System.Close(F);
Result:=True;
end
else
begin
FFirstNode:=nil;
FCurrent:=FFirstNode;
end;
end;
Function TUserPro.NewNode():PUserInfo;
var Item:PUserInfo;
begin
New(Item);
Item^.Next:=nil;
Item^.UserID:='';
Item^.UserName:='';
Item^.Password:='';
Item^.UserLevel:=0;
Item^.Date:=DateToStr(Date());
Item^.Time:=TimeToStr(Time());
Result:=Item;
end;
Function TUserPro.UserCount():Integer;
var Temp:PUserInfo;
Count:Integer;
begin
Count:=0;
Temp:=FFirstNode;
while Temp<>nil do
begin
Temp:=Temp^.Next;
Inc(Count);
end;
Result:=Count;
end;
Procedure TUserPro.FreeAll();
Var Temp:PUserInfo;
begin
Temp:=FFirstNode;
while Temp<>nil do
begin
Temp:=Temp^.Next;
Dispose(FFirstNode);
FFirstNode:=Temp;
end;
end;
Function TUserPro.Find(strFinding:String):PUserInfo;
var
Head:PUserInfo;
begin
Head:=FFirstNode;
while Head<>nil do
begin
if UpperCase(Head^.UserName)=UpperCase(strFinding) Then
Break
else
Head:=Head^.Next;
end;
FCurrent:=Head;
Result:=Head;
end;
Function TUserPro.IsUserMatch(strUserName,strPassword:String):Boolean;
var
Head:PUserInfo;
begin
Head:=FFirstNode;
while Head<>nil do
begin
if (UpperCase(Head^.UserName)=UpperCase(strUserName))and
(Head^.Password=strPassword) Then
begin
FCurrent:=Head;
Break;
end
else
Head:=Head^.Next;
end;
if Head<>nil then
Result:=True
else
Result:=False;
end;
Procedure TUserPro.DeleteNode(PNode:PUserInfo);
var Temp:PUserInfo;
begin
Temp:=FFirstNode;
if (PNode<>nil)and(Temp<>nil) then
begin
if Temp=PNode then
begin
Temp:=Temp^.Next;
FFirstNode:=Temp;
FCurrent:=FFirstNode;
end
else
begin
while Temp^.Next<>PNode Do
Temp:=Temp^.Next;
FCurrent:=Temp;
if Temp^.Next^.Next<>nil Then
Temp^.Next:=Temp^.Next^.Next
else
Temp^.Next:=nil;
end;
Dispose(PNode);
end;
end;
Procedure TUserPro.ModifyNode(ModiNode:TUserInfo);
begin
FCurrent.UserID:=ModiNode.UserID;
FCurrent.UserName:=ModiNode.UserName;
FCurrent.UserDescription:=ModiNode.UserDescription;
FCurrent.Password:=ModiNode.Password;
FCurrent.UserLevel:=ModiNode.UserLevel;
FCurrent.Date:=ModiNode.Date;
FCurrent.Time:=ModiNode.Time;
end;
Procedure TUserPro.SetFileName(strFileName:String);
begin
FileName:=strFileName;
end;
Procedure TUserPro.First;
begin
FCurrent:=FFirstNode;
end;
Procedure TUserPro.Next;
begin
if FCurrent<>nil then
FCurrent:=FCurrent^.Next;
end;
Procedure TUserPro.Last();
begin
FCurrent:=FFirstNode;
if FCurrent<>nil then
While FCurrent^.Next<>nil do
begin
FCurrent:=FCurrent^.Next;
end;
end;
Procedure TUserPro.Prior();
var Temp:PUserInfo;
begin
Temp:=FFirstNode;
if Temp<>FCurrent then
begin
While Temp^.Next<>FCurrent do
begin
Temp:=Temp^.Next;
end;
FCurrent:=Temp;
end;
end;
Function TUserPro.GetFirstNode():PUserInfo;
begin
FCurrent:=FFirstNode;
Result:=FCurrent;
end;
Function TUserPro.GetNextNode():PUserInfo;
begin
if FCurrent<>nil then
FCurrent:=FCurrent^.Next;
Result:=FCurrent;
end;
Function TUserPro.GetCurrentNode():PUserInfo;
begin
Result:=FCurrent;
end;
Procedure TUserPro.AddNode(PNewNode:PUserInfo);
begin
Last();
if FFirstNode=nil then
begin
FFirstNode:=PNewNode;
FCurrent:=FFirstNode;
end
else
begin
FCurrent^.Next:=PNewNode;
FCurrent:=PNewNode;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -