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

📄 u_logon.pas

📁 一个简单的学籍管理软件
💻 PAS
字号:
unit U_Logon;
                
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Db, DBTables, EnBmpGr;

type
  TFm_Logon = class(TForm)
    Label1: TLabel;
    Label3: TLabel;
    Ed_Name: TEdit;
    Ed_Password: TEdit;
    Bevel1: TBevel;
    But_Ok: TButton;
    But_Cancel: TButton;
    Image1: TImage;
    DS: TDataSource;
    DQuery: TQuery;
    UpSQL: TUpdateSQL;
    CmbBox_Name: TComboBox;
    procedure But_OkClick(Sender: TObject);
    procedure Ed_NameKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CmbBox_NameKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
  public
    LogonPass: integer;
    procedure InitGloabVar;
  end;

var
  Fm_Logon: TFm_Logon;

function Show_Logon: Boolean;
implementation

uses IniFiles, U_GlobalVar, U_GlobalProc, U_DM, U_Main; {全局变量}

{$R *.DFM}

function Show_Logon: Boolean;
var
  i: integer;
  tmQuery: TQuery;
begin
  Result := False;
  Fm_Logon := TFm_Logon.Create(Application);
  with Fm_Logon do
  try
    //S_DataPath := S_ExePath + '\Data';
    //建立目录
    if not FileExists(S_DataPath + '\nul') then
      CreateDir(S_DataPath);
    if not FileExists(S_DataPath + '\Bmp\nul') then
      CreateDir(S_DataPath + '\Bmp');
    if not FileExists(S_SysPath + '\nul') then
      CreateDir(S_SysPath);
    if not FileExists(S_TmpPath + '\nul') then
      CreateDir(S_TmpPath);

    if Si_LogonStyle = 1 then
    begin
      CmbBox_Name.Visible := True;
      Ed_Name.Visible := False;
    end
    else
    begin
      CmbBox_Name.Visible := False;
      Ed_Name.Visible := True;
    end;

    LogonPass := 0;
    DQuery.DatabaseName := SysDBase;
    DQuery.Open;
    if DQuery.IsEmpty then
    begin
      with DQuery do
      begin
        Append;
        FieldByName('s_rydm').AsString := '001';
        FieldByName('s_ryxm').AsString := S_SchoolControl;
        FieldByName('s_rykl').AsString := '';
        Post;
        ApplyUpdates;
      end;
      tmQuery := TQuery.Create(Application);
      with tmQuery do
      try
        DataBaseName := SysDBase;
        //  人员权限
        SQL.Text := 'INSERT INTO czryqx SELECT d1.s_rydm, d2.s_cddm, ''1'', ' +
          '''1'' FROM "czry.db" d1, "cdgn.db" d2 ' +
          'WHERE d1.s_rydm=''001''';
        ExecSQL;
      finally
        Free;
      end;
    end;
    DQuery.First;
    if CmbBox_Name.Visible then
    begin
      while not DQuery.Eof do
      begin
        CmbBox_Name.Items.Add(DQuery.FieldByName('s_ryxm').AsString);
        DQuery.Next;
      end;
      CmbBox_Name.ItemIndex := 0;
    end;

    {tmUserCode := DQuery.FieldByName('s_rydm').AsString;
    tmUserName := DQuery.FieldByName('s_ryxm').AsString;
    tmUserPassWord := DQuery.FieldByName('s_rykl').AsString;}
    if (Fm_Logon.ShowModal = mrOk) then
    begin
      for i := Fm_Main.MDIChildCount - 1 downto 0 do
        Fm_Main.MDIChildren[i].Close;
      InitGloabVar; //初始化全局变量
      Result := True;
    end;
    //  操作权限
    SetUserPower(S_UserCode);
  finally
    DQuery.Close;
    Free;
  end;
end;

procedure TFm_Logon.But_OkClick(Sender: TObject);
var
  tmName: string;
begin
  if CmbBox_Name.Visible then
    tmName := CmbBox_Name.Text
  else
    tmName := Ed_Name.Text;
  if DQuery.Locate('s_ryxm;s_rykl',
    VarArrayOf([Trim(tmName), Trim(Ed_Password.Text)]), []) then
  begin
    //tmUserCode := DQuery.FieldByName('s_rydm').AsString;
    S_UserCode := DQuery.FieldByName('s_rydm').AsString; //操作员代码
    S_UserName := DQuery.FieldByName('s_ryxm').AsString; //操作员姓名
    S_UserPassWord := DQuery.FieldByName('s_rykl').AsString; //口令
    ModalResult := mrOk;
  end
  else
  begin
    LogonPass := LogonPass + 1;
    if LogonPass >= 3 then
    begin
      U_GlobalProc.Show_ErrorMess('你输入的操作人员或者密码不对,请核对后再运行本系统。');
      ModalResult := mrCancel;
      Exit;
    end
    else
    begin
      Show_ErrorMess('你输入的操作人员或者密码不对,请再输入一次。');
      Ed_Password.Text := '';
      if CmbBox_Name.Visible then
        CmbBox_Name.SetFocus
      else
      begin
        Ed_Name.Text := '';
        Ed_Name.SetFocus;
      end;
    end
  end;
end;

procedure TFm_Logon.InitGloabVar;
var
  i: integer;
begin
  with TIniFile.Create(S_SysPath + '\' + StudentIniFile) do
  try
    //  数据库名, 服务器名
    S_DBaseName := ReadString('系统参数', '数据库名', '');
    S_ServerName := ReadString('系统参数', '服务器名', '');
    //  学校代码, 学校名称, 负责人
    S_SchoolCode := ReadString('系统参数', '学校代码', '');
    S_SchoolName := ReadString('系统参数', '学校名称', '');
    S_SchoolControl := ReadString('系统参数', '负责人', '');
    //  系统是否启用
    B_BeginUse := ReadBool('系统参数', '启用', False);
    //  系统  启用年份、启用学期
    W_StartYear := ReadInteger('系统参数', '启用学年', 0);
    W_StartTerm := ReadInteger('系统参数', '启用学期', 0);
    //  当前年份、月份
    W_CurYear := ReadInteger('系统参数', '当前学年', 0);
    W_CurTerm := ReadInteger('系统参数', '当前学期', 0);
    S_CurTermCode := IntToStr(W_CurYear) + IntToStr(W_CurTerm);
    //  总年级数、各年级班数、各年级班号
    SI_GradeCount := ReadInteger('系统参数', '总年级数', 3);
    if SI_GradeCount > 6 then
      SI_GradeCount := 6;
    if SI_GradeCount > 0 then
      SetLength(SI_Classes, SI_GradeCount);
    //SetLength(SA_ClassCode, SI_GradeCount);
    for i := 0 to SI_GradeCount - 1 do
    begin
      SI_Classes[i] := ReadInteger('系统参数', GradeNames[i] + '年级', 1);
      //SetLength(SA_ClassCode[i], SI_Classes[i]);
    end;

    //  系统当前日期
    D_CurDate := Date;
    //  文件类型 1 - DBF 2 - TXT  其他保留
    //  对齐方式 1 - 左对齐 2 - 居中  3 - 右对齐
    SI_FileType := ReadInteger('系统参数', '文件类型', 1);
    SI_AlignType := ReadInteger('系统参数', '对齐方式', 1);
  finally
    Free;
  end;
end;

procedure TFm_Logon.Ed_NameKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 13 then
  begin
    Key := 0;
    if Shift = [] then
      SelectNext(ActiveControl, True, True)
    else if Shift = [ssShift] then
      SelectNext(ActiveControl, False, True)
    else
      Key := 13;
  end;
end;

procedure TFm_Logon.CmbBox_NameKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_RETURN) and (not (Sender as TComboBox).DroppedDown) then
  begin
    Key := 0;
    SelectNext(ActiveControl, True, True);
  end;
  if (Key = VK_DOWN) and (not (Sender as TComboBox).DroppedDown) then
  begin
    Key := 0;
    (Sender as TComboBox).DroppedDown := TRUE;
  end;
  if (key = VK_LEFT) or (Key = VK_RIGHT) then
  begin
    if Key = VK_LEFT then
      SelectNext(ActiveControl, False, True)
    else
      SelectNext(ActiveControl, True, True);
    Key := 0;
  end;
end;

end.

⌨️ 快捷键说明

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