




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、长安大学信息工程学院长安大学信息工程学院Visual foxpro Visual foxpro 数据库程序数据库程序设计设计第六章第六章 程序设计基础程序设计基础n教学目的和要求教学目的和要求 通过本章的学习,掌握程序的概念,掌握结构化程序设计的三种基本结构及用法,能进行简单的程序设计。n教学重点教学重点 1、掌握程序文件的建立与执行的方法,了解简单输入输出命令的使用。 2、掌握程序的三种结构。 3、掌握多模块程序调用及参数传递。 4、了解公共变量、私有变量及局部变量的区别。n教学难点教学难点 1、几种输入输出命令的区别与联系。 2、掌握循环语句的特点与应用。 3、掌握在参数传递中,实参与形参
2、的概念。第六章第六章 程序设计基础程序设计基础6.1程序与程序文件6.2程序的三种基本结构 6.3多模块程序设计程序是什么?人机能够对话,是因为计算机可以执行程序人机进行对话所使用的语言,就是程序设程序设计语言计语言程序设计的基本概念程序设计的基本概念2021-7-65程序设计的基本概念程序设计的基本概念VFP的编程方式n 面向过程编程方式 用结构化编程语言来编写结构化的程序,它把一个复杂的程序分成较小的过程,每个过程可以单独进行调试。n 面向对象编程方式 用面向对象的技术编程,它把编程工作主要集中在描述的对象上,程序是事件驱动的,在执行过程中,等待的是一个事件。 6.1 程序与程序文件程序与
3、程序文件n程序文件:程序文件:程序是能够完成一定任务的命令的有序集合。这组命令以文本的形式存放在文件中,称为程序文件或命令文件,默认文件扩展名为.PRG。该文件可用任何文本编辑器或字处理软件来建立。 n程序文件扩展名:程序文件扩展名: 源文件的扩展名是.PRG,程序在运行时,会产生主文件名与.PRG程序主文件名相同,扩展名为.FXP的目标文件。n程序与交互操作的区别:程序与交互操作的区别: 交互操作一次只执行一条命令,而程序一次能运行多条命令。 程序文件可长期保存并且可多次运行,而交互操作不能保存 程序可以完成一些复杂的任务,而交互操作的功能是有限的 6.1.2 程序文件的建立与执行程序文件的
4、建立与执行n程序文件的建立与修改n程序文件的执行n程序辅助命令n(1)命令格式:n功能调用FoxPro编辑器来建立或修改程序文件。n举例: MODIFY COMMAND prog1.prg MODIFY FILE prog2.prg MODIFY COMMAND |?MODIFY FILE |?1.程序文件的建立与编辑程序文件的建立与编辑n在文件名的扩展名缺省时:MODIFY COMMAND自动默认prg程序文件;MODIFY FILE 自动默认文件类型为txt。n如果指定的文件名在指定位置已经存在,那就是打开该程序文件。n如:下面是几条等价命令1. MODI COMM PROG12. MOD
5、I COMM PROG1.PRG3. MODI FILE PROG1.PRG1.程序文件的建立与编辑程序文件的建立与编辑n(2)在项目管理器中,在项目管理器的“代码”选项卡中选程序,然后单击“新建”按钮。 n(3)在“新建”对话框中,在新建对话框中选“程序”,然后单击“新建文件”。 1.程序文件的建立与编辑程序文件的建立与编辑n(1)在项目管理器中,在项目管理器的“代码”选项卡中选程序,然后单击“运行”按钮。 n(2)在菜单栏中“程序运行”n(3)用命令执行程序文件 格式:DO 程序名2.程序文件的执行程序文件的执行2021-7-6123. 程序辅助命令程序辅助命令 以前介绍的所有Visual
6、 FoxPro命令都可以用在程序设计中。另外Visual FoxPro还提供了一些辅助命令,这些命令能使程序更好地阅读和有效地运行。本小节介绍:n 程序注释命令 n 程序结束命令n 信息对话框函数MESSAGEBOX n 运行环境设置命令 A.程序的注释程序的注释Visual FoxProVisual FoxPro提供了提供了3 3种注释命令:种注释命令:格式格式1 1: NOTE NOTE 格式格式2 2: * * 功能:使功能:使 NOTENOTE或或* * 后面的内容成为注释内容。后面的内容成为注释内容。格式格式3 3: & & 功能:功能: 对对&左面的命令做出解释或给出运行结果,又左
7、面的命令做出解释或给出运行结果,又称为行尾注释命令。称为行尾注释命令。 程序注释举例程序注释举例1(vb6lt1)*-* 程序功能:显示当前系统的日期和时间 *-NOTE 简单程序示例SET TALK OFF&关闭状态信息显示SET CENTURY ON&设置年份的显示状态为四位CLEAR&清屏幕a = DATE()b = TIME()? 今天的日期是:, a? 现在的时间是:, bSET TALK ON&打开状态信息显示B.状态设置命令状态设置命令在程序中运用一些环境设置命令,可使程序正常而高效地运行。运行环境设置命令大多数是由SETSET命令命令设置的,它一般有ONON和和OFFOFF两个
8、选项,当为ON状态时,设置有效,为OFF状态时设置无效。有的SET命令用TO指定设置值。FoxPro系统使用SET命令进行多种状态设置。nSET命令的两种主要形式n若干常用的状态设置命令SET 命令的两种主要形式:命令的两种主要形式:n命令格式1. SET ON|OFF2. SET TO n说明:1. 第一种形式提供两种状态供用户选择:ON|OFF,在不作选择时由系统指定默认状态。2. 第二种形式,将指定的值提供给有关参数。如: SET DEFAULT TO A: SET STRICTDATE TO 0B.状态设置命令状态设置命令若干常用的状态设置命令若干常用的状态设置命令n会话状态设置SET
9、TALK ON/off 在会话状态开通时,visual Foxpro在执行命令时会向用户提供大量的反馈信息。nSET status ON/off nSET console ON/off nSET century ON/off B.状态设置命令状态设置命令8.1.4例如:?请输入关键字:Set console offAccept to maSet console on上面几条命令的执行过程是:当屏幕显示提示信息后,立即切断从键盘上通过accept命令输入的保密文字,之后恢复显示从键盘上输入的其他信息。设置输出信息方向命令设置输出信息方向命令 【命令格式】Set console on|off【命令
10、功能】用于程序中规定是否允许将输出信息送住屏幕或窗口。【说明】on表示允许,off表示不允许,默认设置为on。用户常用此命令来切断键盘与屏幕间的联系,使通过键盘输入的信息不被显示出来。C.程序结束命令程序结束命令格式格式1 1:RETURNRETURN 功能:功能:结束当前程序段的执行,返回调用的上结束当前程序段的执行,返回调用的上一级(指过程调用),若在主程序中就结束整一级(指过程调用),若在主程序中就结束整个程序的执行,返回命令窗口。个程序的执行,返回命令窗口。 格式格式2 2:CANCELCANCEL 功能:功能:终止程序的执行,清除所有私有变量,终止程序的执行,清除所有私有变量,返回命
11、令窗口。返回命令窗口。 格式格式3 3:QUITQUIT 功能:功能:在程序中执行它,不但结束程序的执行,在程序中执行它,不但结束程序的执行,而且还退出系统,返回而且还退出系统,返回Windows。 2021-7-620D.信息对话框函数信息对话框函数MESSAGEBOX MessageBox函数用于显示一个信息对话框,可以在程序运行过程中,显示一些信息,例如提示信息、错误信息等。其构成如图所示。信 息 对 话 框 的信 息 对 话 框 的“标题标题”部分。部分。信 息 对 话信 息 对 话框 的框 的 “ 图图标标”部分。部分。信息对话框的信息对话框的“提示信息提示信息”部分。部分。信 息
12、对 话 框 的信 息 对 话 框 的“按钮按钮”部分。部分。2021-7-621D.信息对话框函数信息对话框函数MESSAGEBOX 格式:格式:变量名变量名=MESSAGEBOX(信息内容信息内容,对话框类型对话框类型,对话框标题对话框标题)信息内容信息内容对话框标题对话框标题对话框按钮类型对话框按钮类型Messagebox(“您真的要退出系统吗?您真的要退出系统吗?”,4+32+256,“信息提示信息提示”)种类种类值值说说 明明参数参数1 1出现出现按钮按钮0 0仅有仅有“确定确定”按钮按钮1 1有有“确定确定”和和“取消取消”按钮按钮2 2有有“终止终止”、“重试重试”和和“忽略忽略”
13、三个按钮三个按钮3 3有有“是是”、“否否”和和“取消取消”三个按钮三个按钮4 4有有“是是”和和“否否”两个按钮两个按钮5 5有有“重试重试”和和“取消取消”两个按钮两个按钮参数参数2 2图标图标类型类型1616停止图标停止图标3232问号图标问号图标4848惊叹号图标惊叹号图标6464信息图标信息图标参数参数3 3默认默认按钮按钮0 0第一个按钮第一个按钮256256第二个按钮第二个按钮512512第三个按钮第三个按钮对话框类型的参数说明:对话框类型的参数说明:按钮类型按钮类型+图标类型图标类型+默认按钮默认按钮,代号如下:代号如下:对话框函数的返回值:对话框函数的返回值:由下表决定由下表
14、决定返回值返回值选定按钮选定按钮1 1确定确定2 2取消取消3 3终止终止4 4重试重试5 5忽略忽略6 6是是7 7否否练习:写出下图所对应的对话框函数练习:写出下图所对应的对话框函数Messagebox(你的口令不对?,0+48+0,”提示)Messagebox(该数据库不存在,2+64+256,”提示“)6.1.4 6.1.4 输入输出命令输入输出命令1. 数据输入2. 数据输出3. 格式化输入输出命令1.数据输入数据输入n命令格式:n功能:在屏幕上显示提示信息,等待用户从键盘上输入数据到指定的内存变量。交互式语句。ACCEPT TO INPUT TO WAITTO 说明:1.交互式的含
15、义是在程序与用户之间互相交流交换数据,才能完成命令功能。2.上面的交互式语句都是非格式输入语句。3.这三条命令都只限于对内存变量的输入,不能用于字段变量的输入。 4.数据的输入是在程序文件执行到该行的时候进行的。n功能:等待用户输入字符型数据,并存入指定内存变量中。n说明:即提示行,可提高程序的可读性。但对程序无任何影响,可以省略。n说明:TO 内存变量名,是必须项; 输入字符串时不带引号;若直接回车,变量中是一个空串。格式:格式:ACCEPT TO 字符接收命令字符接收命令1.数据输入数据输入ACCEPTACCEPT使用举例使用举例libu5.prg libu5.prg 编一程序,将编一程序
16、,将jbqkjbqk表打开,在程序运表打开,在程序运行中输入人员姓名,显示指定姓名的人员记录。行中输入人员姓名,显示指定姓名的人员记录。NOTE NOTE 该程序用于从人事数据表中查找用户指定姓名的人员信息。该程序用于从人事数据表中查找用户指定姓名的人员信息。CLEARCLEARUSE jbqkUSE jbqkACCEPT ACCEPT 请输入要查找的姓名:请输入要查找的姓名: TO name TO nameLOCATE FOR ALLTRIM(LOCATE FOR ALLTRIM(姓名姓名)=name)=nameDISPLAYDISPLAYRETURNRETURN1.数据输入数据输入n功能:
17、从屏幕上接受数据到指定的内存变量中。n说明:(1)这里的数据可以是任意类型的。但必须用定界符指明输入的数据类型。输入逻辑值要带”.”。输入字符串要带引号。输入日期型数据要用。INPUT TO 通用数据接收命令通用数据接收命令1.数据输入数据输入【libu6.prglibu6.prg】已知圆半径为已知圆半径为r r,求圆面积,求圆面积s s(要求四舍五入(要求四舍五入保留三位小数)。保留三位小数)。* * 该程序用于计算用户指定半径的圆的面积。该程序用于计算用户指定半径的圆的面积。CLEARCLEARINPUT INPUT 请输入圆半径请输入圆半径r= TO rr= TO rs=ROUND(PI
18、()s=ROUND(PI()* *r2,3) r2,3) &PI()&PI()为圆周率函数为圆周率函数,ROUNDROUND函函数为四舍五入函数数为四舍五入函数?该圆半径为:该圆半径为:,r,r?该圆面积为:该圆面积为:,s,sRETURNRETURNINPUTINPUT使用举例使用举例1.数据输入数据输入例6.3输入两个数,求它们的运算CLEARINPUT “输入第一个数” TO XINPUT “输入第二个数” TO YWAIT “输入一个运算符” TO PZ=X&P.Y &到底进行什么运算,取决于P中的运算符?X,P,Y,”=”,ZRETURNn1 数据输入( WAIT )n格式: WAI
19、T “提示信息” TO WINDOW AT, TIMEOUT n功能:n 显示提示信息,暂停程序的执行,直到用户按任意键或单击鼠标时,程序继续运行(1)WAIT命令只接收单个字符,输入字符时,不需要加定界符,系统将输入的字符赋值给;若用户是按回车键或者单击鼠标左键,系统将空串赋值给;(2)若省略,则显示默认的提示信息“按任意键继续”;否则要加字符串定界符;(3)通常,显示在Visual FoxPro主窗口或当前用户自定义窗口中,如果指定了WINDOW子句,则在主窗口的右上角会出现一个WAIT提示窗口,用来显示提示信息,也可以用AT短语指定窗口的显示位置;(4)若选用NOWAIT短语,系统将不等
20、待用户按键,继续向下执行程序;(5)TIMEOUT子句用来设定等待的时间,以秒数为单位。超过此时间系统将不再等待用户按键,自动往下执行程序。注注意意(wait.prg)clearuse jbqklist for 性别=男wait“按任意键显示女学生情况“ windows timeout 10list for 性别=女use1.数据输入数据输入nINPUT、ACCEPT和和WAIT的区别的区别ninput:可接受各种类型数据naccept:只接受字符串nwait:只接受单个字符n?表达式表n? 表达式表功能:换行或不换行显示值或表达式2.数据输出数据输出文本输出命令文本输出命令TEXTENDTE
21、XT功能:在屏幕上显示功能:在屏幕上显示TEXT和和ENDTEXT之间的所有文之间的所有文本信息。本信息。语法:语法:TEXT文本信息文本信息ENDTEXT3.格式化输入输出命令格式化输入输出命令n格式输出命令格式 功能在屏幕的指定位置输出表达式的值格式:格式: SAY 3.格式化输入输出命令格式化输入输出命令n格式输入命令格式 说明(1)SAY子句用于显示提示信息,GET子句用于为变量输入新值。 (2)GET子句中的变量必须有确定的初值。初值决定了该变量的类型和宽度。 (3)get后并不要求立即有read子句,它可以是一串GET后的最后一个,若无READ,是不能输入信息的,数据输入后,VF将
22、接受到的数据存入内存的临时区域,一旦READ执行,就会把这些数据真正存储到相应的GET变量中。格式:格式: SAY GET READ libu8.prgCLEARUSE jbqkAPPEND BLANK 2, 8 SAY 基本情况输入界面:基本情况输入界面: 4,10 SAY 编号:编号: GET 编号编号 6,10 SAY 姓名:姓名: GET 姓名姓名 8,10 SAY 性别:性别: GET 性别性别 10,10 SAY 出生年月:出生年月: GET 出生年月出生年月 12,10 SAY 职称:职称: GET 职称职称 14,10 SAY 部门:部门: GET 部门部门 16,10 SAY
23、 基本工资:基本工资: GET 基本工资基本工资 18,10 SAY 婚否:婚否: GET 婚否婚否READUSE第六章第六章 程序设计基础程序设计基础6.1程序与程序文件6.2程序的三种基本结构 6.3多模块程序设计 结构化程序包括三种基本结构,即结构化程序包括三种基本结构,即顺序结构顺序结构选择结构选择结构循环结构循环结构 6.2 6.2 程序的三种基本结构程序的三种基本结构 顺序结构是程序设计中最基本的结顺序结构是程序设计中最基本的结构,该结构按照程序命令出现的先后顺构,该结构按照程序命令出现的先后顺序依次执行。序依次执行。6.2.1 顺序结构顺序结构例6.3输入两个数,求它们的运算CL
24、EARINPUT “输入第一个数” TO XINPUT “输入第二个数” TO YWAIT “输入一个运算符” TO PZ=X&P.Y &到底进行什么运算,取决于P中的运算符?X,P,Y,”=”,ZRETURN6.2.1 顺序结构顺序结构6.2.2 选择结构选择结构n单分支IFENDIFn双分支IFELSEENDIFn多分支DO CASEENDCASE格式:IF ENDIF 条件条件命令序列命令序列ENDIF的下一条命令的下一条命令NY(1)单分支选择结构)单分支选择结构(单分支结构流程图)(单分支结构流程图)单分支选择结构说明单分支选择结构说明(1)(1)根据根据 的逻辑值进行判断。如果的逻
25、辑值进行判断。如果 的逻的逻辑值为辑值为.T.T.,就依次执行,就依次执行 命令序列命令序列 ,执行完后就转,执行完后就转去执行去执行ENDIFENDIF之后的命令。如果之后的命令。如果 的逻辑值为的逻辑值为.F.F.,则则IFIF 和和ENDIFENDIF之间的所有命令都不执行,而直之间的所有命令都不执行,而直接转到接转到ENDIFENDIF之后的命令。之后的命令。 (2)IF(2)IF语句和语句和ENDIFENDIF语句必须成对出现,且各占一行。语句必须成对出现,且各占一行。(3)(3)为了程序阅读方便,便于以后维护修改,建议对为了程序阅读方便,便于以后维护修改,建议对于于 命令序列命令序
26、列 部分采取向右缩进书写的方式。部分采取向右缩进书写的方式。关闭或打开关闭或打开状态信息状态信息Eg1:求圆的面积:求圆的面积(半径(半径0)格式:格式: IF IF 命令序列命令序列11 ELSE ELSE 命令序列命令序列22 ENDIF ENDIF功能:根据条件的逻辑功能:根据条件的逻辑 值来决定程序执行值来决定程序执行 命命令序列令序列11还是还是 命令序命令序列列22。 条件 语句序列 2 ENDIF 后的语句 .F. .T. 语句序列 1 (2)双分支选择结构)双分支选择结构(1)(1)IFIF、ELSEELSE、ENDIFENDIF必须各占一行。每一个必须各占一行。每一个IFIF
27、必须有一个必须有一个ENDIFENDIF与之对应,即与之对应,即IFIF和和ENDIFENDIF必须成对出现。必须成对出现。(2) ELSE(2) ELSE子句是可选的。子句是可选的。(3)(3)语句序列语句序列1 1和语句序列和语句序列2 2中还可以包含中还可以包含IFIF语句,称为语句,称为IFIF语句的嵌套。语句的嵌套。要注意,每次嵌要注意,每次嵌套中的套中的IFIF语句必须与语句必须与ENDIFENDIF成对出现,成对出现,ENDIFENDIF总是与其前面的最近的总是与其前面的最近的IFIF配套。配套。双分支选择结构说明双分支选择结构说明2双双分支分支条件语句条件语句Eg2:求圆的面积
28、:求圆的面积(半径(半径0)2双双分支分支条件语句条件语句Eg3:编写密码:编写密码校验程序,设密校验程序,设密码为码为“ABC”例6.7 libu5输入一个人名,在表输入一个人名,在表JBQKJBQK中查找,中查找,若找到了,显示相应的记录;若没有找到,若找到了,显示相应的记录;若没有找到,显示没有找到信息显示没有找到信息库文件查询的相关函数库文件查询的相关函数nRECNO()返回当前记录的记录号返回当前记录的记录号nEOF() 判断记录指针是否指向文件尾判断记录指针是否指向文件尾nBOF() 判断记录指针是否指向文件头判断记录指针是否指向文件头Found() 当当 continue,see
29、k,locate 命命令执行成功时,返回令执行成功时,返回.T.求求ax2+bx+c=0ax2+bx+c=0方程的解。方程的解。输入:a,b,c计算:求解方程输出:两个实根或两个复根b2-4ac=0,有两个相等实根。b2-4ac0,有两个不等实根。b2-4ac0,有两个共轭复根。例6.81 1、语法结构、语法结构DO DO CASE CASE 表达式表达式 CASE CASE 1 语句序列语句序列11 CASE CASE 2 语句序列语句序列22 CASE CASE n 语句序列语句序列nn OTHERWISE OTHERWISE 语句序列语句序列n+1n+1ENDCASEENDCASE2 2
30、、功能、功能条件条件1语句语句1YNENDCASE后面的语句后面的语句条件条件2语句语句2YN条件条件n语句语句nYN语句语句n+12.多分支语句多分支语句DO CASE根据多个条件表达式的值,选择根据多个条件表达式的值,选择一个一个执行执行 。语句格式:语句格式: DO CASE CASE条件表达式条件表达式1 CASE条件表达式条件表达式2 CASE条件表达式条件表达式N OTHERWISE ENDCASE2.多分支语句多分支语句DO CASE 多分支选择的说明多分支选择的说明1.1. 多向选择中,任何时刻最多只有一个语句序多向选择中,任何时刻最多只有一个语句序列被执行。不管有几个列被执行
31、。不管有几个casecase条件成立,执行条件成立,执行最先遇到的最先遇到的casecase之后的语句。之后的语句。2.2. 若所有的条件表达式都为假,转去执行若所有的条件表达式都为假,转去执行OTHERWISEOTHERWISE后面的语句。并且该语句可省略。后面的语句。并且该语句可省略。3.3. DO CASEDO CASE、CASE CASE 和和ENDCASEENDCASE必须各占必须各占一行。每个一行。每个DO CASEDO CASE必须有一个必须有一个ENDCASEENDCASE与之与之对应,即对应,即DO CASEDO CASE和和ENDCASEENDCASE必须成对出现。必须成对
32、出现。(4 4)多分支选择结构中各)多分支选择结构中各CASECASE语句后的语句后的 是按其先后顺序判断执行的,因此对实际问是按其先后顺序判断执行的,因此对实际问题进行编程时,应认真考虑各个条件排列的先题进行编程时,应认真考虑各个条件排列的先后顺序。后顺序。 多分支选择的说明多分支选择的说明libu9.prg 输入一个分数,判断该分数属于“优秀”、“良好”、“及格”还是“不及格”。SET TALK OFFINPUT “ 输入成绩输入成绩: TO SCOREDO CASECASE SCORE100?“ 输入错误输入错误!CASE SCORE=90 ?“ 优秀优秀!CASE SCORE=75?“
33、 良好良好!CASE SCORE=60?“ 及格及格!OTHERWISE?“ 不及格不及格!ENDCASESET TALK ONCANCEL(libu9a)Set talk offUse cjAccept 请输入查询学生的学号 to nolocate for alltrim(学号)=noIF .not. eof () * if found() DO CASECASE 成绩100?输入错误!CASE 成绩=90 ?优秀!CASE 成绩=75?良好!CASE 成绩=60?及格!OTHERWISE?不及格!ENDCASE ElSE? ” 没有该学号的学生。“ENDIFUseSet talk on四则
34、运算四则运算vf6b5CLEARinput A= to Ainput B= to B TEXT 1.加法加法 2.减法减法 3.乘法乘法 4.除法除法ENDTEXTINPUT 请输入选择请输入选择: TO OPDO CASE CASE OP=1 c=a+b ?A+B=+allt(str(C) CASE OP=2 c=a-b ?A-B=+allt(str(C) CASE OP=3 c=a*b ?A*B=+allt(str(C) case OP=4 IF B=0 INPUT 请重新输入请重新输入B(不能为不能为0),B= TO B ENDIF C=A/B ?A/B=+allt(str(C,6,2)
35、 OTHERWISE ?选择错选择错!ENDCASEEg4:求分段函数:求分段函数 0 (x5)F(x)= 2x2-x (-1=x1) x (1=x5) 1)IF ENDIF和DO CASE ENDCASE 必须成对使用。 2)条件表达式可以是各种表达式或函数的组合,其值必须是逻辑值。 3)语句序列可以由一条或多条命令组成。 4)DO CASE ENDCASE 命令,每次最多只能执行一个语句序列。在多个CASE项的条件表达式值为真时,只执行第一个条 件表达式值为真的语句序列,然后执行 ENDCASE的后面的第一条命令。注注意意某公司为了促销,采用购物打折扣的办法:每位顾客一某公司为了促销,采用
36、购物打折扣的办法:每位顾客一次购物(次购物(1 1)在)在10001000元以上的,按九五折优惠;(元以上的,按九五折优惠;(2 2)在)在20002000元以上的,按九折优惠;(元以上的,按九折优惠;(3 3)在)在30003000元以上的,按元以上的,按八五折优惠;(八五折优惠;(4 4)在)在50005000元以上的,按八折优惠。编写元以上的,按八折优惠。编写程序,输入购物款数,计算并输出优惠价。程序,输入购物款数,计算并输出优惠价。 设购物款为设购物款为x x元,优惠价为元,优惠价为y y元,付款函数即为:元,付款函数即为: x ( x1000 )x ( x1000 )0.95x0.9
37、5x ( 1000 x2000 ) ( 1000 x2000 ) y=y=0.9x0.9x( 2000 x3000 )( 2000 x3000 )0.85x0.85x ( 3000 x5000 )( 3000 x5000 )0.8x0.8x( x5000 )( x5000 ) 练习n有一部分程序被反复地执行。循循环环结结构构当型循环:当型循环:计数循环:计数循环:数据库扫描:数据库扫描:不知道循环次数不知道循环次数己知循环次数己知循环次数处理表中数据处理表中数据n(1)不带有LOOP和EXIT语句的当型循环 n循环结构(当型循环)i=1=100s=s+i=0+1=1i=1+1=2i=2=100
38、s=s+i=1+2=3i=2+1=3i=3=100s=s+i=3+3=6i=3+1=4i=101=100.F.i=100s=s+i=s+100i=100+1=101 逐条输出逐条输出1982年以后出生的职工记录年以后出生的职工记录n(2)带有LOOP和EXIT语句的当型循环 LOOPLOOP语句:强行返回到循环开始语句。语句:强行返回到循环开始语句。EXITEXIT语句:强行跳出循环,接着执行语句:强行跳出循环,接着执行ENDDOENDDO后的语句后的语句 例6.12用表记录指针控制循环。编制程序求表JBQK中最高工资和最低工资。 use jbqkstore 基本工资 to MA,MIdo w
39、hile not eof()MA=MAX(基本工资,MA)MI=MIN(基本工资,MI)skipenddo?最高工资为:,MA?最低工资为:,MIreturn例6.14Clearstore 0 to s,nStore 1 to iDo while i=100if i%3=0i=i+1Loopendif求1100之间不能被3整除的数的和及个数。s=s+in=n+1i=i+1enddo? s=,s? n=,nreturnFOR - ENDFOR语句语句真真假假(1 1) 、 、 都是数值表都是数值表达式;当达式;当 是是1 1时,可以省略时,可以省略STEPSTEP子子句。句。(2 2)ENDFO
40、RENDFOR或或NEXTNEXT语句为循环终端语句,用语句为循环终端语句,用以标明本循环结构的终点。该语句必须和以标明本循环结构的终点。该语句必须和FORFOR语句配对使用。语句配对使用。(3(3)在循环体内的适当位置也可以放置)在循环体内的适当位置也可以放置EXITEXIT和和LOOPLOOP语句,作用和用法与当型循环结构语句,作用和用法与当型循环结构类似。类似。(4)(4)循环次数循环次数( (终值终值- -初值初值)/)/步长步长+1+1。计数循环说明计数循环说明 i的值是: A、7 2 B、6 1 C、8 3 D、7 4例6.10计算从n到m,增量为p的和,n、m和p程序执行后再输入
41、,若n小于m,p应大于0,否则p应小于0。CLEARINPUT 请输入初值N: TO NINPUT 请输入终值M TO MINPUT 请输入增量P TO PS=0FOR X=N TO M STEP P S=S+XENDFOR?从+LTRIM(STR(N,10,2)+到+LTRIM(STR(M,10,2)+增量为+LTRIM(STR(P,10,2);+的和为:+LTRIM(STR(S,20,2)RETURNSCAN ENDSCAN语句语句表文件扫描循环语句表文件扫描循环语句库文件扫描循环的说明库文件扫描循环的说明n对当前打开的数据库文件中按照指定条件进行顺序扫描,使记录指针自动下移。nSCAN循
42、环暗含了SKIP操作,及判断指针是否指向文件尾的操作。nSCAN循环只能用于数据库文件操作中,只能对记录指针进行控制。而其他两类循环可以用于任何地方。对对jbqk表编写表编写程序,输出程序,输出1960年以后(包含年以后(包含1960年)出生年)出生的男性的的男性的姓名姓名、性别和出生日期。、性别和出生日期。Libu15.prgclear set talk offuse jbqkscan for 出生年月1960-01-01 and 性别=男? 姓名,性别,出生年月endscanuse 对数据库表文件扫描时三种循环的等价格式:库文件扫描循环:SCAN ENDSCAN当循环:GO TOPDO W
43、HILE .NOT. EOF()SKIPENDDO计数循环:n=RECCOUNT()FOR i=1 TO nGO iENDFOR例:计算某部门的所有职工基本工资总和。例:计算某部门的所有职工基本工资总和。(scanfor.prgscanfor.prg)CLEAR SET TALK OFFUSE JBQKACCEPT “输入部门名称: TO PS=0SCAN FOR 部门=P?编号,姓名,基本工资S=S+基本工资ENDSCAN?“部门为”+P+“的工资总和为,SUSE SET TALK ON请将下面的程序改写成当循环!例:计算某部门人员工资总和。例:计算某部门人员工资总和。USE jbqkACC
44、EPT 输入部门名称: TO PS=0GO TOP &该处可省略,为什么DO WHILE !EOF() IF 部门=P ?编号,姓名,基本工资S=S+基本工资ENDIFSKIPENDDO?“部门为”+P+“的工资总和为,SUSE 当循环循环嵌套循环嵌套n定义:多重循环即循环的嵌套,指的是循环中又包含循环。n说明:1.内循环和外循环可以相同,也可以不同。2.LOOP和EXIT仅限于当前循环的跳转,不能跨层。3.注意层次分明,互不交叉。多重循环程序设计时,应注意以下几点:三种循环不仅可以自身嵌套,而且可以互相嵌三种循环不仅可以自身嵌套,而且可以互相嵌套。套。嵌套时,要在一个循环体内包含另一个完整的
45、嵌套时,要在一个循环体内包含另一个完整的循环结构。无论那种嵌套关系,都必须将一个完整的循环结构。无论那种嵌套关系,都必须将一个完整的循环语句全部放在某个循环体内。而不能使两个循环循环语句全部放在某个循环体内。而不能使两个循环语句相互交叉。语句相互交叉。内嵌循环外层循环外层循环内嵌循环正确格式正确格式多重循环结构应用举例多重循环结构应用举例 nest.prgnest.prg找出所有基本工资超过输入值的编号、姓名与基本工资找出所有基本工资超过输入值的编号、姓名与基本工资CLEARUSE jbqkINPUT “ 输入基本工资: TO PSCAN IF 基本工资P ?编号+SPACE(3)+姓名+SP
46、ACE(3)+STR(基本工资,9,2) ?FOR I=1 TO 30?-ENDFOR ENDIFENDSCANUSE运行结果运行结果:运行结果:例6.12求100999(三位的整数)之间的“水仙花”数,即一个三位整数等于它各位立方的和。如15313+53+33。CLEARFOR A=1 TO 9 FOR B=0 TO 9 FOR C=0 TO 9 N=A*100+B*10+C IF N=A3+B3+C3 ?N=,N ENDIF ENDFOR ENDFORENDFORRETURN怎样分离d1,d2,d3?现在你会完成程序了吗现在你会完成程序了吗?例题:水仙花数判断例题:水仙花数判断个位: d1
47、十位: d2百位: d3d1=num%10;d3=num/100;d2=num/10%10d2=num%100/10循环结构嵌套举例循环结构嵌套举例 例 用双重循环打印九九乘法表,即: 11=1,12=2,19=9 21=2,12=4,29=18 91=9,92=18,99=81 问题分析:这是一个有9个行、9个列数据项的矩阵,可以用双重循环解决。外循环用于控制各个行,内循环用于控制每一行的各个列项,一行输出完毕以后,换行输出下一行各个列的数据项。程序代码如下: 循环结构嵌套举例循环结构嵌套举例* *打印乘法九九表。打印乘法九九表。CLEARCLEARFOR a=1 TO 9FOR a=1 T
48、O 9 FOR b=1 TO 9 FOR b=1 TO 9 p=a p=a* *b b ?STR(a,1)+?STR(a,1)+STR(b,1)+=+STR(p,2)+ +STR(b,1)+=+STR(p,2)+ ENDFOR ENDFOR ? & ? &注意注意?和和? ?的区别的区别ENDFORENDFORRETURNRETURN例例 (libu4) (libu4) 编写程序计算1!+2!+3!+4!+n!表达式的结果。基本思路基本思路:(1)总体表达式值为求和,设变量s。(2)表达式中每一项为累乘,设变量f。(3)内循环使用累乘表达式:f=f*j,求每一项的值;外循环使用累加表达式:s=
49、s+f,求各项和。 循环结构嵌套举例循环结构嵌套举例6.36.3 多模块程序设计多模块程序设计n模块的分类n模块的建立与调用n变量作用域基本概念基本概念 结构化的程序设计方法通常将一个复杂的规模较大的程序系统划分为若干个功能相关又相对独立的一个个较小的模块,再把这些模块划分为更小的用几十行语句实现的简单模块。将一个应用程序划分成一个个功能简单、单一的模块程序,不仅便于程序的开发,也利于程序的阅读和维护。 模块是一个相对独立的程序段,它可以被其他模块所调用,也可以去调用其他的模块。通常,把被其他模块调用的模块称为子程序,把调用其他模块而没有被其他模块调用的模块称为主程序。在Visual FoxP
50、ro中,模块可以是模块可以是命令文件,也可以是过程。命令文件,也可以是过程。 Visual FoxPro通过PROCEDURE命令、FUNCTION命令以及其它相关的命令为这样的模块化设计提供支持。 模块化程序设计的优点模块化程序设计的优点n复杂系统化大为小,化繁为简n便于维护n提高系统设计效率(多人并行开发)6.3.1 6.3.1 模块分类模块分类模块又可以叫过程,而过程的分类有两种:一种叫外部过程或叫命令文件;另一种叫内部过程,还有一种叫函数。2021-7-6941.1.子程序(子程序(外部过程)外部过程)外部过程(子程序)外部过程是一个独立的文件,就是将一段程序存盘,扩展名也是.PRG,
51、编写的方法与编写一般程序基本相同(前边编写的程序都可以叫外部过程),区别,就是在程序中至少有一个至少有一个RETURN语句语句,当执行它以后返回调用处。外部过程在调用时先从磁盘上打开并读入内存执行。子程序的建立子程序的建立 建立子程序的方法与建立程序的方法类似。但要注意: 每个子程序必须单独使用一个文件名保存起来,子程序文件名的扩展名也是.PRG。 Part 1 1. 1. 子程序子程序Part 1Part 2 1 1有参子程序中的形式参数定义有参子程序中的形式参数定义 【命令格式】Parameters 【命令功能】该语句必须是子程序中的第一条语句。中的参数可以是任意合法的内存变量名。 1.
52、1. 子程序子程序Part 3 2 2外部过程子程序调用命令外部过程子程序调用命令1.1.子程序子程序【命令格式】 Do| WithPart 4子程序的返回子程序的返回 格式: RETURN TO MASTER | TO 功能:将程序执行的控制权返回到指定程序的相关代码行。说明: (1)该语句放在一个程序的末尾。 (2)不带参数的RETURN语句的功能是将程序控制权返回到调用该子程序的主程序的下一条命令语句。 (3)RETURN TO MASTER:如果有多级程序调用,某一子程序的该语句将使程序控制权返回到最高一级调用程序。 (4)RETURN TO :表示将控制权交给指定的程序。1 1 子程
53、序子程序子程序嵌套调用子程序嵌套调用 图示图示1DO ADO BRETURNRETURN主程序子程序 A子程序 B注意 RETURN 的使用子程序嵌套调用子程序嵌套调用 图示图示2注意 RETURN 的使用DO ADO BRETURN TO MASTER主程序子程序 A子程序 B101 例例6.20 6.20 利用主程序调用子程序的方法利用主程序调用子程序的方法计算计算n!/(n-k)!k!n!/(n-k)!k! 例题例题 1.1.外部过程外部过程2021-7-6102计算自然数阶乘的子程序代码是:计算自然数阶乘的子程序代码是:PARA M,PP=1FOR I=1 TO M P=P*IENDF
54、ORRETU 将该子程序以文件名将该子程序以文件名ACT.PRGACT.PRG保存起保存起来。来。例题例题 外部过程外部过程2021-7-6103对应的主程序代码是:对应的主程序代码是:CLEARINPUT 请输入N的值: TO NINPUT 请输入K的值: TO KSTORE 1 TO NJC,KJC,NKJCDO ACT WITH N,NJCDO ACT WITH N-K,NKJCDO ACT WITH K,KJCS=NJC/(NKJC*KJC)?S=,SRETURN地址传递例题例题 do fangcheng with 1,6,9do fangcheng with 3,7,14改写例改写例
55、6.8 6.8 程序,以程序,以A,B,C A,B,C 为形式参数。在命令窗口用为形式参数。在命令窗口用dodo命令分别命令分别以以(1,6,9)(1,6,9)、(、(3,7,143,7,14)、()、(1,8,51,8,5)为三组实参进行调用。)为三组实参进行调用。例题例题 2021-7-6105用带参数传递数据的方法编程计算球的体积(四舍五入保留三位小数)。球体积的计算公式是:volume=4/3r3,Visual FoxPro表达式是:volume=4/3*PI()*r3。 练习1 1 外部过程外部过程内部过程内部过程内部过程是若干个程序段(小过程)组成一个文件存盘,扩展名是.PRG,有
56、一定的格式,要执行内部过程,必须用专门的命令先打开该过必须用专门的命令先打开该过程所在的文件程所在的文件,然后再调用(从内存中调用执行),所以叫内部过程。2. 2. 内部过程内部过程 1.1.过程文件建立过程文件建立 过程文件中的每个子过程必须过程文件中的每个子过程必须以以ProcedureProcedure语句开头,后面跟语句开头,后面跟过程名,每个子过程以过程名,每个子过程以ReturnReturn语句结束。语句结束。 【命令格式】*过程文件名1Procedure Procedure ReturnEndprocEndprocProcedure ReturnEndproc2. 2. 内部过程
57、内部过程 2 2过程文件的打开过程文件的打开 在调用过程前,过程文件一旦被打开,过程文件中所有的子过程都被打开,可以随时被调用。调用过程文件前,应先打开相应的过程文件。【命令格式】Set Procedure To .prg,文件名文件名2Additive【命令功能】打开过程文件。 6.3.3 6.3.3 内部过程内部过程 3 3过程调用及返回过程调用及返回过程文件的返回过程文件的返回 【命令格式命令格式】 Return To Master|To 【命令功能命令功能】 将控制返回到调用程序中调用命令的下一条语句,即返回过程的调用处。过程文件的调用过程文件的调用 【命令格式】 Do With 【命
58、令功能】 执行以命名的过程,即执行已有的过程。 6.3.3 6.3.3 内部过程内部过程 4 4过程文件的关闭过程文件的关闭 当过程文件调用结束后,应及时关闭过程文件,可以使用下列命令关闭过程文件。 1.Set Procedure To 2.Close Procedure 6.3.3 6.3.3 内部过程内部过程 2021-7-6111例 用主程序调用过程的方式编程求圆面积、圆周长、球体积。(procmain.prg)6.3.3 6.3.3 内部过程内部过程 例题例题 例例 :利用内部过程计算:利用内部过程计算n!/(n-k)!k!n!/(n-k)!k!2021-7-6112 在主程序中调用过
59、程文件中的过程的方式编程求圆面积、圆周长、球体积。 可以将三个子过程组合成一个过程文件,假设文件名为:circle。例题例题 6.3.3 6.3.3 内部过程内部过程 例题例题 例 写出下列程序的输出结果。源程序如图所示。运行结果:9 3 6.3.2 6.3.2 自定义函数自定义函数 用户按一定规则来定义的函数,称为自定义函数。【命令格式】FUNCTION () PARRAMETERS RETURN ENDFUNC【命令功能】用户自己定义一个函数其中:函数名与过程命名相同,只是函数名后的括号必须带,形参表中是用逗号分开的变量名,RETURN后表达式是任意型的。6.3.2 6.3.2 自定义函数
60、自定义函数 【说明】1.定义了函数之后,可以作为一个内部过程,也可以与调用程序段放在一个文件中。2.定义自定义函数的返回值可以是常量、变量或表达式等。如果没在Return命令后加入返回值,Visual FoxPro将自动返回. .T.T.。当程序或用户自定义函数执行到Return命令就会立刻返回调用程序中。3.函数调用 () 函数里参数默认传递方式是值传递。 116主程序CLEARINPUT 请输入N的值: TO NINPUT 请输入K的值: TO KSTORE 1 TO NJC,KJC,NKJCS=JC(N)/JC(N-K)/JC(K) &调用用函数名,方法与系统函数调用相同。?S=,SRE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 检测仪器设备校准与维护服务补充协议
- 互联网企业SPV股权并购协议书
- 培训课程创新研发补充协议
- 《医药论坛杂志》投稿须知官方认证
- 2025年四年级英语教师教学总结模版
- 译林版必修三英语《Unit 3 The world online》Grammar and usage课课件
- 江西理工大学《文艺演出策划》2023-2024学年第二学期期末试卷
- 2025年档案管理个人工作总结模版
- 泉州师范学院《果树育种技术》2023-2024学年第一学期期末试卷
- 新媒体运营与推广协议
- 2025至2030中国电化学储能行业发展现状及趋势前景预判研究报告
- 2025年公共卫生与预防医学知识考试试题及答案
- 离婚协议书原版
- 2025年高考地理复习 大单元八 人口、城镇与大都市辐射 题库
- 新人教版数学五年级下册3.3 练习五课件
- 中央2025年陆军面向社会公开招考专业技能类文职人员笔试历年参考题库附带答案详解
- 2025年天津市滨海新区中考数学一模试卷
- 湖北省武汉市2025届高中毕业生四月调研考试化学试题及答案(武汉四调)
- 2025年杭州市高三语文二模作文题目“科技与相互理解”写作指导
- 小学生摄影课件
- 2025(标准)承包清工劳务合同协议书范本
评论
0/150
提交评论