?? 主程序.prg
字號(hào):
WAIT CLEA
IF nj=1
DO CASE
CASE jdmcbh=1
REPL ALL 入學(xué)zmc WITH zmcz
CASE jdmcbh=2
REPL ALL 一上期中zm WITH zmcz
CASE jdmcbh=3
REPL ALL 一上期末zm WITH zmcz
CASE jdmcbh=4
REPL ALL 一下期中zm WITH zmcz
CASE jdmcbh=5
REPL ALL 一下期末zm WITH zmcz
ENDCASE
ENDIF
IF nj=2
DO CASE
CASE jdmcbh=2
REPL ALL 二上期中zm WITH zmcz
CASE jdmcbh=3
REPL ALL 二上期末zm WITH zmcz
CASE jdmcbh=4
REPL ALL 二下期中zm WITH zmcz
CASE jdmcbh=5
REPL ALL 二下期末zm WITH zmcz
ENDCASE
ENDIF
IF nj=3
DO CASE
CASE jdmcbh=2
REPL ALL 三上期中zm WITH zmcz
CASE jdmcbh=3
REPL ALL 三上期末zm WITH zmcz
CASE jdmcbh=4
REPL ALL 三下期中zm WITH zmcz
CASE jdmcbh=6
REPL ALL 三下適應(yīng)zm WITH zmcz
CASE jdmcbh=7
REPL ALL 中考zmc WITH zmcz
ENDCASE
ENDIF
ENDPROC
PROC sanbmc()&&算班名次
PRIV N,i,i1,i2,i3
SELE cjk
* 統(tǒng)計(jì)各班各科目名次
FOR i=1 TO bjs
SET FILT TO 班級(jí)=i
@ 15,15 SAY ' ' FONT "宋體",15 STYL "B"
FOR N=1 TO kms
zdm=SUBS(sy_km,N*4-3,4)
bmcm=SUBS(tj_bmc,N*4-3,4)
IF (zdm $ lk_km .AND. SUBS(sy_bj,i*2-1,2) $ lk_bj ) .OR.(zdm $ wk_km .AND. SUBS(sy_bj,i*2-1,2) $ wk_bj )
BLANK ALL FIELDS &bmcm.
@ 15,15 SAY "正在統(tǒng)計(jì)"+LEFT(njmc,2)++"【"+SUBS(bjmc_all,i*2-1,2)+"班】的〖"+zdm;
+"〗科目名次 " FONT "宋體",15 STYL "B"
SET SAFE OFF
INDE ON - &zdm. TO cjkidx
SET SAFE ON
GO TOP
i3=1
i1=-1
DO WHIL .NOT. EOF()
IF &zdm. <> i1
REPL &bmcm. WITH i3
IF 刪除="*"
BLANK FIEL &bmcm
ENDIF
IF .NOT. DELE()
i1=&zdm.
i2=&bmcm.
ENDIF
ELSE
REPL &bmcm. WITH i2
IF 刪除="*"
BLANK FIEL &bmcm
ENDIF
ENDIF
IF .NOT. DELE()
i3=i3+1
ENDIF
SKIP
ENDDO
ENDIF
ENDF
ENDF
SET FILT TO
@ 15,15 SAY ' ' FONT "宋體",15 STYL "B"
IF nj=1 .AND. jdmcbh=1
REPL ALL 入學(xué)bmc WITH bmcz
ENDIF
IF nj=3 .AND. jdmcbh=7
REPL ALL 中考bmc WITH bmcz
ENDIF
ENDPROC
PROC phgbrs &&平衡各班人數(shù)————以人數(shù)最低的班為準(zhǔn),從低分往高分去人,讓各班人數(shù)相等
LOCAL x,i,m,j,z,T
SELE cjk
SET SAFE OFF
INDE ON 總分 TO cjkidx
SET SAFE ON
RECALL FOR 去尾
IF sftjzbs
RECALL FOR 刪除="#"
ELSE
DELE FOR 刪除="#"
ENDIF
REPL ALL 去尾 WITH .F.
DIME rs_b(bjs)
FOR m=1 TO sffwlk
T=STR(m,1)
IF IIF(m=1,lbjs,wbjs)=0
EXIT
ENDI
********各班去掉人,以便平均
FOR i=1 TO IIF(m=1,lbjs,wbjs)
COUNT TO rs_b(i) FOR SUBS(sy_bj,班級(jí)*2-1,2)=SUBS(IIF(m=1,lk_bj,wk_bj),i*2-1,2) .AND. .NOT. DELE()
ENDF
min_brs=rs_b(1)&&暫認(rèn)為人數(shù)最少的班為1
FOR j=2 TO IIF(m=1,lbjs,wbjs)
IF min_brs>rs_b(j)
min_brs=rs_b(j)
ENDIF
ENDF
z=min_brs &&實(shí)際最少班人數(shù)
IF m=1
x= MESSAGEBOX("是否按人數(shù)最少班的90%為齊來(lái)去人,選擇【是】將取90%,選擇[否]則以最少班人數(shù)"+CHR(13)+"為齊,選擇[取消]則不去人,以實(shí)際人數(shù)為準(zhǔn)",;
547,"使各班人數(shù)相等,從總分的最低分開(kāi)始去人,這些人在算積分時(shí)被忽略掉!")
ENDIF
IF x=6
min_brs=ROUND(min_brs*0.9,0) &&取最少人數(shù)的班的人數(shù)90%算積分
ENDIF
IF x=2
RECALL FOR 去尾
BLAN ALL FIELDS 去尾
IF sftjzbs
RECALL FOR 刪除="#"
ELSE
DELE FOR 刪除="#"
ENDIF
DO tcbjrs
RETU
ENDIF
=MESSAGEBOX(IIF(m=1,IIF(sffwlk=1,"該年級(jí)","理科班"),"文科班")+"最少班的人數(shù)為:"+STR(z,3)+"人"+CHR(13);
+"注意計(jì)算積分人數(shù)為為"+STR(min_brs,3)+"人",0,"提示最少人數(shù)!!")
FOR i=1 TO IIF(m=1,lbjs,wbjs)
GO TOP
DO WHIL rs_b(i)>min_brs
IF SUBS(sy_bj,班級(jí)*2-1,2)=SUBS(IIF(m=1,lk_bj,wk_bj),i*2-1,2) .AND. .NOT. DELE()
REPL 去尾 WITH .T.
DELE
SKIP
rs_b(i)=rs_b(i)-1
ELSE
SKIP
ENDIF
ENDDO
ENDF
ENDF
DO tcbjrs
SET DELE OFF
*************
ENDPROC
PROC zdcl() &&自動(dòng)處理成績(jī)(全套功能)
IF mima<>'z'+STRT(ALLT(STRT(STR(COS(SIN(VAL(SYS(2020))*2)),12,10),'.','')),'-','')
DO xinjian1
ELSE
DO dakai1
ENDIF
IF ALLT(DBF(2))==''
RETU
ENDI
DO phgbrs
DO sanzf
DO sanzmc
DO sanbmc
DO FORM 積分項(xiàng)目設(shè)定
DO sanjf
DO FORM 打印報(bào)表
*!* IF MESSAGEBOX("是否打印各項(xiàng)積分第一",292,"打印積分")=6
*!* DO 打印各項(xiàng)第一名.prg
*!* ENDIF
*!* IF MESSAGEBOX("是否打印表彰名單",292,"打印表彰")=6
*!* DO 打印表彰名單.prg
*!* ENDIF
ENDPROC
****************************************************************************************************************************************************
PROC bpkc_print &&編排考場(chǎng)
PRIV i,j,k1,z1,i_kl,qskc
qskc=1
**排理考場(chǎng)
PUBLIC s2,s3,s4,s5,s51,s7,s6,s8,s9,zrs
SELE cjk
SET DELE OFF
BLANK ALL FIELDS 考室
SET SAFE OFF
INDE ON 班級(jí)*1000-總分 TO cjkidx
SET SAFE ON
FOR i_kl=1 TO sffwlk
DELE ALL
RECALL ALL FOR ALLT(刪除)<>"*"
DELE FOR kl<>STR(i_kl,1)
SET DELE ON
COUNT TO zrs FOR VAL(kl)=i_kl
************* 請(qǐng)修改以下參數(shù)
s8=qskc &&起始考場(chǎng)
s6=35 &&每考室想安排的人數(shù)
s3=CEIL(zrs/s6) && 表示安排考室的個(gè)數(shù)(至少),每考場(chǎng)35人
s9=s8+s3-1&&結(jié)束考場(chǎng)
s51=FLOOR(zrs/s3)&& 表示每考室的考生數(shù)(取人數(shù)最少的一個(gè)班)
s5=CEIL(zrs/s3)&& 表示每考室的考生數(shù)(取人數(shù)最多的一個(gè)班)
IF s51>32
s2=5 && 表示每排S2個(gè)考生
ELSE
s2=4
ENDIF
s4=CEIL(s51/s2) && 表示每考室的排數(shù)(至少)
DO FORM 考場(chǎng)參數(shù)設(shè)置.scx
pkcbjs=IIF(i_kl=1,lbjs,wbjs)&& 表示排考場(chǎng)的班級(jí)數(shù)為PKCBJS
pkcbjmc=IIF(i_kl=1,lk_bj,wk_bj)
PUBLIC rs_b(pkcbjs) &&各班考生數(shù)
************ 以下請(qǐng)勿修改
PUBLIC rs_max,bj_max
rs_max=0
bj_max=0
FOR i=1 TO pkcbjs
COUNT TO x1 FOR SUBS(pkcbjmc,i*2-1,2)=SUBS(sy_bj,班級(jí)*2-1,2) .AND. 刪除<>'*'
STOR x1 TO rs_b(i),sjbjrs(i)
ENDF
s7=MOD(zrs,s3) &&人數(shù)多的考室的個(gè)數(shù)
*********************************************************************
IF i_kl=1
SET SAFE OFF
CREA CURS kck (排號(hào) c(6),列1 c(14),列2 c(14),列3 c(14),列4 c(14),列5 c(14),列6 c(14),列7 c(14),列8 c(14),列9 c(14),;
列10 c(14),列11 c(14),列12 c(14),列13 c(14),列14 c(14),列15 c(14),列16 c(14),列17 c(14),列18 c(14),列19 c(14),列20 c(14))
SET SAFE ON
ELSE
SELE kck
ENDIF
********************************************************************
SELE cjk
PUBL zw(s4+2,s2+2) &&s2 一排幾人,s4 一教室?guī)着?存的是姓名+考號(hào)
PUBL zwb(s4+2,s2+2) &&存的是班名
hsrs=zrs &&還剩人數(shù)(未排的)
FOR z1=1+qskc-1 TO s3+qskc-1 && 表示安排考室的個(gè)數(shù)
STOR "_" TO zw
STOR "_" TO zwb
IF z1>s7+qskc-1
s5=s51
ENDIF
i=0 &&該考室排了幾人了
IF sfzxpl
FOR k1=1 TO s2 && 表示每考室的列數(shù)
FOR j=1 TO s4 && 表示每列S4個(gè)考生
zw(j+1,1)="_"+ALLT(STR(z1))+"_"+ALLT(STR(j))
i=i+1
IF i>s5 .OR. hsrs<=0 && S5表示每考室的考生數(shù) x 未排完的人數(shù)
IF hsrs<=0
k1=1000
j1=1000
ENDIF
j=s4+2
ELSE
DO gspkc &&開(kāi)始排考場(chǎng)
ENDIF
ENDF
ENDF
ELSE
FOR j=1 TO s4 && 表示每考室的排數(shù)
zw(j+1,1)="_"+ALLT(STR(z1))+"_"+ALLT(STR(j))
FOR k1=1 TO s2 && 表示每排S2個(gè)考生
i=i+1
IF i>s5 .OR. hsrs<=0 && S5表示每考室的考生數(shù) x 未排完的人數(shù)
IF hsrs<=0
k1=1000
j1=1000
ENDIF
j=s4+2
ELSE
DO gspkc &&開(kāi)始排考場(chǎng)
ENDIF
ENDF
ENDF
ENDI
SELE kck
APPEN FROM ARRAY zw FOR .NOT. ALLT(排號(hào))=='_'
SELE cjk
ENDF
qskc=z1
SELE cjk
* DO sub3
SELE kck
FOR i=1 TO FCOUNT()
z=FIELDS(i)
BLANK ALL FIELDS &z FOR ALLT(&z)=='_'
ENDF
ENDF
SELE kck
zdm=FIEL(1)
FOR i=2 TO FCOU()
GO TOP
zd=FIEL(i)
IF .NOT. isblank(&zd)
zdm= zdm +','+ zd
ENDI
ENDF
BROW NODE NOAPP FIEL &zdm
SET SAFE OFF
filea=PUTF("輸出到",pathkc+ksqc+'座位表','XLS')
IF filea==''
=MESSAGEBOX("文件不存在!",0,"敬告")
ELSE
COPY TO ( filea) TYPE XL5 FIELDS &zdm
ENDIF
SET SAFE ON
SELE cjk
SET DELE OFF
RECALL ALL
DELE FOR 備注="刪除"
PACK
DELE FOR 刪除="*"
DO ksfb_print
SELE kck
USE
SET SAFE OFF
SET SAFE ON
SET DELE OFF
SELE cjk
IF sftjzbs
RECALL FOR 刪除="#"
ELSE
DELE FOR 刪除="#"
ENDIF
DELE FOR 去尾
DO tcbjrs
ENDPROC
*********************************************************************************
PROC gspkc && 開(kāi)始排考場(chǎng)
* 統(tǒng)計(jì)可排的各班人數(shù)
*****第一排硬規(guī)定
GO TOP
IF .NOT. pkcck
STOR ALLT(SUBS(考號(hào),1,6))+ IIF(LEN(ALLT(姓名))=4,LEFT(姓名,2)+"
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -