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

📄 unitprtsubject.pas.~128~

📁 初中成绩录入系统网络版(firebird) firebird下的网络编程
💻 ~128~
字号:
unit UnitPrtSubject;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, frxClass, frxDBSet, frxIBXComponents, StdCtrls, Buttons, CheckLst,
  frxExportRTF, ComCtrls,math;

type
  TfmPrtSubject = class(TForm)
    frxDBDataset1: TfrxDBDataset;
    frxIBXComponents1: TfrxIBXComponents;
    BitBtn1: TBitBtn;
    SubjectList: TCheckListBox;
    BitBtn2: TBitBtn;
    frxRTFExport1: TfrxRTFExport;
    ProgressBar1: TProgressBar;
    frxReport1: TfrxReport;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
    procedure createData(myprj:String);
  public
    { Public declarations }
  end;

implementation

uses unitDatamodule;

{$R *.dfm}

procedure TfmPrtSubject.BitBtn1Click(Sender: TObject);
var
  i:Integer;
begin
  dm.Trans1.Active:=false;
  dm.Query1.SQL.Text:='delete from achtotal';
  dm.Query1.ExecSQL;
  dm.Trans1.Commit;
  progressBar1.Visible:=true;
  for i:=0 to SubjectList.Items.Count-1 do
  begin
    if SubjectList.Checked[i] then
      CreateData(SubjectList.Items[i]);
  end;
  ProgressBar1.Visible:=false;
  dm.Trans1.Active:=false;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select * from achtotal order by id';
  dm.Query1.Open;
  frxReport1.ShowReport();
end;

procedure TfmPrtSubject.createData(myprj: String);
var
  mycnt:integer;//存储各校人数
  school:string;//存储校名
  A1,A2,A3,A4,A5,A6:real;//存储各分数段的人数百分比
  tz:real;//将分数按百分制统计分数段时的一个调整值,比如,科目是"英语",那么tz:=100/50,因为英语的满分为50分
  bz100,bz90,bz80,bz60,bz50:string;//各个标准的标准值
  prjfield:String;//科目对应的字段
begin
  if myprj='语基' then
    prjField:='YUWEN1'
  else if myprj='作文' then
    prjField:='YUWEN2'
  else if myprj='语文' then
    prjField:='YUWEN'
  else if myprj='数学' then
    prjField:='SHUXUE'
  else if myprj='英语' then
    prjField:='YINGYU'
  else if myprj='总分' then
    prjField:='TOTAL';

  //本过程将统计各科成绩,并写入achTotal表
  //将总分算成百分制,方便统计分数段人数
  if myprj='语基' then
    tz:=70/100
  else if myprj='作文' then
    tz:=30/100
  else if myprj='总分' then
    tz:=3
  else
    tz:=1;
  bz100:=floattostr(100*tz);bz90:=floattostr(roundto(90*tz,-1));bz80:=floattostr(roundto(80*tz,-1));
  bz60:=floattostr(roundto(60*tz,-1));bz50:=floattostr(roundto(50*tz,-1));//定下各项标准分
  dm.TransTable1.Active:=false;
  dm.Table1.TableName:='ACHTOTAL';
  dm.Table1.Open;

  ProgressBar1.Position:=0;//进度条清零
  dm.Trans2.Active:=false;
  dm.Query2.SQL.Text:='select schname from school order by schorder';
  dm.Query2.Open;
  dm.Query2.First;
  while not dm.Query2.Eof do
  begin
    school:=dm.Query2.FieldByName('schname').AsString;
    dm.Table1.Append;
    dm.Table1.FieldByName('subject').AsString:=myprj;
    dm.Table1.FieldByName('school').AsString:=school;
    dm.Trans1.Active:=false;
    dm.Query1.SQL.Text:='select count(*) as mycnt from student where school='''+school+'''';
    dm.Query1.Open;
    mycnt:=dm.Query1.fieldbyname('mycnt').AsInteger;
    dm.Table1.FieldByName('rs').AsInteger:=mycnt;
    a1:=0;a2:=0;a3:=0;a4:=0;a5:=0;a6:=0;
    if mycnt>0 then
    begin
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select sum(a.'+prjField+') as myavg from achieve a,student b '+
        'where a.bmh=b.bmh and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('pjf').AsFloat:=round(dm.Query1.fieldbyname('myavg').asfloat/mycnt*100)/100;
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select max(a.'+prjField+') as mymax from achieve a,student b '+
        'where a.bmh=b.bmh and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('zg').AsFloat:=dm.Query1.fieldbyname('mymax').AsFloat;
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select min(a.'+prjField+') as mymin from achieve a,student b '+
        'where a.bmh=b.bmh and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('zd').AsFloat:=dm.Query1.fieldbyname('mymin').AsFloat;
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select count(*) as myyouxiu from achieve a,student b '+
        'where a.bmh=b.bmh and a.'+prjField+'>='+bz80+' and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('yx').AsInteger:=dm.Query1.fieldbyname('myyouxiu').AsInteger;
      dm.Table1.FieldByName('yxl').AsFloat:=round(dm.Query1.fieldbyname('myyouxiu').AsInteger/mycnt*10000)/10000;
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select count(*) as myjige from achieve a,student b '+
        'where a.bmh=b.bmh and a.'+prjfield+'>='+bz60+' and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('jg').AsInteger:=dm.Query1.fieldbyname('myjige').AsInteger;
      dm.Table1.FieldByName('jgl').AsFloat:=round(dm.Query1.fieldbyname('myjige').AsFloat/mycnt*10000)/10000;
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select count(*) as mymanfen from achieve a,student b '+
        'where a.bmh=b.bmh and a.'+prjfield+'='+bz100+' and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('mf').AsInteger:=dm.Query1.fieldbyname('mymanfen').AsInteger;
      A1:=round(dm.Query1.fieldbyname('mymanfen').AsInteger/mycnt*1000)/10;//满分人数百分比率
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select count(*) as my90 from achieve a,student b '+
        'where a.bmh=b.bmh and a.'+prjField+'>='+bz90+' and a.'+prjfield+'<'+bz100+' and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('L90').AsInteger:=dm.Query1.fieldbyname('my90').AsInteger;
      A2:=round(dm.Query1.fieldbyname('my90').AsInteger/mycnt*1000)/10;//90分数段的百分比
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select count(*) as my80 from achieve a,student b '+
        'where a.bmh=b.bmh and a.'+prjField+'>='+bz80+' and a.'+prjField+'<'+bz90+' and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('L80').AsInteger:=dm.Query1.fieldbyname('my80').AsInteger;
      A3:=round(dm.Query1.fieldbyname('my80').AsInteger/mycnt*1000)/10;//80分数段的百分比
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select count(*) as my60_79 from achieve a,student b '+
        'where a.bmh=b.bmh and a.'+prjField+'>='+bz60+' and a.'+prjField+'<'+bz80+' and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('L60_79').AsInteger:=dm.Query1.fieldbyname('my60_79').AsInteger;
      A4:=round(dm.Query1.fieldbyname('my60_79').AsInteger/mycnt*1000)/10;//60--79分数段的百分比
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select count(*) as my50 from achieve a,student b '+
        'where a.bmh=b.bmh and a.'+prjField+'>='+bz50+' and a.'+prjField+'<'+bz60+' and school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('L50').AsInteger:=dm.Query1.fieldbyname('my50').AsInteger;
      A5:=round(dm.Query1.fieldbyname('my50').AsInteger/mycnt*1000)/10;//50分数段的百分比
      dm.Query1.Close;
      dm.Query1.SQL.Text:='select count(*) as my50k from achieve a,student b '+
        'where a.bmh=b.bmh and a.'+prjfield+'<'+bz50+' and b.school='''+school+'''';
      dm.Query1.Open;
      dm.Table1.FieldByName('L50LESS').AsInteger:=dm.Query1.fieldbyname('my50k').AsInteger;
      A6:=round(dm.Query1.fieldbyname('my50k').AsInteger/mycnt*1000)/10;//50分以下的百分比
    end;
    dm.Table1.Post;
    //以下存储各百分比
    dm.Table1.Append;
    dm.Table1.FieldByName('subject').AsString:=myprj;
//    dm.Table1.FieldByName('学校').AsString:='百分率';
    dm.Table1.FieldByName('mf').AsFloat:=a1;
    dm.Table1.FieldByName('L90').AsFloat:=a2;
    dm.Table1.FieldByName('L80').AsFloat:=a3;
    dm.Table1.FieldByName('L60_79').AsFloat:=a4;
    dm.Table1.FieldByName('L50').AsFloat:=a5;
    dm.Table1.FieldByName('L50LESS').AsFloat:=a6;
    dm.Table1.Post;
    ProgressBar1.Position:=ProGressBar1.Position+5;
    dm.Query2.Next;
  end;
  //以下添加全县资料
  dm.Table1.Append;
  dm.Table1.FieldByName('subject').AsString:=myprj;
  dm.Table1.FieldByName('school').AsString:='全县';
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as mycnt from achieve';
  dm.Query1.Open;
  mycnt:=dm.Query1.fieldbyname('mycnt').AsInteger;
  dm.Table1.FieldByName('rs').AsInteger:=mycnt;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select sum('+prjField+') as myavg from achieve';
  dm.Query1.Open;
  dm.Table1.FieldByName('pjf').AsFloat:=round(dm.Query1.fieldbyname('myavg').asfloat/mycnt*100)/100;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select max('+prjField+') as mymax from achieve';
  dm.Query1.Open;
  dm.Table1.FieldByName('zg').AsFloat:=dm.Query1.fieldbyname('mymax').AsFloat;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select min('+prjField+') as mymin from achieve';
  dm.Query1.Open;
  dm.Table1.FieldByName('zd').AsFloat:=dm.Query1.fieldbyname('mymin').AsFloat;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as myyouxiu from achieve where '+prjField+'>='+bz80;
  dm.Query1.Open;
  dm.Table1.FieldByName('yx').AsInteger:=dm.Query1.fieldbyname('myyouxiu').AsInteger;
  dm.Table1.FieldByName('yxl').AsFloat:=round(dm.Query1.fieldbyname('myyouxiu').AsInteger/mycnt*10000)/10000;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as myjige from achieve where '+prjField+'>='+bz60;
  dm.Query1.Open;
  dm.Table1.FieldByName('jg').AsInteger:=dm.Query1.fieldbyname('myjige').AsInteger;
  dm.Table1.FieldByName('jgl').AsFloat:=round(dm.Query1.fieldbyname('myjige').AsFloat/mycnt*10000)/10000;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as mymanfen from achieve where '+prjField+'='+bz100;
  dm.Query1.Open;
  dm.Table1.FieldByName('mf').AsInteger:=dm.Query1.fieldbyname('mymanfen').AsInteger;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as my90 from achieve where '+
    prjField+'>='+bz90+' and '+prjField+'<'+bz100;
  dm.Query1.Open;
  dm.Table1.FieldByName('L90').AsInteger:=dm.Query1.fieldbyname('my90').AsInteger;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as my80 from achieve where '+
    prjField+'>='+bz80+' and '+prjField+'<'+bz90;
  dm.Query1.Open;
  dm.Table1.FieldByName('L80').AsInteger:=dm.Query1.fieldbyname('my80').AsInteger;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as my60_79 from achieve where '+
    prjField+'>='+bz60+' and '+prjField+'<'+bz80;
  dm.Query1.Open;
  dm.Table1.FieldByName('L60_79').AsInteger:=dm.Query1.fieldbyname('my60_79').AsInteger;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as my50 from achieve where '+
    prjField+'>='+bz50+' and '+prjfield+'<'+bz60;
  dm.Query1.Open;
  dm.Table1.FieldByName('L50').AsInteger:=dm.Query1.fieldbyname('my50').AsInteger;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as my50k from achieve where '+
    prjField+'<'+bz50;
  dm.Query1.Open;
  dm.Table1.FieldByName('L50LESS').AsInteger:=dm.Query1.fieldbyname('my50k').AsInteger;
  dm.Table1.Post;
  progressbar1.Position:=progressbar1.Position+5;
  try
    dm.TransTable1.Commit;
  except
    dm.TransTable1.Rollback;
  end;
end;

procedure TfmPrtSubject.FormCreate(Sender: TObject);
begin
  dm.Trans1.Active:=false;
  dm.Query1.SQL.Text:='update achieve set yuwen=yuwen1+yuwen2,total=yuwen1+yuwen2+shuxue+yingyu';
  dm.Query1.ExecSQL;
  dm.Trans1.Commit;
end;

end.

⌨️ 快捷键说明

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