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

📄 u_examresultinput.pas

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

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  HGrids, HDBGrids, TB97Tlbr, TB97Ctls, TB97, DBTables, Db, Menus,
  ComCtrls, ExtCtrls, ImgList, HTitleDBGrid;

type
  TFm_ExamResultInput = class(TForm)
    MDS: TDataSource;
    Dock: TDock97;
    Tb97_Func: TToolbar97;
    TbBtn_ExamNo: TToolbarButton97;
    TbBtn_Help: TToolbarButton97;
    TbBtn_Exit: TToolbarButton97;
    TbSep02: TToolbarSep97;
    MQuery: TQuery;
    MUpSQL: TUpdateSQL;
    PPM: TPopupMenu;
    PM_Add: TMenuItem;
    PM_BBan: TMenuItem;
    PM_Help: TMenuItem;
    PM_Exit: TMenuItem;
    PM_Z02: TMenuItem;
    MTrView: TTreeView;
    Spl_Main: TSplitter;
    Pnl_DAn: TPanel;
    TbBtn_Direct: TToolbarButton97;
    ToolbarSep971: TToolbarSep97;
    ImageList: TImageList;
    PM_Z01: TMenuItem;
    UpQuery: TQuery;
    TbBtn_Print: TToolbarButton97;
    TbSp01: TToolbarSep97;
    PM_Z03: TMenuItem;
    PM_Print: TMenuItem;
    MGrid: THDBGrid;
    procedure TbBtn_ExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Spl_MainCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure MTrViewGetImageIndex(Sender: TObject; Node: TTreeNode);
    procedure MTrViewGetSelectedIndex(Sender: TObject; Node: TTreeNode);
    procedure MTrViewChange(Sender: TObject; Node: TTreeNode);
    procedure TbBtn_HelpClick(Sender: TObject);
    procedure TbBtn_DirectClick(Sender: TObject);
    procedure TbBtn_ExamNoClick(Sender: TObject);
    procedure MQueryAfterPost(DataSet: TDataSet);
    procedure TbBtn_PrintClick(Sender: TObject);
  private
  public
    OldGrade, CurGrade: integer;
    CurClass, SubjectCode: string;
    ExamType: integer;
    ExamChanged: Boolean;
    procedure RefreshFieldColumn(GradeNo: integer);
  end;

var
  Fm_ExamResultInput: TFm_ExamResultInput;

procedure Show_ExamResultInput;

implementation

uses IniFiles, U_Main, U_GlobalProc, U_GlobalVar, U_DM, U_SetCurExam,
     U_Print;

{$R *.DFM}

procedure Show_ExamResultInput;
var
  i: integer;
begin
  for i := Fm_Main.MDIChildCount - 1 downto 0 do
  begin
    if (Fm_Main.MDIChildren[i].Name <> 'Fm_Wizard') and
      (Fm_Main.MDIChildren[i].Name <> 'Fm_ExamResultInput') then
      Fm_Main.MDIChildren[i].Close;
  end;

  if not Assigned(Fm_ExamResultInput) then
  begin
    Fm_ExamResultInput := TFm_ExamResultInput.Create(Application);
    with Fm_ExamResultInput do
    begin
      GetCurExamCode;
      RefreshGridStyle(MGrid);
      MakeGradeTree(MTrView, 0, False);
      OldGrade := -1;
      ExamChanged := True;
      MTrView.Items[0].Selected := True;
    end;
  end;
  with Fm_ExamResultInput do
  begin
    if WindowState <> wsMaximized then
      WindowState := wsMaximized;
    Show;
    SetFocus;
  end;
end;

procedure TFm_ExamResultInput.RefreshFieldColumn(GradeNo: integer);
var
  aQuery: TQuery;
  aColumn: THColumn;
  ExamType, i: integer;
begin
  aQuery := TQuery.Create(Application);
  with aQuery do
  try
    DataBaseName := DataDBase;
    SQL.Text := 'SELECT si_kslxing, s_kcdhao FROM kssz WHERE si_nji=' + IntToStr(GradeNo);
    Open;
    if IsEmpty then
      Exit;
    ExamType := FieldByName('si_kslxing').AsInteger;
    SubjectCode := FieldByName('s_kcdhao').AsString;
    Close;
    SQL.Text := 'SELECT d1.s_kcdhao, s_kcmcheng FROM ';
    if ExamType = 2 then
      SQL.Text := SQL.Text + 'kc WHERE s_kcdhao=''' + SubjectCode + ''''
    else
      SQL.Text := SQL.Text + 'xqkskc d1, kc d2 WHERE d1.s_xqhao=''' + S_CurTermCode +
        ''' AND d1.si_nji=' + IntToStr(GradeNo) + ' AND d1.s_kcdhao=d2.s_kcdhao';
    Open;
    if IsEmpty then
      Exit;
    while not Eof do
    begin
      aColumn := MGrid.FindFirstColumn('n_' + aQuery.FieldByName('s_kcdhao').AsString);
      if Assigned(aColumn) then
        aColumn.Title.Caption := FieldByName('s_kcmcheng').AsString;
      Next;
    end;
    Close;
    if MGrid.Columns.Count > 2 then
    begin
      with MGrid.Columns[0] do
      begin
        Title.Caption := '学号';
        CanEdit := False;
      end;
      with MGrid.Columns[1] do
      begin
        Title.Caption := '姓名';
        Width := 60;
        CanEdit := False;
      end;
      for i := 2 to MGrid.Columns.Count - 1 do
        MGrid.Columns[i].Width := 50;
    end;
  finally
    Close;
    Free;
  end;
end;

procedure TFm_ExamResultInput.TbBtn_ExitClick(Sender: TObject);
begin
  Close;
end;

procedure TFm_ExamResultInput.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if MQuery.State in [dsEdit] then
    MQuery.Post;
  MQuery.Close;
  Action := caFree;
  Fm_ExamResultInput := nil;
end;

procedure TFm_ExamResultInput.Spl_MainCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if NewSize < 8 then
    Accept := False;
end;

procedure TFm_ExamResultInput.MTrViewGetImageIndex(Sender: TObject;
  Node: TTreeNode);
begin //
  if Node.HasChildren then
  begin
    if Node.Expanded then
      Node.ImageIndex := 2
    else
      Node.ImageIndex := 1;
  end
  else
  begin
    if Node.Level = 0 then
      Node.ImageIndex := 1
    else
      Node.ImageIndex := 0;
  end;
end;

procedure TFm_ExamResultInput.MTrViewGetSelectedIndex(Sender: TObject;
  Node: TTreeNode);
begin
  if Node.HasChildren then
  begin
    if Node.Expanded then
      Node.SelectedIndex := 5
    else
      Node.SelectedIndex := 4;
  end
  else
  begin
    if Node.Level = 0 then
      Node.SelectedIndex := 4
    else
      Node.SelectedIndex := 3;
  end;
end;

procedure TFm_ExamResultInput.MTrViewChange(Sender: TObject;
  Node: TTreeNode);
var
  tmS, tmCaption: string;
  aQuery, bQuery, cQuery: TQuery;
  I: integer;
begin
  if Integer(Node.Data) < 9999 then
  begin //  年级
    CurGrade := W_CurYear - Integer(Node.Data) + 1;
    CurClass := '';
  end
  else
  begin //  班级
    tmS := Copy(IntFormatStr(Integer(Node.Data), 9), 4, 4);
    CurGrade := W_CurYear - StrToInt(tmS) + 1;
    CurClass := IntFormatStr(Integer(Node.Data), 9);
  end;
  with MQuery do
  try
    if MQuery.State = dsEdit then
      MQuery.Post;
    DisableControls;
    AfterPost := nil;

    aQuery := TQuery.Create(Application);
    with aQuery do
    try
      DataBaseName := DataDBase;
      //  表标题
      SQL.Text := 'SELECT s_kssming, si_kslxing, s_kcdhao FROM kssz WHERE i_kshao=' +
        IntToStr(I_CurExamCode[CurGrade]);
      Open;
      if not IsEmpty then
        tmCaption := FieldByName('s_kssming').AsString;
      if Pos('年级', Node.Text) > 0 then
        MGrid.CaptionString := tmCaption + '成绩登记表'
      else
        MGrid.CaptionString := ' ' + tmCaption + Node.Text +
          ' 成绩登记表';

      if I_CurExamCode[CurGrade] = 0 then
      begin
        Caption := '学生考试成绩登记表—(当前年级没有选定考试)';
        MessageBeep(0);
        MQuery.Close;
        //U_GlobalProc.Show_ErrorMess('当前年级没有选定考试。');
        Exit;
      end
      else
        Caption := '学生考试成绩登记表';
      //SQL.Text := 'SELECT si_kslxing, s_kcdhao FROM kssz WHERE si_nji=' + IntToStr(CurGrade);
      //Open;
      if IsEmpty then
        Exit;
      ExamType := FieldByName('si_kslxing').AsInteger;
      SubjectCode := FieldByName('s_kcdhao').AsString;
      Close;
    finally
      Close;
      Free;
    end;
    if (OldGrade <> CurGrade) or ExamChanged then
    begin
      ExamChanged := False;
      Close;
      tmS := 'SELECT s_xhao, s_xming'; //, d1.i_kshao';
      //  课程
      bQuery := TQuery.Create(Application);
      with bQuery do
      try
        DataBaseName := DataDBase;
        SQL.Text := 'SELECT s_kcdhao FROM ';
        if ExamType = 2 then
          SQL.Text := SQL.Text + 'kc WHERE s_kcdhao=''' + SubjectCode + ''''
        else
          SQL.Text := SQL.Text + 'xqkskc WHERE s_xqhao=''' + S_CurTermCode +
            ''' AND si_nji=' + IntToStr(CurGrade);
        Open;
        if IsEmpty then
          Exit;
        while not Eof do
        begin
          tmS := tmS + ', CAST(''0'' AS NUMERIC) AS n_' + FieldByName('s_kcdhao').AsString;
          Next;
        end;
        tmS := tmS + ' FROM xsjbxx WHERE 0=1';
        Close;

        MQuery.SQL.Text := tmS;
        MQuery.Open;
      finally
        Close;
        Free;
      end;
    end  //  年级没变
    else if MQuery.Active then
    begin
      MQuery.First;
      while not MQuery.Eof do
        MQuery.Delete;
    end else
      Exit;
    //  单个成绩
    cQuery := TQuery.Create(Application);
    with cQuery do
    try
      DataBaseName := DataDBase;
      if ExamType = 2 then
      begin
        SQL.Text := 'SELECT d1.s_xhao, d2.s_xming FROM ckry d1, xsjbxx d2 WHERE d1.si_nji=' +
          IntToStr(CurGrade);
        if CurClass <> '' then
          SQL.Text := SQL.Text + ' AND d2.s_bjhao=''' + CurClass + '''';
        SQL.Text := SQL.Text + ' AND d1.s_xhao=d2.s_xhao';
      end
      else
      begin
        if CurClass = '' then
          SQL.Text := 'SELECT s_xhao, s_xming FROM xsjbxx WHERE s_bjhao LIKE ''' +
            S_SchoolCode + IntFormatStr(W_CurYear - CurGrade + 1, 4) + '%'''
        else
          SQL.Text := 'SELECT s_xhao, s_xming FROM xsjbxx WHERE s_bjhao=''' +
            CurClass + '''';
      end;
      Open;
      if IsEmpty then
      begin
        Close;
        Exit;
      end;
      while not Eof do
      begin
        MQuery.AppendRecord([FieldByName('s_xhao').AsString, FieldByName('s_xming').Asstring]); //,
          //I_CurExamCode[CurGrade]]);
        Next;
      end;
    finally
      Close;
      //  成绩
      SQL.Text := 'SELECT s_xhao, s_kcdhao, n_cji FROM kscj WHERE ' +
        'i_kshao=' + IntToStr(I_CurExamCode[CurGrade]) + ' AND s_kcdhao=:ps_kcdhao';
    end;
    try
      for i := 2 to Fields.Count - 1 do
      begin
        tmS := Copy(Fields[i].FieldName, 3, 4);
        First;
        with cQuery do
        begin
          Close;
          ParamByName('ps_kcdhao').AsString := tmS;
          Prepare;
          Open;
        end;
        while not Eof do
        begin
          if cQuery.Locate('s_xhao', FieldByName('s_xhao').AsString, []) then
          begin
            Edit;
            Fields[i].AsFloat := cQuery.FieldByName('n_cji').AsFloat;
            Post;
          end;
          Next;
        end;
        cQuery.Close;
      end;
    finally
      cQuery.Close;
      cQuery.Free;
    end;
    AfterPost := MQueryAfterPost;
  finally
    EnableControls;
    OldGrade := CurGrade;
    RefreshFieldColumn(CurGrade);
  end;
end;

procedure TFm_ExamResultInput.TbBtn_HelpClick(Sender: TObject);
begin //

end;

procedure TFm_ExamResultInput.TbBtn_DirectClick(Sender: TObject);
begin
  if MGrid.ReturnDirection = rdUp then
    MGrid.ReturnDirection := rdNone
  else
    MGrid.ReturnDirection := THReturnDirection(Integer(MGrid.ReturnDirection) + 1);
  TbBtn_Direct.ImageIndex := 38 + Integer(MGrid.ReturnDirection);
end;

procedure TFm_ExamResultInput.TbBtn_ExamNoClick(Sender: TObject);
begin //
  if U_SetCurExam.Show_SetCurExam then
  begin
    GetCurExamCode;
    ExamChanged := True;
    MTrViewChange(MTrView, MTrView.Selected);
  end;
end;

procedure TFm_ExamResultInput.MQueryAfterPost(DataSet: TDataSet);
var
  i: integer;
  tmS: string;
begin //
  with MQuery do
    for i := 2 to FieldCount - 1 do
    begin
      tmS := Copy(Fields[i].FieldName, 3, 4);
      UpQuery.ParamByName('pn_cji').AsFloat := Fields[i].AsFloat;
      UpQuery.ParamByName('ps_xhao').AsString := Fields[0].AsString;
      UpQuery.ParamByName('pi_kshao').AsInteger := I_CurExamCode[CurGrade];
      UpQuery.ParamByName('ps_kcdhao').AsString := tmS;
      UpQuery.ExecSQL;
    end;

end;

{procedure TFm_ExamResultInput.QueryGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  DataSetGetText(MGrid, Sender, Text, DisplayText);
end;

procedure TFm_ExamResultInput.QuerySetText(Sender: TField;
  const Text: string);
begin
  DataSetSetText(MGrid, Sender, Text);
end;}
procedure TFm_ExamResultInput.TbBtn_PrintClick(Sender: TObject);
begin
  Show_Print(MGrid);
end;

end.

⌨️ 快捷键说明

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