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

📄 mainfrm.pas

📁 一个用Delphi做的在线考试系统,可以实现网络下的在线考试
💻 PAS
字号:
unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, ExtCtrls, Db, DBTables, Grids, DBGrids, Mask, DBCtrls,
  Buttons, ImgList, jpeg,Math, Spin, ADODB;

type
  TMainForm = class(TForm)
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    rdChoose: TRadioGroup;
    DBRichEdit1: TDBRichEdit;
    seBegin: TSpinEdit;
    Label1: TLabel;
    Label2: TLabel;
    seEnd: TSpinEdit;
    spbFirst: TSpeedButton;
    spbNext: TSpeedButton;
    spbPrior: TSpeedButton;
    spbLast: TSpeedButton;
    spbAutoShow: TSpeedButton;
    pnlAutoShow: TPanel;
    Label3: TLabel;
    spTime: TSpinEdit;
    Label4: TLabel;
    spbOk: TSpeedButton;
    spbCancel: TSpeedButton;
    Shape1: TShape;
    spbClose: TSpeedButton;
    DataSource1: TDataSource;
    Timer1: TTimer;
    SpeedButton1: TSpeedButton;
    lblCaption: TLabel;
    Button1: TButton;
    ADOConnection1: TADOConnection;
    Query1: TADOQuery;
    Query2: TADOQuery;
    ADOQuery1: TADOQuery;
    Label5: TLabel;
    procedure FormShow(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure spbAutoShowClick(Sender: TObject);
    procedure spbOkClick(Sender: TObject);
    procedure spbCancelClick(Sender: TObject);
    procedure spbFirstClick(Sender: TObject);
    procedure spbNextClick(Sender: TObject);
    procedure spbPriorClick(Sender: TObject);
    procedure spbLastClick(Sender: TObject);
    procedure spbCloseClick(Sender: TObject);
    procedure Query1AfterScroll(DataSet: TDataSet);
    procedure Query1AfterOpen(DataSet: TDataSet);
    procedure seBeginChange(Sender: TObject);
    procedure seEndChange(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure spTimeChange(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure rdChooseClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
    sc,sn: string;
    sw:integer;
    procedure CreateChooseItems;
    procedure  sAppendRecord(stm,sc1,sc2,sc3,sc4,sans:string);
    procedure FormInit;
    procedure EnableButtons(B:Boolean);
    procedure EnableCtrls(B:Boolean);
    procedure AppendUser(sc1,sn1:string);
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

uses Dmmain,contanst,TaxPublic, UserCheckFrm;

{$R *.DFM}

{ TMainForm }


procedure TMainForm.EnableButtons(B: Boolean);
begin
{  btnAdd.Enabled :=  B;
  btnDelete.Enabled :=   B;
  btnModify.Enabled :=   B;
  btnExit.Enabled :=  B;
  btnQuery.Enabled := B;
  btnRefresh.Enabled := B;
  btnSave.Enabled := not B;
  btnCancel.Enabled :=not B;
}
end;

procedure TMainForm.EnableCtrls(B: Boolean);
begin
end;

procedure TMainForm.FormInit;
begin
  seBegin.Value := 1;
  seEnd.Value := 100;
  Timer1.Enabled := False;
  pnlAutoShow.Visible := False;
  Query1.Close;
  Query1.Open;
  Query2.Close;
  Query2.Open;
  lblCaption.Caption := '总共有题'+IntToStr(Query1.RecordCount)+'个';
end;




procedure TMainForm.FormShow(Sender: TObject);
begin
  if not UserCheckForm.UserCheckDlg(sc,sn) then
  begin
    Application.Terminate;
    Exit;
  end;
  FormInit;
  AppendUser(sc,sn);

end;



procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
    if not (ActiveControl is TDBMemo) and not (ActiveControl is TDBGrid)
        and not (ActiveControl is TMemo) then
    begin
      key := #0;  //此键盘消息不再由其他程序处理
      Perform(WM_NEXTDLGCTL, 0, 0);  //焦点跳转到下一控件
    end
    else if (ActiveControl is TDBGrid) then
      with TDBGrid(ActiveControl) do
        if SelectedIndex < (fieldcount - 1) then
          SelectedIndex := SelectedIndex + 1  //焦点跳转到下一栏
        else
          SelectedIndex := 0;
end;

procedure TMainForm.spbAutoShowClick(Sender: TObject);
begin
  pnlAutoShow.Visible := True;
end;

procedure TMainForm.spbOkClick(Sender: TObject);
begin
  pnlAutoShow.Visible := False;
  Timer1.Enabled := True;
  //  DoAutoShow;
end;

procedure TMainForm.spbCancelClick(Sender: TObject);
begin
  Timer1.Enabled := False;
  pnlAutoShow.Visible := False;
end;

procedure TMainForm.spbFirstClick(Sender: TObject);
begin
  Query1.First;
  sw := 1;
  Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;

procedure TMainForm.spbNextClick(Sender: TObject);
begin
  Query1.Next;
  if Query1.Eof then Exit;
  sw := sw + 1;
  Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;

procedure TMainForm.spbPriorClick(Sender: TObject);
begin
  Query1.Prior;
  if Query1.Bof then Exit;
  sw := sw -1;
  Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;

procedure TMainForm.spbLastClick(Sender: TObject);
begin
  Query1.Last;
  sw := 6750;
  Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;

procedure TMainForm.spbCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.CreateChooseItems;
begin
  With Query1 do
  begin
    rdChoose.Items.Clear;
    rdChoose.Items.Add('A   '+FieldByName('A').Asstring);
    rdChoose.Items.Add('B   '+FieldByName('B').Asstring);
    rdChoose.Items.Add('C   '+FieldByName('C').Asstring);
    rdChoose.Items.Add('D   '+FieldByName('D').Asstring);
  end;
  with AdoQuery1 do
  begin
    Close;
    Sql.Text := 'select da from 学生答题 where xh='+QuotedStr(sc)+' and Th='+QuotedStr(Query1.FieldByName('RowId').AsString);
    Open;
    if  UpperCase(FieldByName('da').Asstring) = 'A' then
     rdChoose.itemIndex := 0;
    if  UpperCase(FieldByName('da').Asstring) = 'B' then
     rdChoose.itemIndex := 1;
    if  UpperCase(FieldByName('da').Asstring) = 'C' then
     rdChoose.itemIndex := 2;
    if  UpperCase(FieldByName('da').Asstring) = 'D' then
     rdChoose.itemIndex := 3;

  end;
end;

procedure TMainForm.Query1AfterScroll(DataSet: TDataSet);
begin
  CreateChooseItems;

end;

procedure TMainForm.Query1AfterOpen(DataSet: TDataSet);
begin
  CreateChooseItems;
  lblCaption.Caption := '总共有题'+IntToStr(Query1.RecordCount)+'个';

end;

procedure TMainForm.seBeginChange(Sender: TObject);
var
  s: string;
begin
  if seBegin.Value > seEnd.Value then
  begin
    MessageBoxINfo('起始值不能大于终止值!');
    Exit;
  end;
  s := 'select * from 单项选择 where rowId>='+
       IntToStr(136454+seBegin.Value)+' and RowId<='+
       IntToStr(136454+seEnd.Value);
  //OpenQuery(Query1,s);

end;

procedure TMainForm.seEndChange(Sender: TObject);
var
  s: string;
begin
  if seBegin.Value > seEnd.Value then
  begin
    MessageBoxINfo('起始值不能大于终止值!');
    Exit;
  end;
  s := 'select * from 单项选择 where rowId>='+
       IntToStr(136454+seBegin.Value)+' and RowId<='+
       IntToStr(136454+seEnd.Value);
 // OpenQuery(Query1,s);
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
  Query1.Next;
  if UpperCase(Query1.FieldByName('da').Asstring) = 'A' then
    rdChoose.ItemIndex := 0;
  if UpperCase(Query1.FieldByName('da').Asstring) = 'B' then
    rdChoose.ItemIndex := 1;
  if UpperCase(Query1.FieldByName('da').Asstring) = 'C' then
    rdChoose.ItemIndex := 2;
  if UpperCase(Query1.FieldByName('da').Asstring) = 'D' then
    rdChoose.ItemIndex := 3;
end;

procedure TMainForm.spTimeChange(Sender: TObject);
begin
  Timer1.Interval := spTime.Value * 1000;
end;

procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin
  if UpperCase(Query1.FieldByName('da').Asstring) = 'A' then
    rdChoose.ItemIndex := 0;
  if UpperCase(Query1.FieldByName('da').Asstring) = 'B' then
    rdChoose.ItemIndex := 1;
  if UpperCase(Query1.FieldByName('da').Asstring) = 'C' then
    rdChoose.ItemIndex := 2;
  if UpperCase(Query1.FieldByName('da').Asstring) = 'D' then
    rdChoose.ItemIndex := 3;
end;

procedure TMainForm.rdChooseClick(Sender: TObject);
var
  i,j: Integer;
begin

  with Query2 do
  begin
    Close;
    Sql.Text := 'select * from 学生答题 where xh='+QuotedStr(sc) +' and th='+QuotedStr(Query1.FieldByName('RowId').Asstring);
    Open;
    if IsEmpty then
    begin
      append;
      FieldByName('xh').AsString := Sc;
      FieldByName('xm').AsString := Sn;
      FieldByName('zqda').AsString := Query1.FieldbyName('da').AsString;
      FieldByName('th').AsString := Query1.FieldbyName('RowID').AsString;
      if rdChoose.itemIndex = 0 then
              FieldByName('da').AsString := 'A';
      if rdChoose.itemIndex = 1 then
              FieldByName('da').AsString := 'B';
      if rdChoose.itemIndex = 2 then
              FieldByName('da').AsString := 'C';
      if rdChoose.itemIndex = 3 then
              FieldByName('da').AsString := 'D';
      post;
    end
    else
    begin
      Edit;

      if rdChoose.itemIndex = 0 then
              FieldByName('da').AsString := 'A';
      if rdChoose.itemIndex = 1 then
              FieldByName('da').AsString := 'B';
      if rdChoose.itemIndex = 2 then
              FieldByName('da').AsString := 'C';
      if rdChoose.itemIndex = 3 then
              FieldByName('da').AsString := 'D';
      post;
    end;
  end;
{
  if UpperCase(Query1.FieldByName('Da').Asstring) = 'A' then
    i := 0;
  if UpperCase(Query1.FieldByName('Da').Asstring) = 'B' then
    i := 1;
  if UpperCase(Query1.FieldByName('Da').Asstring) = 'C' then
    i := 2;
  if UpperCase(Query1.FieldByName('Da').Asstring) = 'D' then
    i := 3;
  j := rdChoose.itemIndex;
  if i <> j then
    MessageBoxWarning('错误!,请重新选择。');
  }
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  tm,c1,c2,c3,c4,ans,tt,gg: string;
begin
  tt := '';
  with Query1 do
  begin
    First;
    while not eof do
    begin
      tm := FieldByName('CText').Asstring;
      gg := tm;
      c1 := FieldByName('Choise1').Asstring;
      c2 := FieldByName('Choise2').Asstring;
      c3 := FieldByName('Choise3').Asstring;
      c4 := FieldByName('Choise4').Asstring;
      ans := FieldByName('Answer').Asstring;
      tm := StringReplace(tm,' ','',[rfReplaceAll]);
      tm := StringReplace(tm,'(','(',[rfReplaceAll]);
      tm := StringReplace(tm,')',')',[rfReplaceAll]);
      if tt <> tm then
        sAppendRecord(gg,c1,c2,c3,c4,ans);
      tt := tm;
      Caption := Tm;
      Next;
    end;
  end;
end;

procedure TMainForm.sAppendRecord(stm, sc1, sc2, sc3, sc4, sans: string);
begin
{
 // with TAble1 do
  begin
    Append;
      FieldByName('CText').Asstring := stm;
      FieldByName('Choise1').Asstring := sc1;
      FieldByName('Choise2').Asstring := sc2;
      FieldByName('Choise3').Asstring := sc3;
      FieldByName('Choise4').Asstring := sc4;
      FieldByName('Answer').Asstring :=sans;
      POst;
  end;
 }
end;

procedure TMainForm.AppendUser(sc1, sn1:string);
begin
  with Query2 do
  begin
    Close;
    Sql.Text := 'select * from 学生答题 where xh='+QuotedStr(sc1);
    Open;
    if IsEmpty then
    begin
      append;
      FieldByName('xh').AsString := Sc1;
      FieldByName('xm').AsString := Sn1;
      FieldByName('th').AsString := '9999999999';
      post;
    end;
  end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
  s: string;
begin
  sw := 1;
  AdoConnection1.Close;
  s := ' Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;'+
       'User ID=sa;Initial Catalog=Exam;Data Source=192.168.254.5;Use Procedure '+
       'for Prepare=1;Auto Translate=True;Packet Size=4096;'+
       'Workstation ID=192.168.254.5;Use Encryption for Data=False;'+
       'Tag with column collation when possible=False';
  ADOConnection1.ConnectionString := s;
  ADOConnection1.LoginPrompt := False;
  try
    ADOConnection1.Open;
  except
    MessageBoxInfo('无法连接远程数据库!');
    Application.Terminate;
    Close;
    Exit;
  end;
  Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;

procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MessageBoxQuery('真的退出吗?')<> MrYes then
    CanClose := False
  else
    CanClose := True;
end;

end.

⌨️ 快捷键说明

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