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

📄 主程序.prg

📁 用VB做的学生成绩管理系统。欢迎大家来下载
💻 PRG
📖 第 1 页 / 共 4 页
字号:
    WAIT CLEA
    IF nj=1
        DO CASE
            CASE jdmcbh=1
                REPL ALL 入学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 三下适应zm WITH zmcz
            CASE jdmcbh=7
                REPL ALL 中考zmc WITH zmcz
        ENDCASE
    ENDIF
ENDPROC
PROC sanbmc()&&算班名次
    PRIV N,i,i1,i2,i3
    SELE cjk
    * 统计各班各科目名次
    FOR i=1 TO bjs
        SET FILT TO 班级=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  "正在统计"+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 入学bmc WITH bmcz
    ENDIF
    IF nj=3 .AND. jdmcbh=7
        REPL ALL 中考bmc WITH bmcz
    ENDIF
ENDPROC
PROC phgbrs &&平衡各班人数————以人数最低的班为准,从低分往高分去人,让各班人数相等
    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,班级*2-1,2)=SUBS(IIF(m=1,lk_bj,wk_bj),i*2-1,2) .AND. .NOT. DELE()
        ENDF
        min_brs=rs_b(1)&&暂认为人数最少的班为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  &&实际最少班人数
        IF m=1
            x= MESSAGEBOX("是否按人数最少班的90%为齐来去人,选择【是】将取90%,选择[否]则以最少班人数"+CHR(13)+"为齐,选择[取消]则不去人,以实际人数为准",;
                547,"使各班人数相等,从总分的最低分开始去人,这些人在算积分时被忽略掉!")
        ENDIF
        IF x=6
            min_brs=ROUND(min_brs*0.9,0)  &&取最少人数的班的人数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,"该年级","理科班"),"文科班")+"最少班的人数为:"+STR(z,3)+"人"+CHR(13);
            +"注意计算积分人数为为"+STR(min_brs,3)+"人",0,"提示最少人数!!")
        FOR i=1 TO IIF(m=1,lbjs,wbjs)
            GO TOP
            DO WHIL rs_b(i)>min_brs
                IF SUBS(sy_bj,班级*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() &&自动处理成绩(全套功能)
    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 积分项目设定
    DO sanjf
    DO FORM 打印报表
    *!*	    IF MESSAGEBOX("是否打印各项积分第一",292,"打印积分")=6
    *!*	        DO 打印各项第一名.prg
    *!*	    ENDIF
    *!*	    IF MESSAGEBOX("是否打印表彰名单",292,"打印表彰")=6
    *!*	        DO 打印表彰名单.prg
    *!*	    ENDIF
ENDPROC
****************************************************************************************************************************************************
PROC bpkc_print &&编排考场
    PRIV i,j,k1,z1,i_kl,qskc
    qskc=1
    **排理考场
    PUBLIC s2,s3,s4,s5,s51,s7,s6,s8,s9,zrs
    SELE cjk
    SET DELE OFF
    BLANK ALL FIELDS 考室
    SET SAFE OFF
    INDE ON  班级*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
        ************* 请修改以下参数
        s8=qskc  &&起始考场
        s6=35 &&每考室想安排的人数
        s3=CEIL(zrs/s6)      && 表示安排考室的个数(至少),每考场35人
        s9=s8+s3-1&&结束考场
        s51=FLOOR(zrs/s3)&& 表示每考室的考生数(取人数最少的一个班)
        s5=CEIL(zrs/s3)&& 表示每考室的考生数(取人数最多的一个班)
        IF s51>32
            s2=5       && 表示每排S2个考生
        ELSE
            s2=4
        ENDIF
        s4=CEIL(s51/s2)       && 表示每考室的排数(至少)
        DO FORM 考场参数设置.scx
        pkcbjs=IIF(i_kl=1,lbjs,wbjs)&& 表示排考场的班级数为PKCBJS
        pkcbjmc=IIF(i_kl=1,lk_bj,wk_bj)
        PUBLIC rs_b(pkcbjs)    &&各班考生数
        ************    以下请勿修改
        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,班级*2-1,2) .AND. 删除<>'*'
            STOR x1 TO  rs_b(i),sjbjrs(i)
        ENDF
        s7=MOD(zrs,s3)  &&人数多的考室的个数
        *********************************************************************
        IF i_kl=1
            SET SAFE OFF
            CREA CURS kck   (排号 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 一教室几排 存的是姓名+考号
        PUBL zwb(s4+2,s2+2) &&存的是班名
        hsrs=zrs &&还剩人数(未排的)
        FOR z1=1+qskc-1 TO s3+qskc-1 && 表示安排考室的个数
            STOR "_" TO zw
            STOR "_" TO zwb
            IF z1>s7+qskc-1
                s5=s51
            ENDIF
            i=0 &&该考室排了几人了
            IF sfzxpl
                FOR k1=1 TO s2     && 表示每考室的列数
                    FOR j=1 TO s4    && 表示每列S4个考生
                        zw(j+1,1)="_"+ALLT(STR(z1))+"_"+ALLT(STR(j))
                        i=i+1
                        IF i>s5 .OR. hsrs<=0    && S5表示每考室的考生数 x 未排完的人数
                            IF hsrs<=0
                                k1=1000
                                j1=1000
                            ENDIF
                            j=s4+2
                        ELSE
                            DO gspkc &&开始排考场
                        ENDIF
                    ENDF
                ENDF

            ELSE
                FOR j=1 TO s4     && 表示每考室的排数
                    zw(j+1,1)="_"+ALLT(STR(z1))+"_"+ALLT(STR(j))
                    FOR k1=1 TO s2    && 表示每排S2个考生
                        i=i+1
                        IF i>s5 .OR. hsrs<=0    && S5表示每考室的考生数 x 未排完的人数
                            IF hsrs<=0
                                k1=1000
                                j1=1000
                            ENDIF
                            j=s4+2
                        ELSE
                            DO gspkc &&开始排考场
                        ENDIF
                    ENDF
                ENDF
            ENDI
            SELE kck
            APPEN FROM ARRAY zw FOR .NOT. ALLT(排号)=='_'
            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 && 开始排考场
    * 统计可排的各班人数
    *****第一排硬规定
    GO TOP
    IF .NOT. pkcck
        STOR ALLT(SUBS(考号,1,6))+ IIF(LEN(ALLT(姓名))=4,LEFT(姓名,2)+"

⌨️ 快捷键说明

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