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

📄 u_allsubjecttable.pas

📁 一个简单的学籍管理软件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    First;
    while not Eof do
    begin
      if (CurClass = '') or
        (FieldByName('s_bjhao').AsString = CurClass) then
      begin
        Inc(AryCount);
        SetLength(OrderBuf, AryCount);
        OrderBuf[AryCount - 1].xhao := FieldByName('s_xhao').AsString;
        OrderBuf[AryCount - 1].cji := FieldByName(IdxName).AsFloat;
      end;
      Next;
    end;
  except
    SetLength(OrderBuf, 0);
    AryCount := 0;
  end;

  if AryCount > 0 then
  begin //  气泡排序:逆序从大到小
    for i := 0 to AryCount - 1 do
    begin
      ChangedFlag := False;
      for j := 0 to AryCount - i - 2 do
      begin
        if OrderBuf[j].cji < OrderBuf[j + 1].cji then
        begin
          M := OrderBuf[j + 1];
          OrderBuf[j + 1] := OrderBuf[j];
          OrderBuf[j] := m;
          ChangedFlag := True;
        end;
      end;
      if not ChangedFlag then
        Break;
    end;
  end;

  with MQuery do
  try
    DisableControls;
    Close;
    if GradeChanged or ExamChanged then
      SQL.Text := SQuery.SQL.Text;
    Open;

    if (BaseCondCode = 1) and (AryCount <= BaseConds) then
    begin
      UsedCondCode := 0;
      UsedConds := 0;
    end else
    begin
      UsedCondCode := BaseCondCode;
      UsedConds := BaseConds;
    end;

    for i := 0 to AryCount - 1 do
    try
      case UsedCondCode of
        1: if i >= UsedConds then Continue;
        2:
        begin
          if IdxName = 'n_zfen' then
          begin
            if (OrderBuf[i].cji / (FieldCount - 6) < UsedConds) then
              Continue;
          end
          else if OrderBuf[i].cji < UsedConds then
            Continue;
        end;
      end;

      if SQuery.Locate('s_xhao', OrderBuf[i].xhao, []) then
      begin
        Append;
        FieldByName('i_mci').AsInteger := i + 1;
        FieldByName('s_xhao').AsString := SQuery.FieldByName('s_xhao').AsString;
        FieldByName('s_xming').AsString := SQuery.FieldByName('s_xming').AsString;
        FieldByName('s_bjhao').AsString := SQuery.FieldByName('s_bjhao').AsString;
        FieldByName('n_zfen').AsFloat := SQuery.FieldByName('n_zfen').AsFloat;
        FieldByName('n_pjun').AsFloat := SQuery.FieldByName('n_pjun').AsFloat;
        for j := 4 to SQuery.FieldCount - 3 do
          Fields[j].AsFloat := SQuery.Fields[j].AsFloat;
        Post;
      end;
    finally
      OrderBuf[i].xhao := '';
    end;
    SetLength(OrderBuf, 0);
    First;
  finally
    while ControlsDisabled do
      EnableControls;
  end;
end;

procedure TFm_AllSubjectTable.SetGridTitle;
var
  tmCaption: string;
begin
  if not MQuery.IsEmpty then
    tmCaption := S_CurExamName[CurGrade];

  if Pos('年级', MTrView.Selected.Text) = 0 then
    tmCaption := tmCaption + ' ' + MTrView.Selected.Text + ' ';
  if (CurSubCode = 0) and (CurSelSub > 0) then
    tmCaption := tmCaption + CmbBox_Subject.Text;

  //  UsedCondCode 0 -- 没有条件  1 -- 前 X 名  2 -- XX 分以上
  if (BaseCondCode = 1) and (BaseCondCode <> UsedCondCode) and
     (MQuery.RecordCount > BaseConds) then
  begin
    UsedCondCode := BaseCondCode;
    UsedConds := BaseConds;
  end;
  case UsedCondCode of
    1: tmCaption := tmCaption + '前' + IntToStr(UsedConds) + '名';
    2:
    begin
      if (CurSubCode = 0) and (CurSelSub = 0) {and
         (Pos('年级', MTrView.Selected.Text) > 0)} then
        tmCaption := tmCaption + '平均' + IntToStr(UsedConds) + '分以上'
      else
        tmCaption := tmCaption + IntToStr(UsedConds) + '分以上';
    end;
  end;
  MGrid.CaptionString := tmCaption + '成绩表';
end;

function TFm_AllSubjectTable.CheckCurExam: Boolean;
var
  aQuery: TQuery;
begin
  Result := False;
  //  当前考试
  if I_CurExamCode[CurGrade] = 0 then
  begin
    Caption := '学生考试成绩表—(当前年级没有选定考试)';
    MessageBeep(0);
    MQuery.Close;
    SQuery.Close;
    Exit;
  end
  else
    Caption := '学生考试成绩表';
  //
  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 IsEmpty then
    begin
      Caption := '学生考试成绩表—(当前年级选定的考试没有找到)';
      MessageBeep(0);
      MQuery.Close;
      SQuery.Close;
      Exit;
    end;

    ExamType := FieldByName('si_kslxing').AsInteger;
    if GradeChanged or ExamChanged then
    begin
      if FieldByName('s_kcdhao').AsString = '' then
        CurSubCode := 0
      else
        CurSubCode := FieldByName('s_kcdhao').AsInteger;
    end;
    Close;
  finally
    Close;
    Free;
  end;
  Result := True;
end;

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

procedure TFm_AllSubjectTable.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  MQuery.Close;
  Action := caFree;
  Fm_AllSubjectTable := nil;
end;

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

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

procedure TFm_AllSubjectTable.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_AllSubjectTable.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_AllSubjectTable.MTrViewChange(Sender: TObject;
  Node: TTreeNode);

  procedure CheckGrade;
  var
    tmS: string;
  begin
    if Integer(Node.Data) < 9999 then
    begin //  年级
      CurGrade := W_CurYear - Integer(Node.Data) + 1;
      CurClass := '';
      ChkBox_Class.Enabled := True;
      ShowClass := ChkBox_Class.Checked;
    end
    else
    begin //  班级
      tmS := Copy(IntFormatStr(Integer(Node.Data), 9), 4, 4);
      CurGrade := W_CurYear - StrToInt(tmS) + 1;
      CurClass := IntFormatStr(Integer(Node.Data), 9);
      ChkBox_Class.Enabled := False;
      ShowClass := False;
    end;
    //  年级是否改变
    GradeChanged := (CurGrade <> OldGrade);
    //  显示班级是否改变
    ShowClassChanged := OldShowClass <> ShowClass;
  end;

begin
  //  检查年级
  CheckGrade;
  //  当前考试
  if not CheckCurExam then
  begin
    OldGrade := CurGrade;
    SetGridTitle;
    Exit;
  end;
  //  年级改变或考试改变,则应该刷新数据源
  if GradeChanged or ExamChanged then
    ReloadQuery(CurGrade, CurSubCode);

  with MQuery do
  try
    DisableControls;
    //  重新生成 Column
    if GradeChanged or ExamChanged or ShowClassChanged then
      RecreateColumn(CurGrade, CurSelSub, CursubCode);
    //  拷贝到显示 Query
    DistillQuery;
    SetGridTitle;
  finally
    while ControlsDisabled do
      EnableControls;
    GradeChanged := False;
    ExamChanged := False;
    ShowClassChanged := False;
    OldGrade := CurGrade;
    OldShowClass := ShowClass;
  end;
  RefreshDataSetField(MGrid, QueryGetText, nil);
end;

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

procedure TFm_AllSubjectTable.TbBtn_CollectClick(Sender: TObject);
begin//
  if MQuery.IsEmpty then
  begin
    U_GlobalProc.Show_ErrorMess('数据库为空。');
    Exit;
  end;
  U_SubjectCollect.Show_SubjectCollect;
end;

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

end;

procedure TFm_AllSubjectTable.TbBtn_ExamNoClick(Sender: TObject);
begin
  if U_SetCurExam.Show_SetCurExam then
  begin
    GetCurExamCode;
    ExamChanged := True;

    MTrViewChange(MTrView, MTrView.Selected);
  end;
end;

procedure TFm_AllSubjectTable.Spl_MainMoved(Sender: TObject);
begin
  CmbBox_Subject.Width := Panel2.Width - 6;
end;

procedure TFm_AllSubjectTable.CmbBox_SubjectChange(Sender: TObject);
var
  aCmbBox: TComboBox;
  NewCode: integer;
begin
  aCmbBox := Sender as TComboBox;
  if aCmbBox.ItemIndex = -1 then
    aCmbBox.ItemIndex := 0;

  NewCode := Integer(aCmbBox.Items.Objects[aCmbBox.ItemIndex]);
  if CurSelSub <> NewCode then
  try
    MQuery.DisableControls;
    CurSelSub := NewCode;
    //  如果有条件, 则重新生成 MQuery
    DistillQuery;
    ReCreateColumn(CurGrade, CurSelSub, CurSubCode);
    SetGridTitle;
  finally
    MQuery.EnableControls;
  end;
  RefreshDataSetField(MGrid, QueryGetText, nil);
end;

procedure TFm_AllSubjectTable.TbBtn_ConditionClick(Sender: TObject);
begin
  if U_SubjectCondition.Show_SubjectCondition(BaseCondCode, BaseConds,
    MQuery.RecordCount) then  //  此处与 SQL 数据库不兼容;
  begin
    UsedCondCode := BaseCondCode;
    UsedConds := BaseConds;

    DistillQuery;
    SetGridTitle;
    RefreshDataSetField(MGrid, QueryGetText, nil);
  end;
end;

procedure TFm_AllSubjectTable.ChkBox_ClassClick(Sender: TObject);
begin
  ShowClass := ChkBox_Class.Checked;
  ReCreateColumn(CurGrade, CurSelSub, CurSubCode);
  RefreshDataSetField(MGrid, QueryGetText, nil);
end;

procedure TFm_AllSubjectTable.TbBtn_PrintClick(Sender: TObject);
begin //
  Show_Print(MGrid);
end;

end.

⌨️ 快捷键说明

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