📄 zhunit.~pas
字号:
rs:= row- 2;//人数
kcs:= column- 3;//课程数
{下面将课程类别加入kechengxls中}
with adoquery1 do begin
close;
sql.Clear;
sql.Add('select * from 必修课 where 所在学期= "'+ xq+ '" and ' + '(专业= "'+ zyj+ '" or 专业1= "'+ zyj+ '" or 专业2= "'+ zyj+ '" or 专业3= "'+ zyj+ '")');
open;
//showmessage(sql.GetText);
while not eof do begin
temp:= fieldbyname('课程名').AsString;
for i:= 1 to kcs do begin
if kechengxls.kc.kecheng[i]= temp then begin
kechengxls.kc.lx[i]:= 1;
break;
end;
end;
next;
end;
close;
sql.Clear;
sql.Add('select * from 专业选修课 where 专业= "'+ zyj+ '" or 专业1= "'+ zyj+ '" or 专业2= "'+ zyj+ '" or 专业3= "'+ zyj+ '" ');
open;
while not eof do begin
temp:= fieldbyname('课程名').AsString;
for i:= 1 to kcs do begin
if kechengxls.kc.kecheng[i]= temp then begin
kechengxls.kc.lx[i]:= 2;
break;
end;
end;
next;
end;
close;
end;
{课程类别已加入}
IsDaSan:= xlsprs(kechengxls, xueshengxls, row, column, kcs, rs);
{下面将计算结果录入}
with adoquery1 do begin
sql.Clear;
sql.Add('select * from 学籍成绩 where 专业班级= "'+ zybjj+ '"');
open;
for i:= 1 to rs do begin
first;
while not eof do begin
if fieldbyname('学号').AsString= xueshengxls.xs[i- 1].xuehao then begin
edit;
f1:= fieldbyname('智育成绩').asfloat;
f2:= fieldbyname('智育学分数').Asfloat;
fieldbyname('智育成绩').asfloat:= roundto((ZhiYu[i]* XueFen[i]+ f1* f2)/(XueFen[i]+ f2),-4);
fieldbyname('智育学分数').Asfloat:= XueFen[i]+ f2;
fieldbyname('必修课挂科门数').AsInteger:= fieldbyname('必修课挂科门数').AsInteger+ GuaKeBX[i];
fieldbyname('选修课挂科门数').AsInteger:= fieldbyname('选修课挂科门数').AsInteger+ GuaKeXX[i];
fieldbyname('重修补考挂科门数').AsInteger:= fieldbyname('重修补考挂科门数').AsInteger+ GuaKeCB[i];
if IsDaSan then begin
fieldbyname('体育成绩').asfloat:= 100;
fieldbyname('体育课挂科门数').asInteger:= 0;
end
else begin
fieldbyname('体育成绩').asfloat:= fieldbyname('体育成绩').asfloat+ TiYu[i];
fieldbyname('体育课挂科门数').asfloat:= fieldbyname('体育课挂科门数').asfloat+ GuaKeTY[i];
end;
post;
break;
end;
next;
end;
end;
end;
kechengxls.clear;
xueshengxls.clear;
// end;
end;
end;
result:= true;
finally
screen.Cursor:= crdefault;
richedit1.Lines.Add(timetostr(time)+'成绩数据录入完毕');
StatusBar1.Panels[1].Text:= '成绩数据录入完毕';
Update;
end;
end;
end;
function xlsprs(kechengxls: Txlskc; xueshengxls: Txlsxs;row,column,kcs,rs: byte): boolean;
var i,j,k: byte;
t: string;
XueSheng: unit3.TZongChengJi;
begin
xuesheng:= tzongchengji.Create;//初始化变量,很重要!
result:= true;
for i:= 1 to rs do begin
j:= 1;
for k:= 1 to kcs do begin
if (kechengxls.kc.lx[k]= 1) or ((kechengxls.kc.lx[k]= 2) and (xueshengxls.xs[i- 1].chengji[k]<> '*')) then begin
if(xueshengxls.xs[i- 1].chengji[k]= '*') then
xuesheng.ChengJi[j].Fenshu:= '0'
else begin
if AnsiEndsText('*', xueshengxls.xs[i- 1].chengji[k]) then begin
t:= xueshengxls.xs[i- 1].chengji[k];
t:= copy(t,1,length(t)- 1);
if strtofloat(t)> 60 then
xuesheng.ChengJi[j].Fenshu:= '60'
else
xuesheng.ChengJi[j].Fenshu:= t;
end
else
xuesheng.ChengJi[j].Fenshu:= xueshengxls.xs[i- 1].chengji[k];
end;
xuesheng.ChengJi[j].XueFen:= kechengxls.kc.xuefen[k];
j:= j+ 1;
end;
end;
unit3.JiSuan(xuesheng,j- 1);
zhiyu[i]:= unit3.PXJ;
xuefen[i]:= unit3.ZXS;
GuaKeBX[i]:= unit3.GuaKeShu;
xuesheng.clear;
j:= 1;
for k:= 1 to kcs do
if(kechengxls.kc.lx[k]= 0) then begin
if(xueshengxls.xs[i- 1].chengji[k]= '*') or (AnsiEndsText('*', xueshengxls.xs[i- 1].chengji[k])) then continue;
xuesheng.ChengJi[j].Fenshu:= xueshengxls.xs[i- 1].chengji[k];
xuesheng.ChengJi[j].XueFen:= kechengxls.kc.xuefen[k];
j:= j+ 1;
end;
unit3.JiSuan(xuesheng,j- 1);
GuaKeXX[i]:= unit3.GuaKeShu;
xuesheng.clear;
j:= 1;
for k:= 1 to kcs do begin
if(kechengxls.kc.lx[k]= 3) then begin
if result then result:= false;
if(xueshengxls.xs[i- 1].chengji[k]= '*') then
xuesheng.ChengJi[j].Fenshu:= '0'
else begin
if AnsiEndsText('*', xueshengxls.xs[i- 1].chengji[k]) then begin
t:= xueshengxls.xs[i- 1].chengji[k];
t:= copy(t,1,length(t)- 1);
if strtofloat(t)> 60 then
xuesheng.ChengJi[j].Fenshu:= '60'
else
xuesheng.ChengJi[j].Fenshu:= t;
end
else
xuesheng.ChengJi[j].Fenshu:= xueshengxls.xs[i- 1].chengji[k];
end;
xuesheng.ChengJi[j].XueFen:= kechengxls.kc.xuefen[k];
j:= j+ 1;
end;
end;
unit3.JiSuan(xuesheng,j- 1);
TiYu[i]:= unit3.PXJ;
GuaKeTY[i]:= unit3.GuaKeShu;
xuesheng.clear;
end;
end;
procedure WriteIni();
var
IniFile:TInifile;
zystr,zybjstr,zybjsstr,zyrsstr: string;
i,j,count,total: integer;
begin
try
Inifilename:= ExtractFilePath(paramstr(0))+'Serv.ini';
inifile:= TInifile.Create(Inifilename);
count:= 0;
total:= 0;
for i:= 1 to zys do begin
zystr:= zystr+ zy[i]+ #32;//#32表示空格
zybjsstr:= zybjsstr+ inttostr(zybjs[i])+ #32;
zyrsstr:= zyrsstr+ inttostr(zyrs[i])+ #32;
total:= total+ zyrs[i];
count:= count+ zybjs[i];
end;
for j:= 1 to count do
zybjstr:= zybjstr+ zybj[j]+ #32;
inifile.WriteString('专业班级统计','专业',zystr);
inifile.WriteInteger('专业班级统计','专业数',zys);
inifile.WriteString('专业班级统计','专业对应班级数',zybjsstr);
inifile.WriteString('专业班级统计','专业对应人数',zyrsstr);
inifile.WriteInteger('专业班级统计','专业总人数',total);
inifile.WriteString('专业班级统计','班级',zybjstr);
inifile.WriteInteger('专业班级统计','班级总数',bjs);
inifile.WriteString('资源文件地址','学籍文件',DirXJ);
inifile.WriteString('资源文件地址','成绩文件夹',FolderCJ);
inifile.WriteString('资源文件地址','得分文件夹',FolderDF);
inifile.WriteString('输出文件地址','输出文件夹',FolderRst);
inifile.WriteFloat('比例分配','智育',propzy);
inifile.WriteFloat('比例分配','德育',propdy);
inifile.WriteFloat('比例分配','体育',propty);
inifile.WriteFloat('比例分配','综合',propzh);
inifile.WriteFloat('比例分配','甲等综测',jdzc);
inifile.WriteFloat('比例分配','甲等智育',jdzy);
inifile.WriteFloat('比例分配','乙等综测',ydzc);
inifile.WriteFloat('比例分配','乙等智育',ydzy);
inifile.WriteFloat('比例分配','丙等综测',bdzc);
inifile.WriteFloat('比例分配','丙等智育',bdzy);
inifile.WriteFloat('比例分配','总比例',zbl);
inifile.WriteString('评奖时间信息','评奖学年',XueNian);
finally
inifile.Free;
end;
end;
procedure ReadIni(firstrun: boolean);
var
str,st,str1: string;
i,j,k,len: byte;
begin
try
Inifilename:= ExtractFilePath(paramstr(0))+'Serv.ini';
inifile:= TInifile.Create(Inifilename);
if not firstrun then begin
zys:= inifile.ReadInteger('专业班级统计','专业数',0);
bjs:= inifile.ReadInteger('专业班级统计','班级总数',0);
zyzrs:= inifile.ReadInteger('专业班级统计','专业总人数',0);
str:= inifile.ReadString('专业班级统计','专业',#32);
for i:= 1 to length(str) do
if IsDelimiter(#32, str, i) then
break;
len:= i- 1;
for i:= 1 to zys do
zy[i]:= copy(str,(i- 1)*(len+ 1)+ 1,len);
str:= inifile.ReadString('专业班级统计','专业对应班级数',#32);
for i:= 1 to length(str) do
if IsDelimiter(#32, str, i) then
break;
len:= i- 1;
for i:= 1 to zys do begin
st:= copy(str,(i- 1)*(len+ 1)+ 1,len);
zybjs[i]:= strtoint(st);
end;
str:= inifile.ReadString('专业班级统计','班级',#32);
for i:= 1 to length(str) do
if IsDelimiter(#32, str, i) then
break;
len:= i- 1;
for i:= 1 to bjs do
zybj[i]:= copy(str,(i- 1)*(len+ 1)+ 1,len);
str:= inifile.ReadString('专业班级统计','专业对应人数',#32);
j:= 1;
k:= 0;
for i:= 1 to length(str) do
if not IsDelimiter(#32, str, i) then
k:= k+ 1
else begin
str1:= copy(str,i- k,k);
zyrs[j]:= strtoint(str1);
j:= j+ 1;
k:= 0;
end;
str1:= copy(str,length(str)- k, k+ 1);
if length(str1)> 0 then
zyrs[j]:= strtoint(str1);
end
else begin
for i:= 1 to bjs do
zybj[i]:= '';
for i:= 1 to zys do begin
zy[i]:= '';
zybjs[i]:= 0;
zyrs[i]:= 0;
end;
zys:= 0;
bjs:= 0;
zyzrs:= 0;
end;
FolderCJ:= inifile.ReadString('资源文件地址','成绩文件夹',ExtractFilePath(paramstr(0))+ '课程成绩xls');
DirXJ:= inifile.ReadString('资源文件地址','学籍文件',ExtractFilePath(paramstr(0))+ '学籍信息xls\学籍信息.xls');
FolderDF:= inifile.ReadString('资源文件地址','得分文件夹',ExtractFilePath(paramstr(0))+ '得分信息xls');
FolderRst:= inifile.ReadString('输出文件地址','输出文件夹',ExtractFilePath(paramstr(0))+ '处理结果xls');
propzy:= inifile.ReadFloat('比例分配','智育',0.6);
propdy:= inifile.ReadFloat('比例分配','德育',0.2);
propty:= inifile.ReadFloat('比例分配','体育',0.1);
propzh:= inifile.ReadFloat('比例分配','综合',0.1);
jdzc:= inifile.ReadFloat('比例分配','甲等综测',0.05);
jdzy:= inifile.ReadFloat('比例分配','甲等智育',0.09);
ydzc:= inifile.ReadFloat('比例分配','乙等综测',0.13);
ydzy:= inifile.ReadFloat('比例分配','乙等智育',0.18);
bdzc:= inifile.ReadFloat('比例分配','丙等综测',0.23);
bdzy:= inifile.ReadFloat('比例分配','丙等智育',0.30);
zbl:= inifile.ReadFloat('比例分配','总比例',0.10);
except
showmessage('配置文件读取错误,程序即将自动关闭');
application.Terminate;
end;
end;
procedure Txlsxs.clear();
var
i,j: integer;
begin
for i:= 0 to 100 do begin
for j:= 1 to 100 do
xs[i].chengji[j]:= #0;
xs[i].xuehao:= #0;
xs[i].xingming:= #0;
end;
end;
procedure Txlskc.clear();
var
i: integer;
begin
for i:= 1 to 100 do begin
kc.kecheng[i]:= #0;
kc.xuefen[i]:= 0;
kc.lx[i]:= 0;
end;
end;
function dyzhCLAuto(): boolean;
var
dir,temp: string;
tmp,tp,t: array[0..600] of string;
xhIndex,dyIndex,zhIndex,row: integer;
i, j: integer;
count: integer;//进度条专用
begin
result:= false;
ReadIni(false);
with MainForm do begin
try
richedit1.Lines.Add(timetostr(time)+'自动录入德育综合信息');
StatusBar1.Panels[1].Text:= '自动录入德育综合信息';
update;
for j:= 1 to zys do begin
with adoquery1 do begin
close;
sql.Clear;
sql.Add('select 学号,姓名,专业班级,德育得分,综合能力得分 from 学籍成绩 where 专业 = "'+ zy[j]+ '"');
open;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -