各班学生页:四个标签(班级,学生总数,男生总数,女生总数)
三个文本框 打印按钮 一个组合框(班级)
组合框combo1.Interactivechange 代码
set filt to bj=allt(thisform.pageframe1.page2.combo1.value) count to thisform.pageframe1.page2.text1.value
count for xb=\男\ count for xb=\女\
thisform.pageframe1.page2.grid1.refresh
g.浏览课程信息表单
功能:可以浏览、打印课程信息。
构成:一个标签(课程名)一个组合框 两个命令按钮(打印,退出)一个表格 h.浏览成绩表单 forms\\scj.scx
功能:能够根据学号,姓名,课程名,班级,浏览学生成绩;还能浏览优秀学生
成绩(成绩>满分*0.85)不及格学生成绩(成绩<满分*0.6) 并且能打印出选择的记录。
构成:一个含三页的页框(学号姓名查询,班级课程查询,高级查询) 学号姓名查询页:两个标签(学号,姓名) 两个文本框 一个表格
四个命令按钮(两个查询,两个导出文本文件,一个打印)
班级课程查询页:一个文本框(班级)一个组合框(课程名)
两个标签(班级,课程)一个表格
三个命令按钮(查询,打印,导出文本文件)
高级查询页:五个命令按钮(全体学生,成绩优秀者,不及格者,
两个导出文本文件,打印) 一个表格
查询代码:set filter to <逻辑表达式>
导出文本文件代码:copy to <文件名>[<范围>][fields<字段名>][for<条件>]
[while<条件>] sdf
i.成绩输入表单 forms\\incj.scx
功能:方便的输入学生的成绩,下一个按钮 可实现学号+1;如果没选课程,学
号不存在,学生该门课的成绩已存在,都会给出错误提示; 右表格显示该门课全体学生的成绩。
构成: 如下图
6
命令按钮 输入
if empty(thisform.combo1.value)
mess=messagebox(\课程名不能为空!\警告\else
locate for cj.xh=allt(thisform.text2.value) ;
and cj.kcm=allt(thisform.combo1.value)
if recno()>reccount() *若符合输入条件,则输入记录。 insert into data\\cj (xh,xm,bj,kcm,cj,mc);
allt(thisform.text3.value),allt(thisform.text1.value),;
allt(thisform.combo1.; value),thisform.text4.value,reccount()+1) go top
set filter to cj.kcm=allt(thisform.combo1.value) thisform.grid1.refresh
thisform.grid1.setfocus *表格标题改变
thisform.grid1.column3.header1.caption=allt(thisform.combo1.value) thisform.command1.enabled=.f. thisform.command3.enabled=.t. thisform.command4.enabled=.t. else
mess=messagebox(\此记录已存在!\警告\endif endif
命令按钮 定位
thisform.command1.enabled=.t. if empty(thisform.text2.value)
mess=messagebox(\学号不能为空!\警告\else go top
locate for xs.xh=allt(thisform.text2.value) if recno()>reccount()
mess=messagebox(\该学号不存在!\警告\ thisform.command1.enabled=.f. else
thisform.text1.value=xs.bj thisform.text3.value=xs.xm endif endif
thisform.refresh
命令按钮 下一个(主要代码)
thisform.text2.value=str(val(thisform.text2.value)+1) *实现学号自动加一 j.总分成绩统计表单forms\\tscj.scx
功能:求出选择班级学生的总分,并且统计出排名(相同成绩,名次相同) 构成:三个标签(总分成绩排名,班级,参考人数)组合框(班级)
文本框(参考人数) 一幅图像
7
六个命令按钮(统计总分,成绩排名,文本文件,打印,浏览,退出)thisform.combo1 的 InteractiveChange Event 代码 use data\\cj
this.parent.command2.enabled=.f. this.parent.command3.enabled=.f. this.parent.command5.enabled=.f. this.parent.command6.enabled=.f. erase sort1.dbf *删除文件sort1.dbf use
命令按钮 打印 调用程序 do prg\\sprt.prg sprt.prg的代码在后面 命令按钮 统计总分 use
use data\\cj
set safe off *重写文件,系统不给提示信息
total to sum1 on xh fields cj for bj=this.parent.combo1.value set safe on *按学号统计各班学生总分,生成文件sum1.dbf this.parent.command5.enabled=.t. t=1 ? use
use sum1
this.parent.text1.value=reccount() *统计各班级参加考试的人数 use
命令按钮 成绩排名 use
use sum1 excl set safety off
sort to sort1 on cj desc fields xh,bj,xm,cj,mc *生成排名文件sort1.dbf set safety on use
erase sum1.dbf use sort1 excl
repl all mc with recno() *能够对相同分数的考生得出相同的名次 go top
do while .not.eof() t=cj
p=mc *定义临时变量p skip 1 if t=cj
repl mc with p endif enddo use
this.parent.command2.enabled=.t. this.parent.command3.enabled=.t.
8
this.parent.command6.enabled=.t. use
k.单课成绩统计表单 data\\tdcj.scx
功能:统计出全年级、各班级学生各门课排名。
构成:三个标签(单课成绩统计表单,学科,班级) 文本框(学科)
组合框(学科)选项按钮组(班级排名 年级排名) 一幅图像 四个按钮(统计,文本文件,打印,退出)
l.成绩分析表 data\\cjfx.scx
功能:通过输入班级、课程名和分数段值,统计出各分数段的人数,
并求出最高分、最低分。
构成:11个标签(课科名,班级,满分,分数段,最高分,最低分,
分数段一~分数段五)一个组合框(班级)两个按钮(设定,退出) 命令按钮 设定
m=thisform.text2.value n=thisform.text3.value p=thisform.combo1.value q=thisform.text1.value
count to thisform.text4.value for cj.cj<=m and cj.cj>=(m-n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出第一分数段的人数
count to thisform.text5.value for cj.cj<(m-n) and cj.cj>=(m-2*n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出第二分数段的人数
count to thisform.text6.value for cj.cj<(m-2*n) and cj.cj>=(m-3*n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出第三分数段的人数
count to thisform.text7.value for cj.cj<(m-3*n) and cj.cj>=(m-4*n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出第四分数段的人数
count to thisform.text8.value forcj.cj<(m-4*n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出第五分数段的人数 thisform.label4.caption=allt(str(m))+'--'+allt(str(m-n))
*改变label4的标题
thisform.label5.caption=allt(str(m-n))+'--'+allt(str(m-2*n)) thisform.label6.caption=allt(str(m-2*n))+'--'+allt(str(m-3*n)) thisform.label7.caption=allt(str(m-3*n))+'--'+allt(str(m-4*n)) thisform.label8.caption='<'+allt(str(m-4*n)) go top
max1=0 *以下求出最高分数和最低分数 min1=m
locate for cj.kcm=allt(p) and cj.bj=allt(q) do while recno()<=reccount() if cj.cj>max1 max1=cj.cj endif
if cj.cj 9 continue enddo thisform.text9.value=max1 thisform.text10.value=min1 6.4 打印总分成绩排名的程序 prg\\sprt.prg 功能:针对产生的排名数据表sort1dbf,不用建立报表,可方便打印出数据 set talk off set safe off set console off &&关闭到屏幕的输出 use sort1 lin=1 zt=\宋体',14\ set print on &&传送输出结果到打印机打印 ?bj+\学生成绩单\黑体',20 && 设计表头 ?\?\ ?\学号 姓名 总分 名次 \采用宏代换 do while not eof() ?\│\│\│\│\│\ lin=lin+1 skip if lin>30 eject &&打印机输出命令 ?\学号 姓名 总分 名次 \ lin=1 endif enddo eject set print off use sort1 set console on &&打开到屏幕的输出 set safe on set talk on return 6.5学生成绩报表 frx\\cj.frx ① 创建报表 modify report cj 打开报表设计器 ② 设计标题 学生成绩表 报表表达式 date() ③ 设计页标头 学号 姓名 成绩名 成绩 班级 ④ 添加数据环境 data\\cj.scx ⑤ 在细节中,添加域控件xh,xm,kcm,cj,bj ⑥ 在页注脚中,添加\页码 \课程信息报表 frx\\kc.frx 学生信息报表 frx\\xs.frx 制造过程与学生成绩报表的相同 10 7.结束语 连编生成可执行程序,在windows98,visual foxfro6.0环境下,调试成功。它实现了学生基本信息的管理,成绩的输入、浏览、统计、打印和维护。它可以按班级统计学生的总分,并对其排名,还可以对单课成绩排名,通过编写总分成绩排名的程序,实现打印成绩排名表。如果能把总分成绩和单课成绩组成一个报表,就更好了。 参考文献 【1】 萨师煊 《数据库系统概论》 高等教育出版社 2000.02 【2】 赵茂祥 《foxpro原理与程序设计》 石油大学出版社 1999.06 【3】 张海藩 清华大学出版社 2001.05 11 《软件工程导论》