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

📄 unitclassroom.pas.~107~

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

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs,UnitDatamodule,CheckLst,unitCollide;

type
  TClassRoom = class(TObject)
  public
    procedure readClassroomList(school:String;List1:TCheckListBox;Subject:String);//读取某个科目的考室列表
    function inceptClassroom(school:string;classNum:Integer;Subject:String):Boolean;  //接收某个科目的某个考室成绩
    procedure DeleteClassroom(school:string;classNum:Integer;Subject:String);//清除某个科目的某个考室成绩
  end;
  

implementation

uses UnitGlobal;

{
********************************** TClassRoom **********************************
}
procedure TClassRoom.DeleteClassroom(school: string; classNum: Integer;
  Subject: String);
var
  startZkzh,schorder:String;
begin
  dm.Trans1.Active:=false;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select schorder from school where schname='''+school+'''';
  dm.Query1.Open;
  dm.Query1.First;
  schorder:=dm.Query1.FieldByName('schorder').AsString;
  if classNum<10 then
    startZkzh:=schorder+'0'+inttostr(classNum)+'01'
  else
    startZkzh:=schorder+inttostr(classNum)+'01';
  dm.Query1.Close;
  dm.Query1.SQL.Text:='delete from incepted where substring(zkzh from 2 for 8)='''+startZkzh+
    ''' and subject='''+subject+'''';
  dm.Query1.ExecSQL;
  dm.Trans1.Commit;
  dm.TransIncept.Active:=false;
  dm.QueryIncept.Close;
  dm.QueryIncept.SQL.Text:='select first 30 skip '+inttostr((classNum-1)*30)+' zkzh,'+Subject+
    ' from student where substring(zkzh from 2 for 4)='''+schorder+'''';
  dm.QueryIncept.Open;
  dm.UpdateIncept.ModifySQL.Text:='update student set '+Subject+'=:'+Subject+' where zkzh=:OLD_zkzh';
  dm.QueryIncept.First;
  while not dm.QueryIncept.Eof do
  begin
    dm.QueryIncept.Edit;
    dm.QueryIncept.FieldByName(subject).AsFloat:=0;
    dm.QueryIncept.Post;
    dm.QueryIncept.Next;
  end;
  dm.TransIncept.Commit;
end;

function TClassRoom.inceptClassroom(school: string; classNum: Integer;
  Subject: String):Boolean;
var
  fmCollide:TfmCollide;
  schorder:String;
begin
  result:=true;
  fmCollide:=TfmCollide.Create(nil);
  fmCollide.StringGrid1.RowCount:=1;
  fmCollide.StringGrid1.Cells[0,0]:='准考证号';
  fmCollide.StringGrid1.Cells[1,0]:='一号录入';
  fmCollide.StringGrid1.Cells[2,0]:='二号录入';
  dm.Trans1.Active:=false;
  dm.Trans1.Active:=false;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select schorder from school where schname='''+school+'''';
  dm.Query1.Open;
  schOrder:=dm.Query1.FieldByName('schorder').AsString;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select first 30 skip '+inttostr((classNum-1)*30)+' zkzh,'+Subject+
  ' from ach1 where substring(zkzh from 2 for 4)='''+schorder+''' order by substring(zkzh,2,8)';
  dm.Query1.Open;

  dm.Trans2.Active:=false;
  dm.Query2.Close;
  dm.Query2.SQL.Text:='select first 30 skip '+inttostr((classNum-1)*30)+' zkzh,'+Subject+
  ' from ach2 where substring(zkzh from 2 for 4)='''+schorder+''' substring(zkzh,2,8)';
  dm.Query2.Open;

  dm.Query1.First;
  dm.Query2.First;
  while not dm.Query1.Eof do
  begin
    if dm.Query1.FieldByName(subject).AsFloat<>dm.Query2.FieldByName(subject).AsFloat then
    begin
      result:=false;
      fmCollide.StringGrid1.RowCount:=fmCollide.StringGrid1.RowCount+1;
      fmCollide.StringGrid1.Cells[0,fmCollide.StringGrid1.RowCount-1]:=dm.Query1.FieldByName('zkzh').AsString;
      fmCollide.StringGrid1.Cells[1,fmCollide.StringGrid1.RowCount-1]:=floattostr(dm.Query1.FieldByName(subject).AsFloat);
      fmCollide.StringGrid1.Cells[2,fmCollide.StringGrid1.RowCount-1]:=floattostr(dm.Query2.FieldByName(subject).AsFloat);
    end;
    dm.Query1.Next;
    dm.Query2.Next;
  end;
  if result=false then
    fmCollide.ShowModal  //有冲突,则显示冲突窗体,没冲突则将成绩接收
  else
  begin
    dm.TransIncept.Active:=false;
    dm.QueryIncept.Close;
    dm.QueryIncept.SQL.Text:='select first 30 skip '+inttostr((classNum-1)*30)+' zkzh,'+Subject+
      ' from student where substring(zkzh from 2 for 4)='''+schorder+''' order by substring(zkzh,2,8)';
    dm.QueryIncept.Open;
    dm.UpdateIncept.ModifySQL.Text:='update student set '+Subject+'=:'+Subject+' where zkzh=:OLD_zkzh';
    dm.Query1.First;
    dm.QueryIncept.First;
    while not dm.Query1.Eof do
    begin
      dm.QueryIncept.Edit;
      dm.QueryIncept.FieldByName(subject).AsFloat:=dm.Query1.FieldByName(subject).AsFloat;
      dm.QueryIncept.Post;
      dm.Query1.Next;
      dm.QueryIncept.Next;
    end;
    try
      dm.TransIncept.Commit;
    except
      dm.TransIncept.Rollback;
      result:=false;
    end;
    //将标志添加进已接收表
    dm.Query1.First;
    dm.Trans2.Active:=false;
    dm.Query2.Close;
    dm.Query2.SQL.Text:='insert into incepted values('''+
      copy(dm.Query1.FieldByName('zkzh').AsString,2,Length(dm.Query1.FieldByName('zkzh').AsString)-1)+
      ''','''+Subject+''')';
    try
      dm.Query2.ExecSQL;
      dm.Trans2.Commit;
    except
      dm.Trans2.Rollback;
    end;
  end;
  FreeAndNil(fmCollide);
end;

procedure TClassRoom.readClassroomList(school:String;List1:TCheckListBox;Subject:String);
var
  mycnt,classcnt,i:Integer;
  schOrder,startZkzh:String;
begin
  dm.Trans1.Active:=false;
  dm.Query1.Close;
  dm.Query1.SQL.Text:='select schorder from school where schname='''+school+'''';
  dm.Query1.Open;
  schOrder:=dm.Query1.FieldByName('schorder').AsString;

  dm.Query1.Close;
  dm.Query1.SQL.Text:='select count(*) as cnt from student where substring(zkzh from 2 for 4)='''+schorder+'''';
  dm.Query1.Open;
  mycnt:=dm.Query1.FieldByName('cnt').AsInteger;
  if (mycnt mod 30)=0 then
    classcnt:=(mycnt div 30)
  else
    classcnt:=(mycnt div 30)+1;
  List1.Clear;
  for i:=1 to classcnt do
    List1.Items.Add('第'+Inttostr(i)+'考室');

  for i:=0 to classcnt-1 do
  begin
    if i<9 then
      startZkzh:=schOrder+'0'+Inttostr(i+1)+'01'
    else
      startZkzh:=schOrder+Inttostr(i+1)+'01';//每个考室的第一个号,据此判断是否接收
    dm.Query1.Close;
    dm.Query1.SQL.Text:='select count(*) as cnt from incepted where zkzh='''+
      startzkzh+''' and subject='''+subject+'''';
    dm.Query1.Open;
//    showmessage(dm.Query1.SQL.Text);
    if dm.Query1.FieldByName('cnt').AsInteger>0 then
      list1.Checked[i]:=true
    else
      list1.Checked[i]:=false;
  end;
end;


end.

⌨️ 快捷键说明

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