admin 管理员组文章数量: 1086019
2024年5月10日发(作者:weight是啥)
……………一一 ………… …………………… 一… …
实用第一 智慧密集
.,,= , .. . 。 , . ,
Visual FoxPro成绩查询表单制作技巧
李晓明
(华东理T大学, 海200237)
摘要:数据库管理系统是目前在企事业单位管理中应用十分广泛的一类管理软件,在国内以Visual FoxPro f以下
简称VFP)最具代表性 VFP提供了结构化程序设计和面向对象程序设计这两种设计方式,并成功地将两者有机地
结合起来,使应用程序的开发变得易行、高效,是一种实用的数据库开发工具。以制作学生成绩查询表单为例,介
绍VFP面向对象程序设计和可视化编程的方法、设计思路及步骤..
关键词:VFP数据库系统;表单;对象;赋值;查询
以VFP为背景的数据库系统的使用、管理和开发.在日
常生活中已得到广泛的应用。在目前应用的管理信息系统巾,
用DBF文件做数据 }]问交换的占大多数。全国高等学校非计
算机专业学生计算机等级考试Visual FoxPro数据库程序设计
教学大纲要求必须掌握数据库系统的基础知识、面向对象的
名称,课程代码,课程名称)
2表单界面
如罔1所示
■ ■■■■日q 《 % % 辨 ———鬻 —一=
查诲一学生成靖
蛙捧学生年疆:_lllE ;
概念、关系数据库的基本原理、数据库程序设计方法和使用
Visual FoxPro建立一个小型数据库应用系统等5项内容 南此
可见,了解并熟悉乃至熟练掌握VFP程序设计与运用,对于
T作和学习都会有较大的帮助。
下面以学生各学期成绩查询、输 为例.针对面向过程
}
,
i
I
R ●田
I
;
T I
{
遘捧夸韭代爵
,
8 J
e
i10
11
'
l5
造耩攀生掌号
.1
¨
r十
20
程序设计、数据表的操作、表单设计与制作、面向对象的编
程与控件属性设置、关系数据库标准语言SQL查询与报表的
制作等,作较为细致的介绍
}
E8t
§蟪l I・
1 銎
ei e・・}嚣
鼍¥I 琴 ; {iR;转 # #
l数据说明
涉及的数据表结构(最简结构1
(1)学生信息(xs+nd,如xs1999、xs2000等):
{XH(C,8):xf (c 8);ZYDM (C,3)=ZYMC《C.30):HSZDM(C.3):
HSZMC(C,3O”
图1查询成绩表单界面
2.1控件说明
在面向对象程序设计中,现实世界的事物均可以抽象为
对象,表单上的命令按钮等是对象,表单本身也是对象。
成绩查询的操作表单如图1所示。它包括表单、标签、
文本框、组合框、命令按钮、编辑框和表格等控件。其中的
主要控件的属性如表1所示
表1 表单主要控件的部分属性
控件 类名称 RowSource RowSourceType
字段说呢: (学号,姓名,专业代码,专业名称,院系站
代码,院系站名称)
(2)学生成绩(cj+nd):
{XH(C,8 XM{C,8);KCDM(C,8);ZCJ(C,1 O):XQS(C,1)}
字段说明: (学号,姓名,课程代码,课程名称,课程
成绩,学期数)
(3)院系站:
{HSZDM(C,2);HSZMC(C,20)}
学生年级
院系站代码
专业代码
学号
成绩列表
组合框
组合框
组合框
组合框
列表
2001,2002,2003.…等
无
无
无
无
l一值
6一字段
6一字段
6一字段
1一别名
字段说明: (院系站代码,院系站名称)
(4)专业名称:
{ZYDM(C,3):ZYMC(C 30)}
注: 数据将南后面的程序赋值。
列表的属性应该是RecordSource和RecordSourceType
字段说明: (专业代码,专业名称)
(5)课程信息:
{ZYDM{C 3);ZYMC《C,30);HSZDM(C 2):HSZMC{C,3O):
KCDM ;KCMC(C 40)、
作者简介:李晓明(1955一),男,T程师,学士,研究方向:
计算机信息管理与研究生教育管理。
收稿日期:2014—11-17
字段说明(专业代码,专业名称,院系站代码。院系站
ii20 15.03
电■■疆技巧与簟护 ●与‘
. .
Ⅱm阻 &INFOR删盯iON啊^II柏 ………….………… ……………… ……………….………
2.2控件赋值
mhszdm=hszdm.hszdm
2.2.1“院系站”组合框
mdm=this.value
thisf0rm.zydm.rowsourcetype=O
通过点击年级组合框,通过SQL查询该年度学生库,将
筛选获得的该年绒巾所有的院系站代码和名称赋值给“院系
站”组合框。 “年级”控件的Valid()代码为:
if!file( dbf ̄s&xsnd..dbf )
if used( zydmmc )
sele zydmmc
USe
endif
sele zydm,zymc:
frOm XSXX:
dist:
into cursor zydmmc
where hszdm=mdm
thisfOrm.zydm.rowsource= zVdmmc zydm zymc
=messagebox( &xsnd.年度的学生库不存在,请重新选择(或
建学生库)! ,16, 系统警告 )
retu.f.
endif
&&提示如果该年度学生库不存在必须新建库
if used( XSXX )
sele XSXX
Use
thisfOrm.zydm.rowsourcetype=6
thisfOrm.refresh
else
&&设置“专业代码”组合框的值(学生库中院系站代
码=选中的代码)
use dbfkxs&xsnd:
alias XSXX:
in O:
shar
注:因为“专业代码”赋值必须与选中的院系站选对应,
故必须是Click0。
endif
鼠标点击“院系站”组合框后“专业代码”已赋值,如
图3所示。
&&如果学生库已打开,转到该工作区,并给别名XSXX
sele hszdm,hszmc:
frOm XSXX:
into cursor hszdm:
dist
thisform.hszdm.rowsourcetype=6
thisform.hszdm.rowsource= hszdm.hszdm。hszmc
thisform.refresh
查询一学生成绩
选择学生年缎:l即
酸系站代码:l●口
二二二二
选择专业代玛:
&&给“院系站”组合框赋值
赋值后院系站下 列表女f1 2所示
图3 “专业代码”组合框获得赋值
2.2.3“学生学号”组合框
确定了学生库中院系站、々,lkf ̄码之后,就能给“学生
学号”组合框赋值。 “专业代码”组合框的Click0代码为:
mzydm=this.value
sele XSXX
set filter to hszdm=hszdm.hszdm:
.
and.zydm=mzydm:
图2院系站组合框获得赋值
and !,退学 ¥bz
&&屏蔽掉已退学的学生
.
注:在控件火去焦点之前,将发生Valid事件。
2.2.2“专业代码”组合框
thisform.zymc.controlsource= zydmmc.zymc
thisfOrm.zymc.visible=。t.
thisfOrm.xhxm rowsource= XSXX.xh,xm
thisform,refresh
选定院系站后.可以确定学生库中为该院系站的学生,
并选取这些学生的 业代码和专业名称作为“々业代码”组
合框的值。 “院系站”组合框的Click()代码为:
sele xsXX
&&“学生学号”组合框被赋值:学号、姓名。
2.3赋值要领
set filter to hszdm=hszdm.hszdm
通过设定年度一获得院系站的值,选定院系站一给专业
代码赋值,选定专业代码一最后确定“学号姓名”组合框中
的值。赋值的代码可以是数据库(表)的操作语句、可以是
数据表的过滤语句、也可以是SQL查询语句等等。
&&以院系站代码作筛选依据
thisform.hszmc.controIsource= hszdm.hszmc
thisf0rm.hszmc.visible=.t.
删画2 015_骊.03 ,SY
 ̄!,,"
/X
’…………… ‘
实用第一 智慧密集
3数据查询
3.1 查询中数据表的建立
3.1.1设计思想
if subs(mxh,1,1)= 9
qsnd= 1 9 +subs(mxh,1,2)&&2000年前的处理
etse
数据表设计需要对于一个给定的应用环境,构造最优的
数据表模式,建立数据表及其应川系统,使之能够有效地存
储数据,满足各种用户的应用需求(信息要求和处理要求)。
本案中.学生表、成绩表均按年度建立,并且已经录入了
被查询数据
3.1.2查询程序结构
qsnd= 20 +subs(mxh,1,2l
endif
qsxq= 1
do whil file( cj&qsnd..dbf )
sele cj&qsnd。 xh,:
cj&qsnd..×m,:
cj&qsnd..kcdm,:
cj&qsnd..zcj.:
kck.kcmc,:
查询中.多以JI ̄H ̄库(中间库)、数组完成数据存储与调用。
3.1-3“个人总成绩单”命令按钮Click()代码
if used( XSZCJ )
kck.xf:
sele XSZCj
else
sele 0
crea cursor xszcl
f『om cj&qsnd。kck:
where mxh¥cj&qsnd..xh;
and.allt(kck.kcdm)==allt(cj&qsnd..kcdm):
.
and.cj&qsnd。.xqs==qsxq:
.
and.m.xsnd¥kck.sdrq:
(xh c(8).:
xm c(8).:
kcdm c(8).:
distinct &&.唯一性
zcj c(1O),:
kcmc c(30) :
xxh c(8l,
into array xscjO0
&&用SQL查询将所得某学期成绩装入数组xscjO0中
if
tally>O &&当数组不为空
_
sele xszcjO
appe from array xscjO0&&所得成绩添加到中间库中
repl XXSj with qsnd+qsxq for empty(xxsj)&&学习时间
&&为空,则代入对应年度学期
endif
XXSj c(5))
endif
&&“XSZCJ”为最终查询成绩汇总库
inde on xh tag xszcjO
sele XSXX
rele xscjO0&&将数组变量清除
if qsxq= ^2&&如果秋季学期, 年度需加1。
qsnd=str(val(qsnd)+1,4) &&先改为数值型加1,然后
&&再改为字符型取回
endif
开始生成成绩库
m
—
reco=l
mreco=O
go top
qs×q=iif(qsxq= 1 . 2 , 1 )
do case
dowhil!eof()
mrecn=recn()
case val(qsnd)一year(dateO)>O &&起始年度大于当
if used( xszcjO )
sele xszcjO
USe
&&前年度建库结束
wait wind &mxh.建库结束! time.1
case!file( dbfkcj&qsnd..dbf ).and.!val(qsnd)一year(dateO)>O
endif
=messagebox( 缺少[&qsnd.J年度成绩库 ,48, 系统
查错 )
othe
I()0D
&&xszcjO作为(临时)中间库,完成一个循环必须关
&&闭重建
sele 0
crea cursor xszcjO:
lxh c(8),
xm c(8),:
kcdm c(8),
endcase
exit
enddo
ZCj c(1O) :
kcmc c(30),;
xxh cI8),:
XXSi c(5))
sele XSXX
mxh=xsxx.xh
mxm--xs×x xm
if used( xszcjO )
sele xszcjO
go top
.f!eof()
copy to array xszcjO
sele XSZCj
appe from array xszcjO
rele xszcjO
4 ii20ji15丽.03
电■■程技巧与簟妒 l与簟 目
D^T^¨SE&INFORMATION M^_^BE ..….…。一…… 一 …
endif
endif
…+ . t. 一 …
&&中间库xscjO不为空,赋值给数组xscjO,然后将数组
&&添加进成绩总库
SeIe xsxx
go mrecn
skip
enddo
sele zydmk
set orde to zydm
&&建立专业代码库索弓
If!used( hsz )
sele 0
use hsz
else
sele hsz
endif
图4
Iota for allt(hszdm)=subs(xszcj。kcdm,1,2)
sele XSZCj
thisfOrm.mnsc.enabled=.t.
thisform.scdy.enabled=.t.
l 套袖一-釜t _I 盛 匝二二兰竺 =二二 显 兰竺 1Ij
il 芒 ] ]
l 一 三
is:
thisform。djb1.enabled=.t.
&&打开其他按钮
thisform.mxszcj RecordSource= Xszcj &&指定表格豹
&&数据源
go top&&指针回到首记录
thIsf0rm.mxszcj.column1 ControlSource= xszcj.zcj
&&学习成绩列绑定zcI字段
thisform.mxszcj.column2.ControlSource ='XSZci XXSi
l
l
l l害 薹
&&学习时间列绑定XXSj字段
thisform.mxszcj.column3 ControlSource= xszc] kcmc
&&课程名称列绑定kcmc字段
thisfOrm.refresh
repo form SC—grzcj to prin prom prev&&将数据输出到
报表,如图5所示。
3.2程序解析
(1)以临时表的形式存储查询后的个人成绩(XSZCj)。
(2)以临时表的形式作为中间存储表(x ̄zdO)。
(3)将 到的每学期成绩存储到数组(xszcjO0)。
(4) 数组(xscjO0)不为空,导人中间表(xszcjO),并
Ij_代入学习时间
(5)将『fI问仔储表数据导入总成绩表。
(6)按常规第一学期在下半年,当学期等于2时,年度
需JJl】1
(7)循环、血 完成. .
f :
.
为程序是以学号为火键字的总成绩表,所以首先
以XSZ(・作为叶1问存储(临时表),每次循环应该清空,但是
io
flt ̄Ht,衷是县渎状念,故只能关闭后重建。
3.3流程图
程序的运行流程如冈4所示
“个人总成绩 ”命令按钮点击后,表单界面如同5所示、、
穗2 015 .03 '65
… …………… …… … … …… ………………
实用第一 智慧密集
…… … . .…. ..….….…… .… … ……
;
【PLAINl
【RANGE nStartPage【,nEndPage]】
【PREVIEW【[IN】WINDOW WindowName I IN SCREENl
【NOWAIT]】
【TO PRINTER【PROMPT】l TO FILE FileName2【ASCII]l
【NAME ObjectName】
【SUMMARY】
本例使用的命令为repo form SO—grzcj to prin prom prey
4.2.2子句的应用
图6数据分组示意
PREVIEW[[IN】WINDOW WindowName I IN SCREEN】:
2)列标头。在列标题区域插入标签、域控件和线条.并
将控件与表头字段绑定,如罔7所示。
^女 j
以页面预览模式显示报表, 不把报表送到打印机巾打印。
要打印报表,命令必须带lTO PRINTER1子句 、
使j{j该子句可以在报表设汁器中预览报表,预览窗【1有
“打印预览”T具栏,方便对打印要求进行设置并输….如图
9所示
总
业g槔tk垤
成聩单
——]
J
晕* 匝r_——]幢i厦jr]碡i(盐):
如果子句排列次序上写成repo form sc—grz ̄ prey to prin,
系统将l叶J错;另外,如果写为repo f()rm 一grzc
i t(’prin prey,
.
I牟 l
・
■■#尊 J 卑 时一 l掌 ■‘1
^∞
・艚
l
1 E lⅡ—c m…~i 5 1 l L. .。
‘
按打印机按钮将直接输Ⅲ到打印机;应朋【PROMF ̄F 于句将
会弹 打印设置窗口,如罔l0所示
:
.*
▲
图7报表设计器中的总成绩单
3)细节区。细节区是报表的主要部分,即是查询数据的
输…部分。在此,需要变化的有序号、课程名称、学习时间
和学习成绩,需逐个与对应字段绑定,如图7所示
存“报表”一“变赶…”设置变量Num.指定“在列尾重
置”和“计数”.如 8所示
图9应用Preview子旬
图10应用Prompt子句
打印预览窗口
4.2.3输出的报表
如图11所示
譬 o1 204 名:阵 随熏I站l莽州
黄荆
弹出设置窗口
盘 靠
序碍
I
2
鼍挂离蠢
菱谱
犀小平蓦抱
计算辊鹰 稿
拳日时目 肆_ 靖
^
5
6
B
搿簪鞍学
煳
裔替辩学
譬 -
茏辊忧学
图8报表变量设置、字段绑定
9
l1
I2
I1
1姑措
齄蛊佬
瞢*鼎精譬
啦糟健学
蒸精
4)组注脚 组注脚 ,一般列…的足报表制作卡}{关的
信息,如“制表人”、“制表H期”等
注:使川报表设计 导颅先制…表格再进行修改是极好
的报丧制作 法、
4.2报表输出
4_2.1 VFP报表输出命令
REPORT FORM FileNamel I?
I4
I5
许杆他譬
琦糟
精精协
I7
l#
l
2O
光措埠柏
☆t &
挥■学
科特I艺毕
21
勰
辩基蚪 与文藏幢掌
菇理学
村 ±I-置I艺璇许
2‘
拍
】7
瑞#★●
矗辊 E譬
■唯暂毕
T-H
【ENVIRONMENT1
【Scopel【FOR IExpression1】【WHILE IExpression2】
【HEADING cHeadingText】
【NOCONSOLE1
INOOPTIMIZE】
母圣蜜瞻
制表人:—— 2014.O8.0
图11报表设计器输出报表
(下转第78页)
66 丽201画5.0两3
葡i蓟 污与簟 警嚆 与簟
…………………………………………………………。
实用第一 智慧密集
. ...。。, . 。 .. 。。.. 。。 , .. 。 . .
通过基于特征或异常进行入侵行为分析.并按预定的规则做
响应,阻止指定的行为。
容灾备份的规模与频度并不是越大越快就越好.在它的建设
中就要选择一个成本与功能适合的合点,常用的选择是:最
小的成本、最大的安全备份。 入侵探测设备往往与防火墙配合部署,以连动方式共同
保护行业专用网络的安全。部署模式如图2所示。
6结语
行业专用网络由于其特殊性,在建设之初就必须根据企
事业行业的组织结构的具体特点,在调研及需求分析的基础
上进行充分、详实的规划。规划包括:与行业组织结构相匹
配的网络拓扑规划,行业专用网络的IP规划,在这两项规划
完成之后具体网络建设之前.利用网络模拟软件搭建虚拟网
络,对网络规划进行测试,确保不出现遗漏和失误。
行业专用网络在规划中还应充分考虑其运行的安全可靠
性,在规划阶段就要利用动态网络防御的观念.利用防火墙
与入侵探测联运机制进行行业专用网络的安全体系设计.同
时还要规划容灾备份与病毒防治。
参考文献
【1】张慧香.校冈网规划与建设fD】.Ij1东大学,2013.
【2】刘芳字.浅谈校同网络设计与VLAN的配置….电大理
T,2011,(02):31-33.
图2行业专用网络安防规划图
5.3病毒防治
『3孟川杰,禹水琴,Aut3】hor.大型校闻网络设计方案【J].
信息与电脑(理论版),2010,(04):137.
行业专用网络的病毒防治,主要是行业网络内部部署网
络版的系统漏洞补丁的分发和病毒查杀的病毒防治系统。即
行业々用网络内部所有终端、服务器设备全部安装病毒防治
系统,管理人员通过病毒防治系统管理后台规划补丁升级、
病毒查杀
5.4容灾备份
【4】余玲,尚涛Author.校同网建设方案[J].甘肃科技,
2010(22):23-25.
【5】王迎新.计算机的网络规划设计与实施方案….信息与
电脑(理论版),2010,(09):77.
[6】容文迪.计算机网络安全规划与设计….祖国,2013,
(04):90.
容灾备份实现行业专用网络中核心数据、系统的高可靠
备份与恢复,它在行业专用网络的规划中主要考虑:如何在
网络系统遭到破坏后,以最快的速度恢复网络系统的正常运
行,尽可能小地减少核心数据的损失。由于数据备份需要占
用大量的网络资源,系统备份相当于重建另一套系统,所以
—
【7】韩波.网络安全规划设计对城域网发展的作用….信息
通信,2013,(07):255.
[8吴长虹.城域网网络安全规划设计研究f8】J1.信息通信,
20l2,(05):146—147.
St— — —址— L—址.址— L—l屯—址. L.S止. . L.S .S .SlL.S止.址.S止.S-L.S-L j止.址.1t.s .S .址.址. L
S止.S .SlL.S屯. L—址.址.址
.
.Sl上.址.‘l上.{止.址. .L.址.址.1屯
(上接第66页)
过表单录入,也可以南其他软件(如Excel、Access等)将数
据转换成DBF文件
5结语
只对查询表单的主要控件及功能进行了介绍。对于成绩
查询等的应用,作为专业的数据库开发程序,VFP可以说是
较为简便的,开发起来也没有什么难度。使用VFP的命令行
组成Prg文件同然也能实现结果,但是利用表单运行既直观又
参考文献
【1】曾华军,何学仪.VisualFoxPro专家方案.北京:中国民
航出版社.1997.
[21(美)E.Sander,等.Visual FoxPro 3.0实用指南.潘广和,
实用,而且操作简便。这也是作为面向对象VFP的主要特性
之一
等,译.北京:机械T业m版社.1996.
[3】史济民,汤观全.VisualFoxPn)及其应用系统开发.北京:
清华大学出版社.2000.
至于学生信息、成绩信息、课程信息、专业信息.以及
院系信息等的录入,可以用表单设计向导制作录入界面.通
_ ̄
"( 20
丽15 0丽3
与
版权声明:本文标题:Visual FoxPro成绩查询表单制作技巧 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1715330761a687333.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论