程序设计基础_第1页
程序设计基础_第2页
程序设计基础_第3页
程序设计基础_第4页
程序设计基础_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章程序设计基础2023/1/19第5章程序设计基础25.1程序设计概述什么是程序?

程序是利用系统所提供的设计工具、按照程序设计语言的规范描述解决问题的算法并进行程序编写的过程VFP程序由一系列代码组成,代码可以包括以命令形式出现的指令、函数或VFP可以理解的任何操作。

程序设计方法主要有两类:

结构化程序设计(StructuredProgramming,SP)面向对象程序设计(Object-orientedProgramming,OOP)2023/1/19第5章程序设计基础35.1程序设计概述结构化程序的原则

自顶向下、逐步求精、模块化、限制使用转移语句。结构化程序三种基本结构:

顺序、分支、循环结构化程序设计本质

功能设计:以功能为主进行设计,其方法是自顶向下、功能分解,它从外部功能上模拟客观世界,其开发过程通常是从“做什么”到“如何做”。优点:系统结构性强,便于设计和理解缺点:该功能模型较难与现实世界的实际系统相吻合。2023/1/19第5章程序设计基础45.1程序设计概述面向对象程序设计思想

世界由各种对象组成,任何事物都是对象,是某个对象类的实例,负载的对象可由简单的对象组合而成。对象:对象是数据及作用于这些数据之上的操作结合在一起所构成的独立实体的总称。类:是一组具有相同数据结构和相同操作的对象的描述。

面向对象程序设计的三个重要特性:

封装性、继承性、多态性2023/1/19第5章程序设计基础55.1程序设计概述面向对象程序设计的三个重要特性:封装性:指对象是数据和处理该数据的方法所构成的整体,外界只能看到其外部特性(消息模式、处理能力),其内部特性(私有数据、处理方式)对外不可见。继承性:反映的是类与类之间不同的抽象级别,根据继承与被继承的关系,类可分为基类和衍生类,基类也称为父类,衍生类也称为子类。多态性:在形式上表现为一个方法根据传递给它的参数的不同,可以调用不同的方法体,实现不同的操作。2023/1/19第5章程序设计基础65.2结构化程序设计5.2.1创建、修改和运行程序5.2.2顺序结构5.2.3分支结构5.2.4循环结构5.2.5过程与用户自定义函数2023/1/19第5章程序设计基础75.2结构化程序设计5.2.1创建、修改和运行程序

创建、修改和运行程序的方法有很多,以下为命令的方式。创建程序的命令:MODIFYCOMMAND文件名(扩展名为*.PRG)

修改程序的命令:MODIFYCOMMAND运行程序的命令:

DOProgramName

[WITHParameterList

]2023/1/19第5章程序设计基础85.2结构化程序设计一旦运行程序文件,系统会自动地对程序文件(.prg)进行编译(包括对程序的词法检查、语法检查),生成“伪编译”程序(.fxp)。执行程序时,系统实质上是执行.fxp文件。程序结构:顺序、分支、循环2023/1/19第5章程序设计基础95.2.2顺序结构5.2.2顺序结构创建、修改和运行程序例5.1

下列程序的功能是计算圆的面积,其半径为4.12。

STORE4.12TOPS=P*P*3.14?‘圆的面积为’,SAB2023/1/19第5章程序设计基础105.2.2顺序结构5.2.2顺序结构创建、修改和运行程序例5.2

下列程序的功能是显示一个字符串在另一个字符串中的位置。

C=“VisualFoxPro”CC=“Fox”?AT(CC,C)AB2023/1/19第5章程序设计基础115.2.3分支结构_单分支结构(1)单分支结构

IF条件语句1ENDIF说明:当“条件”成立时执行“语句1”,否则执行ENDIF后面的语句例:n=1X=0IFn<=3X=2ENDIF?X条件成立?语句1yNENDIF后面的语句2023/1/19第5章程序设计基础125.2.3分支结构_双分支结构(2)双分支结构IF…ELS…ENDIF语句IF条件

语句组1ELSE

语句组2ENDIF说明:条件满足执行语句组1,否则执行语句组2例:X=1Y=1IFX>2Y=0ELSEY=3ENDIF?Y条件成立?语句1语句2ENDIF后面的语句YN2023/1/19第5章程序设计基础135.2.3分支结构_双分支结构例5.3下列程序的功能是根据变量X决定变量Y的值(-1或1)。X=5IFx>0y=1ELSEy=-1ENDIF?y2023/1/19第5章程序设计基础145.2.3分支结构_多分支结构(3)多分支结构

DO

CASE

CASE

条件1

语句体1CASE

条件2

语句体2

………CASE

条件n

语句体nOTHERWISE

语句体n+1ENDCASE

条件1条件2条件n语句1语句n语句2YYY语句n+1ENDCASE后面的语句NNN……2023/1/19第5章程序设计基础155.2.3分支结构_多分支结构例:X=85Y=space(0)DocasecaseX>=90Y=“优秀”

caseX>=80Y=“良好”

caseX>=70Y=“中等”

caseX>=60Y=“及格”

otherwiseY=“不及格”EndCase?Y说明:case的个数与需要判断的情况有关2023/1/19第5章程序设计基础165.2.4循环结构循环(Looping)是指同一语句组反复执行若干次;循环必须设定循环条件,也就是说循环必须有出口语句2023/1/19第5章程序设计基础175.2.4循环结构

VFP中循环语句包括:

(1)FOR…ENDFOR(2)DOWHILE…ENDDO

(3)SCAN…ENDSCAN2023/1/19第5章程序设计基础185.2.4循环结构_FOR语句(1)FOR语句的格式:(预先知道循环的次数)FOR循环变量赋初值

to终值

[step步长]

循环体

ENDFOR|next注意:当步长为正数时,循环变量的初值要小于等于终值。当步长为负数时,循环变量的初值要大于等于终值。当步长为1时,[step步长]可以省略。

2023/1/19第5章程序设计基础195.2.4循环结构_FOR语句FOR语句的执行流程为:1)将初值赋给循环变量2)判断循环变量是否超出终值,若超出则结束循环,否则执行循环体。3)计算循环变量的值:循环变量=循环变量+步长注意:循环变量加步长的操作是系统自动完成的不需要在循环体中再出现该操作循环变量赋初值条件成立?执行循环体循环变量加步长YN2023/1/19第5章程序设计基础205.2.4循环结构_FOR语句

fori=1to10step1

?i

endfor例1:在屏幕上输出1到10。例2:求1+2+3+…+10=?

s=0

fori=1to10step1s=s+i

endfor

?s2023/1/19第5章程序设计基础215.2.4循环结构_FOR语句例3:求100以内的3的倍数的和

sum=0

forn=0to100step3sum=sum+n

endfor?sum

a=1

forn=10to1step-2a=n**2?a

endfor例4:求10以内偶数的平方(见P143例5.6,例5.7,例5.8,例5.9

)2023/1/19第5章程序设计基础225.2.4循环结构_DOWHILE语句(2)DOWHILE语句的格式:

DO

WHILE条件

循环体

ENDDO注意:1.如果预先不能确定循环次数,而是根据某一条件决定是否结束循环。2.当条件=.T.时执行循环体,否则结束循环3.在循环体中要有改变循环条件的语句。循环体条件成立?ENDDO后面语句YESNO2023/1/19第5章程序设计基础235.2.4循环结构_DOWHILE语句例:Store“abcdef”tocP=space(0)Dowhile

len(c)>0P=left(c,1)+Pc=substr(c,2)Enddo?p说明:对于任意给定的字符串反序显示如:“abcdef”变成“fedcba”2023/1/19第5章程序设计基础245.2.4循环结构_DOWHILE语句例:用DOWHILE循环求1到100的和。

S=0A=1

DOWHILEA<=100S=S+AA=A+1

ENDDO?S(见P143例5.10,例5.11,例5.12,例5.13

)2023/1/19第5章程序设计基础255.2.4循环结构_

SCAN语句(2)SCAN语句的格式:

SCAN条件循环体

ENDSCAN注意:SCAN循环又称为表记录扫描循环,此语句仅限于处理表的记录

2023/1/19第5章程序设计基础265.2.4循环结构_

SCAN语句例5.14:统计右表中江苏学生的人数,显示学号和籍贯。

N=0

Usexs

Scanfor’江苏’$xs.jg?xs.xh,xs.jgN=N+1

Endscan?N

2023/1/19第5章程序设计基础275.2.4循环结构_

SCAN语句北京9905145江苏9905104江苏9905113上海9905082江苏9905011籍贯学号序号例如:统计右表中江苏学生的人数,显示学号和籍贯。√990501江苏N=1√990511江苏N=2√990510江苏N=32023/1/19第5章程序设计基础285.2.4循环结构_

三种语句总结

(1)FOR…ENDFOR(2)DOWHILE…ENDDO

(3)SCAN…ENDSCAN知道循环次数,用FOR循环用于表记录扫描循环不知道循环次数,一般采用DOWHILE循环2023/1/19第5章程序设计基础295.2.4循环结构_

LOOP命令和EXIT命令LOOP命令:当执行到LOOP语句时,将跳过LOOP后面的所有语句,即结束本次循环,重新开始下一次循环。(见P143例5.7)EXIT命令:当执行到EXIT语句时,将跳过EXIT后面的所有语句,强行退出循环。(见P146例5.13)

2023/1/19第5章程序设计基础305.2.4循环结构_

LOOP和EXIT例子Sum=0forn=1to100Ifmod(n,2)=0loop

endifIfsum+n>200exitelseSum=sum+nendif

Endfor?sum

?n

例:求连续奇数的和,并且和小于200。2023/1/19第5章程序设计基础315.2.5过程与用户自定义函数

我们可以将经常执行的具有某一功能的一段代码独立出来,将其作为一个过程(Procedure)或用户自定义函数(UserDefinedFunction,简称UDF),在需要改功能的时候调用这个过程或函数。

目的:减少了程序的代码量,也使程序更易读、更易维护。这也是结构化程序设计方法的精髓。2023/1/19第5章程序设计基础325.2.5过程与用户自定义函数1过程定义的语法格式

PROCEDURE

过程名

[PARAMETERS参数列表]

过程体

[RETURN[返回值]]

ENDPROC注意:当缺省RETURN时,返回值为.T.2023/1/19第5章程序设计基础335.2.5过程与用户自定义函数2.函数的定义和调用:函数定义的语法:FUNCTION函数名

[PARAMETERS参数列表]

函数体

[RETURN[返回值]]ENDFUNC注意:当缺省RETURN时,返回值为.T.2023/1/19第5章程序设计基础345.2.4过程与用户自定义函数例如:定义一函数求两个数的立方和

Functionc_sum

parametersa,bLocalcc=a*a*a+b*b*b

Returnc

endfun2023/1/19第5章程序设计基础355.2.4函数_函数、过程调用的执行流程SettalkoffX=5Y=6Z=c_sum(x,y)?zFunctionc_sum

parametersa,blocalcc=a*a*a+b*b*bReturnc2023/1/19第5章程序设计基础365.2.4过程与用户自定义函数注意:如果调用某过程文件中的过程和自定义函数,则在调用之前运行:

SETPROCEDURETO(过程或自定义)文件名重点掌握:1、完善程序2、写出程序运行结果2023/1/19第5章程序设计基础37例题SETTALKOFFS=“ABCDEF”N=LEN(S)K=1DOWHILEK<=N?SUBS(S,K,N-K)K=K+1ENDDO结果:——————、——————1.运行下列程序以后,显示运行的前二次结果:2023/1/19第5章程序设计基础385.2结构化程序设计_读程序题目2.执行下列程序后,屏幕上显示的运行结果为

。CLEARSTORE3.14TOPIr=4S=PI*r*r?INT(S)2023/1/19第5章程序设计基础395.2结构化程序设计_读程序题目3.运行下列程序,运行结果的第二行为

。SETTALKOFFCLEARY="111111111"FORI=1TO8 X=LEFT(Y,I)?SPAC(20-I*2)+X+"*"+X+"="+ALLT(STR(VAL(X)*VAL(X)))ENDFOR2023/1/19第5章程序设计基础405.2结构化程序设计_读程序题目4.执行下列程序后,屏幕上显示的运行结果为

。CLEARx=10y=4IFx<0y=2*x-2elsey=x**2ENDIF?y2023/1/19第5章程序设计基础415.2结构化程序设计_读程序题目5.执行下列程序后,屏幕上显示的运行结果为

。S=0N=1DoWhileN<=5 S=S+NN=N+1ENDDO?S

2023/1/19第5章程序设计基础425.2结构化程序设计_完善程序题目1.下列程序的功能是求100以内的偶数之和及奇数之和。P=0Q=0FORN=1TO100

IF_____________P=P+N

ELSE_____________

ENDIFENDFOR?“偶数和为”,P?“奇数和为”,Q2023/1/19第5章程序设计基础435.2结构化程序设计_完善程序题目2.下列程序用来求0~100偶数之和,请完善。STORE0TON,SDOWHILE.T.

IFN>100_________

ELSES=S+N

ENDIFN=N+2ENDDO2023/1/19第5章程序设计基础445.2结构化程序设计_完善程序题目3.下列程序是随机产生一个70-80之间的数,请完善x=0DOWHILE.T.X=RAND()*100IFx>70ANDx<80_________ENDIFENDDO?x2023/1/19第5章程序设计基础455.2结构化程序设计_完善程序题目4.下列程序功能是计算1!+2!+…+10!的和,请完善。Result=0nMult=_________

FORn=1TO10

nMult=nMult*n

nResult=_________

ENDFOR?nResult2023/1/19第5章程序设计基础465.2结构化程序设计_完善程序题目5.完善下列程序,使其计算一个整数的各位数字之和:SETTALKOFFINPUT”x=”TOxs=0DOWHILEx!=0s=s+MOD(x,10)x=INT(__________)ENDDO?sSETTALKON2023/1/19第5章程序设计基础475.2结构化程序设计_完善程序题目6.dtocc()函数实现将一个日期型数据转换为形如“XXXX年XX月XX日”的中文日期字符串,请完善。FUNCTIONdtoccPARAMETERSdeDate

cYear=

+’年’

cMonth=STR(Month(deDate),2)+’月’

cDay=STR(Day(deDate),2)+’日’RETURN

ENDFUNC2023/1/19第5章程序设计基础485.2结构化程序设计_完善程序题目7.完善下列程序,是其可用来求长方形的面积。

X=3

Y=5

S=AREA(X,Y)

?S

FUNCTION

AREA

_______

S1=X*YRETURN

________ENDFUNCTION2023/1/19第5章程序设计基础495.2结构化程序设计_编程序题目1.编程求1—100之间所有非3的倍数的和。2.编程求1到100的平方和,如果平方和超过1000则跳出循环。3.编程计算数列1!,3!,5!……n!的前5项之和。4.查找教师表(JS.DBF)中出生日期在1960年之前的教师的姓名、性别和系科。5.编程实现自定义函数NX(),该函数的功能是将任意给定的一个字符串逆序返回。如执行该函数NX(“ABCDE”),则返回结果为”EDCBA”。6.编函数ntoc,实现其功能将传送过来的阿拉伯数字“0~9”转换为中文的“零~九”。2023/1/19第5章程序设计基础505.3面向对象程序设计基础

面向对象的程序设计(Object-OrientedProgramming,简称

OOP)是基于问题对象的自底向上的功能综合,从内部结构上模拟客观世界,其开发过程是从“用什么做”到“要做什么”。

传统的结构化程序设计的本质是功能设计,进行功能分解,从外观功能上模拟客观世界,其开发过程通常是从“做什么”到“如何做”。2023/1/19第5章程序设计基础515.3.1类和对象概述类(class):具有相同的结构、操作,并遵守相同规则的对象聚合在一起的对象。对象:是基于类所创建的一个实例。每个对象都具有属性、事件和方法,通过对象的属性、事件和方法来处理对象。区别联系:类包含了有关对象的特征和行为信息,它是对象的蓝图和框架,对象包括了数据和过程。在采用面向对象程序设计方法设计程序中,程序时由一个或多个类组成,在程序运行时,用户需要创建该类的各个对象(实例),因此,类是静态概念,而对象是动态概念。2023/1/19第5章程序设计基础525.3.1类和对象概述_对象属性(Property):对象的特征或某一方面的行为。属性是可自定义的。事件(Event):由对象识别的一个动作,可以编写相应的代码对此动作进行响应。事件是不可自定义的。方法(Method):对象能够执行的一个操作。方法是可自定义的。每个对象都具有属性,以及与之相关的事件和方法,通过对象的属性、事件和方法来处理对象。2023/1/19第5章程序设计基础535.3.2基类类分为三大类:基类、子类和用户自定义类基类(baseclass):是VFP系统提供的内部定义的类,可用作其他用户自定义类的基础。子类(Subclass):是以其他类定义为起点,为某一种对象所建立的新类。用户自定义类(User-definedClass):与VFP基类相似,但由用户定义,并且可用来派生子类2023/1/19第5章程序设计基础545.3.2基类_常用基类容器编辑框列表框标签控件文本框组合框图像表单集微条框复选框形状表单表格选项按钮组线条工具栏标头*选项按钮*分隔符*自定义列*计时器命令按钮组页框OLE绑定型控件命令按钮页面*OLE容器控件注:*表示该类是容器的集成部分,在类设计器中不能基于它们创建子类2023/1/19第5章程序设计基础555.3.2基类_容器类、控件类基类分为两大类:容器类、控件类。容器类(ContainerClasses):包容其他类的基类。VFP的容器类有:容器、工具栏、表单集、表单、表格、表格列、页框、页面、命令按钮组、选项按钮组。控件类(ControlClasses):可以包含在容器类中的基类。VFP的控件类就是基类除去容器类剩下的部分。2023/1/19第5章程序设计基础565.3.2基类_最小属性集、最小事件集基类的最小属性集:Class、BaseClass、ClassLibrary、ParentClass基类的最小事件集:Init、Destroy、Error2023/1/19第5章程序设计基础575.3.3处理对象_引用对象在引用对象时,首先要弄清该对象相对于容器层次的关系。引用对象的格式为:引用地址.对象名称绝对引用绝对引用是从最顶层对象开始,逐层引用,直到所指定的对象的方式。相对引用相对引用是指在容器层次中相对于某个容器层次的引用。2023/1/19第5章程序设计基础58*相对引用通常用于某个事件处理代码或方法程序代码中对所包容的对象的引用,引用时可以直接使用其对象名。表5-5VFP中相对引用对象时所用的关键字ActiveForm当前活动表单Activepage当前活动表单中的活动页面ActiveContro当前活动表单中具有焦点的控件PARENT该对象的直接容器THIS该对象THISFORM包含该对象的表单THISFORMSET包含该对象的表单集2023/1/19第5章程序设计基础595.3.3处理对象_设置对象属性每个对象都有许多属性。通过对对象属性的设置,可以定义对象的特征或某一方面的行为。在采用可视化的方法进行对象设计时,可以在属性窗口中对对象属性进行设置在程序代码中,可以使用如下的语法对对象属性进行设置:引用对象.属性=值比如将命令按钮组中的第一个按纽(“上一条”)的前景色改为红色:This.cmd1.forecolor=rgb(255,0,0)该命令按钮组“上一条”按钮的name属性前景色属性绿色rgb(0,255,0)蓝色rgb(0,0,255)白色rgb(255,255,255)黑色rgb(0,0,0)2023/1/19第5章程序设计基础605.3.3处理对象_调用对象的方法程序方法程序是对象能够执行的一个操作,是和对象相联系的过程。调用方法程序的语法如下:引用对象.方法程序

例刷新表单的语法:Thisform.refresh释放表单的语法:Thisform.release设置焦点的语法:Thisform.text1.SetFocus2023/1/19第5章程序设计基础615.3.3处理对象_对象对事件的响应当对象的某个事件发生时,该事件的处理程序代码将被执行。如果事件没有与之相关联的处理程序,则当事件发生时不会发生任何操作比如当用户单击某命令按钮时,该命令按钮的Click事件的程序代码将被执行。比如运动员踢足球,足球被踢出。比如运动员踢足球,足球滚了。在这个过程当中,对象是足球,事件是踢,足球被踢出是对踢事件的响应。在这个过程当中,对象是足球,事件是踢,足球滚了是方法。202

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论