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

📄 u_timecollect.pas

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

interface

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

type
  TFm_TimeCollect = class(TForm)
    MDS: TDataSource;
    Dock: TDock97;
    Tb97_Func: TToolbar97;
    TbBtn_Help: TToolbarButton97;
    TbBtn_Exit: TToolbarButton97;
    MQuery: TQuery;
    MUpSQL: TUpdateSQL;
    PPM: TPopupMenu;
    PM_Help: TMenuItem;
    PM_Exit: TMenuItem;
    MTrView: TTreeView;
    Spl_Main: TSplitter;
    Pnl_DAn: TPanel;
    MGrid: THDBGrid;
    ImageList: TImageList;
    TbSep02: TToolbarSep97;
    MQuerys_bjhao: TStringField;
    MQuerys_bjmcheng: TStringField;
    MQueryi_sjtshu: TIntegerField;
    MQueryi_bjtshu: TIntegerField;
    MQueryi_kkjshu: TIntegerField;
    MQueryi_cdcshu: TIntegerField;
    MQueryi_ztcshu: TIntegerField;
    TbBtn_Pie: TToolbarButton97;
    TabCtrl_Graph: TTabControl;
    Notebook_Chart: TNotebook;
    Chart_Line: TChart;
    Chart_Bar: TChart;
    Chart_Pie: TChart;
    PM_Z01: TMenuItem;
    PM_Pie: TMenuItem;
    TbBtn_Print: TToolbarButton97;
    TbSp01: TToolbarSep97;
    PM_Print: TMenuItem;
    PM_Z02: TMenuItem;
    procedure TbBtn_ExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Spl_MainCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure Spl_FuCanResize(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_PieClick(Sender: TObject);
    procedure TbBtn_PrintClick(Sender: TObject);
  private
  public
    FGraphFlag: Boolean;
    {Ser_Line: array of TFastLineSeries;
    Ser_Bar: array of TBarSeries;
    Ser_Pie: array of TPieSeries;}
  end;

var
  Fm_TimeCollect: TFm_TimeCollect;

procedure Show_TimeCollect;

implementation

uses U_Main, U_GlobalProc, U_GlobalVar, U_DM, U_Print;

{$R *.DFM}

procedure Show_TimeCollect;
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_TimeCollect') then
      Fm_Main.MDIChildren[i].Close;
  end;
  if not Assigned(Fm_TimeCollect) then
  begin
    Fm_TimeCollect := TFm_TimeCollect.Create(Application);
    with Fm_TimeCollect do
    begin
      FGraphFlag := False;
      //MQuery.Open;
      RefreshGridStyle(MGrid);
      MakeGradeTree(MTrView, 0, True);
      MTrView.Items[0].Selected := True;
    end;
  end;
  with Fm_TimeCollect do
  begin
    if WindowState <> wsMaximized then
      WindowState := wsMaximized;
    Show;
    SetFocus;
  end;
end;

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

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

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

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

procedure TFm_TimeCollect.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_TimeCollect.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_TimeCollect.MTrViewChange(Sender: TObject;
  Node: TTreeNode);
var
  aQuery: TQuery;
  i, j: integer;
  ContAll, ContGrade: array[2..6] of integer;
begin
  with MQuery do
  begin
    DisableControls;
    Close;
    SQL.Text := 'SELECT d1.s_bjhao, d1.s_bjmcheng, ' +
      'd2.i_sjtshu, d2.i_bjtshu, d2.i_kkjshu, d2.i_cdcshu, ' +
      'd2.i_ztcshu FROM bj d1, xskqtj d2 WHERE 1=2';
    Open;
  end;

  aQuery := TQuery.Create(Application);
  with aQuery do
  try
    DataBaseName := DataDBase;
    if Integer(Node.Data) = 0 then
    begin //  全校                   //  学生信息
      for j := 2 to 6 do
        ContAll[j] := 0;
      for i := 0 to SI_GradeCount - 1 do
      begin
        SQL.Text := 'SELECT d1.s_bjhao, d1.s_bjmcheng, ' +
          'SUM(d2.i_sjtshu), SUM(d2.i_bjtshu), SUM(d2.i_kkjshu), ' +
          'SUM(d2.i_cdcshu), SUM(d2.i_ztcshu) FROM bj d1, xskqtj d2, xsjbxx d3 ';
        SQL.Text := SQL.Text + 'WHERE d1.s_bjhao = d3.s_bjhao AND d2.s_xhao = d3.s_xhao' +
          ' AND d2.s_xqhao=''' + S_CurTermCode + ''' AND ' +
          'd1.si_dqnji=' + IntToStr(i + 1) + 'GROUP BY d1.s_bjhao, d1.s_bjmcheng';
        Open;
        for j := 2 to 6 do
          ContGrade[j] := 0;
        while not Eof do
        begin
          MQuery.Append;
          try
            for j := 0 to 6 do
            begin
              MQuery.Fields[j].AsString := Fields[j].AsString;
              if j > 1 then
                Inc(ContGrade[j], Fields[j].AsInteger);
            end;
            MQuery.Post;
          except
            MQuery.Cancel;
          end;
          Next;
        end;
        Close;
        MQuery.Append;
        try
          MQuery.Fields[1].AsString := '小计';
          for j := 2 to 6 do
          begin
            MQuery.Fields[j].AsInteger := ContGrade[j];
            Inc(ContAll[j], ContGrade[j]);
          end;
          MQuery.Post;
        except
          MQuery.Cancel;
        end;
      end;
      MQuery.Append;
      try
        MQuery.Fields[1].AsString := '总计';
        for j := 2 to 6 do
          MQuery.Fields[j].AsInteger := ContAll[j];
        MQuery.Post;
      except
        MQuery.Cancel;
      end;
    end
    else if Integer(Node.Data) < 9999 then
    begin //  年级
      SQL.Text := 'SELECT d1.s_bjhao, d1.s_bjmcheng, ' +
        'SUM(d2.i_sjtshu), SUM(d2.i_bjtshu), SUM(d2.i_kkjshu), ' +
        'SUM(d2.i_cdcshu), SUM(d2.i_ztcshu) FROM bj d1, xskqtj d2, xsjbxx d3 ';
      SQL.Text := SQL.Text + 'WHERE d1.s_bjhao = d3.s_bjhao AND d2.s_xhao = d3.s_xhao' +
        ' AND d2.s_xqhao=''' + S_CurTermCode + ''' AND ' +
        'd1.si_dqnji=' + IntToStr(W_CurYear - Integer(Node.Data) + 1) +
        'GROUP BY d1.s_bjhao, d1.s_bjmcheng';
      Open;
      for j := 2 to 6 do
        ContGrade[j] := 0;
      while not Eof do
      begin
        MQuery.Append;
        try
          for j := 0 to 6 do
          begin
            MQuery.Fields[j].AsString := Fields[j].AsString;
            if j > 1 then
              Inc(ContGrade[j], Fields[j].AsInteger);
          end;
          MQuery.Post;
        except
          MQuery.Cancel;
        end;
        Next;
      end;
      Close;
      MQuery.Append;
      try
        MQuery.Fields[1].AsString := '小计';
        for j := 2 to 6 do
        begin
          MQuery.Fields[j].AsInteger := ContGrade[j];
          Inc(ContAll[j], ContGrade[j]);
        end;
        MQuery.Post;
      except
        MQuery.Cancel;
      end;
    end
    else
    begin //  班级
      SQL.Text := 'SELECT SUM(d2.i_sjtshu), SUM(d2.i_bjtshu), SUM(d2.i_kkjshu), ' +
        'SUM(d2.i_cdcshu), SUM(d2.i_ztcshu) FROM xskqtj d2, xsjbxx d3 ';
      SQL.Text := SQL.Text + 'WHERE d2.s_xhao = d3.s_xhao' +
        ' AND d2.s_xqhao=''' + S_CurTermCode + ''' AND ' +
        'd3.s_bjhao=''' + IntFormatStr(Integer(Node.Data), 9) + '''';
      Open;
      while not Eof do
      begin
        MQuery.Append;
        try
          MQuery.Fields[0].AsString := IntFormatStr(Integer(Node.Data), 9);
          MQuery.Fields[1].AsString := Node.Text;
          for j := 0 to 4 do
            MQuery.Fields[j+2].AsString := Fields[j].AsString;
          MQuery.Post;
        except
          MQuery.Cancel;
        end;
        Next;
      end;
      Close;
    end;
  finally
    Close;
    Free;
    MGrid.BringToFront;
    if FGraphFlag then
    begin
      MGrid.BringToFront;
      FGraphFlag := False;
      TbBtn_Pie.Caption := '图形';
      TbBtn_Pie.Hint := '按图形方式显示统计结果 F7';
      TbBtn_Pie.ImageIndex := 20;
      FGraphFlag := False;
    end;
    MQuery.EnableControls;
  end;
end;

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

end;

procedure TFm_TimeCollect.TbBtn_PieClick(Sender: TObject);
begin
  if FGraphFlag then
  begin
    MGrid.BringToFront;
    FGraphFlag := False;
    TbBtn_Pie.Caption := '图形';
    TbBtn_Pie.Hint := '按图形方式显示统计结果 F7';
    TbBtn_Pie.ImageIndex := 20;
  end else
  begin
    TabCtrl_Graph.BringToFront;
    FGraphFlag := True;
    TbBtn_Pie.Caption := '表格';
    TbBtn_Pie.Hint := '按表格方式显示统计结果 F7';
    TbBtn_Pie.ImageIndex := 28;
  end;
end;

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

end.

⌨️ 快捷键说明

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