Visual - FoxPro第7章学案 程序设计
更新时间:2024-07-06 01:04:01 阅读量: 综合文库 文档下载
- visual推荐度:
- 相关推荐
六 程序设计基础 命令文件
1命令文件的格式A
2命令文件的建立与修改C
3命令文件的运行C 常用命令
1输入输出命令C
2常用的系统设置命令C
3其它命令C 程序文件
1结构化程序设计的三种基本结构:顺序,选择,循环D
2过程文件的建立及重要性C
3子程序与过程的调用B
4参数的传递与变量的作用域B
命令文件
VFP6支持过程化程序设计和面向对象程序设计两种程序设计与开发的类型。
程序可以分为三个部分:
第一部分是程序的说明部分,一般用于说明程序的功能、文件名等需要说明的有关信息。
第二部分是进行数据处理的部分,通常这部分程序常包括下列三个部分,依次为:环境设置、数据处理(输入 运算 输出)、环境恢复。
第三部分是程序的控制返回部分,它控制程序返回到调用该程序的调用处。
1命令文件的格式A
VFP的程序是由若干有序的命令行组成,且满足下列规则: (1)用于结束的语句
Cancel :其功能是结束程序的执行,返回命令窗口。
Return:结束本程序模块的执行,返回上一级调用处。如果是主程序最高级调用,返回命令窗口。
(2)每一行可以从任一列开始,为便于阅读,一般程序结构左对齐,而控制结构内的语句序列比控制结构的语句缩进若干格。每条命令以回车键结束。 (3)一个命令行内只能写一条命令,命令行以回车键结束。一条命令在一个物理行内写不下时,可以分成几行。换行的方法有两种:一种是在物理行的末尾加符号“;”,表示下一行输入的内容是本行的继续;另一种是系统自动换行,即输入程序时,只管逐条命令输入,无需考虑本条语句是否超过屏幕行宽的最大限度,当输入的语句超过屏幕的最大行宽时,系统自动换行。输入时只需在一行结束时按回车键,通知系统本命令行输入完毕。
(4)各命令动词、系统保留字、系统函数可以取前四个字母。各命令动词、系统保留字、选项之间至少有一个空格作为分隔符。
使用“命令”窗口
可以在“命令”窗口中键入 Visual FoxPro 命令并按 ENTER 键执行。若要重新执行该命令,还可以将光标移到此命令所在行并按 ENTER 键。
甚至可以在“命令”窗口中象执行独立程序一样执行多行代码。
“命令”窗口是 Visual FoxPro 的一种系统窗口。当选择菜单命令时,相应的 Visual FoxPro 语句自动反映在“命令”窗口中。
也可以直接在“命令”窗口中输入 Visual FoxPro 命令。在“命令”窗口中您可以:
? ? ? ?
在按 ENTER 键执行命令之前,按 ESC 键删除文本。
将光标移到以前命令行的任意位置按 ENTER 键重新执行此命令。 选择要重新处理的代码块,然后按 ENTER 键。
若要分割很长的命令,可以在所需位置的空格后接分号,然后按 ENTER
键。
可在“命令”窗口内或向其他编辑窗口中移动文本,选择需要的文本,并
将其拖动到需要的位置。
?
可在“命令”窗口内或向其他编辑窗口中复制文本,而不用使用“编辑”菜单的命令。选择需要的文本,按住 CTRL 键,将其拖动到需要的位置。
可在“命令”窗口中运行多行代码 1.选择代码行。
2.按 ENTER 或在快捷菜单中选择“运行所选区域”。
因为“命令”窗口是一个编辑窗口,所以在编辑命令时可以使用 Visual FoxPro 提供的编辑工具。在“命令”窗口中可以编辑、插入、删除、剪切、复制和粘贴正文。
在“命令”窗口中执行命令的优点是:能够立即执行被键入的命令,不需要将其保存为文件并用程序方式执行。
2命令文件的建立与修改C 创建程序
Visual FoxPro 程序是包含一系列命令的文本文件。在 Visual FoxPro 中,可以通过以下途径创建程序:
若要创建程序
1.在“项目管理器”中,选定“代码”选项卡中的“程序”项。 2.选择“新建”命令。
在“文件”菜单中选择“新建”命令。 在“新建”对话框中选择“程序”。 选择“新建文件”按钮。
- 或者 -在“命令”窗口中,键入: MODIFY COMMAND
Visual FoxPro 打开了一个称为“程序1”的新窗口,这时就可以键入应用程序了。
若要创建新程序
1.在“命令”窗口中键入如下命令: 2. MODIFY COMMAND numonly 3.在打开的窗口上键入如下代码: FOR nCnt = 1 TO 14 ? SUBSTR(cTest, nCnt, 1) ENDFOR
创建程序之后便可运行。
修改程序
程序保存后可以修改。首先,按以下方式打开想要修改的程序: 若要打开程序
?
若程序包含在一项目中,则在“项目管理器”中选定它并选择“修改”命
令。
- 或者 –
在“文件”菜单中选择“打开”命令,这时弹出一个包含文件列表的对话
框。在“文件类型”列表框中选择“程序”,然后在文件列表中选定要修改的程序,按下“确定”按钮。
- 或者 -
? ?
在“命令”窗口中按如下方式键入要修改的程序名。 MODIFY COMMAND myprogrm
- 或者 -
?
在“命令”窗口中,键入:
?
MODIFY COMMAND
然后从文件列表中选择要修改的程序,选择“打开”。 打开文件之后便可进行修改,修改完毕后请注意保存。
保存程序
创建程序后,请注意保存。 若要保存程序
?
从“文件”菜单中选择“保存”命令。
若用户要关闭一个没有保存的程序,则会弹出相应对话框,提示用户是保存还是放弃已做的修改。
若用户保存了一个由“项目管理器”创建的程序则该程序被加入项目中。 若用户保存一个尚未命名的程序,则会打开“另存为...”对话框,这样提示用户可以在其中为程序指定程序名。程序保存后,用户可以运行或修改它。
3命令文件的运行C
运行程序
程序创建之后便可运行。 若要运行程序
若程序包含在一个项目中,则在“项目管理器”中选定它并选择“运行”
命令。
?
- 或者 -
在“程序”菜单中选择“运行”菜单项。在程序列表中,选择想要运行的
程序,单击“运行”按钮。 查找程序文件,出现运行结果。
?
- 或者 -
? ?
在“命令”窗口中,按如下方式键入 DO 以及要运行的程序名: DO myprogram
clear p=3.1414926
inpu \请输入圆的半径:\ s=p* r^2 ?\圆的面积为 s=\
Retu
常用命令
1输入输出命令C 1键盘输入命令
格式:INPUT [<字符型提示信息>] to <内存变量>
功能:通过键盘输入,将字符型,数值型,逻辑型,日期型表达式的值赋给指定的内存变量。
说明:[<提示信息>]:提示信息,提示用户输入数据。
[<内存变量名>]:指定一个内存变量或数组元素,存储从键盘输入的数据。如果指定的内存变量或数组元素不存在,VFP将自动创建该内存变量或数组。
<内存变量名>的数据类型取决于输入数据的类型。可以为数字型、字符型、日期型和逻辑型。
例子:试编程完成下列功能。从键盘上随机输入一个正数,以此数为半径,求圆面积和球体积,并输出结果。
程序如下: *L504.PRG CLEAR
CTALK=SET(\SET TALK OFF
INPUT \半径=\S=PI()*R*R V=4/3*PI()*R**3 ? \圆面积=\? \球体积=\SET TALK ON RETURN
use 基本表
input \请输入姓名:\loca for 姓名=xm disp cont disp cancel
(2)字符接收语句
格式:ACCEPT [<提示信息>] TO <内存变量名>
功能:将从键盘上接收的字符串数据存入指定的内存变量中。提供此命令是为了向后兼容,在VFP中可以用文本框控制命令代替。
说明:
[<提示信息>]:指定提示信息字符串。
[<内存变量名>]:指定存储字符数据的内存变量或数组元素。如果没有定义此内存变量,ACCEPT将自动创建。如果没有输入数据就按Enter键,内存变量或数组元素则为空字符串。
在VFP6的可视编程中可用文本框代替ACCEPT命令。该命令允许直接向内存变量或数组元素输入字符数据,输入时不需要用字符串的定界符。
执行此语句时,先在屏幕上显示<提示信息>,光标紧随其后,然后暂停程序运行,等待用户从键盘上输入信息。输入的信息可以是任何可显示的ASCII码字符串,并以回车键结束。系统将此字符串信息存入指定的内存变量中,然后,继续运行暂停的程序。
例子:编程完成下述功能:从键盘随机输入某个表的文件名,要求打开并显示此表的内容。
在命令窗口输入下列命令:
use 基本表
ACCEPT \请输入姓名:\loca for 姓名=xm disp cont disp cancel
(3)输入一个字符语句
格式:WAIT[<提示信息>][TO <内存变量名>]
功能:暂停正在运行的程序,直到输入一个字符为止。
此语句与ACCEPT语句的功能部分相似。若选择TO <内存变量名>子句,则将输入的单个字符存入指定的内存变量。若直接输入回车键,则内存变量中存入空字符串。内存变量的类型为字符型。若选择<提示信息>子句,执行此命令时,屏幕上将显示提示信息,否则,屏幕上将显示“按任意键继续?”
WAIT语句主要用于下列两种情况。
■暂停程序的运行,以便观察程序的运行情况,检查程序运行的中间结果。 ■根据实际情况输入某个字符,以控制程序的执行流程。比如,在某应用程序的“Y/N”选择中,常用此命令暂停程序的执行,等待用户回答“Y”或“N”,由于这时只需输入单个字符,也不用按回车键,操作简便,响应迅速。
INPUT语句与ACCEPT语句的区别是:ACCEPT命令只能接收字符串,而INPUT语句可以接收任意类型的VFP表达式;如果输入的是字符串,ACCEPT语句不要使用字符型定界符,而INPUT语句必须用定界符括起来。
输出命令 1 ?命令
格式:?[<表达式1>],[<表达式2>]
功能:输出一个或多个表达式的值,输出时先回车换车,再输出 ?132
2 ??命令
格式:??[<表达式1>],[<表达式2>] 功能:在当前光标处输出表达式的值 ??132 例子:
记录输出
格式:Display [范围][fields <字段列表>] use 基本表
ACCEPT \请输入姓名:\loca for 姓名=xm disp cont disp cancel
set talk off clea use 数学
input \input \
*brow for 平时>=xx.and.平时<=sx field 学号,姓名,平时
Display field 学号,姓名,平时 use
set talk on retu
2常用的系统设置命令C
l.注释命令 非执行语句,用于提高程序的可读性。 NOTE、*(行首注释)、&&(行尾注释) 2. 环境设置命令 set 命令。 3. 清除命令:CLEAR(清屏)
CLEAR ALL(关闭所有文件、清除所有内存变量) 4. 关闭文件命令: CLOAE ALL (关闭所有文件)
CLOSE <文件类型> (关闭指定类型的文件) 5. 运行中断和结束命令
? Cancel 终止程序运行,返回命令窗口。
? RETURN 结束当前程序的执行,返回到调用它的上级程序。 ? QUIT 关闭所有文件,退出 VFP 系统,返回操作系统环境。
Set talk on/off
Set printer on |off
Set device to screen|to printer Set delete on/off
3其它命令C (1)、中止程序运行
■在程序运行过程中,按Esc键可以中止程序的运行,系统会显示警告对话框让用户选择:
【取消】 中止程序运行,这是缺省选择; 【挂起】 暂停程序运行,返回命令窗口。 【忽略】 忽略所给的Esc,继续程序的执行。 格式 一:CANCEL
功能:结束程序的运行,返回命令窗口,同时关闭所有打开的文件。
(2)、清屏命令 格式:clear
功能:清除屏幕,光标回到屏幕左上角 3重试命令 格式 retry
4返回调用 return
格式:Return [<表达式>|
功能:终止程序,返回被调用处, <表达式>是自定义函数的返回值,
5注释命令
格式一:NOTE/ * <注释字符串> 格式二:&& <注释字符串>
说明:上述命令不作任何操作,只是注释标记,用于说明程序或命令的功能等。注释内容不需要用定界符定界,执行时也不显示。注释信息如果在一行内没有写完,换行时也必须再写注释命令。NOTE或*是用于整行注释的,因此,它必须写在每一个注释行的开头;而&&命令是用于注释一行的部分内容的,因此,它可以写在行中(命令的尾部、注释信息的头部),这是程序中唯一可以在一个
逻辑行写二个语句的命令。
NOTE或*是用于整行注, 须写在每一个注释行的开头 &&命令是用于注释一行的部分
USE STUDENT &&打开STUDENT表 不影响执行 Note USE STUDENT命令不执行
6text?.endtext 格式: Text
[文本信息]
Endtext
功能:在屏幕上显示text?.endtext之间 的文本信息.
程序文件
1结构化程序设计的三种基本结构:顺序,选择,循环D 程序设计的过程
程序:为完成某一特定任务的一系列指令(语句)的集合.程序设计就是编写程序的过程.
程序设计的基本步骤包括:
? ? ? ? ? ?
对问题进行说明。 分解问题。 编制各模块。 测试并完善各模块。 组装全部模块。 整体测试。
程序设计的过程
掌握了一些基本概念后,程序设计就变成了一个不断重复的过程。您需要多次重复某些步骤,并在这个过程中不断对代码进行优化。从编写第一行程序开始,便不断进行测试,完成每个“试验 — 查错”的过程。对语言越熟悉,则编程速度越快,而且更多的初步测试工作将在头脑中进行。 程序设计的基本步骤包括:
? ? ? ? ? ?
对问题进行说明。 分解问题。 编制各模块。 测试并完善各模块。 组装全部模块。 整体测试。
开始程序设计之前,请注意以下几个问题:
?
在解决问题之前,必须把问题说明清楚,否则会不断进行修改,丢弃已编好的代码并从头再来,而且最终也不可能得到满意的结果。
将问题分解成可单独处理的几个步骤,而不是一下子解决全部问题。 在开发过程中不断测试和调试已编好的代码。通过测试检查代码是否能实现所需的功能;调试是找出代码在哪里出错并纠正这些错误。
精炼数据和数据存储方式,便于程序对其进行处理。这需要正确构造表格的结构。
? ?
?
本节以下部分将详细介绍建立一个小型 Visual FoxPro 程序的各个步骤。 对问题进行说明
开始解决问题以前,需要将其说明清楚。有时调整问题的说明方式会有助于问题的解决。
假设从不同的数据源获得一批数据,其中大部分是数值型数据,但有些数据,除包含数字外,也夹杂着一些虚线和空格。现在需要从字段中清除这些空格和虚线,并将所得到的数值型数据加以保存。
可以按如下方式说明这个程序要达到的目标,而不是简单地立即着手从原始数据中除去空格和虚线。
目标 用新值替换字段中的原始值,新值包含原始值中除空格和虚线外的所有内容。
这种说明方式的优点在于可以避免在处理可变长度字符串时遇到问题。 分解问题
因为最终是以操作、命令和函数的方式将具体的指令提供给 Visual FoxPro,所以需要将问题分解为多个独立的步骤。在问题中,最容易分离出来的任务是在字符串中逐个扫描字符,只有将单个字符分离出来才能决定是否应该保存它。 在扫描字符的时候,将检查它是否为虚线或空格。到了这一步也许您想要更详细地说明这个问题,括号之后的数据应该如何提取,货币符号、逗号和句号该如何消除等一系列问题将出现在脑海中。代码越通用,为将来节省的工作量就越多,问题就在于如何做到事半功倍。下面给出了一个比从前适用范围更广的问题说明方式。
精炼后的目标 用原始数据中的数值型字符更新字段值。
这便是在字符的层次上重新说明问题。如果字符是数字则保留,否则将指针移向下一个字符。当用原始字符串中的数字重新构成一个只含有数字元素的新串时,将这个新串替换掉原来的字符串。如此循环,直到将所有记录中的数据全部更新。 概括起来,全部问题可以分解成以下一些模块: 1. 逐个检查字符。
2. 判断该字符是否为数字。 3. 若是数字,则将其复制到新串。
4. 检查完字符串中的全部字符后,用只含数字的新串替换原串。 5. 重复上述步骤,直到表中全部记录都被更新。 编制模块
明确了要达到的目标以后,便可以开始使用 Visual FoxPro 的命令、函数和操作符来构造各模块。
因为命令和函数是用来处理数据的,所以需要一些数据来测试其功能。这些用于测试的数据应与实际数据尽量相近。
例如,在“命令”窗口中键入如下命令,将一个测试字符串赋值给变量: cTest = \逐个检查字符
首先,需要在字符串中检查单个字符。有关可用于操作字符串的函数列表,请参阅“帮助”中的“字符函数”。
您将发现三个用以返回字符串特定部分的函数:LEFT( )、RIGHT( ) 和 SUBSTR( ),其中 SUBSTR( ) 可以返回字符串中的任意子串。
SUBSTR( ) 需要三个参数:字符串、起始字符的位置和需返回的字符数。若要了解 SUBSTR( ) 是否可完成所需工作,请在“命令”窗口中键入以下命令: ? SUBSTR(cTest, 1, 1) ? SUBSTR(cTest, 3, 1) ? SUBSTR(cTest, 8, 1) 输出 1 3 -
用于测试的字符串中的第一个、第三个和第八个字符将显示在 Visual FoxPro 的主窗口中。
可以使用循环结构多次重复执行相同操作。因为用于测试的字符串有固定的字符数 (14),所以能够使用 FOR 循环语句。每执行一遍,FOR 循环的计数器增加 1,因此可在 SUBSTR( ) 函数中使用该计数器。因为在“命令”窗口中不能测试循环结构,所以我们编写一个示例程序。 若要创建新程序
1. 在“命令”窗口中键入如下命令: 2. MODIFY COMMAND numonly
3. 在打开的窗口上键入如下代码: 4. FOR nCnt = 1 TO 14
5. ? SUBSTR(cTest, nCnt, 1) 6. ENDFOR
创建程序之后便可运行。 若要运行程序
1. 在打开的程序窗口中,按下 CTRL+E 键。 2. 若“保存”对话框出现,选择“是”按钮。
运行此程序时,各个结果将在 Visual FoxPro 主窗口中分行显示。
(1)VFP的程序结构可以分为三种:顺序结构、分支结构、循环结构。 顺序结构:执行程序顺序与书写顺序一致;
分支结构: 执行程序顺序是根据条件是否成立来选择一条路径; 循环结构:。执行程序顺序是条件成立时,反复执行某一组语句. 1.顺序结构:按程序中语句的书写顺序逐条执行。
2.分支结构(选择结构):根据逻辑条件的结果执行不同的命令序列。 (1)双分支结构:IF...ELSE...ENDIF (2)多分支结构:DO CASE...ENDCASE
3. 循环结构:按规定的条件重复执行一段命令序列。 (1)DO WHILE...ENDDO (2)FOR ... ENDFOR (3)SCAN ?ENDSCAN 对数据表的循环操作。
说明:分支结构或循环结构可以嵌套,但分支与分支之间或循环与循环之间不能交叉。
(2)结构化程序的特点
每一个基本结构只有一个唯一的入口; 每一个基本结构只有一个唯一的出口;无死语句(永远执行不到)无死循环(永远执行不完)
程序设计的方法:模块化设计,自顶向下设计,逐步细化设计的方法. 1、顺序结构程序设计
顺序结构程序设计是结构化程序设计的基础,即是按完成任务所需步骤的先后顺序逐条命令的编写。
clear p=3.1414926
input \请输入圆的半径:\ s=p*r^2 ?\圆的面积为s=\
Retu
set talk off clea use 数学
input \input \
brow for 平时>=xx.and.平时<=sx field 学号,姓名,平时 use
set talk on retu
do while .T. use 基本表 clear
acce \输入要查找的姓名\locate for 姓名=xm
do while .not.eof()
display
cont enddo
wait \是否继续\
if upper(yn)<>\
exit
endif
enddo use return
2、分支结构程序设计
分支结构就是根据条件的计算结果执行不同的操作。条件分支结构逻辑流程图如图5-6所示,VFP6中有两条命令实现条件分支:
条件分支根据条件的测试结果执行不同的操作。Visual FoxPro 中有两条命令实现条件分支:
? ?
IF ... ELSE ... ENDIF DO CASE ... ENDCASE
只有逻辑条件值为“真”(.T.) 时,才会执行在初始语句和 ENDIF 或 ENDCASE 语句之间的程序。
(1)条件分支
Y 条件 N 语句列1 语句列2 ENDIF后面语句 格式:IF <条件表达式> <语句序列1>
[ELSE <语句序列2>] ENDIF
参数描述:
<条件表达式>:指定要计算的逻辑表达式。如果<条件表达式>的值为
“真”,则执行IF语句之后的<语句序列1>;如果<条件表达式>的值为“假”,而且包含ELSE语句和<语句序列2>,则执行<语句序列2>;如果<条件表达式>的值为“假”,而且不包含ELSE语句和<语句序列2>,则程序忽略IF语句和ENDIF语句之间的所有语句,程序从ENDIF语句后的第一条命令开始继续往下执行其它程序。
说明:一个IF?ENDIF语句块中可以嵌套另一个IF?ENDIF语句块。 【例5-5】假设某单位有很多员工,并且要给月工资高于或等于1000元的员工增加5%的工资,给月工资低于1000元的员工增加10%的工资。
下面的示例程序将完成这一任务。此示例程序假定已在当前工作区打开了员工工资表,表中有一个名为“月工资”的数值型字段。
SET TALK OFF SCAN
IF 月工资>=1000
REPLACE 月工资 WITH 月工资*1.05
ELSE
REPLACE 月工资 WITH 月工资*1.1
ENDIF ENDSCAN SET TALK on RETURN
USE XSCJ01 ACCE\LOCA FOR 学号=BB IF .not.eof()
disp
ELSE
?\
ENDIF USE RETU *P176 5 clea s=1 n=0
for n=1 to 100 if s>=8848
exit
endif
s=0.000005*2^n ?\endfo
?\retu
(2)多条件选择语句 格式:DO CASE
CASE <条件表达式1>
<语句序列1>
[CASE <条件表达式2>
<语句序列2> ?
CASE <条件表达式N>
<语句序列N>]
[OTHERWISE
<语句序列N+1>]
ENDCASE
条件1 Y 语句列1 语句列2 语句列n N 条件2 N 条件n N OTHERWISE 有 其它语句列 无 ENDCASE后面语句 参数描述:
CASE <条件表达式1> <语句序列1> ? :VFP在执行这条多条件选择命令时,按命令行中写出的条件表达式的顺序逐条检查<条件表达式>,当遇到第一个结果为“真”的<条件表达式>时,就执行它后面的语句序列。语句序列中的命令逐条被执行,直到遇到下一个CASE或OTHER-WISE或ENDCASE,然后,
再从ENDCASE语句后的第一条命令开始继续执行其它命令。
如果一个CASE <条件表达式>的<条件表达式>为“假”,就忽略它后面的语句序列。
例子; clea
set talk off use 英语
input \输入记录号\go n
zp=平时*0.3+期中*0.3+期末*0.4 do case
case zp>85
?\优秀\
REPLACE 学期总评 WITH zp disp
case zp>75
?\良好\
REPLACE 学期总评 WITH zp disp
case zp>60
?\合格\
REPLACE 学期总评 WITH zp disp
otherwise
?\不合格\
REPLACE 学期总评 WITH zp
disp
endcase use
set talk on retu clea
USE 职工工资表
ACCE\输入职工号\LOCA FOR 职工号=zzh IF .not.eof()
do case
case 总收入<=1000
REPLACE 所得税 WITH 0
case 总收入>1000 .and.总收入<1500
REPLACE 所得税 WITH (总收入-1000)*0.05
case 总收入<2000
REPLACE 所得税 WITH (总收入-1500)*0.1
otherwise
REPLACE 所得税 WITH (总收入-2000)*0.15
endcase
ELSE
WAIT \不存在该职工号的职工\ ENDIF disp use RETU
05年高考 四、编程题(10分)
?1000 x?50?10?x?50?2x?3 已知y??2
10?x?0?x?x x?0?试编程计算y的值(要求:x的值由键盘输入)。
set talk off clear
input “请输入X的值:” to x do case
case x>=50 y=1000
case x>10 y=2*x+3 case x>=0 y=x^2 otherwise y=x endcase ? “y=”,y return
09高考2.设有学生成绩表xscj.dbf,结构如下表所示。要求根据学生的成绩确定等级,具体规定如下:成绩在85分以上的等级为“优秀”(含85分);成绩在70——84分之间的等级为“良好”;成绩在60——69分之间的等级为“及格”;60分以下的等级为“不及格”。请编程实现上述功能。(8分) 字段名称 数据类型 字段宽度 姓名 字符型 8 成绩 数值型 3 等级 字符型 8
10年高考 四、编程题(共15分,第1题7分,第2题8分)
1 现有某学校的职工工资表gz.dbf,其表结构中含有姓名、性别、职称、基本工资、奖金等字段。请编程实现:若职称字段值为“教授”,则将基本工资改为3000,奖金增加2000;若职称字段值为“副教授”,则将基本工资改为2000,奖金增加1500;其余职工的基本工资都改为1800,奖金增加1000。(7分) 1参考程序: use gz
do while not eof() do case
case 职称=”教授”
repl 基本工资 with 3000,奖金 with 奖金+2000 case职称=”副教授”
repl 基本工资 with 2000,奖金 with 奖金+1500 otherwise
repl 基本工资 with 1800,奖金 with 奖金+1000
endcase skip enddo use
2、循环语句
程序设计中的循环,是指在程序中从某处开始,有规律地反复执行某一个程序块的现象。VFP的循环命令有三类:基于条件的循环、基于计数的循环和基于表的循环。
循环
循环结构可以按照需要多次重复执行一行或多行代码。在 Visual FoxPro 中有三种循环语句:
? ? ?
基于表的循环命令: SCAN ... ENDSCAN 基于计数的循环命令:FOR ... ENDFOR 基于条件的循环命令:DO WHILE ... ENDDO
若对表中全部记录执行某一操作,可以使用 SCAN。随着记录指针的移动,SCAN 循环允许对每条记录执行相同的代码块。
若事先知道循环次数,则可以使用 FOR 循环。例如,已知表中的字段数(字段数可以用函数 FCOUNT( ) 得到),那么就可以用一个 FOR 循环打印表中的全部字段名。
FOR nCnt = 1 TO FCOUNT( ) ? FIELD(nCnt) ENDFOR
想要在某一条件满足时结束循环,可以使用 DO WHILE 语句。使用 DO WHILE 结构,事先可以并不清楚循环的次数,但需要知道什么时候结束循环。
(1)基于条件的循环:DO WHILE命令 格式:DO WHILE <条件表达式>
[<语句序列>]
[LOOP]
[<语句序列>]
[EXIT]
[<语句序列>]
ENDDO
<内存变量>:指定作为计数器的内存变量或数组元素。在执行FOR?ENDFOR语句之前,此内存变量或数组元素不一定存在。
<初始值> TO <终值>:<初始值>是计数器的初始值,而<终值>是计数器的终止值。
[STEP <步长>]:是计数器递增或递减的步长。如果<步长>是负值,则计数器递减;如果省略STEP子句,计数器每次递增1。
<语句序列>:指定要执行的VFP命令,它可以包含任意数量的命令。 [EXIT]:将控制权交给紧接在ENDFOR后面的命令。可以在FOR与ENDFOR之间的任何地方放置EXIT。
[LOOP]:将控制权直接交给FOR子句,不再执行LOOP与ENDFOR之间的语句。计数器正常递增或递减,就像执行到ENDFOR子句一样。可以在FOR与ENDFOR之间的任何地方放置LOOP。
说明:
可以用内存变量或数组元素作为计数器,指定FOR?ENDFOR循环中VFP命令的执行次数。在遇到ENDFOR或NEXT之前,始终执行FOR后面的VFP命令。执行过程中,每循环一次,计数器都会产生一次计数,计数增量由<步长>值控制,然后把计数器的值与<终值>进行比较,决定是否进行下一次循环。
【例5-9】求1到100中偶数的和 AA=0
FOR II=2 TO 100 STEP 2
AA=AA+II
ENDFOR ? AA
初始条件 终止条件 改变循环变量
step 步长0.5
For N=0.1 to 10 <语句组1> Loop <语句组2> Exit
endfor
clear k=0
for i=1 to 6 if i=5
loop
endif
k=k+1
endfor ?k retu clea s=1
for n=1 to 9 s=2*(s+1) endfo ?s retu
clea &&ASCII字母表 for i=2 to 255 ??i,chr(I) if I=0 ? endif endfor
(3)基于表的循环命令
格式:SCAN [<范围>] [FOR <条件>] [WHILE <条件>]
[<语句序列>]
[LOOP] [EXIT]
ENDSCAN
参数描述:
[<范围>]:指定对当前表中记录扫描的范围。只有在范围之内的记录才有可能扫描到。SCAN命令的默认范围为ALL。
[FOR <条件>]:只有条件表达式的计算结果为“真”的记录,才能对其执行命令。包含FOR子句可以筛选出不想扫描的记录。
[WHILE <条件>]:指定一个逻辑表达式作为执行命令的条件,只要逻辑表达式计算为“真”,就对记录执行命令,直到遇到使表达式不为“真”的记录为止。
[<语句序列>]:指定要执行的VFP命令集。
[LOOP]:把控制权直接交给SCAN子句。LOOP子句可以放在SCAN和ENDSCAN之间的任何地方。
[EXIT]:把控制权力从SCAN?ENDSCAN循环语句交给ENDSCAN下面的命令。EXIT子句可以放在SCAN和ENDSCAN之间的任何地方。
ENDSCAN:标志SCAN过程的结束。
说明:SCAN命令自动将记录指针移到下一条满足条件的记录,并执行相应的命令块。
【例5-10】逐条显示STUDENT表中男生的情况。 USE STUDENT
SCAN FOR 性别=”男”
DISP WAIT
ENDSCAN USE
use 基本表
acce \输入要查找的姓名\scan for <查询条件> disp <语句组1> [ Loop ]
<语句组2> [ Exit ] <语句组3> endscan clear use 基本表 *input \输入要查找的出生日期,分数\acce \请输入姓名 \scan for 姓名=xm
display fields 姓名,出生日期
endscan use
set talk on return
三种循环命令比较
Do while /enddo用于不确定的循环,可用于数值变量和记录查找; Scan /endscan 只用于记录查找;
For/endfor用于确定的循环,用于数值变量;
多重循环
For N=1 to 10 aa cc endfor CLEAR Text
For m=1 to 100 bb endfor
99[文本信息]
Endtext ?
for i=1 to 9
for j=1 to i
??str(j,1),\
endfor ?
endfor cancel
*阿基米德和国王下棋,阿基米德胜利,国王许诺奖励。阿基米德要求64格棋盘装满,第一格装1粒,第二格装2粒,
*第三格装4粒,第四格装8粒,。。。棋盘装满。现50000粒米重1千克,一火车厢装60吨,1秒发出一列火车,共要多少年运完?
clea s=0
for n=1 to 64
s=s+2^(n-1)
endfo ?s
nian=s/50000/1000/60/365/24/60/60 ?nian Retu
Clear &&换零钱 for x=1 to 100
for y=1 to 20
for z=1 to 10
if x+20*y+10*z=100
?x,y,z
endif
endfor
endfor
endfor return
*30人吃饭男人用3元,妇女用2元,小孩用1元,用50元,问各多少人 SET TALK OFF CLEA
FOR X=1 TO 17 ? ENDFOR RETU
**36个人搬砖,一次36块,男人一人搬走4块,女人一人搬走3块,小孩两人搬走1块
*问男,女,小孩各多少人? clear for x=1 to 9
for y=1 to 12
for z=1 to 36
if 4*x+3*y+z/2=36 and x+y+z=36
?x,y,z
FOR Y=1 TO 25
FOR Z=1 TO 50
IF 3*X+2*Y+Z=50 AND X+Y+Z=30
??\男\女\小孩\
ENDIF
ENDFOR
ENDFOR
endif
endfor
endfor
endfor return
*用100元买100只鸡,公鸡5元,母鸡3元,小鸡1元买3只 SET TALK OFF CLEA
FOR X= 1 TO 20
FOR Y= 1 TO 33
FOR Z=1 TO 100
IF 5*X+3*Y+Z/3=100 AND X+Y+Z=100
??\公鸡\母鸡\小鸡\
ENDIF
ENDFOR
ENDFOR ?
ENDFOR RETU
*猴子吃枣;一堆枣,一群猴子,第一天吃了一半,不过瘾,又吃了一个, *第二天吃了剩下的一半,不过瘾,又吃了一个,到第十天一看只有一个了。问有多少枣?
clea s=1
for n=1 to 9 s=2*(s+1) endfo ?s
?\
m=10
do while m>=1 ?m,s,s/2+1 if s>1
s=s/2-1 ??s
endif m=m-1 enddo retu N=1
初始条件 <终止条件>
初始条件 <终止条件>
Do while n<=100
m=1
Do while m<=100
IF 5*X+3*Y+Z/3=100 AND X+Y+Z=100
??\公鸡\母鸡\小鸡\
ENDIF
改变循环变量
m=m+1 enddo
N=n+1 enddo
改变循环变量
SET TALK OFF clea r=1 c=10
DO WHILE R<=4 S=1
do while s<=2*r-1
@r,c say \
c=c+1 s=s+1
enddo
c=10-r r=r+1 enddo retu
2过程文件的建立及重要性C Visual FoxPro 的过程如下所示: PROCEDURE myproc
*本行是注释,但也可为可执行代码。 ENDPROC
习惯上,过程是为完成某个操作而编写的代码,函数用来计算并返回一个值。在 Visual FoxPro 中,这二者区别不大。
子程序与过程的区别
相同点:都可以被主程序或上级程序调用。DO < >
不同点:子程序以.prg文件形式存在,过程和主程序一起存放,放在主程序后面,以proc 开头标记。
FUNCTION myfunc
* 本行为注释,但也可作为可执行代码 ENDFUNC
可以将过程和函数保存在单独的程序文件中,也可放在一般程序的结尾。不能把可执行的主程序代码放在过程或函数之后。
若将过程或函数放在单独的程序文件中,可以在应用程序中使用 SET PROCEDURE TO 命令访问它们。例如,保存过程或函数的文件名为 FUNPROC.PRG,可在“命令”窗口中使用下面的命令调用它们: SET PROCEDURE TO funproc.prg 调用过程或函数
在程序中有两种调用过程或函数的方式:
使用 DO 命令,例如: ? DO myproc
?
- 或者 -
在函数名后加上一对小括号,例如: ? myfunc( )
?
如果向过程或函数发送值或接收它们的返回值,则两种方式都可以加以扩展。 向过程或函数发送值
若要向过程或函数传递值,可以使用参数。例如,下面的过程接收一个参数: PROCEDURE myproc( cString ) * 下行显示一条信息
MESSAGEBOX (\ENDPROC
注释 在过程或函数定义行的括号中包含参数,表明该参数的作用域仅为该过程或函数,例如 PROCEDURE myproc (cString)。也可以使用 LPARAMETERS,让函数或过程来接收局部作用域的参数。
在函数中,参数以同样方式工作。要向函数或过程传递参数值,可以使用字符串或包含字符串的变量,如下表所示。
可以向过程或函数传递多个参数,参数之间用逗号分开。例如,下面的过程有三个参数:日期、字符串和数字。
PROCEDURE myproc( dDate, cString, nTimesToPrint ) FOR nCnt = 1 to nTimesToPrint
? DTOC(dDate) + \ ENDFOR ENDPROC
下面的代码将调用这个过程:
DO myproc WITH DATE(), \
过程的定义 Proc <过程名> <语句序列> Endproc
正在阅读:
Visual - FoxPro第7章学案 程序设计07-06
毕业论文35KV变电站设计04-20
好资料VB与PLC通讯资料集11-17
建筑面积案例及习题 - 图文03-29
汉语规范化问题研究08-14
钢筋下料06-22
《建筑工程方案设计招标投标管理办法》63号所有附件05-11
临床护理论文写作范文03-08
铁路工务大修车间施工副主任安全大反思材料07-10
朱自清的散文说梦03-30
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 程序设计
- Visual
- FoxPro
- 森林防火宣传资料
- 从业资格《会计基础》考点:财产清查种类每日一练(2014.1.9)
- 一注知识点--建筑设计知识
- 18秋川农《行政法与行政诉讼法(本科)》18年12月作业考核
- mcgs课设论文
- 2015环境文化节策划1.20(2) - 图文
- 中国社会科学院中华人民共和国国史系中共党史专业李正华、宋月红
- 教科版四年级科学下册第一单元练习题(含参考答案)
- 新人教版二年级下册数学第二单元《表内除法(一)》教材分析及教案
- 2010年企业所得税汇算清缴前的纳税风险控制--纳税审核、账务调整
- 瑞安市方圆泡沫塑料厂年产3500吨聚氨酯软泡迁建项目环境影响报告
- 第二章 化学反应的一般原理习题
- 人力资源管理职业生涯规划书
- 执业医师注册表大纲2012最新版
- 2005年广东省中学生生物竞赛试卷及答案
- 单片机实验指导书
- 2017-2022年中国海上巡逻艇行业市场发展预测与投资咨询报告
- 四年级三位数乘二位数竖式计算
- 2016-2021年防水接头市场前景预测及投资规划分析报告(目录)
- 2018年龙岩市初中质检化学参考答案