[VFP课程设计] 学生成绩管理系统(2)

2019-02-15 10:59

各班学生页:四个标签(班级,学生总数,男生总数,女生总数)

三个文本框 打印按钮 一个组合框(班级)

组合框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

《软件工程导论》


[VFP课程设计] 学生成绩管理系统(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金融工程_第二版_郑振龙__课后习题和答案整理(华北电力大学)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: