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

📄 un_systemlogin.pas

📁 信息系统工作核心代码,若要具体可以联系我,这只是一部分核心代码,大家一起交流分享.谢谢
💻 PAS
字号:
unit Un_SystemLogin;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  MydbManager, Un_DAO, LoginFrm;

type
  TLoginUser=class
    Id: Integer;
    UserId: string;
    UserName: string;
    Password: string;
    IsSA: Boolean;
  end;

  TLoginUserObject=class
  private
    FDAO: TDAO;
    FLoginUser: TLoginUser;
  public
    constructor Create;
    destructor Destroy; override;
    function GetLoginUser(UserId: string): TLoginUser;
  end;

  TSystemEntrance = class(TDataModule)
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
  private
    { Private declarations }
    FUserId: string;
    FPassword: string;
    FContinued: Boolean;
    FDbLinkParams: TDbLinkParams;
    FDbLinkRegister: TDbLinkRegister;
    FDatabaseManager: TDatabaseManager;
    function GetDbLinkParams: Boolean;
    function GetUserLoginData(LoginForm: TLoginForm): Boolean;
    procedure DoConnect;
    procedure DBLinkSetupButtonClick(Sender: TObject);
    function SetDbLinkParams(ShowMSG: string): Boolean;
    function GetConnected: Boolean;
    procedure RecordUserInfo(LoginUser: TLoginUser);
    function CheckValidityUser: Boolean;
    procedure LoginSystem;
  public
    { Public declarations }
    property Continued: Boolean read FContinued;
    procedure LoadPlugins;
  end;

var
  SystemEntrance: TSystemEntrance;

implementation
uses
  DbLinkSetupFrm, Show, Un_Dialogs, Publics, Un_System,
  Un_PluginManager, Un_SysIni;
{$R *.DFM}

procedure TSystemEntrance.DoConnect;
var
  ShowForm: TShowForm;
begin
  ShowForm:= TShowForm.Create(nil);
  ShowForm.Label1.Caption:= '正在连接数据库服务器...';
  ShowForm.Show;
  ShowForm.Update;
  try
    try
      FDatabaseManager.ConnectDB(FDbLinkParams);
      MyAppDatabase:= FDatabaseManager.Database;
    except
      on E:Exception do begin
        ShowForm.Close;
        ZWMessageDlg('系统服务器连接不成功,确认设置是否正确!',
                      mtZWError,[mbZWOK],0,'系统提示');
      end;
    end;
  finally
    ShowForm.Free;
  end;
end;

procedure TSystemEntrance.DBLinkSetupButtonClick(Sender: TObject);
begin
  if SetDbLinkParams('请确认你的数据库连接') then
    FDbLinkRegister.WriteRegInfo(FDbLinkParams);
end;

function TSystemEntrance.GetUserLoginData(LoginForm: TLoginForm): Boolean;
begin
  Result:= False;
  with LoginForm do begin
    DbLinkSetupButton.OnClick:= DBLinkSetupButtonClick;
    if ShowModal=mrOk then begin
      FUserId:= UserNameEdit.Text;
      FPassword:= PasswordEdit.Text;
      Result:= True;
    end;
  end;
end;

procedure TSystemEntrance.DataModuleCreate(Sender: TObject);
begin
  FDbLinkRegister:= TDbLinkRegister.Create;
  FDatabaseManager:= TDatabaseManager.Create;
  FContinued:= False;
  if not GetDbLinkParams then
    Application.Terminate;
  LoginSystem;  
end;

procedure TSystemEntrance.DataModuleDestroy(Sender: TObject);
begin
  FDbLinkRegister.Free;
  FDatabaseManager.Free;
end;

function TSystemEntrance.GetDbLinkParams: Boolean;
begin
  Result:= True;
  if not FDbLinkRegister.ReadRegInfo(FDbLinkParams) then begin
    if SetDbLinkParams('这是你第一次使用该系统,'+#13#10+'请确认你的数据库连接') then
      FDbLinkRegister.WriteRegInfo(FDbLinkParams)
    else
      Result:= False;
  end;
end;

function TSystemEntrance.SetDbLinkParams(ShowMSG: string): Boolean;
begin
  with TDbLinkSetupForm.Create(nil) do begin
    ShowMSGLabel.Caption:= ShowMSG;
    with FDbLinkParams do begin
      ServerNameEdit.Text := ServerName;
      DBNameEdit.Text     := DatabaseName;
      DBUserNameEdit.Text := DBUserName;
      DBPasswordEdit.Text := DBPassword;
    end;
    try
      if ShowModal=mrOK then begin
        with FDbLinkParams do begin
          ServerName   := ServerNameEdit.Text;
          DatabaseName := DBNameEdit.Text;
          DBUserName   := DBUserNameEdit.Text;
          DBPassword   := DBPasswordEdit.Text;
        end;
        Result:= true;
      end
      else
        Result:= false;
    finally
      Free;
    end;
  end;
end;

function TSystemEntrance.GetConnected: Boolean;
begin
  Result:= FDatabaseManager.Connected;
end;

procedure TSystemEntrance.LoadPlugins;
begin
  try
    TPluginFactory.Instance.LoadPlugins;
  except
    on E: Exception do
      raise Exception.Create('插件时调入发生错误,系统将关闭!'
                             +#13#10+'错误原因:'+E.Message);
  end;
end;

function TSystemEntrance.CheckValidityUser: Boolean;
var
  LoginUser: TLoginUser;
  LoginUserObject: TLoginUserObject;
begin
  LoginUserObject:= TLoginUserObject.Create;
  try
    LoginUser:= LoginUserObject.GetLoginUser(FUserId);
    if LoginUser=nil then
      result:= false
    else begin
      if LoginUser.Password=FPassword then begin
        Result:= True;
        RecordUserInfo(LoginUser);
      end
      else
        Result:= False;
    end;
  finally
    LoginUserObject.Free;
  end;
end;

{ TLoginUserObject }

constructor TLoginUserObject.Create;
begin
  FDAO:= TDAO.Create;
  FLoginUser:= TLoginUser.Create;
end;

destructor TLoginUserObject.Destroy;
begin
  FDAO.Free;
  FLoginUser.Free;
  inherited;
end;

function TLoginUserObject.GetLoginUser(UserId: string): TLoginUser;
begin
  FDAO.SQL:= 'Select Id,UserId,UserName,Password,IsSA '
            +'From MyUsers where UserId="'+UserId+'" and Useable=1';
  FDAO.ExecuteQuery;
  if FDAO.ResultSet.Bof and FDAO.ResultSet.Eof then
    Result:= nil
  else begin
    FLoginUser.Id:= FDAO.ResultSet.fieldByName('Id').AsInteger;
    FLoginUser.UserId:= FDAO.ResultSet.fieldByName('UserId').AsString;
    FLoginUser.IsSA:= FDAO.ResultSet.fieldByName('IsSA').AsInteger=1;
    FLoginUser.UserName:= FDAO.ResultSet.fieldByName('UserName').AsString;
    FLoginUser.Password:= Decrypt(FDAO.ResultSet.fieldByName('Password').AsString);
    Result:= FLoginUser;
  end;
end;

procedure TSystemEntrance.LoginSystem;
var
  LoginCount: Integer;
  LoginForm: TLoginForm;
  SystemRegister: TSystemRegister;
begin
  LoginCount:= 0;
  SystemRegister:= TSystemRegister.Create;
  LoginForm:= TLoginForm.Create(nil);
  LoginForm.UserNameEdit.Text:= SystemRegister.GetLastLoginUser;
  LoginForm.LoginShowInfo.Caption:= '';
  try
    repeat
      if (LoginCount=4)or(not GetUserLoginData(LoginForm)) then begin
        Application.Terminate;
        Break;
      end;
      DoConnect;
      if GetConnected then begin
        if CheckValidityUser then begin
          FContinued:= True;
          SystemRegister.RegisteLastLoginUser(FUserId);
          Break;
        end
        else begin
          Inc(LoginCount);
          LoginForm.LoginShowInfo.Caption:= '第'+IntToStr(LoginCount)+'次用户或者密码输入错误';
          FDatabaseManager.DisConnect;
        end;
      end;
    until False;
  finally
    SystemRegister.Free;
    LoginForm.Free;
  end;
end;

procedure TSystemEntrance.RecordUserInfo(LoginUser: TLoginUser);
begin
  with TAppSystemInfo.Instance do begin
    UId:= LoginUser.Id;
    UserId:= LoginUser.UserId;
    UserName:= LoginUser.UserName;
    IsSA:= LoginUser.IsSA;
  end;
end;

initialization
  Application.CreateForm(TSystemEntrance, SystemEntrance);

//finalization
//  FreeAndNil(SystemEntrance);

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -