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

📄 charfrm.pas

📁 一小的学生成绩管理系统,是学习DELPHI的好资料.
💻 PAS
字号:
unit CharFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  TeEngine, Series, TeeProcs, Chart, mxgraph,Tabnotbk, ExtCtrls,
  mxpivsrc, mxDB, Db, DBTables, mxtables, mxstore, Grids, mxgrid, DBChart,
  ComCtrls,IniFiles, Buttons;

type
  TChartForm = class(TForm)
    DecisionCube1: TDecisionCube;
    DecisionQuery1: TDecisionQuery;
    DecisionSource1: TDecisionSource;
    DecisionPivot1: TDecisionPivot;
    Query1: TQuery;
    NoteBook: TTabbedNotebook;
    DecisionGrid1: TDecisionGrid;
    Chart1: TChart;
    PieChart: TDecisionGraph;
    BarSeries1: TBarSeries;
    Series2: TBarSeries;
    Series5: TBarSeries;
    Series6: TBarSeries;
    Series3: TBarSeries;
    Series4: TBarSeries;
    Series1: TBarSeries;
    sbState: TSpeedButton;
    Series7: TPieSeries;
    Chart2: TChart;
    Series8: TLineSeries;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure sbStateClick(Sender: TObject);
    procedure NoteBookClick(Sender: TObject);
  private
    { Private declarations }
  public
//    procedure GetFieldMax(var FieldMax:array of integer);
    { Public declarations }
  end;

var
  ChartForm: TChartForm;

implementation

uses MainFrm;

{$R *.DFM}

procedure TChartForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MainForm.Show;
end;

procedure TChartForm.sbStateClick(Sender: TObject);
begin
  sbState.Tag:=(sbState.Tag+1) mod 2;
  if sbState.Tag=0 then
  begin
    with Chart1.Title.Text do
    begin
      Clear;
      Add('各分数段人数统计');
    end;
    Chart1.Series[0].Active:=True;
    Chart1.Series[1].Active:=False;
  end
  else begin
    with Chart1.Title.Text do
    begin
      Clear;
      Add('各分数段人数比例');
    end;
    Chart1.Series[1].Active:=True;
    Chart1.Series[0].Active:=False;
  end;

end;

procedure TChartForm.NoteBookClick(Sender: TObject);
Type
  TTwoVal=record
    Min,Max:integer;
    Title:string;
  end;
var
  AFenShuDuan: array[1..5] of TTwoVal;
  i:integer;
  Score:single;
  rate:array [1..5] of integer;
  StrSQL,FieldName:string;
  FieldMax:array[0..40]of integer;
begin
  AFenShuDuan[1].Min:=0;
  AFenShuDuan[1].Max:=60;
  AFenShuDuan[1].Title:='不及格';
  AFenShuDuan[2].Min:=60;
  AFenShuDuan[2].Max:=70;
  AFenShuDuan[2].Title:='<70';
  AFenShuDuan[3].Min:=70;
  AFenShuDuan[3].Max:=80;
  AFenShuDuan[3].Title:='良好';
  AFenShuDuan[4].Min:=80;
  AFenShuDuan[4].Max:=90;
  AFenShuDuan[4].Title:='<90';
  AFenShuDuan[5].Min:=90;
  AFenShuDuan[5].Max:=100;
  AFenShuDuan[5].Title:='优秀';
  for i:=1 to 5 do Rate[i]:=0;

  DecisionPivot1.Enabled:=True;

  if NoteBook.PageIndex=1{'分数分布'}then
  begin
    Chart1.Series[0].Clear;
    Chart1.Series[1].Clear;  
    Query1.Close;
    Query1.SQL.Text:='Select * from StudentScore'+MainFrm.SQLCond;
    Query1.Open;
    Query1.First;
    while not Query1.Eof do
    begin
      Score:=Query1.FieldByName('总成绩').AsFloat;
      for i:=1 to 5 do
        if (Score>=AFenShuDuan[i].Min)
          and(Score<AFenShuDuan[i].Max)then
          Rate[i]:=Rate[i]+1;
      Query1.Next;
    end;
    for i:=1 to 5 do
    begin

      Chart1.Series[0].AddXY(i,Rate[i],AFenShuDuan[i].Title,clTeeColor);
      Chart1.Series[1].AddXY(i,Rate[i]/Query1.RecordCount,AFenShuDuan[i].Title,clTeeColor);
    end;
    DecisionPivot1.Enabled:=False;
  end;
  if NoteBook.ActivePage='得分率'then
  begin
    Chart2.Series[0].Clear;
    Query1.Close;
    StrSQL:='SELECT AVG( 第一题 ) 第一题, AVG( 第二题 ) 第二题,'+
      ' AVG( 第三题 ) 第三题, AVG( 第四题 ) 第四题, '+
      'AVG( 第五题 ) 第五题, AVG( 第六题 ) 第六题, '+
      'AVG( 第七题 ) 第七题, AVG( 第八题 ) 第八题, '+
      'AVG( 第九题 ) 第九题, AVG( 第十题 ) 第十题'
      {+', 'AVG( 第十一 ) 第十一, AVG( 第十二 ) 第十二, '+
      'AVG( 第十三 ) 第十三, AVG( 第十四 ), AVG( 第十五 ),'+
      ' AVG( 第十六 ), AVG( 第十七 ), AVG( 第十八 ), '+
      'AVG( 第十九 ), AVG( 第二十 ), AVG( 二十一 ), '+
      'AVG( 二十二 ), AVG( 二十三 ), AVG( 二十四 ),'+
      ' AVG( 二十五 ), AVG( 二十六 ), AVG( 二十七 ),'+
      ' AVG( 二十八 ), AVG( 二十九 ), AVG( 第三十 ), '+
      'AVG( 三十一 ), AVG( 三十二 ), AVG( 三十三 ), '+
      'AVG( 三十四 ), AVG( 三十五 ), AVG( 三十六 ),'+
      ' AVG( 三十七 ), AVG( 三十八 ), AVG( 三十九 ), AVG( 第四十 )'}
      +' FROM StudentScore'+MainFrm.SQLCond;

    Query1.SQL.Text:=StrSQL;
    Query1.Open;
    Query1.First;
    MainForm.GetFieldMax(FieldMax);
    for i:=0 to Query1.FieldCount-1 do
    begin
      if FieldMax[i]>0 then
      begin
        FieldName:=Query1.Fields[i].FieldName;
        Score:=Query1.Fields[i].asinteger;
        Chart2.Series[0].AddXY(i+1,Score/FieldMax[i],' '+
          IntToStr(i+1)+' ',clTeeColor);
      end;
    end;
    DecisionPivot1.Enabled:=False;
  end;
  if (NoteBook.ActivePage='表格')or(NoteBook.ActivePage='综合图')then
  begin
 
  end;
end;

procedure TChartForm.FormCreate(Sender: TObject);
begin
  NoteBook.PageIndex:=0;
end;

end.

⌨️ 快捷键说明

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