解析VFP中三种循环语句对表的操作

来源 :科协论坛·下半月 | 被引量 : 0次 | 上传用户:canyang419
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:通过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.
其他文献
本论文以苜蓿种子贮藏蛋白(seed storage proteins,SSPs)和过氧化物酶等位酶(peroxidase,PER)为指标,采用不连续聚丙烯酰胺凝胶电泳,对我国审定登记的31个苜蓿品种和一个未登记育成品种的遗传多样性及品种间的亲缘关系进行了研究。研究结果表明: 参试的32个苜蓿品种的种子贮藏蛋白单体的分子量介于21.2kD~85.1kD。谱带多态性主要出现在43.7kD~25.
本研究构建了绵羊体细胞-绵羊卵母细胞重组胚、骆驼体细胞-绵羊卵母细胞重组胚和骆驼体细胞-牛卵母细胞重组胚三种重组胚,并研究了它们早期的发育情况。首先用不同的方法体外
本研究利用微卫星标记技术对我国的五指山小型猪、滇南小耳猪、贵州小型香猪及其近交系、南宁巴马香猪近交系、荣昌猪、沂蒙黑猪、汉中黑猪、二花脸猪、金华猪等10地方猪品种
本实验以豆粕、鱼粉、玉米蛋白粉三种蛋白质饲料设计3个处理组日粮, 研究不同蛋白源日粮饲养条件下绵羊瘤胃液(采食后1h、2h、4h、6h)游离氨基酸的浓度、组成和以肽形式存在氨