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

📄 ucalc.~pas

📁 学生信息管理系统
💻 ~PAS
字号:
unit UCalc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UBase, PrnDbgeh, DB, ADODB, ComCtrls, ExtCtrls, Grids, DBGridEh,
  StdCtrls, DBTables, DBClient, TeeProcs, TeEngine, Chart, DbChart, Series,
  DBGrids, BubbleCh, Buttons;

type
  TFCalc = class(TFBase)
    StatusBar: TStatusBar;
    DataSource: TDataSource;
    PrintDBGridEh: TPrintDBGridEh;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Panel1: TPanel;
    Splitter1: TSplitter;
    Shape1: TShape;
    ComboBox: TComboBox;
    Label1: TLabel;
    RadioGroup: TRadioGroup;
    Button1: TButton;
    Button2: TButton;
    ADOQuery: TADOQuery;
    ADOQueryID: TAutoIncField;
    ADOQuerybj: TWideStringField;
    ADOQueryrs: TSmallintField;
    ADOQuerykr: TWideStringField;
    ADOQuerypjf: TWideStringField;
    ADOQueryhgl: TWideStringField;
    ADOQuerylhl: TWideStringField;
    ADOQueryyxl: TWideStringField;
    Edit1: TEdit;
    Label2: TLabel;
    Panel3: TPanel;
    Splitter2: TSplitter;
    Panel4: TPanel;
    Shape2: TShape;
    Panel5: TPanel;
    Shape3: TShape;
    RadioGrou1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    GroupBox1: TGroupBox;
    Edit2: TEdit;
    Edit3: TEdit;
    Label3: TLabel;
    DBChart1: TDBChart;
    DataSource_fx1: TDataSource;
    ADOQuery_fx1: TADOQuery;
    ADOQuery_fx1DSDesigner: TWideStringField;
    ADOQuery_fx1yw: TIntegerField;
    ADOQuery_fx1bj: TStringField;
    Series1: TBarSeries;
    Button3: TButton;
    ADOQuery_fx: TADOQuery;
    DataSource_fx: TDataSource;
    ADOQuery_fxID: TAutoIncField;
    ADOQuery_fxbj: TWideStringField;
    ADOQuery_fxrs: TSmallintField;
    ADOQuery_fxkr: TWideStringField;
    ADOQuery_fxpjf: TWideStringField;
    ADOQuery_fxhgl: TWideStringField;
    ADOQuery_fxlhl: TWideStringField;
    ADOQuery_fxyxl: TWideStringField;
    ADOQuery_fxbjmc: TStringField;
    ADOQuery_fxvhgl: TFloatField;
    ADOQuery_fxvlhl: TFloatField;
    ADOQuery_fxvyxl: TFloatField;
    ADOQuery_fxvpjf: TFloatField;
    Button4: TButton;
    BitBtn2: TBitBtn;
    BitBtn1: TBitBtn;
    BitBtn3: TBitBtn;
    Panel2: TPanel;
    Splitter3: TSplitter;
    Panel6: TPanel;
    DBGridEh: TDBGridEh;
    DBChart2: TDBChart;
    ComboBox_jb: TComboBox;
    Series2: TBarSeries;
    Series3: TBarSeries;
    Series4: TBarSeries;
    Series5: TBarSeries;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure RadioGrou1Click(Sender: TObject);
    procedure ADOQuery_fx1CalcFields(DataSet: TDataSet);
    procedure RadioGroup2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ADOQuery_fxCalcFields(DataSet: TDataSet);
    procedure ComboBox_jbChange(Sender: TObject);
    procedure ComboBoxChange(Sender: TObject);
    procedure RadioGroupClick(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { Private declarations }
    procedure showTX;
    procedure Showtxfx;//显示图形信息
  public
    { Public declarations }
  end;

var
  FCalc: TFCalc;

implementation

uses UPublic, UMain;

{$R *.dfm}

procedure TFCalc.Button2Click(Sender: TObject);
begin
  if not ADOQuery.IsEmpty then
  begin
    PrintDBGridEh.PageHeader.CenterText.Clear;
    PrintDBGridEh.PageHeader.CenterText.Add(G_sys.SChool+Edit1.text+ComboBox.text+'科教学效果统计');
    PrintDBGridEh.Preview;
  end;
end;

procedure TFCalc.Button1Click(Sender: TObject);
  function getbjmc(vStr: string): String;
   var
     i,j, k: integer;
   begin
     Result :='1';
     j := 999; k := 999;
     for i := 1 to length(vStr) do
     if vStr[i] in ['0'..'9'] then begin
        if j = 999 then j := i
        else k :=i;
     end;
     if (j=999)then exit;
     if k<>999 then Result := vStr[j]+vStr[k] else
       Result := vStr[j];
   end;
var
  fFz: array[1..3] of integer;//合格率、良好率及优秀率
  kskm, bjmc, pjf, hgl,lhl,yxl: string;   //考试科目及班级名称
  jb: array[1..3] of string;
  i, total: integer;
begin
  if ComboBox.ItemIndex < 0 then exit;
  if Ask('真的要统计吗?','提示',MB_OKCL)<>1 then exit;
  SCreen.Cursor := crHourGlass;
  while not ADOQuery.Eof do ADOQuery.Delete; 
  jb[1] :='七'; jb[2] :='八';jb[3] :='九';
  Case RadioGroup.ItemIndex of
    0:   begin
           fFz[3] := 135;
           fFz[2] := 105;
           fFz[1] := 90;
         end;
    1:   begin
           fFz[3] := 108;
           fFz[2] := 84;
           fFz[1] := 72;
         end;
    2:   begin
           fFz[3] := 90;
           fFz[2] := 70;
           fFz[1] := 60;
         end;
  end;

  //取得各个级别要考试的班级及科目
  ComboBox_jb.Clear;
  for i := 1 to 3 do begin
    kskm := GetFieldVar('select km from STU_kskm where nj='''+jb[i]+'''');
    if trim(kskm)<>'' then
    if Pos(ComboBox.Text, kskm)>0 then
    if GetFieldVar('select Count(1) from stu_info where 退学否=''F'' and 级别='''+jb[i]+'''')>0 then
    begin
      ComboBox_jb.Items.Add(jb[i]);
      With TADOQuery.Create(self) do try
        Connection := ADOQuery.Connection;
        SQL.Text := 'select bj from STU_class where bj like''%'+jb[i]+'%'' order by id';
        Open;
        while not Eof do begin
          ADOQuery.Append;
          ADOQuery.FieldByName('bj').AsString := Fields[0].AsString;
          Next;
        end;
      finally
        free;
      end;
    end;
  end;
  if ADOQuery.IsEmpty then exit;
  ADOQUery.First;
  while not ADOQUery.Eof do begin
    bjmc := ADOQuery.fieldbyname('bj').AsString;
    //取得考试人数
    if g_sys.qk='1' then
      total :=  GetFieldVar('select Count(1) from stu_info where 退学否=''F'' and 班级='''+bjmc+''' and ((缺考科目 is null) or(缺考科目 not like''%'+ComboBox.Text+'%''))')
    else
      total :=  GetFieldVar('select Count(1) from stu_info where 退学否=''F'' and 班级='''+bjmc+'''');
    //total为0的才计算
    if total <>0 then begin
      pjf :=
         MyTrunc(GetFieldVar('select sum('+ComboBox.Text+') from stu_info where 退学否=''F'' and 班级='''+bjmc+'''')/total, 2);
      hgl :=
         MyTrunc(GetFieldVar('select Count(1) from stu_info where 退学否=''F'' and '+ComboBox.Text+'>='+inttostr(fFz[1])+' and '+ComboBox.Text+'<'+inttostr(fFz[2])+ 'and 班级='''+bjmc+'''')*100/total, 2)+'%';
      lhl :=
         MyTrunc(GetFieldVar('select Count(1) from stu_info where 退学否=''F'' and '+ComboBox.Text+'>='+inttostr(fFz[2])+' and '+ComboBox.Text+'<'+inttostr(fFz[3])+' and 班级='''+bjmc+'''')*100/total, 2)+'%';
      yxl :=
         MyTrunc(GetFieldVar('select Count(1) from stu_info where 退学否=''F'' and '+ComboBox.Text+'>='+inttostr(fFz[3])+' and 班级='''+bjmc+'''')*100/total, 2)+'%';

      ExecuteSQL('update calc set pjf='''+pjf+''',rs='+inttostr(total)
        +',hgl='''+hgl+''',lhl='''+lhl+''',yxl='''+yxl+''' where bj='''+bjmc+'''');
    end;
    ADOQuery.Next;
  end;
  ADOQuery.Refresh;
  if ComboBox_jb.Items.Count>0 then ComboBox_jb.ItemIndex := 0;
  Showtxfx;
  SCreen.Cursor := crDefault;
end;

procedure TFCalc.FormCreate(Sender: TObject);
var
  i: integer;
begin
  ExecuteSQL('delete from calc');
  for i := 0 to ComponentCount - 1 do
  if (Components[i] is TADOQuery) then
  if (TADOQuery(Components[i]).SQL.Text<>'') and (TADOQuery(Components[i]).Tag<>111) then
  begin
    if  TADOQuery(Components[i]).Active then  TADOQuery(Components[i]).Close;
    try
      TADOQuery(Components[i]).Open;
    except
    end;
  end;
  inherited;
  if ComboBox.Items.Count > 0 then
  ComboBox.ItemIndex := 0;
  RadioGrou1Click(RadioGrou1);
  DBChart1.AutoRefresh := True;
end;

procedure TFCalc.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
end;

procedure TFCalc.RadioGrou1Click(Sender: TObject);
var
  str: string;
begin
  str := GetFieldVar('select km from STU_kskm where nj='''+RadioGrou1.Items[RadioGrou1.itemIndex] +'''');
  RadioGroup2.Items.Clear;
  RadioGroup2.Columns := 0;
  while Pos(';',str)>0 do begin
    RadioGroup2.Columns := RadioGroup2.Columns + 1;
    RadioGroup2.Items.Add(Copy(str,1,Pos(';',str)-1));
    str := Copy(str,Pos(';',str)+1,length(str));
  end;
  if RadioGroup2.Items.Count > 0 then RadioGroup2.ItemIndex := 0;
  ShowTX;
end;

procedure TFCalc.ADOQuery_fx1CalcFields(DataSet: TDataSet);
begin
  ADOQuery_fx1.FieldByName('bj').AsString := Copy(ADOQuery_fx1.FieldByName('班级').AsString,3,10); 
end;

procedure TFCalc.showTX;
var
  str, km: string;
begin
  if RadioGroup2.Items.Count<1 then  begin
    ADOQuery.Close;
    DBChart1.Title.Text.CommaText := RadioGrou1.Items[RadioGrou1.ItemIndex]+'级没有相关数据';
    if ADOQuery_fx1.Active then ADOQuery_fx1.Close;
    ADOQuery_fx1.SQL.Text := 'select 班级,Count(语文)as yw from stu_info where 1=2 group by 班级';
    try
      ADOQuery_fx1.open;
    except
    end;
    exit;
  end;
  if (trim(Edit2.Text)='')or (trim(Edit3.Text)='') then begin
    Ask('分数段为填,请填入分数段!','提示',MB_OK);
    Edit2.SetFocus;
    exit;
  end;
  if strtoint(Edit2.Text)>strtoint(Edit3.Text) then begin
    str := Edit2.Text;
    Edit2.Text := Edit3.Text;
    Edit3.Text := str;
  end;
  km := RadioGroup2.Items[RadioGroup2.ItemIndex];
  str := 'select 班级,Count('+km+')as yw from stu_info where '+
    km+'>='+trim(Edit2.text)+' and '+km+'<='+trim(Edit3.text)+' and 退学否=''F'' and 级别='''
    +RadioGrou1.Items[RadioGrou1.ItemIndex]+''' group by 班级';

  DBChart1.Title.Text.CommaText := RadioGrou1.Items[RadioGrou1.ItemIndex]+km
           +Edit2.text+'分至'+Edit3.text+'分人数分布图';
  if ADOQuery_fx1.Active then ADOQuery_fx1.Close;
  ADOQuery_fx1.SQL.Text := str;
  try
    ADOQuery_fx1.open;
  except
  end;
end;

procedure TFCalc.RadioGroup2Click(Sender: TObject);
begin
  showTX;
end;

procedure TFCalc.Button3Click(Sender: TObject);
begin
  if  Ask('真的要打印吗?','提示',MB_OKCl)=1 then DBChart1.PrintLandscape;
end;

procedure TFCalc.Showtxfx;
begin
  if ComboBox_jb.ItemIndex < 0 then exit;
  if ComboBox.ItemIndex < 0 then exit;
  with ADOQuery_fx do try
    if Active then close;
    sql.Text := 'select * from calc where bj like ''%'+ComboBox_jb.Text+'%''';
    Open;
  except
  end;
  DBChart2.Title.Text.CommaText := ComboBox_jb.Text+ComboBox.Text+'成绩分析图';

end;

procedure TFCalc.ADOQuery_fxCalcFields(DataSet: TDataSet);
begin
  ADOQuery_fx.FieldByName('bjmc').asstring :=  copy(ADOQuery_fx.FieldByName('bj').asstring,3,10);
  ADOQuery_fx.FieldByName('vpjf').asFloat :=  strtofloat(ADOQuery_fx.FieldByName('pjf').asstring);
  ADOQuery_fx.FieldByName('vhgl').asFloat :=  strtofloat(Copy(ADOQuery_fx.FieldByName('hgl').asstring,1,Pos('%',ADOQuery_fx.FieldByName('hgl').asstring)-1));
  ADOQuery_fx.FieldByName('vlhl').asFloat :=  strtofloat(Copy(ADOQuery_fx.FieldByName('lhl').asstring,1,Pos('%',ADOQuery_fx.FieldByName('lhl').asstring)-1));
  ADOQuery_fx.FieldByName('vyxl').asFloat :=  strtofloat(Copy(ADOQuery_fx.FieldByName('yxl').asstring,1,Pos('%',ADOQuery_fx.FieldByName('yxl').asstring)-1));

end;

procedure TFCalc.ComboBox_jbChange(Sender: TObject);
begin
  Showtxfx;
end;

procedure TFCalc.ComboBoxChange(Sender: TObject);
begin
  ComboBox_jb.Clear;
end;

procedure TFCalc.RadioGroupClick(Sender: TObject);
begin
  ComboBox_jb.Clear;
end;

procedure TFCalc.Button4Click(Sender: TObject);
begin
  if  Ask('真的要打印吗?','提示',MB_OKCl)=1 then DBChart2.PrintLandscape;
end;

procedure TFCalc.BitBtn1Click(Sender: TObject);
begin
  DBChart2.ZoomPercent(120);
end;

procedure TFCalc.BitBtn2Click(Sender: TObject);
begin
DBChart2.ZoomPercent(80);
end;

procedure TFCalc.BitBtn3Click(Sender: TObject);
begin
  DBChart2.UndoZoom;
end;

end.

⌨️ 快捷键说明

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