⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsuser.pas

📁 这是一个正式的项目工程
💻 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 + -