📄 u_subjectcollect.pas
字号:
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 + -