版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章结构化程序设计VisualFoxPro程序设计主讲教师:高骏Emil:704098395@第8章VisualFoxPro程序设计主讲教师:高骏
本章要求:1.掌握VFP程序的建立、修改、运行。
2.掌握程序的三种基本结构。3.了解过程和过程文件。
本章要点:
程序的三种控制结构。学时安排:6学时(理论)+6学时(实践)课程要求本章要求:课程要求结束作业
第8章程序设计基础
8.1
程序文件及其编辑环境
8.2
程序中几种常用命令
8.3
程序的基本控制结构
8.4
过程和用户自定义函数结束作业第8章程序设计基础8.1程序文件8.1程序文件及其编辑环境
在ViusalFoxPro中,程序是由一系列ViusalFoxPro可以理解的命令、函数和操作组成的,这些命令和函数可以在ViusalFoxPro中的命令窗口和以人工方式逐一执行,也可以把它们放在一个程序文件中,以文件的形式来执行。【8.1】
假定学号的前四位为入学年份,第5,6位为专业代码.编写命令文件test.prg,分别统计所有学生和2010年入学,专业代码为03的学生选修课程号为101课程的平均成绩.8.1程序文件及其编辑环境在ViusalSETTALKOFFSETDEFAULTTOd:\学生管理OPENDATA学生管理SELECTAVG(成绩)FROM
成绩
WHERE; 课程号=“101”INTOARRAYm1SELECTAVG(成绩)FROM成绩
WHERE; 课程号=“101”ANDLEFT(学号,4)=“2010”;ANDSUBS(学号,5,2)=“03”INTOARRAYm2CLEAR?”所有学生的平均成绩:”font“宋体”,20,m1(1)font“宋体”?”指定学生的平均成绩:”font“宋体”,20,m2(1),font“宋体”CLOSEDATASESETTALKONRETURNSETTALKOFF(1)以命令方式建立、修改程序文件ModifyCommand<程序文件名>格式:功能:创建、编辑以“程序文件名”为名的程序文件说明:1.在编辑窗口输入一条条命令。2.^w或关闭窗口存盘、^q或者<Esc>放弃存盘3.程序文件的扩展名为.prg,可以省略。(2)以菜单方式建立、修改程序文件文件新建文件打开已有的程序文件.prg8.1.1程序文件的建立和运行1.程序文件的建立(1)以命令方式建立、修改程序文件ModifyComm(2)命令方式(1)菜单方式程序运行Do<文件名>格式:功能:运行程序文件程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。选中运行2.程序文件的运行、调用(2)命令方式(1)菜单方式程序运行Do<文件名>8.1.2VisualFoxPro编程特点1.变量不区分大小写类型说明示例类型说明示例a数组型aStudentsf浮点型fInterestc字符型cNamel逻辑型lFlagy货币型yCurrentValuen数值型nCounterd日期型dBirthDayo对象oEmployeet日期时间型tLastModifiedu未知uReturnValueb双精度型bValue建议的变量命名约定8.1.2VisualFoxPro编程特点1.变量不2.变量不需预先声明当把一个值保存到某一变量而该变量原先不存在时,VisualFoxPro系统会隐含地声明它,并有初始值存在。用户在变量里放什么数据,变量就是什么类型。
3.命令分行程序中每条命令都以回车键结尾,一行只能写一条命令。若需分行书写,可以使用分号“;”表示续行。4.添加注释VisualFoxPro系统对整行注释和行中部分注释有不同的格式。整行注释使用“*”引导,行中部分注释使用“&&”引导。2.变量不需预先声明当把一个值保存到某一变量8.2程序中几种常用命令8.2.1基本输入命令1.Wait命令
暂停程序的运行,直到用户输入一个字符,也可用于输出一条提示信息WAIT[<信息文本>]
[TO
<内存变量>][WINDOW[AT
<行>,<列>]]
[NOWAIT][CLEAR][NOCLEAR][TIMEOUT
<数值表达式>]保存键入的字符,省略TO子句不保存省略则显示“按任意键继续….不等待用户输入关闭提示窗口不关闭提示窗口,直到下一个WAIT命令自动关闭WINDOW子句使屏幕出现一个WAIT提示窗口,内容由<信息文本>确定,位置有AT子句指定.省略AT子句则出现在屏幕右上角TIMEOUT子句设定等待时间(以秒为单位)8.2程序中几种常用命令8.2.1基本输入命令1.W说明:③若指定WINDOWS子句,则会出现一个WAIT提示窗口,用以显示提示信息.提示窗口在主窗口的右上角,也可以用AT短语指定其在主窗口中的位置.④若同时选用NOWAIT短语和WINDOWS子句,系统将不等待用户按键,直接往下执行.⑤若选用NOCLEAR短语,则不关闭提示窗口,直到用户执行下一条WAITWINDOWS命令或WAITCLEAR命令为止.⑥TIMEOUT子名用来设定等待时间(秒数)。例如执行:
Wait“欢迎使用!”Windows在屏幕右上角弹出一个窗口,显示“欢迎使用!”,按任意键后窗口消失。说明:例如执行:在屏幕右上角弹出一个窗口,显示“欢迎使用!”2.Accept命令Accept[<提示信息>]To<内存变量>格式:功能:在程序执行过程中,暂停执行,等待用户从键盘输入字符串。当用户以回车键结束输入完数据后,系统将用户输入的内容作为字符串赋值给指定内存变量。然后继续往下执行程序。说明:(1)如果选用提示信息,系统会在屏幕上显示提示信息;(2)输入的数据只能是字符型数据,并且不用定界符;(3)如果用户什么数据都不输,就按下回车键,系统认为是输入了一个空串,自动会把空串赋给指定的内存变量中。2.Accept命令Accept[<提示信息>]【例8.2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容.程序文件名为
PROG1.PRG。SETTALKOFFStedefaulttod:\学生管理CLEARACCEPT
"请输入数据库名:"
TO
AAAOPENDATABASE
&AAAACCEPT
"请输入表名:"
TO
BBBUSE
&BBBbrowseUSESETTALKONRETURNDoprog1请输入数据库名:学生管理请输入表名:
学生【例8.2】编程从键盘输入某数据库的文件名,要求打开该数据库Use人才档案ExclusiveAccept"请输入编号:"TobhLocateFor编号=bh?编号,姓名Usesetdefaulttod:\人才管理opendata人才管理Accept"请输入职称:"tozcselect*from专业特长;where职称=zc
【例8.3】输入姓名,在人才档案表中查询某编号对应的姓名【例8.4】编写程序,浏览专业特长表中不同职称的记录集。Do8.4请输入职称:教授Do8.3请输入编号:sh01001Sh01001
金银桥输入字符串时不加定界符Use人才档案Exclusivesetd3.Input命令Input[<提示信息>]To<内存变量>格式:功能:(1)如果选用<提示信息>,那么系统会首先显示该提示信息的值,作为提示信息。(2)输入的数据可以是常量、变量,也可以是一般的表达式。但不能不输入任何内容直接按回车键。(3)输入字符串是必须加定界符“”,输入逻辑型常量要用圆点定界符(如.T.,.F.),输入日期时间型常量是要用大括号(如{^2012-03-01})。说明:等待用户从键盘输入数据,用户可以输入任意合法的表达式。当以回车键结束输入时,系统将表达式的值存入指定的内存变量,程序继续运行。3.Input命令Input[<提示信息>]To<内【例8.5】编写命令文件test1.prg,查找指定日期以后出生的学生
SETDEFAULTTOd:\学生管理OPENDATABASE学生管理INPUT"输入日期:"
TO
mrqSELECT学号,姓名,出生日期
FROM
学生;
WHERE出生日期>mrq;
NOWAITCLOSEDATABASERETURNDotest1输入日期:{^1993-01-01}【例8.5】编写命令文件test1.prg,查找指定日期以ClearInput“长方形一边的长为:”TOAInput“长方形另一边的长为:”TOBS=A*B?"长方形的面积为:",S【例8.6】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为8.6.prg在命令窗口中输入:ModifyCommand8.6Do8.6长方形一边的长为:5长方形另一边的长为:6运行结果:长方形的面积为:30屏幕显示键盘输入Clear【例8.6】从键盘输入两个任意正数,编程求以两数为Setdefaulttod:\人才管理Input"请输入要删除的人的出生日期:"toCsrqDeletefrom人才档案where出生日期=CsrqSelect人才档案BrowClosedata【例8.7】编写程序,将人才档案表中指定的出生日期的记录逻辑删除。请输入要删除的人的出生日期:{^1969-02-03}Setdefaulttod:\人才管理【例8.7】编4.格式输入语句格式:@<行,列>Say<提示信息>get<变量>@<行,列>Say<提示信息>get<变量>…….Read功能:在指定的行、列位置输入一个常量,当执行到Read语句时,将常量赋值给指定的变量。说明:1、多个@语句可以配置一个Read语句。但是中间不能有别的语句。2、Get后面的变量要先赋值。4.格式输入语句格式:@<行,列>Say<提示ClearSetdefaulttod:\人才管理Use专业特长ExclusiveAccept"请输入职称:"tozcLocateAllFor职称=zc@2,10Say"编号"Get编号@3,10Say"专业"Get专业@4,10Say"毕业学校"Get毕业学校@5,10Say"专业年限"Get专业年限@6,10Say“职称”Get职称ReadClosedata【例8.8】
编写程序,在指定的位置显示修改“专业特长”表中指定职称的记录。Clear【例8.8】编写程序,在指定的位置显示修改“专业@<行,列>Say<提示信息>[Picture<格式描述符>]格式:功能:(1)在指定的行、列输出表达式的值。(2)格式描述符用来限定数据输出的类型、长度及格式。8.2.2基本输出语句1.格式输出语句@<行,列>Say<提示信息>[Pictur格式字符含义例子9只允许显示数字字符与正负号Picture"999.99"#一个数值型数字与正负号Picture"####.##",千位分隔符Picture“99,999"$显示货币符Picture"$999.99"X允许任意字符Picture"xxxxx"!将字符转成大写Picture"xxxxx"常用格式描述符的功能格式字符含义例子9只允许显示数字字符与正负号PictureUse人才档案ExclusiveAccept"请输入编号:"tobhLocatFor编号=bh@13,20Say编号Picture"!!!!!!!!"
@14,20Say姓名Picture"xxxxxxxxx"Use【例8.9】输入编号,在人才档案表中查询某编号对应的姓名。字符转换成大写任意字符Use人才档案Exclusive【例8.9】x1=Messagebox("您真的要退出系统吗?",4+16+0,"退出系统")Ifx1=6ReturnEndifMessagebox(<“提示信息”>,<对话框类型>,<“对话框标题“>)格式:功能:在屏幕上弹出一个指定格式的对话框。说明:对话框类型是由“按钮个数+显示图标+默认按钮”组成。提示信息对话框标题提示信息对话框标题对话框类型按钮个数显示图标默认按钮2.对话框MessageBox函数P67x1=Messagebox("您真的要退出系统吗?",4+1代码代码的含义0确定按钮1确定、取消按钮2终止、重试、和忽略按钮3是、否和取消按钮4是、否按钮5重试、取消按钮按钮个数代码显示图标代码代码代码的含义16停止图标32问号图标48感叹号图标64信息图标默认焦点按钮的代码代码代码的含义0默认焦点在第一个按钮256默认焦点在第二个按钮512默认焦点在第三个按钮按钮返回值按钮返回值确定1忽略5取消2是6终止3否7单击对话框按钮的返回值4+16+0单击“否”,返回7返回值送到x1如果x1=“是”返回系统单击“是”,返回6代码代码的含义0确定按钮1确定、取消按钮2终止、重试、和忽略8.2.3程序结尾命令1、程序的末尾可以使用Return命令,能使程序执行结束,并返回到调用它的上级程序继续执行,若无上级程序则返回到命令窗口。2、使用另一条命令为Cancel,它可以中止程序运行,并返回到命令窗口。3、使用Quit命令可以结束程序运行退出VisualFoxPro系统8.2.3程序结尾命令1、程序的末尾可以使用Return8.3程序的基本控制结构常见的控制结构如下:1.顺序结构顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。VisualFoxPro系统中的大多数命令都可以作为顺序结构中的语句。2.分支结构分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。3.循环结构循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。8.3程序的基本控制结构常见的控制结构如下:8.3.1顺序结构顺序结构是一种线性结构。是程序设计中最简单同时也是最基本的结构。它要求顺序地执行每一个基本的加工处理单位。命令序列1命令序列2【例8.10】计算圆的周长和面积。ClearInput"请输入圆的半径:"Tor&&输入半径c=2*3.14*r&&计算圆的周长s=3.14*r*r&&计算圆的面积?"圆的周长:",c&&输出周长?“圆的面积:”,s&&输出面积Return8.3程序的基本控制结构8.3.1顺序结构顺序结构是一种线性结构。分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句。If<条件表达式><语句序列>EndIf格式:功能:首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈语句序列〉;否则,执行EndIf后面的第一条语句。EndIf后面的语句TF语句序列条件1.简单的条件语句8.3.2条件分支结构分支结构是在程序执行时,根据不同的条件,选择执行ClearInput"X="TOxInput"Y="TOyIfx/3=Int(x/3)y=y+xEndIf?"Y=",y【例8.11】编写程序:先从键盘接收两个数x和y,然后判断x能否被3整除。如果x能被3整除,那么y的值增加x;否则y的值不变。EndIf后面的语句TF
y=y+xx/3=int(x/3)输入x,yIfmod(X,3)=0Clear【例8.11】编写程序:先从键盘接收两个数x和y,【例8.12】编写程序:修改“专业特长”表中的数据,把编号为“zj01002”的职称从“副教授”改为“教授”。ClearUse专业特长
ExclusiveLocateFor编号="zj01002"If职称="副教授"
Replace职称With"教授"
EndIfBrowseLast【例8.12】编写程序:修改“专业特长”表中的数据,把编号为2.带Else的条件语句If〈条件表达式〉〈语句序列1〉Else〈语句序列2〉EndIf格式:功能:FT语句序列1语句序列2条件EndIf后面的语句该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈语句序列1〉中的命令;否则,执行〈语句序列2〉中的命令;执行完〈命令行序列1〉或〈命令行序列2〉后都将执行EndIf后面的第一条语句。2.带Else的条件语句If〈条件表达式〉格式:功能【例8.13】输入一个姓名,在“学生”表中查找该姓名的学生,如果找到,显示该记录的姓名、性别和出生日期,否则显示“查无此人!”,程序名为test2.prgSETDEFAULTTOd:\学生管理OPENDATABASE学生管理USE学生IN0SELECT学生ACCEPT“请输入待查学生姓名:”TONAMELOCATEFOR姓名=NAMEIFEOF()=.F.?”姓名:”+姓名
FONT“宋体”,20?”性别:”+IIF(性别=.t.,“男”,”女”)FONT“宋体”,20
?”出生日期:”+DTOC(出生日期,1)FONT“宋体”,20ELSE
?”查无此人!”FONT“宋体”,20ENDIFCLOSEDATABASERETURNmessagebox(“查无此人!”,0+48+0,”例8.13”)【例8.13】输入一个姓名,在“学生”表中查找该姓名的学生,语句执行时,依次判断Case后面的条件是否成立。当发现某个Case后面的条件成立时,就执行该Case和下一个Case之间的语句序列,然后执行EndCase后面的语句令。如果所有的条件都不成立,则执行Otherwise与EndCase之间的语句序列,然后转向EndCase后面的语句。3.多分支语句DoCaseCase〈条件表达式1〉<语句序列1〉Case〈条件表达式2〉<语句序列2〉……Case〈条件表达式N〉〈语句序列N〉][Otherwise〈语句序列N+1〉]
EndCase格式:功能:条件2条件nOTHERWISE语句序列1语句序列2语句序列n语句序列n+1ENDCASE后面的语句条件1…语句执行时,依次判断Case后面的条件①不管有几个Case条件成立,只有最先成立的那个Case条件的对应命令序列被执行。②如果所有的Case条件都不成立,且没有Otherwise子句,则直接跳出本结构。③DoCase和EndCase必须配对使用,DoCase是本结构的入口,EndCase是本结构的出口。④DoCase和第一个Case子句之间不能插入任何命令。说明:DoCaseCase〈条件表达式1〉<命令行序列1〉Case〈条件表达式2〉<命令行序列2〉……Case〈条件表达式N〉〈命令行序列N〉][Otherwise〈命令行序列N+1〉]
EndCaseInput"请输入考试成绩:"
ToxDoCaseCasex<60?"不及格"Casex<70?"及格"Casex<80?"中等"Casex<90?"良好"Otherwise?"优秀"EndCase①不管有几个Case条件成立,只有最先成立的那个Case条件【例8.13】显示当前季节。程序文件如下。ClearYue=Month(Date())DoCaseCaseyue<4jj="春"Caseyue<7jj="夏"Caseyue<10jj="秋"
Otherwise
jj="冬"EndcaseWaitjjWindow从今天的日期里取出月份送到yue测试表达式的值是否在表达式中,是就返回.T.【例8.13】显示当前季节。程序文件如下。Clear从今天【例8.14】假设收入(P)与税率(R)的关系如下表,编程求税金。0P≤
3500R=0.053500<P≤
45000.084500<P≤
65000.1P>6500ClearInput"请输入收入:"
ToPDoCaseCaseP<=3500R=0CaseP<=4500R=0.05CaseP<=6500R=0.08OtherwiseR=0.1EndCaseTax=(p-3500)*r?"税金为:
"+Str(tax)【例8.14】假设收入(P)与税率(R)的关系如下表,编程求【例8.15】输入一个字符“男”或者“女”到变量“性别”中,再输入一个数值到变量“身高”中。计算:如果性别=“男”并且身高又在180以上,输出“参加篮球比赛”,否则输出“参加足球比赛”。如果性别为“女”并且身高在170以上输出“参加模特大赛”,否则输出“参加健美操比赛”。Acce"请输入你的性别:"
To性别Input"请输入你的身高:"
To身高If性别="男"
DoCaseCase身高>=180?"参加篮球比赛!"Case身高<180?"参加足球比赛!"EndCaseElseDoCaseCase身高>=170?
"参加模特比赛!"
Case身高<170?
"参加健美操比赛!"EndCaseEndIfReturn用Case包含If语句怎么写?【例8.15】输入一个字符“男”或者“女”到变量“性别”中,bca解题步骤:交换a、b的值交换a、c的值交换b、c的值【例8.16】编写程序,对任给的三个数,按从小到大的顺序输出。输入a,b,c的值开始TFA,b交换a>b?TFa>cA,c交换TFB,c交换b>c?bca解题步骤:【例8.16】编写程序,对任给的三个数,按从Input"请输入第1个数:"toaInput"请输入第2个数:"tobInput"请输入第3个数:"toc?"排序前",a,b,cIfa>bt=aa=bb=tEndifIfa>ct=aa=cc=tEndifIfb>ct=bb=cc=tEndif?“排序后",a,b,ca,b排序a,c排序B,c排序Input"请输入第1个数:"toaa=8.4循环结构程序循环结构也称为重复结构,是指程序在执行的过程中,程序中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。1.条件循环根据条件表达式的值决定循环体内语句的执行次数。格式1:功能:DoWhile<条件表达式><语句序列>EndDo条件FT循环体EndDo后面的语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行循环;否则,执行EndDo后面的第一条命令。如果第一次判断条件为假,一次也不循环。8.4循环结构程序循环结构也称为重复【例8.17】统计“人才档案”表中工资超过7000元的人数。ClearSetdefaulttod:\人才管理Use人才档案ExclusiveGoTopRc=0DoWhileEof()=.f.If工资现状>7000rc=rc+1EndIfSkipEndDo@2,30Say"工资在7000元以上的人"@2,60SayrcUseClearSetdefaulttod:\人才管理Use人才档案ExclusiveLocatefor工资>7000Rc=0DoWhileEof()=.f.rc=rc+1continueEndDo?"工资在7000元以上的人“,rcUse【例8.17】统计“人才档案”表中工资超过7000元的人数。ClearS=0I=1DoWhileI<=100S=S+II=I+1EndDo?"1+2+3+……+100=",S【例8.18】编程求1+2+3+……+100之和。一个循环结构一般应具备如下的条件:(1)循环的初始条件:一般为给循环控制变量赋初值;(2)循环头:循环语句的起始,设置、判断循环条件;(3)循环尾:循环语句的结尾;(4)循环体:位于循环头和循环尾之间、循环控制重复执行的语句序列。求s=1+3+5+7-------+51求s=1*2*3*--------*100(s=100!)求s=1!+2!+3!+…+n!求s=1!+2!+3!+…+n!Clear【例8.18】编程求1+2+3+……+100之和。DoWhile<条件表达式><语句序列1>[Loop]<语句序列2>[Exit]<语句序列3>EndDo格式2:功能:Loop语句:强行返回到循环开始语句。Exit语句:强行跳出循环,接着执行EndDo后的语句EndDo的后继语句循环体LoopExit循环条件DoWhile<条件表达式>格式2:功能:LClearJi=0Ou=0Dowhile.t.
Input”输入一个整数:”Toa
Ifa=0Exit
Else
Ifmod(a,2)=0ou=ou+1
endif
【例8.19】输入任意整数,分别统计偶数和奇数的个数,输入0为结束程序。Ifmod(a,2)<>0ji=ji+1EndifEndifEnddo?”奇数的个数为:”,ji?”偶数的个数为:”,ouReturnClear【例8.19】输入任意整数,分别统计偶数和奇数的个Flag=0I=2Input"请输入一个大于2的整数"ToNDoWhilei<nIfMod(n,i)<>0I=I+1LoopElseFlag=1ExitEndIfEndDo【例8.20】验证一个大于2的整数n是否为素数。一个数除了1和它本身之外,没有其他整数能整除的整数为素数。判别一个大于2的整数n是否为素数可以:用2,3,…,n-1作除数除n,只要有一个能整除n,n就不是素数。否则,n为素数。IfFlag=0?Str(n,3)+"是素数"Else?Str(n,3)+"不是素数"EndifIfn/i=int(n/i)Flag=0【例8.20】验证一个大于2的整数n是否为素【例9.21】全班50个同学报名参加运动会。如果是男同学并且身高又在180以上,输出“参加篮球比赛”,否则输出“参加足球比赛”。如果是女同学并且身高在170以上输出“参加模特大赛”,否则输出“参加健美操比赛”。最后统计参加各项比赛的人数。
else?"参加足球比赛!"
B=B+1EndifElseif身高>=170
?"参加模特比赛!"
C=C+1
else
?"参加健美操比赛!"
D=D+1
EndifEndIfSUM=SUM-1EndDo?"参加篮球比赛的人数"
,A?"参加足球比赛的人数"
,B?"参加模特比赛的人数"
,C?"参加健美操比赛的人数",DA=0B=0C=0D=0Sum=50DoWhileSUM>0Acce"请输入你的性别"
TO性别Input"请输入你的身高"
TO身高If
性别="男“if身高>=180
?"参加篮球比赛!"
A=A+1
【例9.21】全班50个同学报名参加运动会。如果是男同学并且2.步长循环步长循环控制语句,即根据循环变量的初值、终值和步长,决定循环体内语句的执行次数。For<循环变量>=<初值>To<终值>[Step<步长>]<循环体>EndFor|Next格式:功能:循环体ExitLoop循环变量增加步长循环变量获得初值FT循环变量在终值内首先将初值赋给循环变量,然后判断循环条件是否成立(若步长为正值,循环条件为“循环变量<=终值”;若步长为负值,循环条件为“循环变量>=终值”)。若循环条件成立,则执行循环体,然后循环变量增加一个步长值,并再次判断循环条件是否成立,以确定是否再次执行循环体。若循环条件不成立,则结束该循环语句,执行EndFor后面的语句。2.步长循环步长循环控制语句,即根据循环变量的初值1、省略Step步长,则步长为默认值1;2、初值、终值和步长都可以是数值表达式,当初值小于终值,步长必须为正,当初值大于终值,步长必须为负才可以循环;3、可以在循环体内改变循环变量的值,但会改变循环执行次数;4、Exit和Loop命令可以出现在循环体内。执行Loop命令时,结束本次循环,循环变量增加一个步长值,返回For循环头判断循环条件是否成立。执行Exit命令时,程序跳出循环,执行循环尾后面的语句说明:注意:1、循环终止的条件是:“循环变量的值超出终值”,而不是循环变量的值等于终值。2、超出的含义:当<步长>为正时,检查<循环变量>是否大于<终值>
当<步长>为负时,检查<循环变量>是否小于<终值>
当步长为0时,循环永不终止。For<循环变量>=<初值>To<终值>[Step<步长>]<循环体>EndFor|NextFor<循环变量>=<初值>To<终值>[Step<步长>]<循环体>EndFor|Next1、省略Step步长,则步长为默认值1;说明:注意:1、ClearS=1I=1DoWhileI<=100S=S*II=I+1EndDo?"1*2*3*……*100=",S【例8.22】编程求1*2*3*……*100之和。ClearS=1Fori=1to100s=s*IEndFor?"1*2*3*……*100=",SClear【例8.22】编程求1*2*3*……*100之和。【例8.23】全班50个同学报名参加运动会。如果是男同学并且身高又在180以上,输出“参加篮球比赛”,否则输出“参加足球比赛”。如果是女同学并且身高在170以上输出“参加模特大赛”,否则输出“参加健美操比赛”。最后统计参加各项比赛的人数。else
?"参加健美操比赛!"D=D+1EndifEndIfEndFor?"参加篮球比赛的人数"
,A?"参加足球比赛的人数"
,B?"参加模特比赛的人数"
,C?"参加健美操比赛的人数",DReturnA=0B=0C=0D=0ForI=1TO50Acce"请输入你的性别"
TO性别Input"请输入你的身高"
TO身高If
性别="男"DoCaseif身高>=180
?"参加篮球比赛!"A=A+1else?"参加足球比赛!"B=B+1EndifElseif身高>=170
?"参加模特比赛!"
C=C+1【例8.23】全班50个同学报名参加运动会。如果是男同学并且【例8.24】输入任意10个整数,将所有正整数显示出来。ClearFori=1to10Input“输入一个整数”ToaIfa>0?aElseLoopEndifEndFor在For循环语句中执行Loop语句,将会先修改循环变量的值,然后转向循环语句头部。【例8.24】输入任意10个整数,将所有正整数显示出来。Cl3.扫描循环扫描循环控制语句,即根据表中的当前记录指针决定循环体内语句的执行次数,扫描当前表中满足表中的记录。Scan[<范围>][For<条件表达式1>][While<条件表达式2>]<命令行序列>EndScan格式:功能:执行该语句时,记录指针在当前表的指定范围内自动从上往下依次移到满足条件的记录上,并对每一条记录执行循环体内的命令。(1)<范围>的默认值是All。(2)当指针移到文件尾时,自动退出循环。说明:循环体TFEof()3.扫描循环扫描循环控制语句,即根据表中的当前记【例8.25】用扫描循环控制语句,统计人才档案数据表中男同学的人数。clearRc=0Use人才档案ExclusiveScanallfor性别=“男”
rc=rc+1EndScan?“男同学的人数为",rcUse【例8.25】用扫描循环控制语句,统计人才档案数据表中男同学【例8.26】用扫描循环控制语句,显示人才档案数据表中年龄大于等于25的记录。clearUse人才档案ExclusiveScanallforyear(date())-year(出生日期)>=25display编号,姓名EndScanUse【例8.26】用扫描循环控制语句,显示人才档案数据表中年龄大练习:下列程序段执行后,输出结果是:记录号名称
1男子排球
2女子排球
3男子足球
4女子足球
5男乒乓球Use运动员表ExclusiveGo2ScanNext4ForLeft(名称,2)=“男" IfRight(名称,2)=“球"ExitEndifEndscan?名称男子足球练习:下列程序段执行后,输出结果是:记录号名称Use4.多重循环如果在一个循环内包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。下面是几种常见的二重嵌套形式:1.ForI=….…..ForJ=….….NextJ…..NextI2.FORI=….…..DOWHILE….….ENDDO…..NEXTI[[[[3.DOWHILEL….…..DOWHILE…….ENDDO…..enddo[[4.多重循环如果在一个循环内包含另一个循环结构,对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,也不能从外循环转向内循环。ForAForB
ForC……
NextC
NextBNextA[[[ForAForBForC……
NextB
NextANextC
[[[不能交叉正确的嵌套错误的嵌套对于循环的嵌套,要注意以下事项:ForA[[[For【例8.27】分析下面程序的运行结果:clearFori=1To3Forj=5To7?
I,jNextjNextiReturn[[151617252627353637【例8.27】分析下面程序的运行结果:clear[[
对于两个具有调用关系的程序文件,常称调用程序为主程序,被调用程序为子程序。子程序的建立和一般命令文件的建立方法相同,都是ModifyCommand,文件默认的扩展名还是Prg。调用方法是在主程序中用Do命令。8.4.1主程序和子程序Do子程序文件名ModifyCommand〈过程文件名〉文件格式:与程序一样主程序调用:返回主程序:Return[ToMaster]建立子程序:没有可选项,返回到调用处,有可选项,返回到调用的最高一级。1.子程序的调用和返回8.4过程和用户自定义函数对于两个具有调用关系的程序文件,常称调用程序为主程序,【例8.28】分析下面程序的运行结果:&&MAIN.PRGClearDoJADoJBDoJCReturn&&JA.RPG?"***"DoJBDoJCReturn&&JB.RPG?"#####"Return&&JC.RPG?"*******"ReturnToMaster【例8.28】分析下面程序的运行结果:&&MAIN.PRG【例8.29】利用子程序计算圆的面积:*主程序:DoWhile.T.ClearWait“是否要计算圆的面积(Y/N)?”TojaIfUpper(ja)=“Y” &&为“N”时结束程序Dozcx1.prgElseExitEndifEnddoReturn*子程序zcx1:ClearInput"输入圆的半径:"tobjS=3.14*bj**2?"圆的面积为:",sReturn【例8.29】利用子程序计算圆的面积:*主程序:2.带参数的子程序调用
调用子程序时参数表中的参数要传送给子程序,子程序也必须设置相应的参数接受语句。Parameters可以完成此项功能,但是必须是子程序的第一条语句。主程序调用:子程序接收:Do<过程文件名〉With<实际参数表>Parameters<形式参数表>各种各类型的常数、有具体值的变量没有具体指的变量,个数、位置和类型要和主程序的实际参数一样,但是名字可以不一样。例如:主程序:DozcxWith“张三”,89,性别子程序:Parametersa,b,c
变量姓名必须是赋过值的变量没有具体值2.带参数的子程序调用调用子程序时参数表中的参【例8.30】利用子程序计算圆的面积:*主程序:Clearymj=0 &&初始化用于接收圆面积的变量Input“请输入圆的半径:“To
bjDozcx2Withbj,ymj &&带参数调用子程序@7,10Say"圆的面积为:"+Str(ymj,10,2)Return*子程序zcx2:Parameterscj,sS=3.14*cj**2Return变量bj初始值为0计算后的面积【例8.30】利用子程序计算圆的面积:*主程序:函数名(实际参数表)3.自定义函数
自定义函数与子程序的区别在于自定义函数必须返回一个函数值,而子程序则无此限制。主程序调用格式:[Function<函数名>][Parameters<形式参数表>]
命令序列Return<表达式>如果是单独的程序,就可以省略这一句,如果自定义函数和主程序是一个程序,不能省略。从表达式返回函数值到主程序自定义函数格式:例如:主程序:
?a1(bb)自定义函数:Parametersbb
……Returnbb函数名(实际参数表)3.自定义函数自定义函【例8.31】利用自定义函数计算圆的面积:*主程序:clearInput“请输入圆的半径:“To
bj@7,10Say"圆的面积为:"+str(zcx3(bj),10,2) Return带参数调用自定义函数zcx3*自定义函数zcx3:ParametersrS=3.14*r**2Returns调用时bj是半径,返回时,bj是面积*主程序:clearInput“请输入圆的半径:“To
bj@7,10Say"圆的面积为:"+str(zcx3(bj),10,2) Return*自定义函数Functionzcx3ParametersrS=3.14*r**2Returns如果主程序和自定义函数放在一个文件中,那么一定要加上这么一句。【例8.31】利用自定义函数计算圆的面积:*主程序:8.4.2过程文件多个过程可以保存在一个过程文件中。过程文件打开后,其中的过程能被任何其它程序调用。称为内部过程调用。要调用内部过程,需在主程序中首先打开过程文件,然后再调用过程文件中的过程。打开过程文件:调用过程:关闭过程文件:SetProcedureTo<过程文件名>Do
<过程名>[with参数表]SetProcedureTo1.打开、调用、关闭过程文件
8.4.2过程文件多个过程可以保存在一个过程文2.过程的建立1、Procedure表示一个过程的开始,并命名过程名,过程名必须以字母或下划线开始。为1~8个字符;2、过程执行到Return处返回到调用程序或命令窗口。定义过程:
Procedure<过程名1><命令序列>Return[ToMaster]Procedure<过程名2><命令序列>Return……说明:过程文件可以单独建立成命令文件,也可以放在主程序的后面2.过程的建立1、Procedure表示一个过程的开始,【例8.32】有2个文件:程序文件Prog1.Prg是主文件,Pp1.Prg过程文件。ClearSetProcedureTopp1.prgInput"请从键盘输入一个数:"ToaInput"请从键盘输入一个数:"TobDoP1DoP2SetProcedureTo?"a=",a,"b=",b?"a+b=",a+b,"a-b=",a-b?"a*b=",a*b,"a/b=",a/bReturn*PP1.PRGProcedureP1C=1D=2C=C+DD=D+C?"c=",C,"d=",DReturnProcedureP2?"p2=",200Return打开pp1.prg过程文件pp1过程文件放了2个过程P1和P2关闭PP1.PRG过程文件【例8.32】有2个文件:程序文件Prog1.Prg是主文件【例8.33】编写计算园的面积和周长的程序。ClearSetProceduretozcx1N=0Dowhile.t.Clear@10,10say"请选择以下功能:"@11,10say"1-计算圆的面积:"@12,10say"2-计算圆的周长:"@13,10say"3-退出"@14,10say"请输入您的选择:"getnReadDocasecasen=1doproc1&&面积Casen=2doproc2&&周长Casen=3ExitEndcaseEnddoSetProceduretoReturn打开过程文件关闭过程文件*zcx1Procedureproc1ClearInput"请输入半径:"tobjs=3.14**bj?“圆的面积为:",sWaitReturnProcedureproc2ClearInput"请输入半径:"tobji=2*3.14*bj?"圆的周长为:",iWaitReturn【例8.33】编写计算园的面积和周长的程序。ClearDo本章小结VisualFoxPro既是一种数据库管理系统,也是一种程序设计语言。本章介绍了VisualFoxPro陈序设计的基本内容,包括程序的概念、程序的基本结构、多模块程序设计等等。本章小结VisualFoxPro既是一种数据实验六
程序设计作业要求作业上交实验六的Word文档和所作的程序文件。实验六程序设计作业要求作业上交实验六的Word文档和所作演讲完毕,谢谢观看!演讲完毕,谢谢观看!第8章结构化程序设计VisualFoxPro程序设计主讲教师:高骏Emil:704098395@第8章VisualFoxPro程序设计主讲教师:高骏
本章要求:1.掌握VFP程序的建立、修改、运行。
2.掌握程序的三种基本结构。3.了解过程和过程文件。
本章要点:
程序的三种控制结构。学时安排:6学时(理论)+6学时(实践)课程要求本章要求:课程要求结束作业
第8章程序设计基础
8.1
程序文件及其编辑环境
8.2
程序中几种常用命令
8.3
程序的基本控制结构
8.4
过程和用户自定义函数结束作业第8章程序设计基础8.1程序文件8.1程序文件及其编辑环境
在ViusalFoxPro中,程序是由一系列ViusalFoxPro可以理解的命令、函数和操作组成的,这些命令和函数可以在ViusalFoxPro中的命令窗口和以人工方式逐一执行,也可以把它们放在一个程序文件中,以文件的形式来执行。【8.1】
假定学号的前四位为入学年份,第5,6位为专业代码.编写命令文件test.prg,分别统计所有学生和2010年入学,专业代码为03的学生选修课程号为101课程的平均成绩.8.1程序文件及其编辑环境在ViusalSETTALKOFFSETDEFAULTTOd:\学生管理OPENDATA学生管理SELECTAVG(成绩)FROM
成绩
WHERE; 课程号=“101”INTOARRAYm1SELECTAVG(成绩)FROM成绩
WHERE; 课程号=“101”ANDLEFT(学号,4)=“2010”;ANDSUBS(学号,5,2)=“03”INTOARRAYm2CLEAR?”所有学生的平均成绩:”font“宋体”,20,m1(1)font“宋体”?”指定学生的平均成绩:”font“宋体”,20,m2(1),font“宋体”CLOSEDATASESETTALKONRETURNSETTALKOFF(1)以命令方式建立、修改程序文件ModifyCommand<程序文件名>格式:功能:创建、编辑以“程序文件名”为名的程序文件说明:1.在编辑窗口输入一条条命令。2.^w或关闭窗口存盘、^q或者<Esc>放弃存盘3.程序文件的扩展名为.prg,可以省略。(2)以菜单方式建立、修改程序文件文件新建文件打开已有的程序文件.prg8.1.1程序文件的建立和运行1.程序文件的建立(1)以命令方式建立、修改程序文件ModifyComm(2)命令方式(1)菜单方式程序运行Do<文件名>格式:功能:运行程序文件程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。选中运行2.程序文件的运行、调用(2)命令方式(1)菜单方式程序运行Do<文件名>8.1.2VisualFoxPro编程特点1.变量不区分大小写类型说明示例类型说明示例a数组型aStudentsf浮点型fInterestc字符型cNamel逻辑型lFlagy货币型yCurrentValuen数值型nCounterd日期型dBirthDayo对象oEmployeet日期时间型tLastModifiedu未知uReturnValueb双精度型bValue建议的变量命名约定8.1.2VisualFoxPro编程特点1.变量不2.变量不需预先声明当把一个值保存到某一变量而该变量原先不存在时,VisualFoxPro系统会隐含地声明它,并有初始值存在。用户在变量里放什么数据,变量就是什么类型。
3.命令分行程序中每条命令都以回车键结尾,一行只能写一条命令。若需分行书写,可以使用分号“;”表示续行。4.添加注释VisualFoxPro系统对整行注释和行中部分注释有不同的格式。整行注释使用“*”引导,行中部分注释使用“&&”引导。2.变量不需预先声明当把一个值保存到某一变量8.2程序中几种常用命令8.2.1基本输入命令1.Wait命令
暂停程序的运行,直到用户输入一个字符,也可用于输出一条提示信息WAIT[<信息文本>]
[TO
<内存变量>][WINDOW[AT
<行>,<列>]]
[NOWAIT][CLEAR][NOCLEAR][TIMEOUT
<数值表达式>]保存键入的字符,省略TO子句不保存省略则显示“按任意键继续….不等待用户输入关闭提示窗口不关闭提示窗口,直到下一个WAIT命令自动关闭WINDOW子句使屏幕出现一个WAIT提示窗口,内容由<信息文本>确定,位置有AT子句指定.省略AT子句则出现在屏幕右上角TIMEOUT子句设定等待时间(以秒为单位)8.2程序中几种常用命令8.2.1基本输入命令1.W说明:③若指定WINDOWS子句,则会出现一个WAIT提示窗口,用以显示提示信息.提示窗口在主窗口的右上角,也可以用AT短语指定其在主窗口中的位置.④若同时选用NOWAIT短语和WINDOWS子句,系统将不等待用户按键,直接往下执行.⑤若选用NOCLEAR短语,则不关闭提示窗口,直到用户执行下一条WAITWINDOWS命令或WAITCLEAR命令为止.⑥TIMEOUT子名用来设定等待时间(秒数)。例如执行:
Wait“欢迎使用!”Windows在屏幕右上角弹出一个窗口,显示“欢迎使用!”,按任意键后窗口消失。说明:例如执行:在屏幕右上角弹出一个窗口,显示“欢迎使用!”2.Accept命令Accept[<提示信息>]To<内存变量>格式:功能:在程序执行过程中,暂停执行,等待用户从键盘输入字符串。当用户以回车键结束输入完数据后,系统将用户输入的内容作为字符串赋值给指定内存变量。然后继续往下执行程序。说明:(1)如果选用提示信息,系统会在屏幕上显示提示信息;(2)输入的数据只能是字符型数据,并且不用定界符;(3)如果用户什么数据都不输,就按下回车键,系统认为是输入了一个空串,自动会把空串赋给指定的内存变量中。2.Accept命令Accept[<提示信息>]【例8.2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容.程序文件名为
PROG1.PRG。SETTALKOFFStedefaulttod:\学生管理CLEARACCEPT
"请输入数据库名:"
TO
AAAOPENDATABASE
&AAAACCEPT
"请输入表名:"
TO
BBBUSE
&BBBbrowseUSESETTALKONRETURNDoprog1请输入数据库名:学生管理请输入表名:
学生【例8.2】编程从键盘输入某数据库的文件名,要求打开该数据库Use人才档案ExclusiveAccept"请输入编号:"TobhLocateFor编号=bh?编号,姓名Usesetdefaulttod:\人才管理opendata人才管理Accept"请输入职称:"tozcselect*from专业特长;where职称=zc
【例8.3】输入姓名,在人才档案
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论