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

📄 set_form.pas

📁 软件实现了以下主要功能:1.手动生成试卷;2.自动生成试卷;3.抽取现有试卷;4.用户管理;5.数据库管理。
💻 PAS
字号:
unit Set_Form;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ToolWin, ComCtrls, ImgList,ExtCtrls, StdCtrls,
  TFlatButtonUnit, Grids, DBGrids, TFlatGroupBoxUnit, TFlatRadioButtonUnit, XPMenu,
  DB, ADODB, TFlatEditUnit, TFlatComboBoxUnit;

type
  TSet_F = class(TForm)
    ToolBar1: TToolBar;
    YHGL_TBtn: TToolButton;
    SJKGL_TBtn: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ImageList1: TImageList;
    ToolButton5: TToolButton;
    XPMenu1: TXPMenu;
    Panel1: TPanel;
    Set_PC: TPageControl;
    YHGL_TS: TTabSheet;
    SJKGL_TS: TTabSheet;
    FlatGroupBox2: TFlatGroupBox;
    FlatGroupBox3: TFlatGroupBox;
    Run_FBtn: TFlatButton;
    XG_FRBtn: TFlatRadioButton;
    TJ_FRBtn: TFlatRadioButton;
    Exit_FBtn: TFlatButton;
    YH_ADOQ: TADOQuery;
    YH_DS: TDataSource;
    Panel2: TPanel;
    FlatGroupBox1: TFlatGroupBox;
    YHXX_DBG: TDBGrid;
    Panel3: TPanel;
    Del_FBtn: TFlatButton;
    Label2: TLabel;
    YHM_FE: TFlatEdit;
    Label3: TLabel;
    MM_FE: TFlatEdit;
    Label4: TLabel;
    QRMM_FE: TFlatEdit;
    Label5: TLabel;
    QX_FCB: TFlatComboBox;
    YH_ADOT: TADOTable;
    Label6: TLabel;
    FlatGroupBox4: TFlatGroupBox;
    Label1: TLabel;
    LJ_FBtn: TFlatButton;
    Panel4: TPanel;
    LJ_FE: TFlatEdit;
    FlatGroupBox6: TFlatGroupBox;
    FlatButton1: TFlatButton;
    Label7: TLabel;
    SJD_FCB: TFlatComboBox;
    Panel5: TPanel;
    FlatGroupBox5: TFlatGroupBox;
    BF_FRBtn: TFlatRadioButton;
    HY_FRBtn: TFlatRadioButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure YHGL_TBtnClick(Sender: TObject);
    procedure SJKGL_TBtnClick(Sender: TObject);
    procedure Exit_FBtnClick(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure Del_FBtnClick(Sender: TObject);
    procedure YHXX_DBGMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure XG_FRBtnClick(Sender: TObject);
    procedure TJ_FRBtnClick(Sender: TObject);
    procedure Run_FBtnClick(Sender: TObject);
    procedure LJ_FBtnClick(Sender: TObject);
    procedure HY_FRBtnClick(Sender: TObject);
    procedure BF_FRBtnClick(Sender: TObject);
    procedure FlatButton1Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
  private
    Procedure ShowYHInfo;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Set_F: TSet_F;

implementation

uses
  About_Form, Common_Unit, DataModule, BFML_Form,IniFiles,StrUtils,ShellAPI;

{$R *.dfm}

procedure TSet_F.ShowYHInfo;
begin
  YHM_FE.Text:=YHXX_DBG.Fields[0].Text;
  YHM_FE.Enabled:=false;
  QX_FCB.ItemIndex:=QX_FCB.Items.IndexOf(YHXX_DBG.Fields[1].Text);
  if YHM_FE.Text<>YH then
    begin
      MM_FE.Enabled:=false;
      QRMM_FE.Enabled:=false;
    end
    else begin
      MM_FE.Enabled:=true;
      QRMM_FE.Enabled:=true;
    end;
end;
//****************************************************************************************
procedure TSet_F.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;
//****************************************************************************************
procedure TSet_F.FormDestroy(Sender: TObject);
begin
  YH_ADOQ.Close;

  YH_ADOT.Close;
  FreeAndNil(YH_ADOT);
  
  FreeAndNil(Set_F);
end;
//****************************************************************************************
procedure TSet_F.FormShow(Sender: TObject);
var
  QXM_ADOQ:TADOQuery;
begin
  YHGL_TS.TabVisible:=false;
  SJKGL_TS.TabVisible:=false;
  Set_PC.ActivePage:=YHGL_TS;
  YH_ADOQ.Close;                   //查出用户信息
  YH_ADOQ.SQL.Clear;
  YH_ADOQ.SQL.Add('SELECT A.UserName as 用户名,B.QXM as 权限 FROM YH AS A ');
  YH_ADOQ.SQL.Add('INNER JOIN QX AS B ON A.QXID=B.QXID');
  YH_ADOQ.Open;

  QXM_ADOQ:=TADOQuery.Create(nil);      //动态创建ADOQuery控件
  QXM_ADOQ.Connection:=BYSJ_DM.TiKu_ADOC;
  QXM_ADOQ.SQL.Add('SELECT QXM FROM QX');
  QXM_ADOQ.Open;
  while not QXM_ADOQ.Eof do
    begin
      QX_FCB.Items.Add(QXM_ADOQ.FieldValues['QXM']);
      QXM_ADOQ.Next;
    end;
  QXM_ADOQ.Close;
  FreeAndNil(QXM_ADOQ);

  ShowYHInfo;

  YH_ADOT.TableName:='YH';
  YH_ADOT.Open;
end;
//****************************************************************************************
procedure TSet_F.YHGL_TBtnClick(Sender: TObject);
begin
  Set_PC.ActivePage:=YHGL_TS;
end;
//****************************************************************************************
procedure TSet_F.SJKGL_TBtnClick(Sender: TObject);
var
  myini:TIniFile;
  num,i:integer;
  SJD,path:string;
begin
  Set_PC.ActivePage:=SJKGL_TS;
  BF_FRBtn.Checked:=true;
  myini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'set.ini');
  path:=myini.ReadString('bakup','BakPath','');
  if path='' then
    begin
      path:=ExtractFilePath(Application.ExeName)+'BackupDB';
      myini.WriteString('bakup','BakPath',path);
    end;
  LJ_FE.Text:=path;

  num:=myini.ReadInteger('bakup','num',0);      //还原点的个数
  SJD_FCB.Clear;
  for i:=1 to num do                            //依次读出各个还原点
    begin
      SJD:=myini.ReadString('bakupdian','bak'+IntToStr(i),'0');
      SJD_FCB.Items.Add(SJD);
    end;  
  SJD_FCB.ItemIndex:=0;

  FreeAndNil(myini); 
end;
//****************************************************************************************
procedure TSet_F.Exit_FBtnClick(Sender: TObject);
begin
  close;
end;
//****************************************************************************************
procedure TSet_F.ToolButton5Click(Sender: TObject);      //显示关于窗口
begin
  with TAbout_F.Create(nil) do
    try
      ShowModal;
    finally
      Free;
    end;
end;
//****************************************************************************************
procedure TSet_F.Del_FBtnClick(Sender: TObject);        //删除用户信息
var
  DelFlag:integer;
begin
  if YHXX_DBG.Fields[0].Text=YH then
    begin
      MessageBox(handle,'错误:不能删除当前登陆的用户!','错误',MB_OK or MB_ICONERROR);
      exit;
    end;
  DelFlag:=MessageBox(handle,'警告:删除是不可恢复的。确认删除吗?','确认删除',MB_YesNo or MB_ICONWARNING);
  if DelFlag=IDYes then
    begin
      //YH_ADOQ.Delete;    //由于ADOQuery没有查出表中所有的字段,故不能用这一语句
      if YH_ADOT.Locate('UserName',YHXX_DBG.Fields[0].Text,[loCaseInsensitive]) then
        try
          YH_ADOT.Delete;
          MessageBox(handle,'用户删除成功!','成功',MB_OK or MB_ICONINFORMATION);
          YH_ADOQ.Close;
          YH_ADOQ.Open;
        except
          MessageBox(handle,'发生未知错误:用户删除失败!','错误',MB_OK or MB_ICONERROR);
        end;
      YHM_FE.Text:='';
      QX_FCB.ItemIndex:=-1;
      MM_FE.Text:='';
      QRMM_FE.Text:='';
    end;

end;
//****************************************************************************************
procedure TSet_F.YHXX_DBGMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);                        //显示用户信息
begin
  ShowYHInfo;
end;
//****************************************************************************************
procedure TSet_F.XG_FRBtnClick(Sender: TObject);             //修改用户信息
begin
  ShowYHInfo;
end;
//****************************************************************************************
procedure TSet_F.TJ_FRBtnClick(Sender: TObject);             //添加用户信息
begin
  YHM_FE.Text:='';
  QX_FCB.ItemIndex:=-1;
  MM_FE.Text:='';
  QRMM_FE.Text:='';
  YHM_FE.Enabled:=true;
  MM_FE.Enabled:=true;
  QRMM_FE.Enabled:=true;
end;
//****************************************************************************************
procedure TSet_F.Run_FBtnClick(Sender: TObject);             //提交用户信息
var
  AdminNum_ADOQ:TADOQuery;
begin
  if TJ_FRBtn.Checked then        //添加用户信息
    begin
      if QX_FCB.ItemIndex=-1 then
        begin
          MessageBox(handle,'错误:请选择此用户的权限!','信息不完整',MB_OK or MB_ICONERROR);
          exit;
        end;
      if MM_FE.Text='' then
        begin
          MessageBox(handle,'错误:密码不能为空!','信息有误',MB_OK or MB_ICONERROR);
          exit;
        end;
      if MM_FE.Text<>QRMM_FE.Text then
        begin
          MessageBox(handle,'错误:两次输入的密码不相同,请重新输入!','密码有误',MB_OK or MB_ICONERROR);
          MM_FE.Text:='';
          QRMM_FE.Text:='';
          exit;
        end;
      if YH_ADOT.Locate('UserName',YHM_FE.Text,[loCaseInsensitive]) then
        begin
          MessageBox(handle,'错误:用户已经存在了!','信息有误',MB_OK or MB_ICONERROR);
          exit;
        end;
      YH_ADOT.Append;                          //添加用户信息
      YH_ADOT.FieldByName('UserName').AsString:=YHM_FE.Text;
      YH_ADOT.FieldByName('Password').AsString:=MM_FE.Text;
      YH_ADOT.FieldByName('QXID').AsInteger:=QX_FCB.ItemIndex;
      try
        YH_ADOT.Post;
        MessageBox(handle,'用户信息添加成功!','成功',MB_OK or MB_ICONINFORMATION);
        YH_ADOQ.Close;
        YH_ADOQ.Open;
        YHM_FE.Text:='';
        QX_FCB.ItemIndex:=-1;
        MM_FE.Text:='';
        QRMM_FE.Text:='';
      except
        YH_ADOT.Cancel;
      end;
    end
    else begin                       //修改用户信息
      if MM_FE.Text<>QRMM_FE.Text then
        begin
          MessageBox(handle,'错误:两次输入的密码不相同,请重新输入!','密码有误',MB_OK or MB_ICONERROR);
          MM_FE.Text:='';
          QRMM_FE.Text:='';
          exit;
        end;
      if QX_FCB.ItemIndex=0 then     //如果降低了自己的权限,则进行审核
        begin
          AdminNum_ADOQ:=TADOQuery.Create(nil);
          AdminNum_ADOQ.Connection:=BYSJ_DM.TiKu_ADOC;
          AdminNum_ADOQ.SQL.Add('SELECT 1 FROM YH WHERE QXID=1');
          AdminNum_ADOQ.Open;
          if AdminNum_ADOQ.RecordCount<2 then  MessageBox(handle,
              '程序至少要有一个权限为“系统管理员”的用户,你不能降低这个唯一用户的权限!',
              '错误',MB_OK or MB_ICONERROR);
          AdminNum_ADOQ.Close;
          FreeAndNil(AdminNum_ADOQ);
          exit;    
        end;
      YH_ADOT.Locate('UserName',YHM_FE.Text,[loCaseInsensitive]);   //定位记录
      if MM_FE.Text='' then
        begin
          YH_ADOT.Edit;                 //没有修改密码
          YH_ADOT.FieldByName('QXID').AsInteger:=QX_FCB.ItemIndex;
          try
            YH_ADOT.Post;                     //修改用户信息
            MessageBox(handle,'用户信息修改成功!','成功',MB_OK or MB_ICONINFORMATION);
            YH_ADOQ.Close;
            YH_ADOQ.Open;
          except
            YH_ADOT.Cancel;
          end;
        end
        else begin
          YH_ADOT.Edit;                  //有修改密码
          YH_ADOT.FieldByName('Password').AsString:=MM_FE.Text;
          YH_ADOT.FieldByName('QXID').AsInteger:=QX_FCB.ItemIndex;
          try
            YH_ADOT.Post;
            MessageBox(handle,'用户信息修改成功!','成功',MB_OK or MB_ICONINFORMATION);
            YH_ADOQ.Close;
            YH_ADOQ.Open;
          except
            YH_ADOT.Cancel;
          end;
        end;
    end;
end;
//****************************************************************************************
procedure TSet_F.LJ_FBtnClick(Sender: TObject);  //设置备份路径
begin
  Share_FE:=LJ_FE;
  with TBFML_F.Create(nil) do
    try
      ShowModal;
    finally
      Free;
    end;
end;
//****************************************************************************************
procedure TSet_F.HY_FRBtnClick(Sender: TObject);
begin
  SJD_FCB.Enabled:=true;
end;
//****************************************************************************************
procedure TSet_F.BF_FRBtnClick(Sender: TObject);
begin
  SJD_FCB.Enabled:=false;
end;
//****************************************************************************************
procedure TSet_F.FlatButton1Click(Sender: TObject);     //执行操作
var
  myini:TIniFile;
  Flag:integer;
  ExePath:string;
  StartupInfo:TStartupInfo;
  ProcessInfo:TProcessInformation;
begin
  ExePath:=ExtractFilePath(Application.ExeName);
  myini:=TIniFile.Create(ExePath+'set.ini');
  if BF_FRBtn.Checked then
    begin
      Flag:=MessageBox(handle,'为了保证备份数据的正确性,必须退出本程序,确认吗?','备份确认',MB_OKCANCEL or MB_ICONINFORMATION);
      if Flag=IDCancel then
        begin
          FreeAndNil(myini);
          exit;
        end;
      myini.WriteInteger('bakup','CZ',0);
      FreeAndNil(myini);
      StartupInfo.cb:=sizeof(StartupInfo);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      CreateProcess(nil,pchar(ExePath+'BackUp.exe'+' han_backup'),nil,nil,false,0,nil,nil,StartupInfo,ProcessInfo);
      Application.Terminate;
    end
    else begin
      Flag:=MessageBox(handle,'为了保证还原的正确性,必须退出本程序,确认吗?','还原确认',MB_OKCANCEL or MB_ICONINFORMATION);
      if Flag=IDCancel then
        begin
          FreeAndNil(myini);
          exit;
        end;
      myini.WriteInteger('bakup','CZ',1);
      myini.WriteString('bakup','RQ',SJD_FCB.Text);
      FreeAndNil(myini);
      StartupInfo.cb:=sizeof(StartupInfo);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      CreateProcess(nil,pchar(ExePath+'BackUp.exe'+' han_backup'),nil,nil,false,0,nil,nil,StartupInfo,ProcessInfo);
      Application.Terminate;
    end;
end;
//****************************************************************************************
procedure TSet_F.ToolButton4Click(Sender: TObject);      //打开帮助
begin
  ShellExecute(handle,nil,'BYSJ.chm',nil,nil,SW_MAXIMIZE);
end;

end.

⌨️ 快捷键说明

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