论文部分内容阅读
摘要:通过VisualFoxPro提供的三种循环(即DOWHILE…ENDDO、FOR…ENDFOR、SCAN…ENDSCAN),对同一问题,分别用三种循环完成对表的操作,并对程序进行解析,对比分析三种循环语句对表的操作方法。
关键词:Visual FoxPro 循环语句 表 操作方法
中图分类号:TP31
文献标识码:A
文章编号:1007-3973(2011)010-070-01
循环结构是VisualFoxPro(以下简称VFP)程序设计中最常用、最重要的程序结构形式之一,VFP提供的循环语句有:(1)当型循环DO WHILE…ENDDO;(2)计数循环FOR…ENDFOR;(3)指针循环SCAN…ENDSCAN。VFP中的表是一些相关数据的集合,是VFP保存数据的主要形式。用循环语句处理表中的数据,是每个VFP程序设计人员常用的方法,也是VFP初学者认为最难的内容之一。本文以一数据表为实例,谈谈在VFP中用三种循环语句解决同一问题的不同方法。
例:有一招生录取数据表lq-2010.dbf,包含编号(c,10),考生号(C,14),生源地(C,16),姓名(C,8),性别(C,2),民族(c,8),政治面貌(c,8),录取专业(c,20),高考成绩(N,3)等字段。要求显示生源地为河北省且录取专业为会计专业的学生信息。
1、用当型循环完成
代码如下:
settalkoff
clear
use lq_2010
d0 while.not.eof()
if生源地=‘河北省’.and.录取专业=。会计’
displayfields编号,考生号,生源地,姓名,性别,高考成绩,录取专业
endi
skip
enddo
use
settalkOn
retum
程序解析:本例用到的是当型循环,use 1q 2010.dbfH口打开数据表,此时指针指向第1条记录,dowhile.not.eof()为当指针不在表的末尾时执行循环体,第1次执行时,指针指向第l条记录且不在数据末尾,故运行循环体中的程序。循环体中if…endif语句是判断当前记录如果满足条件(即:生源地为河北省且录取专业为会计),则显示该学生基本信息。skip语句为指针下移一条记录,当程序运行遇到enddo语句时,程序跳到循环开始位置,当指针指向表的末尾时循环结束。
2、用计数循环完成
代码如下:
settalk off
clear
uselq_2010
rel=reccount()
fori=lto rel
if生源地=.河北省’.and.录取专业=‘会计’
displayfields编号,考生号,生源地,姓名,性别,高考成绩,录取专业
endif
skip
endfor
use
settalkOn
retum
程序解析:本例用到的是计数循环,use lq_2010.dbf即打开数据表,首先用变量rel取得数据表的总记录数(reccount()函数功能为取得当前数据表的总记录数),作为计数循环变量的终值,for i=l to rel为当变量i的值在1至rel的值之间时执行循环体,循环次数为数据表的总记录数。循环体中 if…endif语句为判断当前记录如果满足条件(即:生源地为河北省且录取专业为会计),则显示该学生基本信息。skip语句为指针下移一条记录,程序遇到endfor语句时,程序跳到循环开始位置,并将i+l赋值给循环变量i。当变量i的值超出数据表的总记录数(即i>rel)时,循环结束,指针指向表末尾。
3、用指针循环完成
代码如下:
settalkoff
clear
uselq_2010
SCan
if生源地=河北省’.and.录取专业=l厶计’
displayfields编号,考生号,生源地,姓名,性别,高考成绩,录取专业
endif
endscan
use
settalkOn
return
程序解析:本例用到的是指针循环,也称之为表扫描循环,专用于处理数据表中的记录,其功能为在当前表指定范围内,自动逐条移动记录指针,直到不满足条件或遇到文件尾自动结束。Use 1q 2010.dbf即打开数据表,“scan”…endscan为循环体,自动访问表中的记录,循环体中if.“endif”语句为判断当前记录,如果满足条件(即:生源地为河北省且录取专业为会计),则显示该学生基本信息,“scan”endscan循环语句中不用skip语句移动指针,指针自动下移。当指针指向表末尾时,循环结束。
4、三种循环语句对比
(1)当型循环DO WHILE.ENDDO,多用于事先不知道循环次数的情况,在对数据表的操作和数值计算方面用得较广。可以这样讲,只要程序中用得上循环语句,当型循环一定能够实现。这是VFP初学者必须掌握的循环语句。
(2)计数循环FOR “ENDFOR”,多用于已知循环次数的情况,在数值计算方面用得较广。事实上,对于数据表的操作,也可将当型循环转换为计数循环,实现这一转换,可能帮助VFP初学者进一步分析两种循环的区别。
(3)指针循环SCAN...ENDSCAN,仅用于对数据表的操作,也是对数据表操作采用循环语句的首先,因为指针循环本身包含自动移动指针,每循环一次,记录指针自动下称,直到文件末尾(即eof()=t.)。与DO WHILE…ENDDO循环和FOR…ENDFOR相比,后者在循环中必须有一个改变指针移动的操作,上例中skip语句就是这完成指针向下移动的。
以上三种不同的方法都能实现对数据表的操作,并且可以相互转换,实现同一功能。通过对三种循环语句的对比分析,可以帮助VFP学习者进一步读懂程序,了解三种循环语句的结构和运行方式,达到熟能生巧、运用自如的目的。以上程序代码在VFP6.0环境下运行通过。
参考文献:
[l]罗颂,詹斌,余健.VisualFoxPro课程设计案例精编[M].北京:
清华大学出版社,2008.
[2]李玉龙,张永花,蒲会兰.VisualFoxPro程序设计与数据应用
基础[M].北京:中国铁道出版社,2007.
[3]何明瑞.数据原理及VisualFoxPr06.0实用教程[M].上海:浦
东电子出版社,2003.
关键词:Visual FoxPro 循环语句 表 操作方法
中图分类号:TP31
文献标识码:A
文章编号:1007-3973(2011)010-070-01
循环结构是VisualFoxPro(以下简称VFP)程序设计中最常用、最重要的程序结构形式之一,VFP提供的循环语句有:(1)当型循环DO WHILE…ENDDO;(2)计数循环FOR…ENDFOR;(3)指针循环SCAN…ENDSCAN。VFP中的表是一些相关数据的集合,是VFP保存数据的主要形式。用循环语句处理表中的数据,是每个VFP程序设计人员常用的方法,也是VFP初学者认为最难的内容之一。本文以一数据表为实例,谈谈在VFP中用三种循环语句解决同一问题的不同方法。
例:有一招生录取数据表lq-2010.dbf,包含编号(c,10),考生号(C,14),生源地(C,16),姓名(C,8),性别(C,2),民族(c,8),政治面貌(c,8),录取专业(c,20),高考成绩(N,3)等字段。要求显示生源地为河北省且录取专业为会计专业的学生信息。
1、用当型循环完成
代码如下:
settalkoff
clear
use lq_2010
d0 while.not.eof()
if生源地=‘河北省’.and.录取专业=。会计’
displayfields编号,考生号,生源地,姓名,性别,高考成绩,录取专业
endi
skip
enddo
use
settalkOn
retum
程序解析:本例用到的是当型循环,use 1q 2010.dbfH口打开数据表,此时指针指向第1条记录,dowhile.not.eof()为当指针不在表的末尾时执行循环体,第1次执行时,指针指向第l条记录且不在数据末尾,故运行循环体中的程序。循环体中if…endif语句是判断当前记录如果满足条件(即:生源地为河北省且录取专业为会计),则显示该学生基本信息。skip语句为指针下移一条记录,当程序运行遇到enddo语句时,程序跳到循环开始位置,当指针指向表的末尾时循环结束。
2、用计数循环完成
代码如下:
settalk off
clear
uselq_2010
rel=reccount()
fori=lto rel
if生源地=.河北省’.and.录取专业=‘会计’
displayfields编号,考生号,生源地,姓名,性别,高考成绩,录取专业
endif
skip
endfor
use
settalkOn
retum
程序解析:本例用到的是计数循环,use lq_2010.dbf即打开数据表,首先用变量rel取得数据表的总记录数(reccount()函数功能为取得当前数据表的总记录数),作为计数循环变量的终值,for i=l to rel为当变量i的值在1至rel的值之间时执行循环体,循环次数为数据表的总记录数。循环体中 if…endif语句为判断当前记录如果满足条件(即:生源地为河北省且录取专业为会计),则显示该学生基本信息。skip语句为指针下移一条记录,程序遇到endfor语句时,程序跳到循环开始位置,并将i+l赋值给循环变量i。当变量i的值超出数据表的总记录数(即i>rel)时,循环结束,指针指向表末尾。
3、用指针循环完成
代码如下:
settalkoff
clear
uselq_2010
SCan
if生源地=河北省’.and.录取专业=l厶计’
displayfields编号,考生号,生源地,姓名,性别,高考成绩,录取专业
endif
endscan
use
settalkOn
return
程序解析:本例用到的是指针循环,也称之为表扫描循环,专用于处理数据表中的记录,其功能为在当前表指定范围内,自动逐条移动记录指针,直到不满足条件或遇到文件尾自动结束。Use 1q 2010.dbf即打开数据表,“scan”…endscan为循环体,自动访问表中的记录,循环体中if.“endif”语句为判断当前记录,如果满足条件(即:生源地为河北省且录取专业为会计),则显示该学生基本信息,“scan”endscan循环语句中不用skip语句移动指针,指针自动下移。当指针指向表末尾时,循环结束。
4、三种循环语句对比
(1)当型循环DO WHILE.ENDDO,多用于事先不知道循环次数的情况,在对数据表的操作和数值计算方面用得较广。可以这样讲,只要程序中用得上循环语句,当型循环一定能够实现。这是VFP初学者必须掌握的循环语句。
(2)计数循环FOR “ENDFOR”,多用于已知循环次数的情况,在数值计算方面用得较广。事实上,对于数据表的操作,也可将当型循环转换为计数循环,实现这一转换,可能帮助VFP初学者进一步分析两种循环的区别。
(3)指针循环SCAN...ENDSCAN,仅用于对数据表的操作,也是对数据表操作采用循环语句的首先,因为指针循环本身包含自动移动指针,每循环一次,记录指针自动下称,直到文件末尾(即eof()=t.)。与DO WHILE…ENDDO循环和FOR…ENDFOR相比,后者在循环中必须有一个改变指针移动的操作,上例中skip语句就是这完成指针向下移动的。
以上三种不同的方法都能实现对数据表的操作,并且可以相互转换,实现同一功能。通过对三种循环语句的对比分析,可以帮助VFP学习者进一步读懂程序,了解三种循环语句的结构和运行方式,达到熟能生巧、运用自如的目的。以上程序代码在VFP6.0环境下运行通过。
参考文献:
[l]罗颂,詹斌,余健.VisualFoxPro课程设计案例精编[M].北京:
清华大学出版社,2008.
[2]李玉龙,张永花,蒲会兰.VisualFoxPro程序设计与数据应用
基础[M].北京:中国铁道出版社,2007.
[3]何明瑞.数据原理及VisualFoxPr06.0实用教程[M].上海:浦
东电子出版社,2003.