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

📄 u_exammakeresult.pas

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

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, Spin, ComCtrls, DBTables, Db;

type
  TFm_ExamMakeResult = class(TForm)
    Btn_Ok: TButton;
    Bevel1: TBevel;
    Label1: TLabel;
    PrgBar: TProgressBar;
    Timer1: TTimer;
    cQuery: TQuery;
    cUpSQL: TUpdateSQL;
    cQueryS_XHAO: TStringField;
    cQueryI_KSHAO: TIntegerField;
    cQueryS_KCDHAO: TStringField;
    cQueryN_CJI: TFloatField;
    procedure FormShow(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
  public
    FExamNo, FGradeNo, FExamType: integer;
    FSubjectCode: string;
  end;

  function Show_ExamMakeResult(pExamNo, pGradeNo, pExamType: integer; pSubjectCode: string): Boolean;

implementation

uses IniFiles, U_GlobalVar, U_GlobalProc;

{$R *.DFM}

function Show_ExamMakeResult(pExamNo, pGradeNo, pExamType: integer; pSubjectCode: string): Boolean;
var
  Fm_ExamMakeResult: TFm_ExamMakeResult;
begin
  Result := False;
  Fm_ExamMakeResult := TFm_ExamMakeResult.Create(Application);
  with Fm_ExamMakeResult do
  try
    FExamNo := pExamNo;
    FGradeNo := pGradeNo;
    FExamType := pExamType;
    FSubjectCode := pSubjectCode;
    if ShowModal = idOk then
      Result := True;
  finally
    Free;
  end;
end;

procedure TFm_ExamMakeResult.FormShow(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

procedure TFm_ExamMakeResult.Timer1Timer(Sender: TObject);
var
  AQuery, BQuery: TQuery;  //  学号;  课程
  I, StdNum, SubNum, Per: Cardinal;
begin
  //1. 取考试号
  //2. 取学生号: 如果是全考, 则从基本信息表内取该年级的各班所有学生; 若是抽考,则应从
  //   抽考人员表内取学生
  //3. 取课程号: 如果是全科, 则从年级课程表内取; 如果是单科, 则应该从考试设置表内取
  //   单科课程号
  //4. 取上述各数据的交集送入成绩表内.
  //5. "正在生成 XX 年级的 XX 课程成绩表..."
  Timer1.Enabled := False;
  aQuery := TQuery.Create(Application);
  with aQuery do
  begin
    DataBaseName := DataDBase;
    SQL.Add('SELECT s_xhao FROM ');
    if FExamType = 1 then
    begin
      SQL.Add('xsjbxx');
      SQL.Add('WHERE s_bjhao LIKE ''' + S_SchoolCode +
        IntToStr(W_CurYear - FGradeNo + 1) + '%''');
    end else
    begin
      SQL.Add('ckry ');
      SQL.Add('WHERE si_nji=' + IntToStr(FGradeNo));
    end;
    Open;
    Last;
    StdNum := aQuery.RecordCount;
  end;
  Application.ProcessMessages;
  PrgBar.Position := 1;

  bQuery := TQuery.Create(Application);
  with bQuery do
  begin
    DataBaseName := DataDBase;
    if FExamType = 2 then  //单科
      SQL.Text := 'SELECT s_kcdhao FROM kc WHERE s_kcdhao=''' +
        FSubjectCode + ''''
    else
      SQL.Text := 'SELECT s_kcdhao FROM xqkskc WHERE si_nji=' +
        IntToStr(FGradeNo);
    Open;
    Last;
    SubNum := bQuery.RecordCount;
  end;
  Application.ProcessMessages;
  PrgBar.Position := 3;

  cQuery.Open;
  Application.ProcessMessages;
  PrgBar.Position := 5;

  I := StdNum * SubNum;
  Per := I div 100;
  I := 1;
  AQuery.First;
  Label1.Caption := '正在生成 ' + GradeNames[FGradeNo - 1] +
    '年级 的成绩表...';
  while not AQuery.Eof do
  begin
    BQuery.First;
    while not BQuery.Eof do
    begin
      if I >= Per then
      begin
        PrgBar.Position := PrgBar.Position + 1;
        Application.ProcessMessages;
      end;
      CQuery.AppendRecord([AQuery.FieldByName('s_xhao').AsString,
        FExamNo, BQuery.FieldByName('s_kcdhao').AsString, 0]);
      BQuery.Next;
      Inc(I);
    end;
    CQuery.ApplyUpdates;
    AQuery.Next;
  end;
  PrgBar.Position := PrgBar.Max;
  Application.ProcessMessages;
  ModalResult := idOk;
  //Close;
end;

end.

⌨️ 快捷键说明

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