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

📄 login.pas

📁 1
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit login;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls, TFlatButtonUnit, WinSkinData, DB,
  ADODB, DosMove, TFlatPanelUnit, Grids, DBGrids, DBGrid3D, DBCtrls,
  TFlatGroupBoxUnit, TFlatCheckBoxUnit, TFlatEditUnit, TFlatSpeedButtonUnit,
  MSNPopUp, TFlatScrollbarUnit;

type
  TfrmLogin = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    btnMin: TFlatButton;
    DosMove1: TDosMove;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DsTest: TDataSource;
    Timer1: TTimer;
    SkinData1: TSkinData;
    panLogin: TFlatPanel;
    FlatButton1: TFlatButton;
    FlatButton2: TFlatButton;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Edit2: TEdit;
    Label4: TLabel;
    Edit3: TEdit;
    Label5: TLabel;
    ComboBox1: TComboBox;
    panInfo: TFlatPanel;
    lblInfo: TLabel;
    lblCount: TLabel;
    panTest: TFlatPanel;
    DBGrid3D1: TDBGrid3D;
    DBMemo1: TDBMemo;
    gupBoxCheck: TFlatGroupBox;
    ChkA: TFlatCheckBox;
    ChkB: TFlatCheckBox;
    ChkC: TFlatCheckBox;
    ChkD: TFlatCheckBox;
    Label6: TLabel;
    BtnEnd: TFlatSpeedButton;
    FlatSpeedButton2: TFlatSpeedButton;
    DBText1: TDBText;
    Label7: TLabel;
    FlatPanel1: TFlatPanel;
    DBNavigator1: TDBNavigator;
    DBText2: TDBText;
    lblfeek: TLabel;
    ADOQuery2: TADOQuery;
    lblright: TLabel;
    btnBK: TFlatButton;
    FlatScrollbar1: TFlatScrollbar;
    procedure FlatButton2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FlatButton1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure btnMinClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FlatSpeedButton2Click(Sender: TObject);
    procedure ADOQuery1AfterScroll(DataSet: TDataSet);
    procedure ChkAClick(Sender: TObject);
    procedure ChkBClick(Sender: TObject);
    procedure ADOQuery1BeforeScroll(DataSet: TDataSet);
    procedure BtnEndClick(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FlatScrollbar1Scroll(Sender: TObject; ScrollPos: Integer);
  private
    { Private declarations }
  public
   { Public declarations }
  end;
//考生信息
Type student=Record
       Name:string[8];     //姓名
       MyClass:string[4];  //班级
       TestPaper:string;    //试卷
       Score:Integer;       //得分
       Feedback:string[1];     //反馈否
       BeginTime:string;    //开始时间
       ExamTime:integer;     //考试时间
       bk:integer;          //补考次数
end;
//考生答案
Type answer=Record
       standard:string[4];     //标准答案
       examinee:string[4];  //考生答案
       result:integer;    //正确否
end;
var
  frmLogin: TfrmLogin;

implementation
//全局变量
var
  stu:student;
  ans:array of answer;
  countDown:integer;
  examCount:integer;
  //拖动无标题窗口
   Opos, Cpos: Tpoint;
   Flag: boolean = false;

{$R *.dfm}


procedure TfrmLogin.FlatButton2Click(Sender: TObject);
begin
close;
application.Terminate;
end;

procedure TfrmLogin.FormActivate(Sender: TObject);
begin
ComboBox1.Items.Clear;
with ADOQuery1 do
  begin
  close;
  sql.clear;
  sql.Add('select 考试名称 from 设置');
  open;
  First;
  while not ADOQuery1.Eof do
  begin
    combobox1.Items.Add(trim(FieldValues['考试名称']));
    Next;
  end;
  end;
end;

procedure TfrmLogin.FlatButton1Click(Sender: TObject);
var
  p:boolean;
  i:integer;
  kl:string;  //考试口令
begin
edit1.Text:=trim(edit1.Text);
edit2.Text:=trim(edit2.Text);
edit3.Text:=trim(edit3.Text);
if edit1.Text='' then
  begin
  Application.MessageBox('请输入你的姓名。', '信息', 64);
  edit1.SetFocus;
  abort;
  end;
//姓名必须是汉字
p:=true;
for i:=1 to strlen(pchar(edit1.text)) do
  if ByteType(edit1.Text,i) = mbSingleByte then p:=false;//中文字符
if p=false then
  begin
  Application.MessageBox('姓名必须全部由汉字组成。', '信息', 64);
  edit1.SetFocus;
  abort;
  end;

if edit2.Text='' then
  begin
  Application.MessageBox('请输入你的班别。', '信息', 64);
  edit2.SetFocus;
  abort;
  end;
if ComboBox1.Text='' then
  begin
  Application.MessageBox('请选择试卷。', '信息', 64);
  ComboBox1.SetFocus;
  abort;
  end;
//根据选择的试卷验证口令是否正确
with ADOQuery1  do
  begin
  close;
  sql.clear;
  sql.Add('select * from 设置 where 考试名称=:p1');
  parameters.ParamByName('p1').Value:=ComboBox1.Text;
  open;

  //是否为补考
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('select 姓名 from 成绩 where 姓名=:p1 and 班别=:p2 and 试卷=:p3');
  ADOQuery2.parameters.ParamByName('p1').Value:=edit1.Text;
  ADOQuery2.parameters.ParamByName('p2').Value:=edit2.Text;
  ADOQuery2.parameters.ParamByName('p3').Value:=combobox1.Text;
  ADOQuery2.Open;
  stu.bk:=ADOQuery2.RecordCount;
  ADOQuery2.Close;
  
  //允许补考吗?
  if (stu.bk>0) and (FieldByName('可补考次数').Value<1) then
    begin
    Application.MessageBox('对不起,本次考试不允许进行补考。', '信息', 64);
    edit3.SetFocus;
    abort;
    end;
  //如果是补考,补考是否已超次数
  if stu.bk>(FieldByName('可补考次数').Value)  then
    begin
    Application.MessageBox(pchar('对不起,你已经进行了'+trim(inttostr(stu.bk-1))+'次补考。不能再次补考。'), '信息', 64);
    edit3.SetFocus;
    abort;
    end;

  btnBK.Visible:=false;
  kl:=trim(FieldByName('口令').AsString);
  //如果允许补考,且次数未超,则进行补考
  if (FieldByName('可补考次数').Value>0) and (stu.bk>0) and  (stu.bk<=(FieldByName('可补考次数').Value))  then
    begin
    kl:=trim(FieldByName('补考口令').AsString);
    btnBK.Caption:='第'+trim(inttostr(stu.bk))+'次补考';
    btnBK.Visible:=true;
    end;

  if edit3.Text<>kl  then
    begin
    if  stu.bk>0 then
      Application.MessageBox('你进行的是补考,请输入正确的补考口令。', '信息', 64)
    else
      Application.MessageBox('口令不正确。', '信息', 64);
    edit3.SetFocus;
    abort;
    end
  else
    begin
    stu.Name:=edit1.Text;
    stu.MyClass:=edit2.Text;
    stu.TestPaper:=combobox1.Text;
    stu.Score:=0;
    stu.Feedback:=FieldByName('反馈否').AsString;
    stu.ExamTime:=FieldValues['考试时间'];
    lblInfo.Caption:='考生姓名:'+ stu.Name+'    班级:'+stu.MyClass+'    试卷:'+stu.TestPaper;
    //进入考试须知
    if  FieldValues['显示否']='1' then
       Application.MessageBox(pchar(trim(FieldValues['考试须知'])), '考试须知', 64);
    //运行否
    if  FieldValues['运行否']<>'1' then
       begin
       close;
       application.Terminate;
       end
    else
      //运行
      begin
      panLogin.Visible:=false;
      stu.BeginTime:=TimeToStr(Now);

      //取题目
      close;
      sql.clear;
      sql.Add('select * from '+stu.TestPaper+' order by 题号');
      open;

      DBMemo1.DataSource:=DsTest;
      DBText1.DataSource:=DsTest;
      DBText1.DataField:='题号';
      DBText2.DataSource:=DsTest;
      DBText2.DataField:='标准答案';

      //倒计时,开考
      countdown:=stu.ExamTime;
      Timer1.Enabled:=true;
      lblCount.Caption:='倒计时:'+inttostr(countdown);
      panInfo.Visible:=true;  //考生信息栏可见
      panTest.Visible:=true;  //试卷区可见

      //根据题量设置考生答案的数组大小
      examCount:=RecordCount;
      SetLength(ans,examCount+1);

      first;
      end;

    end;
  end;

end;

⌨️ 快捷键说明

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