第二章visual foxpro程序设计基础
作文:造句——组词——识字——拼音
程序:语句——语句格式,表达式——常量,变量,函数第一节常量与变量
一、常量
(一)概念:在程序中不变的量
(二)掌握点:
A.组成 B.定界符 C.特别注意
(三)分类
1.数值型(N)
A.0-9, 小数点, 正负号
123456 -99 -88.55
B.无
C.科学计数法的描述形式
例:乘方28=2**8
6*108=6e8
2.货币型(Y)
A. 0-9,小数点
B. $
C.自动保留4位小数,自动四舍五入3.字符型(C)
A.字母,符号,汉字
B.‘’“”[ ]
C.定界符要配对使用
引入VFP的命令
注意:命令在命令窗口输入,输入结束以回车结束
(1)退出VFP:quit
(2)清理主屏幕:clear
(3)输出命令
?:隔行输出
??:同行输出
特别注意:在VFP中用到的符号全是英文半角
4.日期型(D)
A.0-9的数字
B.{^年—月—日} ^ 脱字符
C.系统默认格式为:月/日/年
关于日期的几个命令
Set strictdate to 0|1|2 (严格日期格式与传统日期格式) Set date to YMD|MDY|DMY
Set mark to [<”日期分隔符”>] (日期分隔符要加引号)Set century on|off|to[<世纪值>[rollover <年份参照值>]]
关于命令的总结:
< >必选[ ]可选可不选|必选其一
5.日期时间型(T)
A.0-9 的数字
B.{^年—月—日时:分:秒}
C.12制/24制(AM PM)
6.逻辑型(L)
A..T.(true)------逻辑真(对的) .F.(flase)------逻辑假(错的)B.. .
C.定界符
二、变量
(一)概念:程序中变化的量(存储常量的量)
(二)分类:字段变量,内存变量,数组
(三)具体讲解(理解)
2.内存变量
A.定义:临时存放在内存中的东西,并且东西的内容是可变的。命名规则:
由字母、数字、下划线组成,且以字母或下划线开头
C.赋值:
格式1:内存变量名=表达式x=9 x=x+100
格式2:store表达式to 内存变量名store 100 to y
注意:区别(格式2可以同时对多个变量赋值)
D.显示
格式1:list memory|display memory
格式2:list memory like 通配符
补充:通配符(*表示0个或者任意多个字符?表示任意一个字符)E:清除
格式1:clear memory
格式2:release 内存变量名表
格式3:release all [like <通配符>|except<通配符>]
3.数组
A.概念:一连串的内存变量
B.分类:一维数组和二维数组
C.定义一维数组的格式:declare 数组名(N)dimension数组名(N)X(5)
D.定义二维数组的格式:declare 数组名(n,m)dimension数组名(n,m)
Y(10,3) Y()
注意:刚定义好的数组默认值为.f.
E.表中数据与数组数据的传递
格式1:表中数据->数组scatter to 数组名
格式2:数组->表中数据gather from 数组名
第二节函数
一、定义:系统提供的实现特定功能的小程序
二、掌握要点
A.函数功能
B.参数类型
C.函数返回值类型
三、分类
数值函数;字符函数;日期时间函数;类型转换函数;测试函数四、具体讲解
(一)数值函数——数值型函数
1.求绝对值
ABS()
SIGN()符号函数(1,-1,0)
2.求平方根
SQRT()(非负数)sqrt(9)
3.求整数函数(取整)
INT()(注意:不考虑小数的大小)
CEILING( ) 返回大于或等于指定表达式的最小整数
FLOOR()返回小于或等于指定数值表达式的最大整数
Store 5.8 to x
?INT(x),int(-x),ceiling(x),ceiling(-x),floor(x),floor(-x)
四舍五入
4.ROUND(数值1,数值2)
数值1。操作对象数值2 四舍五入的位置(正数表示小数
位,负数表示整数位)
Round(123.456,-3)
5.求余数函数
MOD(数值1(被除数),数值2(除数))
Mod(15,7), mod(15,-7)
(余数的正负号与除数相同,如果被除数与除数同号,那么函数值即为两数相除的余数;如果被除数与除数异号,则函数值为两数相除的余数再加上除数的值。)
6.圆周率函数
PI()返回∏的值,该函数没有自变量
7.求最大值和最小值函数
MAX与MIN
MAX(数值表达式1,数值表达式2,。。。)
Max(11,15,-99,105,250,5)
自变量表达式的类型可以是数值型、字符型、货币型、双精度型、浮点型、日期型和日期时间型,但所有表达式的类型必须一致(例见P62)
(二)字符函数
1.求字符串的长度
Len() 注意:一个字母、数字、符号占一个字节,一个汉字占二个字节
A=”中文visual foxpro6.0”len(a)=20
2.大小写转换函数
LOWER(<字符表达式>)大写转小写
UPPER(<字符表达式>)小写转大写
3.空格字符串生成函数
SPACE(<数值表达式>)
Space(50)—在前面生成50个空格
4.删除前后空格函数
Trim(尾部空格)ltrim(前导空格)alltrim(前导和尾部)A=”hello ”alltrim(a)=hello
Store sapce(5)+”test”+space(8) to ss
?trim(ss)+ltrim(ss)+alltrim(ss)
?len(ss),len(trim(ss)),len(ltrim(ss)),len(alltrim(ss))
5.取子串函数
格式1 left(字符串,数字) 从指定字符串的左边取指定长度的字符串
格式2 right(字符串,数字) 从指定字符串的右边取指定长度的字符串
格式3 substr(字符串,指定位置,数字)
从指定字符串的指定位置取指定长度的字符串
B=”shanghai is a big city”left(b,6)=shangh
注意:如果省略了数字项,则取到最后一个字符
6.计算子串出现次数函数
OCCRUS(<字符表达式1>,<字符表达式2>)
返回第一个字符串在第二个字符串中出现的次数,函数值为数值型。若第一个字符串不是第二个字符串的子串,函数值为0。
Store “abracadabra”to s
?occurs(‘a’,s),occurs(‘b’,s),occurs(‘c’,s),occurs(‘e’,s) 7.求子串位置函数
(AT <字符表达式1>,<字符表达式2>[,<数值表达式>])
ATC(<字符表达式1>,<字符表达式2>[,<数值表达式>])
AT()的函数值为数值型。如果<字符表达式1>是<字符表达式2>的子串,则返回<字符表达式1>值的首字符在<字符表达式2>值中的位置;若不是子串,则返回0。ATC()不区分字母大小写。
<数值表达式1>用于表明要在<字符表达式2>值中搜索<字符表达式1>值的第几次出现,其默认值是1。
Store “this is Visual FoxPro”to x
?at(“fox”,x),atc(“fox”,x),at(“is”,x,3),at(“xo”,x)
8.子串替换函数
STUFF(<字符表达式1>,<起始位置>,<长度>,<字符表达式2>)用<字符表达式2>值替换<字符表达式1>中由<起始位置>和<长
度>指明的一个子串。替换和被替换的字符不一定相等。如果<长度>值是0,则相当于在<字符表达式1>中由<起始位置>指定的字符前插入<字符表达式2>。如果<字符表达式2>值是空串,则相当于在<字符表达式1>中删去由<起始位置>和<长度>指明的子串。
Store ‘GOOD BYE’TO S1
Store ‘MORNING’TO S2
?stuff(s1,6,3,s2),stuff(s1,1,4,s2)
9.字符替换函数
CHRTRAN(<字符表达式1>,<字符表达式2>,<字符表达式3>)
该函数的自变量是三个字符表达式。当第一个字符串中的一个或多个相同字符与第二个字符串中的某个字符相匹配时,就用第三个字符串中的对应字符(与第二个字符串中的那个字符具有相同位置)替换这些字符。如果第三个字符串包含的字符个数少于第二个字符串包含的字符个数,导致没有对应字符,那么第一个字符串中相匹配的各字符将被删除。如果第三个字符串包含的字符个数多于第二个字符串包含的字符个数,多余字符被忽略。
X1=CHRTRAN(“ABACAD”,”ACD”,”X12”
Y1=CHRTRAN(“计算机ABC”,”计算机”,”电脑”)
Z1=CHRTRAN(“大家好!”,”大家”,”您”)
?X1,Y1,Z1
10.字符串匹配函数
Like(<字符表达式1>,<字符表达式2>)
比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真(.T.),否则返回逻辑假(.F.)
<字符表达式1> 中可以包含通配符*和?。*可与任何数目的字符相匹配,?可以与任何单个字符相匹配。
Store “abc”to x
Store “abcd”to y
?like(“ab*”,x),like(“ab*”,y),like(x,y),like(“?b?”,x),like(“Abc”,x) 注意:字符串1位置出现通配符
(三)日期时间函数
1.系统日期date() 返回值:日期型
2.系统时间time() (24小时制) 返回值:字符型
3.系统日期时间datetime() 返回值:日期时间型
4.提取日期的年份月份和日期
Year mouth day(date()) 返回值:数值型
5.时、分和秒函数
HUOR()MINUTE()SEC()返回值:数值型
(四)数据类型转换函数
1.数值型转换字符型str(-123.456,8,2)
注意:如果没有最后第三个数字,就会取整数
例:P66
Store -123.456 to n
? str(n,9,2),str(n,6,2),str(n,3),str(n,6),str(n)
2.字符串转换成数值型val()
注意:转换后小数点后的会自动保留二位小数
3.字符串转换成日期或日期时间CTOD()
“2011-04-03”
4.日期或日期时间转换成字符串DTOC()
5.宏替换函数&
&<字符型变量>[.]
替换出字符型变量的内容,函数值是变量中的字符串。如果该函数与其后的字符无明确分界,则要用“.”作函数结束标识。宏替换可以嵌套使用。
(五)测试函数
条件测试函数
IIF(<逻辑表达式>,<表达式1>,<表达式2>)
X=100
Y=300
?iff(x>100,x-50,x+50),iff(y>100,y-50,y+50)
第三节表达式
一、定义
由常量、变量、函数加上运算符组成的式子
二、分类
算术、字符、日期、关系、逻辑
三、表达式的掌握点
A.运算符及其功能
B.运算符的优先级
四、具体讲解
(一)算术表达式
A.+ - * / %(取余数)**(乘方)
100%13=9
%:异号取余时,余数与除数符号相同时,余数有效(被除数=除数*商+除数)
余数与除数符号不同时,余数为余数加除数
Mod() 余数函数
**:2**3==23
B.( )>**>* / %>+ -
(二)字符表达达
A.+ -
+:两个字符串首尾相连(vfp -vb)
-:先把前字符串尾部的空格移到整个字符串的后面,然后首尾相连B.优先级相同
(三)日期表达式
A.+ -
格式1:日期+数字若干天后的日期
格式2:日期-数字若干天前的日期
格式3:日期时间+数字若干秒后的时期时间(数字与秒数相加)
格式4:日期时间-数字若干秒前的日期时间(数字与秒数相减)格式5:日期-日期两个日期相差的天数
格式6:日期时间-时期时间两个日期时间相差的秒数
注意:两个日期不能相加
B.优先级相同
(四)关系表达式
A.> >= < <= !=(# <>) =(字符串设置比较) ==(字符串精确比较) $(字串测试)
特别讲解:
“=”:与设置set exact on|off命令有关
On:首先在较短字符串后补充空格,使之长度相等,然后一一比较,如果相等,就返回T,否则返回F。
Off:如果右边字符串是左边字符串子串就返回T,否则返回F。
例:set exact on
“ab ”=”abc”.f.
“ab ”=”ab”.t.
Set exact off
“abc”=”abc”.t.
“abc”=”ab”.t.
“acb”=”ab”.f.
(2)”$”:如果左边字符串是右边字符串子串就返回T,否则返回F。
(3)”==”:如果左右两边字符串都相等就返回T,否则返回F。
补充:不同类型大小的规定
A.数值型
B.日期型:越晚的日期超大
C.逻辑型:.T.>.F.
D.字符型:
字母:A
汉字:先把汉字转换成拼音,然后再比较
比较原则:“一局定输赢”(吴>王wu wang)
B.> >= < <= = == !=
(五)逻辑表达式
A.not and or
运算功能:
Not: 取反
And: 两边为真才为真,一边为假即为假
Or: 两边为假才为假,一边为真即为真
B.not>and>or
总结各个表达式间的优先级:算术>字符和日期>关系>逻辑
例1:12>2and”人”>”人民”or .t.<.f.
.t. and .f. or .f.
.f. or .f.
.f.
例2:((10%3=1)and (15%2=0))or “电脑”!=”计算机”
.t. and .f. or .t.
.f. or .t.
.t.
第四节程序与程序文件
一、程序文件的操作及输入语句
(一)程序的概念:有多条命令组成的文件
复习:VFP系统的三种操作方式菜单,命令,程序(复杂)(二)程序文件的操作
提示:关于VFP文件的操作
程序、数据库、表、查询、视图、表单、菜单、报表都是文件
前提:建立好默认目录
建立(?程序开始执行,?程序执行中,?程序执行完毕)
保存
打开
运行(程序—>运行—>选择文件—>运行;或者直接点击红色叹号;或在命令窗口输入:do 程序文件名)
关闭
(三)简单的输入输出命令
程序由输入、处理和输出三个过程组成
1.Accept[提示语] to 内存变量
注意:提示语必须加引号,只接受字符型数据
功能:程序暂停运行,等待用户输入,输入结束按回车键把输入内容赋值给内存变量。
例:accept”请输入一个数”to a
Accept”请输入另一个数”to b
?a+b
2.Input[提示语] to 内存变量
注意:接受任何VFP合法数据类型,输入内容时要加定界符
功能:程序暂停运行,等待用户输入,输入结束按回车键把输入内容赋值给内存变量。
3.wait[提示语] windows timeout 秒数
功能:显示内容在屏幕的右上角,显示时间由秒数确定
例:?”考试进行中!”
Wait “考试结束,请交卷!”windows timeout 5
?”考试结束!”
二、程序的基本结构
学习目标:熟练解读程序语言
编写程序有三项:选择;循环;顺序(上到下,前到后)
程序语言—>现实语言(解读程序的过程)
现实语言—>程序语言(编写程序的过程)
重点掌握:语句的执行过程
(一)选择结构
1.单重选择
语法格式:
If <条件>
语句
Endif
执行过程:首先判断条件是否成立,如果为真,执行语句,执行后到endif后的语句;如果为假,不执行语句,直接到endif后的语句例:clear
Input “请输入A:”to a
Input “请输入B:”to b
If a>=b
?”最大值为:”,a
Endif
?”程序执行完毕!”
(a
2.双重选择
语法格式:
If <条件>
语句1
Else
语句2
Endif
例:clear
Input “请输入A:”to a
Input “请输入B:”to b
If a>=b
?”最大值为:”,a
Else
?”最大值为:”,b
Endif
?”程序执行完毕!”
提醒:else 后没有条件
执行过程:首先判断条件是否成立,如果成立,就执行语句1;否则就执行语句2,执行后到endif后的语句。
注意:双重选择有且只能执行一条语句。
铁路托运行李,假设每张车票可按每公斤0.5元托运50公斤以内的行李,如果超过50公斤时,超过的部分每公斤加价0.3元
计算公式如下:
X=0.5×W 当W≤50公斤
X=0.5×50+0.8×(W-50) 当W〉50公斤
INPUT "请输入行李的重量为:" TO W
IF W<=50
X=0.5*W
ELSE
X=0.5*50+0.8*(W-50)
ENDIF
? "行李的重量为"+STR(W,6,2)+"公斤,其运费为:"+STR(X,6,2)+"
元"
3.多重选择
语法格式:
Do case
Case 条件1
语句1
Case 条件2
语句2
……
Case 条件m
语句m
[otherwise 语句m+1]
Endcase
例:clear
Input “请输入你的成绩:”to s
Do case
Case s>90
?”你是一个优秀的学生”
Case s>70
?”你的成绩还可以,继续努力吧!”
Case s>60
?”你的成绩很一般,要加油啊!”
Otherwise
?”书到用时方恨少啊,珍惜时间吧!”
Endcase
?”程序执行完毕!”
(注意:otherwise为可选项!)
执行过程:
依次判断条件是否成立,哪个成立就执行哪个语句,执行后直接到`endcase后的语句。如果没有成立的,就指定otherwise语句,如果没有otherwise语句,就什么也不执行,直接到endcase后的语句
注意:多重选择最多执行一条语句。(>70与>90的关系)
(二)循环结构
循环的理解
1.While 循环
语法格式:
Do while <条件>
循环体
Enddo
例:clear
S=0