资源描述
吉林工程职业学院信息工程专业毕业论文 学生成绩管理系统—纪天蛟
学生成绩管理系统
摘 要
《学生成绩管理系统》的主要功能是实现学生成绩的计算机管理,通过它可以对全校学生的每个学期的成绩进行全面、高效、实用、方便的管理。系统共分为五大功能模块:
一、新生注册和数据维护模块:每年新生入校,注册新班级后,用户将学生的姓名、学号、性别等情况输入本系统,以便今后对其成绩进行管理;数据维护主要提供数据备份、恢复,教师名单管理和系统密码管理等功能。
二、学期考核计划管理模块:对每学期各个班级的教学计划(包括所学课程名、课程类型、课时数、授课老师)进行管理,以及对各科课程的分析参数进行设置。
三、学生考试成绩管理模块:
1、原始成绩管理。用户输入学生各门课程的平时、期中、期末、实验成绩后,系统根据课程所设定的计算参数自动计算该生该课程的最终成绩。
2、系统成绩管理。显示、修改、打印该班分析处理后的成绩。
3、统计。以班级、年级或全校为单位,统计学生考试成绩优良率,以便总结当前学期教学工作中成绩和不足,为管理者提供决策辅助资料。
4、毕业成绩汇总。以班级为单位汇总、打印所有学生在校全部学期各科的考试成绩和不及格课程补考后的成绩;同时可以打印学生成绩登分册,它记录了学生在校所有学期所学习的课程名称、课时数、考试成绩、第一次补考成绩、第二次补考成绩、任课教师等数据。
四、补考成绩管理模块:汇总各学期学生的补考课程,输入学生补考后的成绩。
五、学期处理模块:学期末对部分学生进行留级、跟班试读处理;对于已经毕业的班级,可以清除其在校的所有数据。
1. 引言
1.1毕业设计课题的特点
当今社会是一个信息高速发展的时代,然而我们很多学校对学生成绩的管理工作还处于落后的手工管理阶段,这就迫切地需要一个能对学生成绩进行计算机管理的软件。为了填补这一空缺,我设计了学生成绩管理系统,该软件经历了1.0、2.0两个主要版本,目前的版本为2.1.
学生成绩管理系统的优势在于,只需键入管理对象的基本情况,便能自动地将信息进行分析、计算、汇总、打印,以达到全面、高效的系统管理目的。另外,该系统还具有以下特点:
▲运算准确。系统对于所有的系统成绩的生成都严格按照分析参数计算得出,大大减轻了教师的工作负担,并且计算机对于任何人都是“铁面无私”的,即便是57、58分,也照样列入不及格的行列;只要用户输入的数据正确,绝对不会出现统计数据不准确以及补考人员漏报、错报等情况。
▲工作效率高。使用该系统管理一个4000人左右学校的成绩数据,可以不需配备专门的人员,只要安排一个兼职人员管理,就可以完成以往几个甚至十几个人的工作量。
▲采用条件判断方法,实现在同一个表格框中打印不同字体格式的效果。这一技术运用在《毕业成绩汇总表》中,当某生的成绩为不及格时,除了打印原有成绩外,还需要打印该生补考后的成绩,由于字数增加,系统会自动识别和缩小字体,以容纳多个字符的打印,完好的解决了这个问题。
▲丰富的提示信息和帮助信息。系统的许多菜单及控制都在状态栏上给出说明;并且用户可在任何地方通过按F1键得到在线帮助,可以及时解决用户在操作当中遇到的各种问题。
1.2设计环境需求:
1 硬件环境
IBM PC或与之兼容的PC机,PENTIUM或者其它相当的CPU,工作频率在100MHZ以上;内存在32M以上;硬盘要有200M以上的剩余空间;其它附属设备,如:显示器、软驱、键盘、鼠标和打印机等。
2 软件环境
操作系统:Windows95中文版
开发工具:Visual Foxpro 6.0中文版,它作为功能强大、成熟的数据管理应用程序开发环境,提供了多种界面生成、程序测试、开发帮助工具,是理想的MIS应用程序开发系统。
46
2. 软件结构与工作步骤
2.1软件的系统结构(见下图)
学生成绩管理系统
系统管理
考核计划管理
考试成绩管理
补考成绩管理
选择班级和学期
班级数据管理
教师名单管理
数据备份
密码设置
初始化
打印机设置
课程管理
分析参数管理管理
原始成绩管理
分析计算
系统成绩管理
成绩优良率统计
毕业成绩汇总
打印成绩登分册
补考前统计
补考后统计
留级处理
跟班试读处理
班级毕业处理
2.2工作步骤
根据上述的软件系统结构,现简述一下《学生成绩管理系统V2.1》的使用时的工作步骤,以掌握软件在开发过程中,应注意的工作流程。
(1)如果当前班级是一个新班级,首先使用“班级数据管理”的“添加新班级”功能来添加这个新班级名称,然后使用“基本情况管理”来输入新班级学生的学号、姓名、性别的内容。
(2)接下来使用“考核计划管理”功能输入当前班级当前学期要进行教学安排的课程名及其相关内容,但如果是该班以前学期的考核计划,系统只允许查看,而无法进行修改。
(3)对“分析参数”进行维护,可根据需要增加或修改用户分析系统成绩的参数。
(4)用“原始成绩管理”输入每门课程的课程代号以及学生的原始成绩(这是系统获得数据的最主要方式,用户应输入正确成绩数据)输入完毕,使用“分析计算”功能生成“系统成绩”。
(5)用“系统成绩管理”统计全部成绩和单科成绩,对于一些特殊情况的学生,应提供对系统成绩进行修改的功能。并且可以统计全校、指定年级、指定班级为单位的优良率。
(6)在“补考前统计”中列出不及格人员的名单,然后用户输入补考后的成绩。接着统计该班学年补考不及格名单、全校本学期补考不及格名单。
(7)当用户决定了哪些学生要进行留级和跟班试读,可能使用“学期处理”中的“留级处理”和“跟班试读”功能完成以上操作。
(8)本学期成绩处理完毕后,用户可使用“数据维护”功能将成绩数据进行备份,然后在下学期开学时,使用“系统初始化”功能进行数据整理、学期更新,这是每学期开学时系统应进行的一项操作,用户初始部分变量参数。
(9)当该班临近毕业时,用户可以统计毕业补考名单、打印毕业汇总表、打印成绩登分册,待这些工作全部做完后,使用“毕业处理”,清除该班在校的全部数据,宣告其毕业。
3. 程序主体编制
首先在主程序中定义了几个全局变量,其名称和含义详见下表:
变量名
变量含义
变量示例
LL4
用户选定的学期
“98春”
LIU
用户选定的班级
“电算9741”
LL5
被选定班级的代号
“008”
LL2
选定班级的进校年份
“1998”
NLU
选定学期的成绩数据的存放路径
“D:\CJGL\98春”
LU
数据文件的前缀(LL5+LL4)
“00898春”
NYM
系统保存的当前最新的学期
“98春”
YSK
原始成绩库的存放路径
“D:\CJGL\DATA\”
PDBF
系统辅助库的存放路径
“D:\CJGL\DBF”
PYM
系统当前所处的目录
“D:\CJGL\”
3.1主要模块编制介绍
下面把各个模块中的主要程序编制思路作一个简单介绍。
l 选择当前班级和学期
本模块的主要作用是由用户来选择需要进行处理的班级和学期,以此来对用户选择的班级和学期进行处理。(界面见下图)
选择年级
选择学期
选择班级
主要程序如下:
****** * CHANGNOW.SCX
Caption = "确定(\<O)"
Name = "Command1"
PROCEDURE Click(当用户单击“确定”按钮)
IF thisform.List1.value#space(8)
liu=thisform.List1.value
ENDIF
ll4=subs(str(thisform.Spinner1.value,4),3,2)+iif(thisform.Optiongroup1.value=1,"春","秋")
SELE bjk
LOCA for CLA=liu
co1=nj
ll5=FNA
lu=ll5+ll4
ll1=str(thisform.Spinner1.value,4)
SELE nj
LOCA for code=co1
ll2=subs(gonj,1,4)
nlu=pym+ll4
ysk=pym+"DATA\"
PDBF=pym+"DBF"
_SCREEN.caption="《吉林工程职业学院》学生成绩管理系统 当前班级及学期:"+ALLT(liu)+"("+ll4+")"
Rele THISFORM
ENDPROC
##程序代码注释:将选定的班级、学期赋值给全局变量LIU、LL4、LL5、LL2、NLU、YSK、PDBF,并且把_SCREEN对象的标题显示为用户选定的班级和学期。
l 考核计划管理
本模块的作用在每个新学期开始时,用户将每个班级该学期所制定的考核计划在此输入,其内容为课程名,课时数,课程类型,任课教师。这些内容将决定本学期该班“系统成绩”库的结构,其中任课教师名可以从教师名称库中选取。可以使用“引入”按钮来将相似班级的考核计划读取进来。如果用户修改了当前班级的学生基本情况,或者其它的原因,用户需重新建立新的空白原始成绩库,可以选择“重建”按钮来进行。(界面见下图)
考核计划列表
教师名称列表
主要程序如下:
****** * MKCJH.SCX
PROCEDURE Activate(页面激活后执行)
SET dele on
IF jh=0
IF val(ll1)<val(ll2) .or. (val(ll1)=val(ll2) .and. subs(ll4,3,2)="春")
kk1=messagebox("不能建立《"+allt(liu)+"》班进校前学期的考核计划!",1+48+256,"错误")
IF kk1=1
DO FORM (pym+"form\CHANGNOW")
RETURN
ELSE
Rele THISFORM
RETURN
ENDIF
ENDIF
IF !DirEctory(nlu) &&判断是否有当前新的学期目录
MD (nlu)
ENDIF
…………
ENDPROC
##程序代码注释:进入本功能后,判断是否满足建立考核计划的条件。
Caption = "删除(\<D)"
Name = "cmddelete"
PROCEDURE Click(如果单击“删除”按钮)
SELE bb
co31=KCM
IF file(BB2)
co33=chr(13)+"本操作将删除成绩库中的《"+TRIM(co31)+"》字段及其已有的数据!"
ELSE
co33=""
ENDIF
co32=messagebox("是否删除《"+TRIM(co31)+"》课程名?"+co33;
,4+32+256,"删除询问")
IF co32=6
IF ll4=nym &&说明选定学期处于当前学期
ls3=ysk+ll5+"ysk.dbf"
ls7=ysk+ll5+"csk.dbf"
IF file(ls3)
FOR LS5=1 to 4
ls4=allt(KCM)+str(LS5,1)
ALTER table (ls3) drop &ls4
ENDFOR
BZ1=1
SELE 0
USE (ls7)
LOCA for 课程名=bb.KCM
IF found()
Dele
PACK
ENDIF
USE
ENDIF
ENDIF
SELE bb
Dele
COUNT to click1 for !dele()
GO TOP
thisform.grid1.afterrowcolchange()
ENDIF
thisform.refresh
ENDPROC
##程序代码注释:用户删除了某门课程,判断该课程是否已经在系统成绩表中建立了结构,如果建立,需在系统成绩表中的删除相应的结构。
command1.Caption = "确定(\<O)"
command1.Name = "Command1"
command2.Caption = "取消(\<C)"
command2.Name = "Command2"
PROCEDURE command1.Click(如果单击“确定”按钮)
IF ISBLANK(thisform.kcm1.value) or ISBLANK(thisform.rkte1.value)
=messageBOX("数据输入不完整!",0+16,"错误")
thisform.kcm1.setfocus
RETURN
ENDIF
IF ISDIGIT(thisform.kcm1.value)
=messageBOX("课程名不能以数字开头!",0+16,"错误")
thisform.kcm1.setfocus
RETURN
ENDIF
IF at(" ",allt(thisform.kcm1.value))>0
=messageBOX("课程名中不能含有空格!",0+16,"错误")
thisform.kcm1.setfocus
RETURN
ENDIF
SELE bb
CD1=RECN()
LOCA for KCM=allt(thisform.kcm1.value)
IF found() AND (ThisForm.kskc1.VALUE=KSKC OR co1=1)
=messageBOX("课程名重复,输入无效!",0+16,"错误")
thisform.kcm1.setfocus
RETURN
ENDIF
IF co1=1 &&添加了一门课程
IF ll4=nym &&说明选定学期处于当前学期
ls3=ysk+ll5+"ysk.dbf"
ls7=ysk+ll5+"csk.dbf"
IF file(ls3) &&如果已产生了原始库
FOR LS5=1 to 4
ls4=allt(thisform.kcm1.value)+str(LS5,1)+" n(4,1)"
ALTER table (ls3) add column &ls4
ENDFOR
BZ1=1
SELE 0
USE (ls7)
APPE blan
REPL 课程名with allt(thisform.kcm1.value),类型with iif(thisform.kskc1.value="考试","N","C")
USE
ENDIF
ENDIF
thisform.cmdappend.enabled=.t.
ELSE &&修改了一门课程
SELE bb
GO CD1
IF !(thisform.kcm1.value=KCM) .OR. ;
!(thisform.kskc1.value=KSKC) &&如果修改了课程名或课程类型
IF ll4=nym &&说明选定学期处于当前学期
ls7=ysk+ll5+"csk.dbf"
ls3=ysk+ll5+"ysk.dbf"
IF file(ls3)
lsm1=KCM
IF !(thisform.kcm1.value=KCM)
FOR LS5=1 to 4
ls4=allt(thisform.kcm1.value)+str(LS5,1)
ls6=allt(KCM)+str(LS5,1)
ALTER table (ls3) rename &ls6 to &ls4
ENDFOR
ENDIF
SELE 0
USE (ls7)
LOCA for 课程名=lsm1
IF FOUND()
REPL 课程名 with allt(thisform.kcm1.value),类型 with iif(thisform.kskc1.value="考试","N","C")
ENDIF
USE
BZ1=1
ENDIF
ENDIF
ENDIF
ENDIF
SELE bb
IF co1=1
co1=0
APPE blank
thisform.cmdappend.enabled=.t.
ENDIF
REPL KCM with allt(thisform.kcm1.value),kss with str(thisform.Spinner1.value,3), KSKC with thisform.kskc1.value,rkte with thisform.rkte1.value
thisform.grid1.enabled=.t.
thisform.refresh
ENDPROC
##程序代码注释:用户添加或修改了某门课程,判断该课程是否已经在系统成绩表中建立了结构,如果建立,需在系统成绩表中的添加或修改相应的结构。
l 原始成绩管理
本模块用于输入当前班级学生的原始成绩,每门课程都有四项内容,分别为:平时成绩、实验成绩、期中成绩、期末成绩。并且每门课程都必须输入它的课程代号,用于以后生成系统成绩时作为计算的依据;用户可以选中“代号表”中的课程代号,然后单击“读取课程代号”按钮,系统会自动将当前选中的课程代号粘贴至当前课程的代号处;每当用户选择一门课程,如果该课程已经输入“课程代号”,“代号表”会以蓝色突出显示该代号的具体内容。当原始成绩全部录入完毕后,可以使用主菜单上的“分析计算”功能来生成系统成绩。
本模块还提供了鼠标右键弹出“快捷菜单”功能,其中包括整体移动、保存成绩、剪切、复制、粘贴等功能。(界面见下图)
课程代号的计算参数
单项课程成绩输入表格
右键弹出的快捷菜单
主要程序如下:
****** * YSCJGL.SCX
PROCEDURE Activate(页面激活后执行)
SET safe off
SET MULTILOCKS ON && 对于表缓冲必须为 ON
ll4=nym
IF BD=0
_SCREEN.caption="《江西省第一工业学校》学生成绩管理系统V2.1 当前班级及学期:"+ALLT(liu)+"("+ll4+")"
lu=ll5+ll4
nlu=pym+ll4
fo3=nlu+"\"+lu+"c.dbf" &&考核计划库
IF !file(fo3)
ME1=messageBOX("该班尚未进行考核计划登录!",1+48+256,"错误")
IF ME1=1
DO FORM (pym+"form\CHANGNOW")
RETURN
ELSE
Rele THISFORM
RETURN
ENDIF
ENDIF
SELE 0
USE (fo3)
IF recc()=0
ME1=messageBOX("该班尚未进行考核计划登录!",1+48+256,"错误")
……
ENDIF
USE
……(建立原始成绩表)
SELE ysk
=TABLEUPDATE(.T.)
thisform.Label2.CAPTION=ALLT(liu)+"班"+ll4+"原始成绩"
thisform.dataenvironment.closetables
thisform.dataenvironment.Cursor2.cursorsource=fo2
thisform.dataenvironment.Cursor3.cursorsource=fo4
thisform.dataenvironment.opentables
= CURSORSETPROP('Buffering', 5, 'YSK') && 启用表缓冲
SELE csk
GO top
thisform.TEXT1.value=课程名代号
thisform.grid2.recordsource="YSK"
thisform.grid1.recordsource="kcdhk"
bo1.rowsource="课程名"
IF ISBLANK(thisform.TEXT1.value)
thisform.grid2.enabled=.f.
ENDIF
bo1.value=bo1.list(1)
SELE kcdhk
LOCA for 课程名代号=thisform.TEXT1.value
IF found()
thisform.label4.caption=allt(代号说明)
ENDIF
ELSE
bo1.VALUE=COB1
BD=0
ENDIF
ENDPROC
##程序代码注释:先判断用户是否建立了考核计划,然后根据考核计划建立原始成绩表。
PROCEDURE QueryUnload(退出表单时执行)
#DEFINE SAVECHG_LOC '您修改了数据,要保存修改值吗?'
#DEFINE SAVECHG2_LOC '保存修改'
SELE kcdhk
RECA all
SELE ysk
IF GETNEXTMODIFIED(0) > 0
lnChoice = MESSAGEBOX(SAVECHG_LOC, 3+32, SAVECHG2_LOC)
IF lnChoice = 2
NODEFAULT
ELSE
IF lnChoice = 6 && Yes
=TABLEUPDATE(.T.)
ELSE
=TABLEREVERT(.T.)
ENDIF
ENDIF
ENDIF
ENDPROC
##程序代码注释:先判断用户是否修改了数据,通过TABLEUPDATE(.T.)来实现保存表缓冲内的数据。
PROCEDURE RightClick(单击鼠标右键)
XM=ThisForm.Check3.ENABLED
XM1=ThisFbo1.VALUE
COB1=XM1
DO (pym+"ZTYD.MPR") WITH THIS
ENDPROC
##程序代码注释:调用ZTYD.MPR菜单文件,弹出快捷菜单。
l 系统成绩管理
本模块可对由原始成绩生成的系统成绩进行浏览、修改和统计三项操作。用户点击“成绩”页框,系统即显示系统成绩,并且系统还将不及格的课程用红色显示,用户可以直接在成绩表格中对有特殊情况的学生成绩进行修改,如果某课程的类型是考查课程,用户要使用空格键选择成绩进行输入;用户点击“统计”页框,系统会显示所有课程的五个等级的各级百分比率和人数以及课程类型为“考试”课程的平均分。用户单击“打印”按钮,可以打印“全班成绩汇总表”和“单科成绩表”。(界面见下图)
成绩列表(红色为不及格)
主要程序如下:
****** *XTCJGL.SCX
PROCEDURE Activate(页面激活后执行)
IF la1=0
SET safe off
SET MULTILOCKS ON && 对于表缓冲必须为 ON
fo1=nlu+"\"+lu+"a.dbf" &&系统成绩库
fo2=nlu+"\"+lu+"c.dbf" &&考核计划库
IF !file(fo1)
ME1=messageBOX("系统未找到《"+ALLT(liu)+"》班的系统成绩!",1+48+256,"错误")
IF ME1=1
DO FORM (pym+"form\CHANGNOW")
RETURN
ELSE
Rele THISFORM
RETURN
ENDIF
ENDIF
……
SELE khjh
FM1=recc()
GO top
FOR FM2=1 to FM1
FM3=allt(KCM)
IF KSKC="考试"
thisform.pageframe1.page1.grid1.columnS(FM2+2).dynamicforecolor="iif(&fm3<60,RGB(255,0,0),RGB(0,0,0))"
ELSE
thisform.pageframe1.page1.grid1.columnS(FM2+2).dynamicforecolor="iif(&fm3='不及',RGB(255,0,0),RGB(0,0,0))"
thisform.pageframe1.page1.grid1.columnS(FM2+2).TEXT1.format="M"
thisform.pageframe1.page1.grid1.columnS(FM2+2).TEXT1.inputmask="优秀,良好,中等,及格,不及"
thisform.pageframe1.page1.grid1.columnS(FM2+2).TEXT1.statusbartext="请使用空格键(SPACE)选择考查课程的成绩"
ENDIF
Skip
ENDFOR
thisform.REFRESH
ELSE
la1=0
ENDIF
ENDPROC
##程序代码注释:先判断是否已经生成了系统成绩,如果已生成,在grid1表格中显示系统成绩,并且通过column的dynamicforecolor属性来设置不及格的成绩为红色,通过TEXT的inputmask属性来实现空格键修改考查成绩的功能。
Caption = "打印(\<P)"
Name = "cmdprint"
PROCEDURE Click(单击“打印”按钮)
DO FORM (pym+"form\report2")
la1=1
ENDPROC
##程序代码注释:调用表单report2,进行打印,表单report2界面见下图。
打印类型
单科成绩打印
汇总成绩打印
l 毕业成绩汇总
《毕业汇总表》是汇总当前班级所有学生在校全部学期各科的考试成绩,用于上报上级主管部门核发《毕业证》的重要数据表格,所以具有固定的表格格式,要求用户使用B4大小的纸张竖入进行打印。对于不及格的学生还需要在考试成绩位置上同时打印补考后的成绩,该项功能只能在“春季”进行。(打印预览效果见下图)
页表头部分
细节部分
程序编制方法如下:
该报表使用VFP的报表生成器制作而成,在“页标头”部分绘制好上图中“页表头部分”所指的内容,在“细节”部分绘制图中“细节部分”的内容,对于不及格成绩打印原成绩和补考成绩的功能,是在成绩位置重叠放置两个域控件,然后通过设置域控件的打印条件来实现不同字体的打印。
l 补考统计及补考成绩管理
本模块用于统计当前班级学生中不及格人员的名单。本对话框分成两个页框:
⑴以课程排列:将需要补考人员的名单按课程的顺序排列,在此页框中可以选择“打印补考证”按钮,用来打印补考学生的“补考准考证”,也可以按课程顺序打印出报表,统计以课程为序的学生补考名单,并且,统计每班每门课程补考人数。当用户单击“体育统计”时,系统会打印出当前学期全校所有的要参加“体育”补考的学生名单。学生补考之后的补考成绩,也是从这个页框的补考成绩表中输入。输入方式有两种:一是直接在表的“补考成绩”栏中用空格键选择“及格”、“不及”或“舞弊”,进行补考成绩的单项输入;二是通过“批量输入”按钮,将所有补考成绩全部输入为“及格”或“不及”,然后,再对剩余的小部分成绩进行单个修改。
考试不及格学生及课程列表
各种打印功能
批量录入补考成绩
⑵以姓名排列:将需要补考人员的名单及补考课程数显示在列表框中,当用户选择一个名单,系统即显示出选中此人要补考的课程名列表。用户也可以打印以姓名为序的补考名单表。(界面见下图)
主要程序如下:
****** * BKQTJ.SCX
PROCEDURE Activate(页面激活后执行)
SET DELE ON
SET safe off
SET MULTILOCKS ON && 对于表缓冲必须为 ON
BB1=nlu+"\"+lu+"A.DBF"
……(先判断是否已经生成了系统成绩)
BB3=nlu+"\"+lu+"E.DBF"
BB6=SUBS(ll4,3,2)
SELE bkcj
IF BL1=0 &&如果未使用“批量录入”功能
=TABLEUPDATE(.T.)
CLOSE data
……
SELE 0
USE &BB1 &&打开当前成绩库
SE1=SELE()
SELE 0
CREA &BB3 FROM (PDBF+"\FJG3.DBF") &&建立本学期补考库
SE2=SELE()
SELE (SE1)
E2=3
E3=FCOUNT()
DO WHILE E2<=E3
GO TOP
E4=FIELD(E2)
IF TYPE(E4)="N"
LOCA FOR &E4<60
BB8=1
ELSE
LOCA FOR &E4="不及"
BB8=0
ENDIF
BB11=0
SELE (SE1)
DO WHILE !EOF()
EE1=学号
EE2=姓名
EE3=&E4
EE4=&E4
BB10=0
SELE (SE2)
IF BB10=0
APPE BLAN
REPL 学号 WITH EE1,姓名 WITH EE2,补考课程 WITH E4
ENDIF
SELE (SE1)
Cont
ENDDO
E2=E2+1
ENDDO
CLOSE data
SELE 0
USE &BB3
SORT to lsym on 补考课程
USE
COPY file lsym.dbf to (BB3)
USE (BB3)
COUNT TO LE2
DIME LF1(80,3)
LF1="N"
LE3=1
SET DELE ON
DO WHILE LE2>0
GO TOP
LE1=学号
LF1(LE3,1)=LE1
LF1(LE3,2)=姓名
COUNT FOR 学号=LE1 TO LFL1
LF1(LE3,3)=STR(LFL1,2)
Dele FOR 学号=LE1
LE3=LE3+1
COUNT TO LE2
ENDDO
RECA ALL
SET DELE OFF
IB2=ASCAN(LF1,"N")
IB3=ASUBS(LF1,IB2,1)
Rele LFliu
PUBLIC array LFliu(IB3-1,3)
=ACOPY(LF1,LFliu,1,IB2-1)
=asort(LFliu)
CLOSE data
……
ELSE
BL1=0
SELE bkcj
GO TOP
ENDIF
thisform.REFRESH
ENDPROC
##程序代码注释:先判断是否已经生成了系统成绩,如果已生成,根据FJG3.DBF结构文件建立补考库,库结构如下:
字段名
字段类型
字段长度
学号
字符型
2
姓名
字符型
8
补考课程
字符型
10
补考成绩
字符型
4
将系统成绩中不及格的学生及课程加入到补考库中,再对补考库“课程名称”进行排序,然后建立LF1数组,存放单个学生的补考课程数。
l 全校考试成绩统计
图示类型
各个等级的比例图
本模块统计全校所有班级当前学期系统成绩的五个等级的百分比数和各个等级的人数分布情况,并且以图例的形式显示出来,便于决策人总结当前学期教学工作中取得的成绩和存在的不足,查找问题、研究解决。(界面见下图)
主要程序如下:
****** * QXTJ.SCX
Caption = "统计(\<B)"
Name = "CMDBEGIN"
PROCEDURE Click(单击“统计”按钮执行)
this.ENABLED=.F.
SELE 1
USE (PDBF+"\bjk.dbf")
GO TOP
I3=0
DO WHILE !EOF()
I2=nlu+"\"+FNA+ll4+"A.DBF"
SELE 2
USE &I2
I4=3
I5=FIELD(I4)
DO WHILE !ISBLANK(I5)
IF TYPE(I5)="N"
GO TOP
COUNT FOR &I5>=90 TO I11
GO TOP
COUNT FOR &I5<90 .AND. &I5>=80 TO I12
GO TOP
COUNT FOR &I5<80 .AND. &I5>=70 TO I13
GO TOP
COUNT FOR &I5<70 .AND. &I5>=60 TO I14
GO TOP
COUNT FOR &I5<60 TO I15
ELSE
GO TOP
COUNT FOR &I5="优秀" TO I11
GO TOP
COUNT FOR &I5="良好" TO I12
GO TOP
COUNT FOR &I5="中等" TO I13
GO TOP
COUNT FOR &I5="及格" TO I14
GO TOP
COUNT FOR &I5="不及" TO I15
ENDIF
ii1=ii1+I11
ii2=ii2+I12
ii3=ii3+I13
ii4=ii4+I14
ii5=ii5+I15
I4=I4+1
展开阅读全文