程序设计基础

程序设计是指利用计算机解决问题的全过程。使用计算机解决实际问题;

通常是先要对问题进行分析并建立数学模型;

然后考虑数据的组织方式和问题求解的算法,并用某一种程序设计语言编写程序;

最后调试程序,使之运行后能产生预期的结果。VF程序多数用于处理数据;

解决问题的基本逻辑顺序是:输入数据---处理数据---输出数据;

传统的面向过程的程序设计是围绕着功能实现的过程而进行的。在面向过程的程序设计模式下,首先要为解决某个问题确定一个算法,为该算法构造适当的数据结构,将算法和数据结构用计算机语言描述出来,程序结构是过程化的分级结构形式。在这种程序设计中,数据与操作需要分别设计,重点放在对数据进行操作的过程上。一旦数据发生变化,需要及时修改与之相关的程序模块。数据与操作过程的分离容易造成代码的可重用性差及维护代价高。

面向对象的程序设计是一种先进的程序设计技术,其核心思想是封装。首先提取要解决问题中所需要的数据,然后分析出对这些数据需要进行的操作,最后将数据与操作封装(encapsulation)在一起形成一个整体(即对象)。在这种程序设计中,数据与操作作为一个整体进行设计,这种方法将提高代码的可重用性,减少程序设计的工作量,方便维护。

面向对象程序设计者的任务包括两个方面。

(1)设计对象,即决定把哪些数据和操作代码“封装”在一起;

(2)怎样通知有关对象所需完成的任务,即如何发送消息。程序设计者如同一个总调度,不断地向各个对象发出命令,让这些对象活动起来,完成自己范围内的操作

对象的操作可通过修改对象的属性值或执行对象的方法完成。

面向过程的程序设计:它要求用户要考虑程序设计的全过程,正确书写整个程序的代码;面向对象的程序设计:把客观世界看成一系列相互关联的对象,每个对象都有其属性及允许的各种操作;程序员主要考虑如何创建对象和创建什么样的对象,并设计必要的程序代码;每个对象都有描述其特征的属性及其附属于它的行为;

现实世界事物的抽象

1 实体entity--数据模型---实体用数据来描述,实体名(属性名1…);

2 对象object:属性(数据)、事件、方法;,将属性和操作封装在一起

对象至少有两个要素;一是从事活动的主体,二是活动的内容;从计算机的角度看,一个对象应该包括两个要素:一是数据,二是需要进行的操作。对象就是一个包含数据以及与这些数据有关的操作的集合。在程序设计中,对象是由数据及可以对这些数据施加的操作结合在一起所构成的独立实体。也就是说,对象就是把数据和对这些数据的操作放在一起,作为一个相互依存不可分割的整体。对象是对客观事物的表示或描述,一个对象具有自身的属性(数据)和可为自己或别人做的工作功能(操作),它能通过发送消息与其他对象进行通信,协同完成任务。

程序在处理原始数据时,这些原始数据、处理的中间结果、最后结果都要存储在一定地址的存储单元中,这些数据的具体地址用变量来表示,用户在程序中给定一个变量,该变量就分配了一个地址;公共变量在VF运行时有效,私有变量针对某一应用程序有效;表就是通过字段变量来存储数据在外存储器上的(表打开后调到内存的一个工作区内);

在命令操作和程序运行变化过程中,其值允许变化的量称为变量;

1 内存变量:可以用来存储数据并且建立后存储于内存中的变量,定义内存变量要为他取值并赋值;

2 系统变量:VF创建并维护的内置内存变量;

3 字段变量:表的结构即字段,相当于一个数组变量,跟表一起存储在外存储器上;

VF的工作方式分为人机+B188交互工作方式和程序执行方式。人机交互工作方式是利用菜单(或向导、设计器、生成器)或直接在命令窗口输入命令来完成对数据库的各种操作。人机交互工作方式简便、直观,但处理效率低、完成功能有限且执行命令不能保留,而程序执行方式可以克服这些据点,因而成为数据库操作的常用方式。程序序列保存后可以重复运行;

VF的command窗口,主要是让使用者直接利用下达命令的方式来操作数据库的各项功能,而不需利用鼠标选取菜单项来操作。由于VF的命令包含很多选项,因此可以更方便、有选择地操作数据库,而且将命令集合起来,加上一些程序语法,就可以设计出VF应用程序。

结构化程序设计:采用自顶向下、逐步求精和模块化的分析方法;

自顶向下是指对设计的系统要有一个全面的了解,从问题的全局入手,把一个复杂问题分解成若干个相互独立的子问题,然后对每个子问题再作进一步的分解,如此重复直到每个问题都容易解决为止。

模块化就是把大程序按照功能分为较小的程序,模块化是结构化程序设计的重要原则;

程序是命令的有序集合,命令执行的顺序即程序的结构。一个程序的功能不仅取决于所选用的命令,还决定于命令执行的顺序。结构化程序设计有一搭要求把程序的结构限制为顺序、分支和循环3种基本控制结构。

程序文件又叫命令文件,程序是指能够完成一定任务的命令序列集合;当程序运行时,系统就会按照一定的次序自动执行包含在程序文件中的命令;

程序的书写规则(命令使用规则):

1 命令必须以命令字开头,后面短语的先后位置顺序可以是任意的;

2 命令字与短语以及各短语之间要用至少一个空格分开;

3 命令动词和关键字可以缩写为前四个字符;

4 “表达式清单”中各数据项间要用逗号分隔;

5 命令分行 :命令都以回车键结尾,一行只能写一条命令,若写不下,可在未写完的本行末尾添加一个分号“;”作为下一行的继行标志。单一命令行不能超过2048个字符;

6 变量名、字段名和文件名应避免与命令动词、关键字或函数同名,以杜绝运行时发生混乱;

7 程序注释语句   NOTE/*:对程序的结构或功能进行注释。程序执行时将跨过注释语句,不作任何操作。 语句注释  &&:在语句行末尾注释,对当前语句进行说明。程序执行时,对&&后面的注释不作任何操作

VF程序多数用于处理数据,解决问题的基本逻辑顺序是:输入数据---处理数据---输出数据;

从功能上看,程序可分为3总分

2.1 程序的说明部分;

2.2 程序的数据处理部分;

2.2.1 提供原始数据部分;

2.2.2 数据处理部分

2.2.3 输出结果部分;

2.3 程序的控制返回部分

输入命令:input,store,accept,wait;

输出命令:?,??,text,@<行,列> say<表达式>,////

程序的注释命令:Note,*,&&;

clear

input "请输入圆半径R=" to r

S=round(PI()*r^2,3)

? "该圆的半径为:",r

? "该圆的面积为:",s

return

对象语法:

<object>.<properties/method>=<define.result>

如:thisform1.picture='g:\picture\desktop.jpg'

求圆面积命令按钮的click事件代码:

a=thisform.text1.value

thisform.text1.value=&a*&a*pi()

(以上输入变量和文本框都可以接受不能预先设定的用户输入;

模块的调用:

应用程序一般都是多模块程序,可包含多个程序模块。模块是一个相对独立的程序段,它可以被其他模块所调用,也可以去调用其他的模块。通常,把被其他模块调用的模块称为子程序,把调用其他模块而没有被其他模块调用的模块称为主程序;模块化便于程序的开发、阅读、维护,同时也有利于系统的运行效率的提高;

一个应用程序通常都是由一个主程序和若干个子程序组成。所谓子程序是相对于主程序而言的一个独立的程序文件,可以单独执行,也可以被其他程序调用。

过程与函数将常用代码集中在一起,供应用程序需要时调用,从而提高了程序代码的可读性和操作性;

过程:过程是一个由PROCEDURE<过程名>开头,ENDPROC结尾的子程序段。过程可以将实现相对独立功能的常用代码集中在一起,供应用程序在需要时调用。过程的存在格式如下所示:

PROCEDURE<过程名>

[<语句序列>]

ENDPROC

过程文件:是由若干个过程构成的文件。过程必须存放在一个过程文件中。不能把可执行的主程序代码放在过程之后。

以set开头的命令为环境设置命令

return是返回命令,表示程序结果;

函数具有扩展和增强命令的功能,程序文件也称为命令文件;应用程序通常由多个程序模块组成,如子程序、主程序、自定义函数等,调用的方法:DO 程序文件名;程序间的多级调用:1 返回上一级程序:return;2 返回到最高主程序:return to master;返回指定程序:return to 程序名;

输入命令

accept [<提示信息>] to <字符型内存变量各>;

1 此语名称为字符接收语句,属于交互式输入命令,执行此语句时,先在屏幕上显示<提示信息>,光标紧随其后,然后暂停程序运行,等待用户从键盘上输入信息。该命令可以用文本框控制命令代替。

2 输入的内容系统将做为字符串信息存入指定的内在变量中,输入时可以不需要定界符括起来,输入完后以回车键继续,系统会继续运行暂停的程序。

input [<提示信息>] to <字符型内存变量各>;

1 通用数据接收命令,同样属于交互输入命令;

2 如果输入字符串信息,必须有定界符;

3 可以输入合法的表达式,当以enter键结束时,系统会将表达式的值赋值给内存变量;

wait [<提示信息>] [to<内存变量>][windows[at <行坐标>,<列坐标>]][timeout<>][nowait]

1 程序暂停、等待接收单字符命令,属于交互式输入命令

2 功能:暂停程序,用户按任意键或时间超过等待的秒数后,程序继续执行;如果包含[to<内存变量>]短语,将用户所按键盘字符赋值给指定的内在变量;

3 [<提示信息>]指定要显示的自定义信息。若省略该参数,则显示信息“按任意键继续...”.如果该参数为空字符,则不显示信息。

4 功能:暂停程序的运行,以观察程序的运行情况,检查程序运行的中间结果;二是控制程序的执行流程。根据实际情况输入某个字符,以控制程序的执行流程,如"y/n";

输出命令

基本输出命令:?、??;

格式:?/??<表达式1>[,<表达式2>…]

功能:先对一个或多个表达式求值,再将结果显示在主窗口;

说明:使用“?”命令在下一行显示,而??则在同一行显示;

文本显示命令:text___endtext;

定位输出与输入命令

格式:@<行,列>[SAY<表达式>][GET<变量>][DEFAULT<表达式>][RANGE<表达式1>,<表达式2>][VALID<条件>]

SAY<表达式>:用来在屏幕上输出表达式的值;

GET<变量>:用来在屏幕上输入指定变量的值;

程序的基本结构:

1顺序结构:

2选择结构:在实际应用中经常遇到要求计算机进行逻辑判断,即给出一个条件,让计算机判断是否满足该条件,并按不同的情况让计算机进行不同的处理。即根据指定的判断条件,在两条或多条执行路径中进行选择,以决定程序的流向。选择结构按照选择结构执行路径的多少,可分为简单分支结构、双分支结构和多分支结构;无论是哪种类型的选择结构,都是根据所给条件是否为真,选择执行某一分支的相应操作。

选择分支结构各分支语句序列只有在条件为真的条件下有最多一次被执行的机会,如果条件为假,才不会被执行;

2.1 简单分支结构和双分支结构

if<条件>

<语句序列1>

[else

<语句序列2>]

endif

如果条件的的逻辑值为T,就执行语句序列1,执行完后就转到执行endif之后的命令;如果条件的逻辑值为F,就执行语句序列2,完成后转去执行endif之后的命令;else、if、endif各占一行,且后者要成对出现;

以上语句如果不包括else语句,则是简单分支结构;如果条件的逻辑值为T,就依次执行语句序列,执行完就转去执行endif之后的语句。如果条件的逻辑值为F,则直接转到endif之后的语句。

2.2 多分支结构语句:

do case-endcase语句可以简单有效地完成多个并行条件的判断的判断,它将按照条件的排列顺序执行表达式的值为T的第一组命令;

do case

case<条件1>

<语句序列1>

case<条件2>

<语句序列2>

……

case<条件n-1>

<语句序列n-1>

[otherwise

<语句序列n>]

endcase

多分支结构执行的过程:系统依次判断各条件是否满足,若某一条件为T,就执行该条件下的语句序列,执行后不再判断其他条件,而转去执行endcase后面的第一条命令;如果没有一个条件为T,就执行otherwise后面的语句序列,直到endcase,如果不存在otherwise,并且所有的表达式的值为F,则跳过整个do case-endcase语句块,继续执行endcase后面的语句;

3 循环结构:顺序结构和分支结构的共同特点是其中每条命令至多执行一次。然而在处理实际问题的过程中,往往需要对某一操作重复进行多次,循环结构就是用来控制完成这种按给定条件重复执行某一程序段的功能。

3.1 基于条件的循环:do while:

do while<条件表达式>

<语句序列1>

[loop]          &&终上本次循环,返回到do while语句;

<语句序列2>

[exit]          &&终止本层循环,转到enddo的第一条命令;

<语句序列3>

enddo

如果条件为真,执行循环体,当执行到enddo时,再次判断条件是否为真,以确定是否再次执行循环体。若条件为假,则结束该循环语句,enddo后面的语句;

3.2 基于计数的循环:for to step:

for <循环变量>=<初值> to <终值> [step<步长>]

<语句序列>

[exit]

[loop]

endfor︱next

执行该语句,首先将初值赋给循环变量,然后判断循环条件是否成立(若步长为正值,循环条件为<循环变量><=<终值>;若步长为负值,循环条件为<循环变量>>=<终值>),则执行for到endfor之间的语句序列(即循环体),然后循环变量增加一个步长值,并再次判断循环条件是否成立,以确定是否再次执行循环体。若循环条件不成立,则结束循环语句,执行endfor后面的语句;当步长值等于1时,可以省略step子句;

3.3 基于表的循环:scan for while:在当前表中,对给定范围内满足条件的记录逐条操作。

该循环语句一般用于处理表中记录。语句可指明需处理的记录范围及应满足的条件。

格式:

scan[<范围>][for<条件>][while<条件>]

[<语句序列>]

endscan

执行该语句,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令;如果缺少范围和条件子句时,则对所有记录逐个<语句序列>规定的操作。

@<> say 表达式:用于在指定位置输出数据;@行号,列号 say 表达式

@<> get 变量:用于在指定位置显示变量的值;其中变量必须先定义,否则会出错。

x=10

@10,20 get x

read

二者可组合使用。