970 likes | 1.15k Views
Visual Foxpro 第八章 程序设计基础. 面向过程程序设计 面向对象程序设计. 学习要点:. 8.1 过程化程序设计和面向对象程序设计的基本概念及设计方法; 8.2 过程化程序设计的语言基础,程序设计基本结构; 8.3 可视化程序设计的基本方法、类。. 重点与难点:. 8.1 过程化程序设计和面向对象程序设计的基本概念及设计方法; 8.2 过程化程序设计的语言基础,程序设计基本结构;. 8.1 面向过程程序设计. 8.1.1 程序文件的建立和执行 1 .建立和修改程序文件
E N D
Visual Foxpro 第八章 程序设计基础 面向过程程序设计 面向对象程序设计
学习要点: 8.1 过程化程序设计和面向对象程序设计的基本概念及设计方法; 8.2 过程化程序设计的语言基础,程序设计基本结构; 8.3 可视化程序设计的基本方法、类。
重点与难点: • 8.1 过程化程序设计和面向对象程序设计的基本概念及设计方法; • 8.2 过程化程序设计的语言基础,程序设计基本结构;
8.1 面向过程程序设计 8.1.1 程序文件的建立和执行 1.建立和修改程序文件 • Visual FoxPro程序文件,是一个以(.PRG)为扩展名的文本文件。 • 在Visual FoxPro系统环境下,建立和编辑程序文件主要命令方式和菜单方式。
(1)命令方式 【格式】 MODIFY COMMAND <程序文件名> 【功能】 打开一个编辑器窗口,用于建立或修改程序文件。 【例8-1】用命令方式建立文件P1.PRG。 MODIFY COMMAND P1.PRG
(2)菜单方式 • 用菜单方式的操作步骤: ① 新建文件:“文件”-“新建”。 修改已有的程序文件:“文件” -“打开” 。 ② 在程序编辑窗口逐条输入或修改程序语句。 ③ 输入或修改完成后,在“文件”菜单中选择“保存”或“另存为”命令,保存文件。
2.执行程序文件(1)命令方式 【格式】 DO <程序文件名> 【功能】在命令窗口运行以.PRG为扩展名的程序文件。 【例8-1】运行文件P1.PRG。 DO P1.PRG
(2)菜单方式 • 在Visual FoxPro系统环境下,选择“程序”菜单中的“运行”命令选项,在显示的对话框中确定或输入要执行的程序文件名。
8.1.2 程序中常用的命令 1.交互式输入命令 (1)赋值命令 STORE <表达式> TO <内存变量名表> 或 <内存变量名表>= <表达式> 【格式】 【功能】给内存变量赋值。 【说明】STORE命令可以同时给多个内存变量赋值,而<内存变量>=<表达式>命令只能给一个变量赋值。。
8.1.2 程序中常用的命令 (2)字符串输入命令 【格式】 ACCEPT [<提示信息>] TO <内存变量> 【功能】暂停程序的运行,等待用户从键盘上输入一串字符,存入指定的内存变量中。 【说明】<提示信息>用于提示用户进行操作的信息。从键盘接受的字符串,可以加定界符也可以不加定界符,系统都将其作为字符型数据输入到内存变量中。
8.1.2 程序中常用的命令 (3)单字符输入命令 【格式】 WAIT [<提示信息>][ TO <内存变量>] 【功能】暂停程序的运行,等待用户从键盘上输入单个字符后恢复程序的运行。 【说明】<提示信息>用于提示用户进行操作的信息,TO <内存变量>是可选项,当选用时,键入的单个字符均作为字符型数据赋给<内存变量>。如果只有WAIT 命令,没有选项,则系统默认的提示信息是:PRESS ANY KEY TO CONTINUE…
8.1.2 程序中常用的命令 (4)表达式输入命令 【格式】 INPUT [<提示信息>] TO <内存变量> 【功能】暂停程序的运行,等待用户输入表达式并将其值赋给指定的内存变量。 【说明】<提示信息>用于提示用户进行操作的信息,命令中 <内存变量>的类型决定于输入数据的类型,但不能为M型。如果键入的是表达式,本命令先计算出表达式的值,再将结果赋给<内存变量>;如果键入的是字符常量、逻辑常量和日期常量时应带定界符,既字符常量加引号,逻辑常量左右加圆点,日期常量要用CTOD()函数进行转换。
(5)定位输入命令 【格式】 @<行,列> SAY <提示信息> GET <变量> READ 【功能】在屏幕指定的行列位置上输入数据。 【说明】命令中的各选项说明如下: <行,列>是指屏幕窗口的位置。 SAY <提示信息>给出提示信息。 GET <变量>取得变量的值。其中<变量>可以是字段变量或内存变量,如果是字段变量,应先打开表文件,如果是内存变量,应先赋值。 GET子句必须使用命令READ激活。在带有多个GET子句的命令后,必须遇到READ命令才能编辑GET中的变量。
2.输出命令 (1)非格式输出命令 【格式】 ?<内存变量名表> 或 ??<内存变量名表> 【功能】显示内存变量、常量或表达式的值。 【说明】 ?是在光标所在行的下一行开始显示 ??则是在当前光标位置开始显示。
(2)格式输出命令 【格式】 @ <行,列> SAY <表达式> 【功能】按指定的坐标位置在屏幕上输出表达式的值。 【说明】输出<表达式>的位置由<行,列>指定,<表达式>的内容可以是数值、字符、内存变量和字段变量。
(3)文本输出命令 【格式】 TEXT <文本信息> ENDTEXT 【功能】将TEXT和ENDTEXT之间的文本信息照原样输出。 【说明】TEXT与ENDTEXT在程序中必须配对。
3.其他程序运行命令 (1)清屏命令 【格式】 CLEAR 【功能】清除屏幕上的内容。 (2)返回命令 【格式】 RETURN 【功能】结束当前程序的运行。 【说明】 若当前程序无上级程序,该命令用于结束程序的运行,返回到命令窗口。如果当前程序是一个子程序,该命令用于结束程序的运行,返回到调用该程序的上级程序中。
(3)终止程序执行命令 【格式】 CANCEL 【功能】清除屏幕上的内容。 (4)退出系统命令 【格式】 QUIT 【功能】终止程序运行,关闭所有打开的文件,退出Visual FoxPro系统,返回到Windows环境。
(5)注释命令 【格式】 NOTE <注释内容> 或 * <注释内容> 或 && <注释内容> 【功能】用于在程序中加入说明,以注明程序的名称、功能或其他备忘标记。 【说明】注释命令为非执行语句。其中前两个命令格式作为独立的一行语句,第三条命令放在某一个语句的右边。
4.环境设置命令 系统提供SET命令组用来设置程序运行的环境。 (1)关闭对话命令 【命令】 SET TALK ON|OFF 【功能】 控制非输出性的执行结果是否在屏幕上显示或打印出来。 【说明】 系统默认值为ON。 (2)设置跟踪命令 【命令】 SET ECHO ON|OFF 【功能】 控制程序文件执行过程中的每条命令是否显示或打印出来。 【说明】 系统默认值为OFF。
(3)设置打印命令 【命令】 SET PRINTER ON|OFF 【功能】 控制程序执行的结果到打印机或屏幕上。 【说明】 在命令格式中选择ON表示将输出结果送到打印机,选择OFF则将输出结果显示在屏幕上,系统默认值为OFF。 (4)设置定向输出命令 【命令】 SET DEVICE TO SCREEN | TO PRINTER | TO FILE<文件名> 【功能】 控制输出结果到屏幕、打印机或指定的文件。 【说明】 在命令格式中选择SCREEN表示将输出结果显示在屏幕上,选择PRINTER表示将输出结果送到打印机,选择FILE <文件名>则将输出结果送到指定文件。
(5)设置精确比较命令 【命令】 SET EXACT TO ON|OFF 【功能】 在进行字符比较时是否需要精确比较。 【说明】 在命令格式中选择ON表示需要精确比较,选择OFF表示不需要精确比较,系统默认值为OFF。 (6)设置保护状态命令 【命令】 SET SAFETY ON|OFF 【功能】 系统在用户提出对文件重写或删除的要求时给出警告提示。 【说明】 需要提示选择ON,否则选择OFF。系统默认为ON。
(7)设置删除记录标志命令 【命令】 SET DELETED ON|OFF 【功能】 屏蔽或处理有删除标记的记录。 【说明】 在命令格式中选择ON时,命令将不对有删除标记的记录进行操作,但索引命令除外。系统默认值为OFF。 (8)设置屏幕状态命令 【命令】 SET CONSOLE ON|OFF 【功能】 发送或暂停输出内容到屏幕上。 【说明】 系统默认值为ON。 (9)设置缺省目录命令 【命令】 SET DEFAULT TO <默认目录> 【功能】 用于设置系统默认的磁盘文件目录。
【例8-4】编写程序P3.PRG,其程序功能是在学生表中追加一条记录。【例8-4】编写程序P3.PRG,其程序功能是在学生表中追加一条记录。 编写程序如图8-4所示,运行程序P3.PRG,在如下输入界面填写数据,显示结果如图8-5所示。 图8-4程序P3.PRG的编写窗口 图8-5程序P3.PRG的输出结果
【例8-5】 编写程序P4.PRG,其程序功能是在学生表中查询某一天出生的学生记录。 编写程序如图8-6所示,运行程序P4.PRG,在输入了要查询学生的出生日期之后,系统输出查询的结果。 图8-6程序P4.PRG编写窗口
【例8-6】 编写程序P5.PRG,其程序功能是在学生表中删除学生记录。 编写程序如图8-7所示,运行程序P5.PRG,在输入了要查询学生的姓名之后,系统显示要删除学生的记录,并确认删除。 程序运行结果的屏幕显示如下: 图8-7程序P5.PRG编写窗口
8.1.3 程序的基本结构 程序的基本结构有三种: 顺序结构、分支结构和循环结构 1.顺序结构 顺序结构是指程序按照语句排列的先后顺序逐条的执行。 2. 分支结构 分支结构是在执行程序时,按照一定的条件选择不同的语句,用来解决选择、转移的问题。分支结构的基本形式有三种。 单向分支、双向分支、多向分支
(1)单向分支 【格式】 IF <条件表达式> <命令行序列> ENDIF 【功能】当条件表达式的值为真时,执行<命令行序列>,否则执行ENDIF后面的命令。 【说明】<条件表达式>是关系表达式或逻辑表达式,IF和ENDIF必须成对使用。 <命令行序列>可以由一条语句或多条语句构成。
【例8-7】 编写程序P6.PRG,其程序功能是在教师表中,将陈静教师的职称由讲师改成副教授。
(2)双向分支 【格式】 【功能】 执行该命令时,首先判断<条件表达式>的值,若为真,则执行<命令行系列1>,然后执行ENDIF后的命令;若为假,则执行<命令行序列2>,然后执行ENDIF后的命令。 IF <条件表达式> <命令行序列1> ELSE <命令行序列2> ENDIF 【说明】IF…ELSE…ENDIF 语句必须成对使用。<命令行序列1>和<命令行序列2>中可以嵌套IF命令。
【例8-8】 编写程序P7.PRG,其程序功能是在教师表中,查询陈静教师的记录,如果找到记录,就显示该记录,否则,显示“查无此人”。
(3)多向分支 【格式】 • DO CASE • CASE <条件表达式1> • <命令行序列1> • CASE <条件表达式2> • <命令行序列2> • ... ... • CASE <条件表达式N> • <命令行序列N> • OTHERWISE • <命令行序列N+1> • ENDCASE
【功能】 系统从多个条件中依次测试<条件表达式>的值, 若为真:即执行相应<条件表达式>后的<命令行序列>; 若所有的<条件表达式>的值均为假:则执行OTHERWISE后面的 <命令行序列>。 【说明】DO CASE和第一个CASE子句之间不能插入任何命令。 DO CASE和ENDCASE必须配对使用。
【例8-9】编写程序P8.PRG,其程序功能是根据用户的选择,显示不同数据表的内容。【例8-9】编写程序P8.PRG,其程序功能是根据用户的选择,显示不同数据表的内容。
3、循环结构 (1)条件循环 【格式】 DO WHILE <条件表达式> <命令行序列1> [LOOP] <命令行序列2> [EXIT] <命令行序列3> ENDDO 【功能】语句执行时,先判断<条件表达式>的值,若为真,则执行循环体内的命令,即DO 与ENDDO之间的命令;若为假,则执行ENDDO后面的命令。
【说明】 对循环语句进行以下说明: DO WHILE 和ENDDO子句要配对使用。 DO WHILE <条件表达式>是循环语句的入口;ENDDO是循环语句的出口;中间<命令行序列>是重复执行的循环体。 LOOP和EXIT只能在循环语句中使用,其中LOOP是转到循环的入口语句;EXIT是强行退出循环的语句。 循环结构允许嵌套,这种嵌套不仅限于循环结构自身的嵌套,而且还可以是和选择结构的相互嵌套。
【例8-10】 编写程序P9.PRG,其程序功能是统计学生表中入校总分在580分以上的学生人数。
【例8-11】 编写程序P10.PRG,其程序功能是设计一个对学生表进行管理主控程序,用户通过键盘选择菜单,以实现不同的功能模块的调用或退出程序运行。
(2)计数循环 【格式】 FOR <循环变量>=<循环初值> TO <循环终值> [ STEP<步长>] <命令行序列1> [LOOP] <命令行序列2> [EXIT] <命令行序列3> ENDFOR | NEXT 【功能】根据用户设置的循环变量的初值、终值和步长,决定循环体内语句执行次数。
【功能】系统执行该命令时: • 首先将循环初值赋给循环变量; • 然后判断循环变量的值是否超过终值: • 若超过则跳出循环,执行ENDFOR后面的命令; • 否则执行循环体内的命令序列。 • 当遇到ENDFOR子句时,返回FOR命令,并将循环变量的值加上步长值再一次与循环终值比较,如此重复执行,直到循环变量的值超过循环终值。
【说明】 对循环语句进行以下说明: 步长值省略时,系统默认步长值为1。 当初值小于终值时,步长值为正值。 当初值大于终值时,步长值为负值。 步长值不能为0,否则造成死循环。 在循环体内不要随便改变循环变量的值,否则会引起循环次数发生改变。 [LOOP]和[EXIT]命令的功能和用法与条件循环中该命令的用法相同 。
【例8-12】 编写程序P11.PRG,其程序功能是用计数循环统计学生表中入校总分在580分以上的学生人数。
(3)指针循环 【格式】 • SCAN [<范围>] [ FOR<条件表达 式1>] [ WHILE<条件表达式2>] • <命令行序列1> • [LOOP] • <命令行序列2> • [EXIT] • <命令行序列3> • ENDSCAN 【功能】根据用户设置的当前记录指针,对一组记录进行循环操作。
【功能】 该语句在指定的范围内,用记录指针来控制循环次数。 • 执行语句时,首先判断函数EOF( ) 的值: • 若为“真”,则结束循环,执行ENDSCAN后面的语句; • 否则,结合<条件表达式1>或<条件表达式2>执行<命令行序列>,记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF( )的值,直到EOF( )的值为“真”时结束循环。
【说明】 • SCAN…ENDSCAN循环语句中隐含函数EOF( )和命令SKIP的处理。 • 无<范围>选项时,则表示对所有记录进行处理。 • [LOOP]和[EXIT]命令的功能和用法与条件循环中该命令的用法相同。
【例8-13】 编写程序P12.PRG,其程序功能是用指针循环统计学生表中入校总分在580分以上的学生人数。
(4)多重循环 多重循环是指在一个循环语句内又包含另一个循环语句,多重循环也称为循环嵌套。如: • DO WHILE <条件表达式1> • <命令行序列11> • DO WHILE <条件表达式2> • <命令行序列21> • …… • ENDDO • <命令行序列12> • ENDDO 【功能】根据用户设置的当前记录指针,对一组记录进行循环操作。
【功能】 在多重循环中,首先从外循环进入内循环,执行内循环的语句。当内循环的条件为假时,返回到外循环;当外循环的条件为真时,又进入内循环;否则,退出循环。 【说明】 对循环语句进行以下说明: ①循环嵌套层次不限,但内循环的所有语句必须完全嵌套在外层循环之中。否则,就会出现循环的交叉,造成逻辑上的混乱。 ②循环结构和分支结构允许混合嵌套使用,但不允许交叉。其入口语句和相应的出口语句必须成对出现。
【例8-14】 编写程序P13.PRG,其程序功能是使用多重循环打印一个九九乘法口诀表。