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

📄 主程序.prg

📁 用VB做的学生成绩管理系统。欢迎大家来下载
💻 PRG
📖 第 1 页 / 共 4 页
字号:
                +CHR(13)+"与白水高中:朱光锐 联系获得序列号,TEL:6726356!,感谢支持正版!",16,"未授权!")
            RETU
        ENDIF

        DO daorucjb
    ENDIF
    ****************推测年级值开始****************************************
    RECALL ALL
    DELE FOR  备注="删除"
    PACK
    BLAN ALL  FIELDS 去尾
    REPL ALL 删除 WITH "*" FOR 备注="流失"
    REPL ALL 删除 WITH "*" FOR 备注="转走"
    REPL ALL 删除 WITH "*" FOR 备注="留级"
    REPL ALL 删除 WITH "#" FOR 备注="借读"
    REPL ALL 删除 WITH "#" FOR 备注="寄读"
    REPL ALL 删除 WITH "#" FOR 备注="晚来"
    REPL ALL 删除 WITH "#" FOR 备注="转入"
    REPL ALL 删除 WITH "#" FOR 备注="坐级"
    DELE FOR 删除="*" &&
    ********找出最少班的人数
    REPL ALL 班级 WITH VAL(SUBS(考号,2,2))
    GO TOP
    LOCA FOR LEFT(考号,1) $ "123" .AND. 删除<>"*"
    IF FOUND()
        nj= VAL(LEFT(考号,1))
    ELSE
        IF "一年级" $  wjm1
            nj=1
        ENDIF
        IF "二年级" $  wjm1
            nj=2
        ENDIF
        IF "三年级" $  wjm1
            nj=3
        ENDIF
    ENDIF
    GO TOP
    LOCA FOR kl="2"
    IF FOUND()
        sffwlk=2
    ELSE
        sffwlk=1
    ENDIF
    njmc=SUBS(dxhz,nj*2-1,2)+"年级"
    ***************推测年级值------结束***************************************

    ***************推测年份、阶段、考试全称值------开始***********************
    *pathDBF=LEFT(file1,RAT("\",file1))  &&路径未尾已带了"\"
    ksqc=STRT(wjm1,"成绩","")
    IF LEFT(ksqc,1) $ ("0123456789")
        dqnf=IIF(BETW(VAL(ksqc),1952,2051),VAL(ksqc),IIF(BETW(VAL(ksqc),52,99),VAL(ksqc)+1900,VAL(ksqc)+2000))
    ELSE
        dqnf=YEAR(dqrq)
    ENDIF
    jdmc=SUBS(wjm1,AT("年级",wjm1)+4,AT("考试",wjm1)-(AT("年级",wjm1)+4))
    IF jdmc $ jdmc_all
        jdmcbh=INT((AT(jdmc,jdmc_all)+5)/6)
        jdmc=ALLT(SUBS(jdmc_all,jdmcbh*6-5,6))
        ksqc=STR(dqnf,4)+"年"+njmc+jdmc+"考试"
    ELSE
        ****根据文件名推测不成,则根据当前日期来猜测
        DO tcnfrqjdmc
    ENDIF
    **********************************************
    SET SAFE OFF
    INDE ON 班级 TO cjkidx
    SET SAFE OFF
    DO tcbjm &&推测班级名
    DO tckmm &&推测科目名
    DO tcmcm &&推测名次名
    ***************推测文、理班级数,文、理班级名称----结束***********************

    ***************对推测值进行***********************
    DO tcbjrs
    *        DO FORM  班级信息
    *       DO FORM  科目信息
    *      DO FORM  校验分数
    REPL ALL kl WITH IIF(sffwlk=1,'1',IIF(SUBS(sy_bj,班级*2-1,2) $ wk_bj,'2','1'))
    SELE cjk
    BLANK ALL FIELDS 去尾
    IF  sftjzbs
        RECALL FOR  删除="#"
    ELSE
        DELE FOR 删除="#"
    ENDIF
    DO tcklxx
    IF  sftjzbs
        RECALL FOR  删除="#"
    ELSE
        DELE FOR 删除="#"
    ENDIF
    DO tcbjrs
    IF MESSAGEBOX("是否针对此成绩表,建立一个相应的各科积分表",36,"确 认")=6
        DO xinjian2
    ENDI
ENDPROC
*************************************************************************************************************
PROC xinjian2() &&新建一个空的积分表
    IF ALLT(DBF(1))==""
        = MESSAGEBOX("必须先新建一个成绩表",16,"提示")
        RETU
    ENDIF
    wjm2=ksqc+'积分表'
    file2 =pathdbf+ wjm2
    file2 = PUTF('新建积分',file2,"DBF")
    IF ALLT(file2)==""
        =MESSAGEBOX("积分表,没命名,没能建立!",0,"提示")
        RETU
    ENDI
    CREA TABLE (file2)  (bj N(2),jsh N(3),kl c(1),klh N(2),教师名 c(8),班级名 c(6),科目名 c(4))
    USE
    USE (file2) IN 2 ALIA jjk
    **********************积分表中的指标
    FOR i=1 TO 11
        zdm="ZB"+ALLT(STR(i))
        zdm1="ZBLX"+ALLT(STR(i))
        zdm2="ZBKD"+ALLT(STR(i))
        zdm3="ZBWS"+ALLT(STR(i))
        xxzdm=&zdm+" "+&zdm1+" ("+ALLT(STR(&zdm2))+","+ALLT(STR(&zdm3)) +")"
        ALTE TABLE (DBF())  ADD &xxzdm

    ENDF
    x= MESSAGEBOX("积分表已建立,让电脑根据成绩表中的科目,班级自动为"+CHR(13)+"该表填充科目名,教师名,班级名,等数据!请选择【是】";
        +CHR(13)+"从文件中导入数据,请选择【否】,放弃请选择【取消】";
        ,547,"选择")
    IF x=6
        DO addjjb
    ENDI
    IF x=7
        DO daorujjb
        SELE jjk
        BROW FREE 教师名 NODE NOAP
    ENDIF
ENDPROC
*************************************************************************************************************
PROC addcjb()   &&给成绩表自动添加数据
    FOR i=1 TO bjs
        STOR  min_brs+5-INT(6*RAND()) TO sjbjrs[i]
    ENDF
    DO FORM 指定班级人数
    SELE cjk
    FOR i=1 TO bjs
        FOR j=1 TO sjbjrs[I]
            APPEN BLAN
            REPL 班级 WITH i,考号 WITH  STR(nj*10000+i*100+j,5),姓名 WITH "S"+STRT(STR(j,2)," ","0"),;
                kl WITH IIF(SUBS(sy_bj,i*2-1,2) $ lk_bj, "1","2")
        ENDF
    ENDF
    IF MESSAGEBOX("成绩表已建立,是否让电脑填充随机成绩及性别来演示!",36,"确 认")=6
        SELE cjk
        REPL ALL 备注 WITH "流失",删除 WITH "*" FOR RAND()>0.95
        REPL ALL 备注 WITH "借读",删除 WITH "#" FOR RAND()<0.05
        DELE FOR 删除="*" .OR. (删除="#" .AND. .NOT. sftjzbs)
        REPL ALL 性别 WITH IIF(RAND()>0.4,"女",'男')
        FOR N=1 TO kms-1
            zdm=SUBS(sy_km,N*4-3,4)
            REPL ALL &zdm WITH mf(N)*(0.35+0.65*RAND())*(RAND()*0.08+0.92) FOR (AT(SUBS(sy_bj,班级*2-1,2),wk_bj)>0 .AND. AT(zdm,wk_km)>0);
                .OR. (AT(SUBS(sy_bj,班级*2-1,2),lk_bj)>0 .AND. AT(zdm,lk_km)>0)
            BLANK ALL FIELDS &zdm FOR 删除="*"
        ENDF
        REPL ALL 学号 WITH "2340"+考号
    ENDI
    DO tcbjrs
    BROW FREE 姓名 NODE NOAPP
ENDPROC
PROC addjjb()  &&给积分表自动添加数据
    SELE jjk
    k1=0
    FOR i=1 TO kms
        FOR j=1 TO bjs
            IF ((SUBSTR(sy_bj,j*2-1,2) $ lk_bj) .AND. (SUBS(sy_km,i*4-3,4) $ lk_km) .OR. (SUBSTR(sy_bj,j*2-1,2) $ wk_bj) .AND. (SUBS(sy_km,i*4-3,4) $ wk_km))
                k1=k1+1
                APPE BLAN
                REPL bj WITH j,kl WITH  IIF(SUBSTR(sy_bj,j*2-1,2) $ lk_bj, "1","2"),教师名 WITH "T"+STRT(STR(k1,3)," ","0"),;
                    班级名 WITH SUBSTR(dxhz,nj*2-1,2)+SUBSTR(sy_bj,j*2-1,2)+"班"
                REPL klh WITH i
                REPL jsh WITH k1
                REPL 科目名 WITH SUBS(sy_km,i*4-3,4)
            ENDIF
        ENDF
        IF  SUBS(sy_km,i*4-3,4) $ lk_km
            APPE BLAN
            REPL klh WITH i
            REPL 科目名 WITH SUBS(sy_km,i*4-3,4)
            REPL bj WITH 0,kl WITH  "1",教师名  WITH   IIF(sffwlk=1,IIF(klh=kms,"年级",科目名)+"组长","理科"+科目名),班级名 WITH IIF(sffwlk=1,"全年级","理科班")
        ENDIF
        IF sffwlk=2  .AND.SUBSTR(sy_km,i*4-3,4) $ wk_km
            APPE BLAN
            REPL klh WITH i
            REPL 科目名 WITH SUBS(sy_km,i*4-3,4)
            REPL bj WITH 0,kl WITH  "2",教师名 WITH "文科"+科目名, 班级名 WITH "文科班"
        ENDIF
    ENDF
    BROW FREE 教师名 NODE NOAP
ENDPROC
*************************************************************************************************************
*************************************************************************************************************
PROC xsbh() &&根据总分或姓氏等对学生重新编号
    SELE cjk
    SET FILT TO
    SET DELE OFF
    REPL  新号 WITH STR(nj*100000,6) FOR .T.
    SET FILT TO 删除<>'*'
    SET SAFE OFF
    x=BAR()
    DO CASE
        CASE x=1
            INDE ON - 总分 TO cjkidx
        CASE x=2
            INDE ON 姓名 TO cjkidx
        CASE x=3
            INDE ON 学号 TO cjkidx
    ENDCASE
    SET SAFE ON
    x= MESSAGEBOX("    采用五位数字作为考号:前三位为年级,班级,后两位为序号,请选择【是】,采用六位数字"+CHR(13);
        +"作为考号:前三位为年级,班级,后三位为序号,请选择【否】,放弃请选择【取消】",547,"选择编考号的方法!")
    IF  x=7
        ALTE TABLE (DBF()) ALTE 考号 c(6)
        ALTE TABLE (DBF()) ALTE 新号 c(6)
        k1=0
        GO TOP
        SCAN FOR  删除<>'*'
            k1=k1+1
            REPL  新号 WITH STR(nj*100000+ATCC(SUBSTR(sy_bj,班级*2-1,2),bjmc_all)*1000+k1,6)
        ENDS
    ENDIF
    IF  x=6
        ALTE TABLE (DBF()) ALTE 考号 c(6)
        ALTE TABLE (DBF()) ALTE 新号 c(5)
        FOR i=1 TO bjs
            k1=0
            GO TOP
            SCAN FOR 班级=i .AND.   删除<>'*'
                k1=k1+1
                REPL  新号 WITH STR(nj*10000+ATCC(SUBSTR(sy_bj,i*2-1,2),bjmc_all)*100+k1,5)
            ENDS
        ENDF
    ENDIF
    SET FILT TO
    SET DELE OFF
ENDPROC
*************************************************************************************************************
PROC sanzf() &&加总分
    SELE cjk
    * 统计总分
    IF "综理" $ sy_km  .AND. zhksjsld
        REPL ALL 综理 WITH &temp1
    ENDIF
    IF "综文" $ sy_km  .AND. zhksjsld
        REPL ALL 综文 WITH &temp2
    ENDIF
    IF "总分" $ sy_km
        REPL ALL 总分 WITH &temp
    ENDIF
    IF nj=1
        DO CASE
            CASE jdmcbh=1
                REPL ALL 入学分 WITH 总分
            CASE jdmcbh=2
                REPL ALL 一上期中分 WITH 总分
            CASE jdmcbh=3
                REPL ALL 一上期末分 WITH 总分
            CASE jdmcbh=4
                REPL ALL 一下期中分 WITH 总分
            CASE jdmcbh=5
                REPL ALL 一下期末分 WITH 总分
        ENDCASE
    ENDIF
    IF nj=2
        DO CASE
            CASE jdmcbh=2
                REPL ALL 二上期中分 WITH 总分
            CASE jdmcbh=3
                REPL ALL 二上期末分 WITH 总分
            CASE jdmcbh=4
                REPL ALL 二下期中分 WITH 总分
            CASE jdmcbh=5
                REPL ALL 二下期末分 WITH 总分
        ENDCASE
    ENDIF
    IF nj=3
        DO CASE
            CASE jdmcbh=2
                REPL ALL 三上期中分 WITH 总分
            CASE jdmcbh=3
                REPL ALL 三上期末分 WITH 总分
            CASE jdmcbh=4
                REPL ALL 三下期中分 WITH 总分
            CASE jdmcbh=6
                REPL ALL 三下适应分 WITH 总分
            CASE jdmcbh=7
                REPL ALL 中考总分 WITH 总分
        ENDCASE
    ENDIF
ENDPROC
*************************************************************************************************************
PROC sanzmc()&&算总名次
    PRIV N,m,i,i1,i2
    SELE cjk
    **** 统计全年级各科目名次
    ****排文科的年级名次
    SET DELE OFF
    FOR N=1 TO kms
        FOR m=1 TO sffwlk
            zdm=SUBS(sy_km,N*4-3,4)
            zmcm=SUBS(tj_zmc,N*4-3,4)
            BLANK ALL FIELDS &zmcm. FOR kl=STR(m,1)
            IF .NOT. ( zdm $ (IIF(m=1,lk_km,wk_km)))
                LOOP
            ENDIF
*            @15,15 SAY "正在统计全年级【"+zdm+"】的名次,请稍候...               " FONT "宋体",15 STYL "b"
    lcMsg = "正在统计全年级【"+zdm+"】的名次,请稍候..."
    WAIT WINDOW lcMsg NOCLEAR NOWAIT AT SROW()/2, (SCOLS()-LEN(lcMsg))/2
            SET SAFE OFF
            INDE ON - &zdm. TO  cjkidx
            SET SAFE ON
            GO TOP
            i3=1
            i1=-1
            DO WHIL .NOT. EOF() .AND. &zdm.>=0
                IF  kl=STR(m,1)
                    IF  &zdm. <> i1
                        REPL  &zmcm. WITH i3
                        IF 删除="*"
                            BLANK FIEL  &zmcm
                        ENDIF
                        IF .NOT. DELE()
                            i1=&zdm.
                            i2=&zmcm.
                        ENDIF
                    ELSE
                        REPL  &zmcm. WITH i2
                        IF 删除="*"
                            BLANK FIEL  &zmcm
                        ENDIF
                    ENDIF
                    IF .NOT. DELE()
                        i3=i3+1
                    ENDIF
                ENDIF
                SKIP
            ENDDO
        ENDF
    ENDF
*    @ 15,15 SAY '                                                                                 '  FONT "宋体",15 STYL "B"

⌨️ 快捷键说明

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