VisualFoxPro第7章学案 程序设计Word文档格式.docx
《VisualFoxPro第7章学案 程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《VisualFoxPro第7章学案 程序设计Word文档格式.docx(55页珍藏版)》请在冰点文库上搜索。
在“命令”窗口中您可以:
∙在按ENTER键执行命令之前,按ESC键删除文本。
∙将光标移到以前命令行的任意位置按ENTER键重新执行此命令。
∙选择要重新处理的代码块,然后按ENTER键。
∙若要分割很长的命令,可以在所需位置的空格后接分号,然后按ENTER键。
∙可在“命令”窗口内或向其他编辑窗口中移动文本,选择需要的文本,并将其拖动到需要的位置。
可在“命令”窗口内或向其他编辑窗口中复制文本,而不用使用“编辑”菜单的命令。
选择需要的文本,按住CTRL键,将其拖动到需要的位置。
可在“命令”窗口中运行多行代码
1.选择代码行。
2.按ENTER或在快捷菜单中选择“运行所选区域”。
因为“命令”窗口是一个编辑窗口,所以在编辑命令时可以使用VisualFoxPro提供的编辑工具。
在“命令”窗口中可以编辑、插入、删除、剪切、复制和粘贴正文。
在“命令”窗口中执行命令的优点是:
能够立即执行被键入的命令,不需要将其保存为文件并用程序方式执行。
创建程序
VisualFoxPro程序是包含一系列命令的文本文件。
在VisualFoxPro中,可以通过以下途径创建程序:
若要创建程序
1.在“项目管理器”中,选定“代码”选项卡中的“程序”项。
2.选择“新建”命令。
在“文件”菜单中选择“新建”命令。
在“新建”对话框中选择“程序”。
选择“新建文件”按钮。
-或者-在“命令”窗口中,键入:
MODIFYCOMMAND
VisualFoxPro打开了一个称为“程序1”的新窗口,这时就可以键入应用程序了。
若要创建新程序
1.在“命令”窗口中键入如下命令:
2.MODIFYCOMMANDnumonly
3.在打开的窗口上键入如下代码:
FORnCnt=1TO14
?
SUBSTR(cTest,nCnt,1)
ENDFOR
创建程序之后便可运行。
修改程序
程序保存后可以修改。
首先,按以下方式打开想要修改的程序:
若要打开程序
∙若程序包含在一项目中,则在“项目管理器”中选定它并选择“修改”命令。
-或者–
在“文件”菜单中选择“打开”命令,这时弹出一个包含文件列表的对话框。
在“文件类型”列表框中选择“程序”,然后在文件列表中选定要修改的程序,按下“确定”按钮。
-或者-
∙在“命令”窗口中按如下方式键入要修改的程序名。
∙MODIFYCOMMANDmyprogrm
∙在“命令”窗口中,键入:
∙MODIFYCOMMAND
然后从文件列表中选择要修改的程序,选择“打开”。
打开文件之后便可进行修改,修改完毕后请注意保存。
保存程序
创建程序后,请注意保存。
若要保存程序
∙从“文件”菜单中选择“保存”命令。
若用户要关闭一个没有保存的程序,则会弹出相应对话框,提示用户是保存还是放弃已做的修改。
若用户保存了一个由“项目管理器”创建的程序则该程序被加入项目中。
若用户保存一个尚未命名的程序,则会打开“另存为...”对话框,这样提示用户可以在其中为程序指定程序名。
程序保存后,用户可以运行或修改它。
运行程序
程序创建之后便可运行。
若要运行程序
∙若程序包含在一个项目中,则在“项目管理器”中选定它并选择“运行”命令。
∙在“程序”菜单中选择“运行”菜单项。
在程序列表中,选择想要运行的程序,单击“运行”按钮。
查找程序文件,出现运行结果。
∙在“命令”窗口中,按如下方式键入DO以及要运行的程序名:
∙DOmyprogram
clear
p=3.1414926
inpu"
请输入圆的半径:
"
tor
s=p*r^2
?
圆的面积为s="
s
Retu
1键盘输入命令
格式:
INPUT[<
字符型提示信息>
]to<
内存变量>
功能:
通过键盘输入,将字符型,数值型,逻辑型,日期型表达式的值赋给指定的内存变量。
说明:
[<
提示信息>
]:
提示信息,提示用户输入数据。
内存变量名>
指定一个内存变量或数组元素,存储从键盘输入的数据。
如果指定的内存变量或数组元素不存在,VFP将自动创建该内存变量或数组。
<
的数据类型取决于输入数据的类型。
可以为数字型、字符型、日期型和逻辑型。
例子:
试编程完成下列功能。
从键盘上随机输入一个正数,以此数为半径,求圆面积和球体积,并输出结果。
程序如下:
*L504.PRG
CLEAR
CTALK=SET("
TALK"
)
SETTALKOFF
INPUT"
半径="
TOR
S=PI()*R*R
V=4/3*PI()*R**3
"
圆面积="
S
球体积="
V
SETTALKON
RETURN
use基本表
input"
请输入姓名:
toxm
locafor姓名=xm
disp
cont
cancel
(2)字符接收语句
ACCEPT[<
]TO<
将从键盘上接收的字符串数据存入指定的内存变量中。
提供此命令是为了向后兼容,在VFP中可以用文本框控制命令代替。
指定提示信息字符串。
指定存储字符数据的内存变量或数组元素。
如果没有定义此内存变量,ACCEPT将自动创建。
如果没有输入数据就按Enter键,内存变量或数组元素则为空字符串。
在VFP6的可视编程中可用文本框代替ACCEPT命令。
该命令允许直接向内存变量或数组元素输入字符数据,输入时不需要用字符串的定界符。
执行此语句时,先在屏幕上显示<
,光标紧随其后,然后暂停程序运行,等待用户从键盘上输入信息。
输入的信息可以是任何可显示的ASCII码字符串,并以回车键结束。
系统将此字符串信息存入指定的内存变量中,然后,继续运行暂停的程序。
编程完成下述功能:
从键盘随机输入某个表的文件名,要求打开并显示此表的内容。
在命令窗口输入下列命令:
ACCEPT"
(3)输入一个字符语句
WAIT[<
][TO<
]
暂停正在运行的程序,直到输入一个字符为止。
此语句与ACCEPT语句的功能部分相似。
若选择TO<
子句,则将输入的单个字符存入指定的内存变量。
若直接输入回车键,则内存变量中存入空字符串。
内存变量的类型为字符型。
若选择<
子句,执行此命令时,屏幕上将显示提示信息,否则,屏幕上将显示“按任意键继续…”
WAIT语句主要用于下列两种情况。
■暂停程序的运行,以便观察程序的运行情况,检查程序运行的中间结果。
■根据实际情况输入某个字符,以控制程序的执行流程。
比如,在某应用程序的“Y/N”选择中,常用此命令暂停程序的执行,等待用户回答“Y”或“N”,由于这时只需输入单个字符,也不用按回车键,操作简便,响应迅速。
INPUT语句与ACCEPT语句的区别是:
ACCEPT命令只能接收字符串,而INPUT语句可以接收任意类型的VFP表达式;
如果输入的是字符串,ACCEPT语句不要使用字符型定界符,而INPUT语句必须用定界符括起来。
输出命令
1?
命令
?
表达式1>
],[<
表达式2>
输出一个或多个表达式的值,输出时先回车换车,再输出
132
2?
在当前光标处输出表达式的值
记录输出
格式:
Display[范围][fields<
字段列表>
]
settalkoff
clea
use数学
shangxian"
tosx
xiaxian"
toxx
*browfor平时>
=xx.and.平时<
=sxfield学号,姓名,平时
Displayfield学号,姓名,平时
use
settalkon
retu
l.注释命令非执行语句,用于提高程序的可读性。
NOTE、*(行首注释)、&
&
(行尾注释)
2.环境设置命令set命令。
3.清除命令:
CLEAR(清屏)
CLEARALL(关闭所有文件、清除所有内存变量)
4.关闭文件命令:
CLOAEALL(关闭所有文件)
CLOSE<
文件类型>
(关闭指定类型的文件)
5.运行中断和结束命令
⏹Cancel终止程序运行,返回命令窗口。
⏹RETURN结束当前程序的执行,返回到调用它的上级程序。
⏹QUIT关闭所有文件,退出VFP系统,返回操作系统环境。
Settalkon/off
Setprinteron|off
Setdevicetoscreen|toprinter
Setdeleteon/off
(1)、中止程序运行
■在程序运行过程中,按Esc键可以中止程序的运行,系统会显示警告对话框让用户选择:
【取消】中止程序运行,这是缺省选择;
【挂起】暂停程序运行,返回命令窗口。
【忽略】忽略所给的Esc,继续程序的执行。
格式一:
CANCEL
功能:
结束程序的运行,返回命令窗口,同时关闭所有打开的文件。
(2)、清屏命令
清除屏幕,光标回到屏幕左上角
3重试命令
格式retry
4返回调用return
Return[<
表达式>
|<
tomaster>
过程名>
功能:
终止程序,返回被调用处,<
是自定义函数的返回值,<
将程序返回到最高层命令文件,<
返回到指定的过程.
5注释命令
格式一:
NOTE/*<
注释字符串>
格式二:
<
说明:
上述命令不作任何操作,只是注释标记,用于说明程序或命令的功能等。
注释内容不需要用定界符定界,执行时也不显示。
注释信息如果在一行内没有写完,换行时也必须再写注释命令。
NOTE或*是用于整行注释的,因此,它必须写在每一个注释行的开头;
而&
命令是用于注释一行的部分内容的,因此,它可以写在行中(命令的尾部、注释信息的头部),这是程序中唯一可以在一个逻辑行写二个语句的命令。
NOTE或*是用于整行注,须写在每一个注释行的开头
命令是用于注释一行的部分
USESTUDENT&
打开STUDENT表不影响执行
NoteUSESTUDENT命令不执行
6text….endtext
Text
[文本信息]
Endtext
在屏幕上显示text….endtext之间的文本信息.
程序设计的过程
程序:
为完成某一特定任务的一系列指令(语句)的集合.程序设计就是编写程序的过程.
程序设计的基本步骤包括:
∙对问题进行说明。
∙分解问题。
∙编制各模块。
∙测试并完善各模块。
∙组装全部模块。
∙整体测试。
掌握了一些基本概念后,程序设计就变成了一个不断重复的过程。
您需要多次重复某些步骤,并在这个过程中不断对代码进行优化。
从编写第一行程序开始,便不断进行测试,完成每个“试验—查错”的过程。
对语言越熟悉,则编程速度越快,而且更多的初步测试工作将在头脑中进行。
开始程序设计之前,请注意以下几个问题:
∙在解决问题之前,必须把问题说明清楚,否则会不断进行修改,丢弃已编好的代码并从头再来,而且最终也不可能得到满意的结果。
∙将问题分解成可单独处理的几个步骤,而不是一下子解决全部问题。
∙在开发过程中不断测试和调试已编好的代码。
通过测试检查代码是否能实现所需的功能;
调试是找出代码在哪里出错并纠正这些错误。
∙精炼数据和数据存储方式,便于程序对其进行处理。
这需要正确构造表格的结构。
本节以下部分将详细介绍建立一个小型VisualFoxPro程序的各个步骤。
对问题进行说明
开始解决问题以前,需要将其说明清楚。
有时调整问题的说明方式会有助于问题的解决。
假设从不同的数据源获得一批数据,其中大部分是数值型数据,但有些数据,除包含数字外,也夹杂着一些虚线和空格。
现在需要从字段中清除这些空格和虚线,并将所得到的数值型数据加以保存。
可以按如下方式说明这个程序要达到的目标,而不是简单地立即着手从原始数据中除去空格和虚线。
目标用新值替换字段中的原始值,新值包含原始值中除空格和虚线外的所有内容。
这种说明方式的优点在于可以避免在处理可变长度字符串时遇到问题。
分解问题
因为最终是以操作、命令和函数的方式将具体的指令提供给VisualFoxPro,所以需要将问题分解为多个独立的步骤。
在问题中,最容易分离出来的任务是在字符串中逐个扫描字符,只有将单个字符分离出来才能决定是否应该保存它。
在扫描字符的时候,将检查它是否为虚线或空格。
到了这一步也许您想要更详细地说明这个问题,括号之后的数据应该如何提取,货币符号、逗号和句号该如何消除等一系列问题将出现在脑海中。
代码越通用,为将来节省的工作量就越多,问题就在于如何做到事半功倍。
下面给出了一个比从前适用范围更广的问题说明方式。
精炼后的目标用原始数据中的数值型字符更新字段值。
这便是在字符的层次上重新说明问题。
如果字符是数字则保留,否则将指针移向下一个字符。
当用原始字符串中的数字重新构成一个只含有数字元素的新串时,将这个新串替换掉原来的字符串。
如此循环,直到将所有记录中的数据全部更新。
概括起来,全部问题可以分解成以下一些模块:
1.逐个检查字符。
2.判断该字符是否为数字。
3.若是数字,则将其复制到新串。
4.检查完字符串中的全部字符后,用只含数字的新串替换原串。
5.重复上述步骤,直到表中全部记录都被更新。
编制模块
明确了要达到的目标以后,便可以开始使用VisualFoxPro的命令、函数和操作符来构造各模块。
因为命令和函数是用来处理数据的,所以需要一些数据来测试其功能。
这些用于测试的数据应与实际数据尽量相近。
例如,在“命令”窗口中键入如下命令,将一个测试字符串赋值给变量:
cTest="
123-456-7890"
逐个检查字符
首先,需要在字符串中检查单个字符。
有关可用于操作字符串的函数列表,请参阅“帮助”中的“字符函数”。
您将发现三个用以返回字符串特定部分的函数:
LEFT()、RIGHT()和SUBSTR(),其中SUBSTR()可以返回字符串中的任意子串。
SUBSTR()需要三个参数:
字符串、起始字符的位置和需返回的字符数。
若要了解SUBSTR()是否可完成所需工作,请在“命令”窗口中键入以下命令:
SUBSTR(cTest,1,1)
SUBSTR(cTest,3,1)
SUBSTR(cTest,8,1)
输出
1
3
-
用于测试的字符串中的第一个、第三个和第八个字符将显示在VisualFoxPro的主窗口中。
可以使用循环结构多次重复执行相同操作。
因为用于测试的字符串有固定的字符数(14),所以能够使用FOR循环语句。
每执行一遍,FOR循环的计数器增加1,因此可在SUBSTR()函数中使用该计数器。
因为在“命令”窗口中不能测试循环结构,所以我们编写一个示例程序。
4.FORnCnt=1TO14
5.?
6.ENDFOR
1.在打开的程序窗口中,按下CTRL+E键。
2.若“保存”对话框出现,选择“是”按钮。
运行此程序时,各个结果将在VisualFoxPro主窗口中分行显示。
(1)VFP的程序结构可以分为三种:
顺序结构、分支结构、循环结构。
顺序结构:
执行程序顺序与书写顺序一致;
分支结构:
执行程序顺序是根据条件是否成立来选择一条路径;
循环结构:
。
执行程序顺序是条件成立时,反复执行某一组语句.
1.顺序结构:
按程序中语句的书写顺序逐条执行。
2.分支结构(选择结构):
根据逻辑条件的结果执行不同的命令序列。
(1)双分支结构:
IF...ELSE...ENDIF
(2)多分支结构:
DOCASE...ENDCASE
3.循环结构:
按规定的条件重复执行一段命令序列。
(1)DOWHILE...ENDDO
(2)FOR...ENDFOR
(3)SCAN…ENDSCAN对数据表的循环操作。
分支结构或循环结构可以嵌套,但分支与分支之间或循环与循环之间不能交叉。
(2)结构化程序的特点
每一个基本结构只有一个唯一的入口;
每一个基本结构只有一个唯一的出口;
无死语句(永远执行不到)无死循环(永远执行不完)
程序设计的方法:
模块化设计,自顶向下设计,逐步细化设计的方法.
1、顺序结构程序设计
顺序结构程序设计是结构化程序设计的基础,即是按完成任务所需步骤的先后顺序逐条命令的编写。
s=p*r^2
圆的面积为s="
s
browfor平时>
dowhile.T.
acce"
输入要查找的姓名"
locatefor姓名=xm
dowhile.not.eof()
display
cont
enddo
wait"
是否继续"
toyn
ifupper(yn)<
>
Y"
exit
endif
enddo
use
return
2、分支结构程序设计
分支结构就是根据条件的计算结果执行不同的操作。
条件分支结构逻辑流程图如图5-6所示,VFP6中有两条命令实现条件分支:
条件分支根据条件的测试结果执行不同的操作。
VisualFoxPro中有两条命令实现条件分支:
∙IF...ELSE...ENDIF
∙DOCASE...ENDCASE
只有逻辑条件值为“真”(.T.)时,才会执行在初始语句和ENDIF或ENDCASE语句之间的程序。
(1)条件分支
IF<
条件表达式>
<
语句序列1>
[ELSE
语句序列2>
ENDIF
参数描述:
:
指定要计算的逻辑表达式。
如果<
的值为“真”,则执行IF语句之后的<
;
的值为“假”,而且包含ELSE语句和<
,则执行<
的值为“假”,而且不包含ELSE语句和<
,则程序忽略IF语句和ENDIF语句之间的所有语句,程序从ENDIF语句后的第一条命令开始继续往下执行其它程序。
一个IF…ENDIF语句块中可以嵌套另一个IF…ENDIF语句块。
【例5-5】假设某单位有很多员工,并且要给月工资高于或等于1000元的员工增加5%的工资,给月工资低于1000元的员工增加10%的工资。
下面的示例程序将完成这一任务。
此示例程序假定已在当前工作区打开了员工工资表,表中有一个名为“月工资”的数值型字段。
SCAN
IF月工资>
=1000
REPLACE月工资WITH月工资*1.05
ELSE
REPLACE月工资WITH月工资*1.1
ENDIF
ENDSCAN
SETTALKon