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

📄 u_subjectcollect.pas

📁 一个简单的学籍管理软件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      Title.Caption := '比率%';
      Width := 6 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
  end;
end;

type
  TAryInteger = array[0..6] of integer;

procedure TFm_SubjectCollect.Collect04;
var
  pBjhao: array of string;
  pBjming: array of string;

  pDjfen: array of Integer;
  pDjming: array of string;
  pRshu: array of TAryInteger;
  i, j, iCount: integer;
  aQuery: TQuery;
  Meters: integer;
  TM: TTextMetric;
  tmS: string;
begin  //  按等级统计

  GetTextMetrics(DGrid.Canvas.Handle, TM);
  Meters := DGrid.Canvas.TextWidth('0') - TM.tmOverhang;
  //  班级号、班级名、人数
  SetLength(pBjhao, SI_Classes[Fm_AllSubjectTable.CurGrade] + 1);
  SetLength(pBjming, SI_Classes[Fm_AllSubjectTable.CurGrade] + 1);
  SetLength(pRshu, SI_Classes[Fm_AllSubjectTable.CurGrade] + 1);
  //  等级号、等级分数、人数
  SetLength(pDjming, 5);
  pDjming[0] := '优秀';
  pDjming[1] := '良好';
  pDjming[2] := '及格';
  pDjming[3] := '不及格';
  pDjming[4] := '总  计';
  SetLength(pDjfen, 5);
  pDjfen[0] := 95;
  pDjfen[1] := 85;
  pDjfen[2] := 60;
  pDjfen[3] := 0;
  pDjfen[4] := 0;
  SetLength(pRshu, SI_Classes[Fm_AllSubjectTable.CurGrade] + 1);
  for i := 0 to SI_Classes[Fm_AllSubjectTable.CurGrade] do
    for j := 0 to 4 do
      pRshu[i][j] := 0;

  aQuery := TQuery.Create(Application);
  with aQuery do
  try
    DataBaseName := DataDBase;
    SQL.Text := 'SELECT * FROM bj WHERE si_dqnji=' +
      IntToStr(Fm_AllSubjectTable.CurGrade);
    Open;
    i := 0;
    while not Eof do
    begin
      pBjhao[i] := FieldByName('s_bjhao').AsString;
      pBjming[i] := FieldByName('s_bjmcheng').AsString;
      Inc(i);
      Next;
    end;
    pBjhao[i] := '';
    pBjming[i] := '总  计';
  finally
    Close;
    Free;
  end;

  if Fm_AllSubjectTable.CurSelSub > 0 then
    tmS := 'n_' + IntFormatStr(Fm_AllSubjectTable.CurSelSub, 4)
  else
    tmS := 'n_pjun';

  with Fm_AllSubjectTable.MQuery do
  try
    DisableControls;
    First;
    iCount := 0;
    while not Eof do
    begin
      for i := 0 to SI_Classes[Fm_AllSubjectTable.CurGrade] - 1 do
      begin
        if pBjhao[i] = FieldByName('s_bjhao').AsString then
        begin
          for j := 0 to 3 do
          begin
            if FieldByName(tmS).AsFloat >= pDjfen[j] then
            begin
              Inc(pRshu[i][j]);
              Inc(pRshu[SI_Classes[Fm_AllSubjectTable.CurGrade]][j]);
              Inc(pRshu[i][4]);
              Break;
            end;
          end;
          Break;
        end;
      end;
      Next;
      Inc(iCount);
    end;
    pRshu[SI_Classes[Fm_AllSubjectTable.CurGrade]][4] := iCount;
    First;
  finally
    EnableControls;
  end;
  tmS := Fm_AllSubjectTable.MGrid.CaptionString;
  DGrid.CaptionString := Copy(tmS, 1, Pos('成绩表', tmS) - 1) + '统计表';

  //  图形 Chart 初始化
  tmS := DGrid.CaptionString;
  tmS := Copy(tmS, 1, Pos('表', tmS) - 1) + '图';
  Chart_Line.Title.Text.Clear;
  Chart_Line.Title.Text.Add(tmS);

  Chart_Bar.Title.Text.Clear;
  Chart_Bar.Title.Text.Add(tmS);

  Chart_Pie.Title.Text.Clear;
  Chart_Pie.Title.Text.Add(tmS);

  for i := 0 to Length(Ser_Line) - 1 do
  begin
    Ser_Line[i].Clear;
    Ser_Line[i].Free;
  end;
  SetLength(Ser_Line, 0);

  for i := 0 to Length(Ser_Bar) - 1 do
  begin
    Ser_Bar[i].Clear;
    Ser_Bar[i].Free;
  end;
  SetLength(Ser_Bar, 0);

  for i := 0 to Length(Ser_Pie) - 1 do
  begin
    Ser_Pie[i].Clear;
    Ser_Pie[i].Free;
  end;
  SetLength(Ser_Pie, 0);

  with DQuery do
  try
    DisableControls;
    Close;
    SQL.Text := 'SELECT s_bjhao, si_mzu AS i_yxiu, si_mzu AS i_lhao, ' +
       'si_mzu AS i_jge, si_mzu AS i_bjge, si_mzu AS i_zrshu ' +
       'FROM xsjbxx WHERE 0=1';
    Open;
    for i := 0 to SI_Classes[Fm_AllSubjectTable.CurGrade] do
    begin
      try
        if i < SI_Classes[Fm_AllSubjectTable.CurGrade] then
        begin
          SetLength(Ser_Line, i + 1);
          Ser_Line[i] := TFastLineSeries.Create(Application);
          Ser_Line[i].SeriesColor := SerColor[i+1];
          Chart_Line.AddSeries(Ser_Line[i]);

          SetLength(Ser_Bar, i + 1);
          Ser_Bar[i] := TBarSeries.Create(Application);
          Ser_Bar[i].SeriesColor := SerColor[i+1];
          Chart_Bar.AddSeries(Ser_Bar[i]);

          Ser_Line[i].Title := pBjming[i];
          Ser_Bar[i].Title := pBjming[i];
          Ser_Line[i].Active := True;
          Ser_Bar[i].Active := True;
        end;
        Append;
        Fields[0].AsString := pBjming[i];
        for j := 1 to 5 do
        begin
          Fields[j].AsString := IntToStr(pRshu[i][j-1]);
          if (i < SI_Classes[Fm_AllSubjectTable.CurGrade]) and
            (j < 5) then
          begin                
            Ser_Line[i].Add(pRshu[i][j-1], pDjming[j-1]);
            Ser_Bar[i].Add(pRshu[i][j-1], pDjming[j-1]);
          end;
          pDjming[j-1] := '';
        end;
        Post;
        pBjming[i] := '';
      except
        if State = dsInsert then
          Cancel;
      end;
    end;
    SetLength(pBjming, 0);
    SetLength(pDjfen, 0);
    SetLength(pRshu, 0);
    First;
  finally
    EnableControls;
  end;

  with DGrid do
  begin
    Columns.Clear;
    with Columns.Add do
    begin
      Fieldname := 's_bjhao';
      Title.Caption := '班级';
      Width := 8 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_yxiu';
      Title.Caption := '优秀';
      Width := 4 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_lhao';
      Title.Caption := '良好';
      Width := 4 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_jge';
      Title.Caption := '及格';
      Width := 4 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_bjge';
      Title.Caption := '不及格';
      Width := 4 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_zrshu';
      Title.Caption := '小计';
      Width := 4 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
  end;
end;

procedure TFm_SubjectCollect.Collect05;
var
  pBjhao: array of string;
  pBjming: array of string;

  pDjming: array of string;
  pDjfen: array of Integer;
  pRshu: array of TAryInteger;
  i, j, iCount: integer;
  aQuery: TQuery;
  Meters: integer;
  TM: TTextMetric;
  tmS: string;
begin  //  按分数段统计

  GetTextMetrics(DGrid.Canvas.Handle, TM);
  Meters := DGrid.Canvas.TextWidth('0') - TM.tmOverhang;
  //  班级号、班级名、人数
  SetLength(pBjhao, SI_Classes[Fm_AllSubjectTable.CurGrade] + 1);
  SetLength(pBjming, SI_Classes[Fm_AllSubjectTable.CurGrade] + 1);
  SetLength(pRshu, SI_Classes[Fm_AllSubjectTable.CurGrade] + 1);
  //  分数段号、等级分数、人数
  SetLength(pDjming, 6);
  pDjming[0] := '90分以上';
  pDjming[1] := '80-90分';
  pDjming[2] := '70-80分';
  pDjming[3] := '60-70分';
  pDjming[4] := '60分以下';
  pDjming[5] := '总    计';
  SetLength(pDjfen, 6);
  pDjfen[0] := 90;
  pDjfen[1] := 80;
  pDjfen[2] := 70;
  pDjfen[3] := 60;
  pDjfen[4] := 0;
  pDjfen[5] := 0;
  SetLength(pRshu, SI_Classes[Fm_AllSubjectTable.CurGrade] + 1);
  for i := 0 to SI_Classes[Fm_AllSubjectTable.CurGrade] do
    for j := 0 to 5 do
      pRshu[i][j] := 0;

  aQuery := TQuery.Create(Application);
  with aQuery do
  try
    DataBaseName := DataDBase;
    SQL.Text := 'SELECT * FROM bj WHERE si_dqnji=' +
      IntToStr(Fm_AllSubjectTable.CurGrade);
    Open;
    i := 0;
    while not Eof do
    begin
      pBjhao[i] := FieldByName('s_bjhao').AsString;
      pBjming[i] := FieldByName('s_bjmcheng').AsString;
      Inc(i);
      Next;
    end;
    pBjhao[i] := '';
    pBjming[i] := '总  计';
  finally
    Close;
    Free;
  end;

  if Fm_AllSubjectTable.CurSelSub > 0 then
    tmS := 'n_' + IntFormatStr(Fm_AllSubjectTable.CurSelSub, 4)
  else
    tmS := 'n_pjun';

  with Fm_AllSubjectTable.MQuery do
  try
    DisableControls;
    First;
    iCount := 0;
    while not Eof do
    begin
      for i := 0 to SI_Classes[Fm_AllSubjectTable.CurGrade] - 1 do
      begin
        if pBjhao[i] = FieldByName('s_bjhao').AsString then
        begin
          for j := 0 to 4 do
          begin
            if FieldByName(tmS).AsFloat >= pDjfen[j] then
            begin
              Inc(pRshu[i][j]);
              Inc(pRshu[SI_Classes[Fm_AllSubjectTable.CurGrade]][j]);
              Inc(pRshu[i][5]);
              Break;
            end;
          end;
          break;
        end;
      end;
      Next;
      Inc(iCount);
    end;
    pRshu[SI_Classes[Fm_AllSubjectTable.CurGrade]][5] := iCount;
    First;
  finally
    EnableControls;
  end;

  tmS := Fm_AllSubjectTable.MGrid.CaptionString;
  DGrid.CaptionString := Copy(tmS, 1, Pos('成绩表', tmS) - 1) + '统计表';

  tmS := Fm_AllSubjectTable.MGrid.CaptionString;
  DGrid.CaptionString := Copy(tmS, 1, Pos('成绩表', tmS) - 1) + '统计表';
  
  //  图形 Chart 初始化
  tmS := DGrid.CaptionString;
  tmS := Copy(tmS, 1, Pos('表', tmS) - 1) + '图';
  Chart_Line.Title.Text.Clear;
  Chart_Line.Title.Text.Add(tmS);

  Chart_Bar.Title.Text.Clear;
  Chart_Bar.Title.Text.Add(tmS);

  Chart_Pie.Title.Text.Clear;
  Chart_Pie.Title.Text.Add(tmS);

  for i := 0 to Length(Ser_Line) - 1 do
  begin
    Ser_Line[i].Clear;
    Ser_Line[i].Free;
  end;
  SetLength(Ser_Line, 0);

  for i := 0 to Length(Ser_Bar) - 1 do
  begin
    Ser_Bar[i].Clear;
    Ser_Bar[i].Free;
  end;
  SetLength(Ser_Bar, 0);

  for i := 0 to Length(Ser_Pie) - 1 do
  begin
    Ser_Pie[i].Clear;
    Ser_Pie[i].Free;
  end;
  SetLength(Ser_Pie, 0);

  with DQuery do
  try
    DisableControls;
    Close;
    SQL.Text := 'SELECT s_bjhao, si_mzu AS i_90, si_mzu AS i_80, ' +
       'si_mzu AS i_70, si_mzu AS i_60, si_mzu AS i_0, ' +
       'si_mzu AS i_zrshu ' +
       'FROM xsjbxx WHERE 0=1';
    Open;
    for i := 0 to SI_Classes[Fm_AllSubjectTable.CurGrade] do
    begin
      try   //  此处班级数大于六个班时出错!!!
        if i < SI_Classes[Fm_AllSubjectTable.CurGrade] then
        begin
          SetLength(Ser_Line, i + 1);
          Ser_Line[i] := TFastLineSeries.Create(Application);
          Ser_Line[i].SeriesColor := SerColor[i+1];
          Chart_Line.AddSeries(Ser_Line[i]);

          SetLength(Ser_Bar, i + 1);
          Ser_Bar[i] := TBarSeries.Create(Application);
          Ser_Bar[i].SeriesColor := SerColor[i+1];
          Chart_Bar.AddSeries(Ser_Bar[i]);

          Ser_Line[i].Title := pBjming[i];
          Ser_Bar[i].Title := pBjming[i];
          Ser_Line[i].Active := True;
          Ser_Bar[i].Active := True;
        end;
        Append;
        Fields[0].AsString := pBjming[i];
        for j := 0 to 5 do
        begin
          Fields[j + 1].AsString := IntToStr(pRshu[i][j]);
          if (i < SI_Classes[Fm_AllSubjectTable.CurGrade]) and
            (j < 5) then
          begin
            Ser_Line[i].Add(pRshu[i][j], pDjming[j]);
            Ser_Bar[i].Add(pRshu[i][j], pDjming[j]);
          end;
          pDjming[j] := '';
        end;
        Post;
        pBjming[i] := '';
      except
        if State = dsInsert then
          Cancel;
      end;
    end;
    SetLength(pBjming, 0);
    SetLength(pDjfen, 0);
    SetLength(pRshu, 0);
    First;
  finally
    EnableControls;
  end;

  with DGrid do
  begin
    Columns.Clear;
    with Columns.Add do
    begin
      Fieldname := 's_bjhao';
      Title.Caption := '班级';
      Width := 8 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_90';
      Title.Caption := '90分以上';
      Width := 6 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_80';
      Title.Caption := '80-90';
      Width := 6 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_70';
      Title.Caption := '70-80';
      Width := 6 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_60';
      Title.Caption := '60-70';
      Width := 6 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_0';
      Title.Caption := '60分以下';
      Width := 6 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
    with Columns.Add do
    begin
      Fieldname := 'i_zrshu';
      Title.Caption := '小计';
      Width := 4 * Meters + TM.tmOverhang + 4;
      CanEdit := False;
      Alignment := taCenter;
    end;
  end;
end;

procedure TFm_SubjectCollect.CMUserDefClose(var Mess: TMessage);
begin
  if (Mess.WParam = 0) and (Mess.LParam = 0) then
  begin
    Mess.Result := 1;
    Close;
  end;
end;

procedure TFm_SubjectCollect.Btn_ConditionClick(Sender: TObject);
begin  //
  DGrid.BringToFront;
  FGraphFlag := False;
  Btn_Pie.Caption := '图形';
  
  ExecCollect;
  case FCollectCode of
    1, 2, 3:
      if TabCtrl_Graph.Tabs.Count = 2 then
         TabCtrl_Graph.Tabs.Add('圆饼图');
    4, 5:
    begin
      if TabCtrl_Graph.Tabs.Count = 3 then
         TabCtrl_Graph.Tabs.Delete(2);
      Notebook_Chart.ActivePage := 'ZXT';
    end;
  end;
end;

procedure TFm_SubjectCollect.FormShow(Sender: TObject);
begin
  if not ExecCollect then
    PostMessage(Handle, CM_UserDefClose, 0, 0);
  case FCollectCode of
    1, 2, 3:
      if TabCtrl_Graph.Tabs.Count = 2 then
         TabCtrl_Graph.Tabs.Add('圆饼图');
    4, 5:
    begin
      if TabCtrl_Graph.Tabs.Count = 3 then
         TabCtrl_Graph.Tabs.Delete(2);
      Notebook_Chart.ActivePage := 'ZXT';
    end;
  end;
end;

procedure TFm_SubjectCollect.Btn_PieClick(Sender: TObject);
begin  //
  if FGraphFlag then
  begin
    DGrid.BringToFront;
    FGraphFlag := False;
    Btn_Pie.Caption := '图形';
  end else
  begin
    TabCtrl_Graph.BringToFront;
    FGraphFlag := True;
    Btn_Pie.Caption := '表格';
  end;
end;

procedure TFm_SubjectCollect.TabCtrl_GraphChange(Sender: TObject);
begin  //
  case TabCtrl_Graph.TabIndex of
    0: Notebook_Chart.ActivePage := 'ZXT';
    1: Notebook_Chart.ActivePage := 'ZZT';
    2: Notebook_Chart.ActivePage := 'YBT';
  end;
end;

procedure TFm_SubjectCollect.Button1Click(Sender: TObject);
begin
  if FGraphFlag then
  begin
    case TabCtrl_Graph.TabIndex of
      0: Chart_Line.Print;
      1: Chart_Bar.Print;
      2: Chart_Pie.Print;
    end;
  end else
    Show_Print(DGrid);
end;

end.

⌨️ 快捷键说明

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