




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章程序设计基础6.1程序与程序文件交互工作方式,要求用户必须比较熟悉数据库知识,了解数据组织结构,如果要同时对数据表格多次进行某些操作,就必须反复拟行相关命令,这些命令不被保存,当退出visualfoxpro系统环镜或计算机断电后,就荡然无存了,对于使用大量数据的最终用户来说,直接使用交互方式管理数据是不现实的。因此,要建立真正的管理信息系统必须编制程序。6.1.1程序的建立与编辑创建程序:(1)在“文件”菜单中选择“新建”命令(或工具栏中“新建”按钮),然后在“新建”对话框中选择“程序”单选按钮,再单击“新建文件”按钮。(2)命令窗口中,键入命令:modifycommand[文件名[扩展名]]保存程序(1)从“文件”菜单中选取“保存”命令(2)按“ctrl+w”组合键。编辑程序(1)在“文件”菜单中选择“打开”命令(2)命令窗口中:modifycommand<程序文件名>程序的书写规则注释语句格式:①note<注释内容>②*<注释内容>③&&<注释内容>对话开关语句格式:settalkoff|on输出语句格式:?[<表达式列表>]格式:??[<表达式列表>]命令的分行每个命令都以回车键结束,一行只能写一条命令;若一条命令太长,并在分行处加上续行符“;”。6.1.2程序文件的运行单击“程序”菜单中的“运行”命令,在打开的运行对话框中找到要执行的程序文件,单击“运行”按钮。单击常用工具栏上的“运行”按钮。在命令窗口中键入命令:do<程序文件名>程序文件名前可以使用路径,否则指系统默认目录。若运行的是.prg程序则扩展名可以省略。若运行其他的程序则扩展名不能省;6.1.2程序文件的运行执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕,或者执行到以下命令:①
cancal:终止程序运行,清除所有的私有变量,返回命令窗口;②retry:返回到调用行本身,可以实现程序的重复调用。③
return:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口;
④
quit:结束程序执行并退出visualfoxpro系统,返回操作系统
6.1.3简单的输入输出命令6.1.3简单的输入输出命令1.accept命令【格式】accept[<提示信息>]to<内存变量>【功能】在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内存变量。该命令只接受字符型数据,输入的字符串不需要加定界符
【例6-2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容。程序文件名为prog2.prg。modicommandprog2settalkoffclearaccept“请输入数据库名:”toaaaopendatabase&aaaaccept"请输入表名"tobbbuse&bbblistusesettalkonreturn2.input命令
【格式】input[<提示信息>]to<内存变量>【功能】在程序执行过程中,将用户交互式输入的内容赋值给指定内存变量
可以输入字符型、数值型、逻辑型、日期型和日期时间型等类型数据,而且可以是常量、变量、函数或表达式等形式,按回车键结束输入,系统将输入的数据赋值给<内存变量>。【例6-4】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为prog4.prgsettalkoffclearinput“长方形一边的长为:”toainput“长方形另一边的长为:”tobs=a*b?“长方形的面积为:”,ssettalkonreturn3.wait命令【格式】wait[<提示信息>][to<内存变量>][window[at<行>,<列>]][nowait][clear|noclear][timeout<数值表达式>]【功能】显示提示信息,暂停程序执行,直到用户按任意键或单击鼠标时继续执行程序。若选择可选项[to<内存变量>],将输入的单个字符作为字符型数据赋给指定的<内存变量>;若用户是按enter键或单击鼠标,<内存变量>的值为空串。若省略所有可选项,屏幕显示“键入任意键继续……”默认提示信息
【例6-6】在student数据库的stud表中显示任意一个系学生的情况。程序文件名为prog6.prgsettalkoffclearopendatabasestudentusestudwait“请输入待查学生的系号(1—3):”tonifval(n)<1.or.val(n)>3wait“输入无效,结束程序运行!”windowtimeout5returnelsestore“0”+ntoaaalistfor系别号=aaaendifclosedatabasesettalkonreturn4.三条输入命令的异同accept命令只能接受字符型数据,不需定界符,输入完毕按回车键结束;
wait命令只能输入单个字符,且不需定界符,输入完毕不需按回车键;
input命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,需用定界符,输入完毕按回车键结束。
程序的基本结构
visualfoxpro系统提供的命令丰富,且功能强大,把这些命令和程序设计语句有效地组织在一起,就形成了实现某一特定功能的程序。
visualfoxpro系统的程序有两个特点:一是程序控制流模式,由顺序、分支、循环三种基本结构构成。二是面向对象可视化的结构程序模块,在每个模块的内部也是由程序控制流组成。常见的控制结构如下:1.顺序结构顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。visualfoxpro系统中的大多数命令都可以作为顺序结构中的语句。2.分支结构分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。
3.循环结构循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。
4.过程结构在许多应用程序中,有一些程序段需要反复执行多次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。这样做增强了程序的可读性和模块化。我们称这种具有独立功能而且可以被其它程序调用的程序序列为过程。6.2程序的基本结构求解的基本逻辑:vfp程序多数用于数据处理,解决问题的基本逻辑是:输入数据→处理数据→输出数据。程序的通用性:程序的通用性指程序对多种场合的适应性,通用性好的程序的应用范围较广。6.2.1顺序结构顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。例题:将学生表中学号为20050008,其姓名一栏由万华改为万强。clearsettalkoffopendatabase学生use学生accept“请输入要修改记录的学号:”toxh
locatefor学号=xhreplace姓名with“万强”useclosedatabasesettalkonreturn6.2.2选择结构单分支选择单向选择语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。(1)语句格式:if〈条件表达式〉〈语句序列〉endif(2)单向条件转向语句的流程图双分支选择双向选择语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。(1)语句格式:if〈条件表达式〉〈语句序列1〉else〈语句序列2〉endif(2)双分支条件转向语句的流程图如下图所示
例:输入两个实数,求它们的最大值。settalkoffclearinput“实数a=”toainput“实数b=”tobifa>=bmax=aelsemax=bendif?a,”与”,b,”中的最大值为:”,maxreturn也可以用单分支的选择语句来实现settalkoffclearinput“实数a=”toainput“实数b=”tobmax=aifb>amax=bendif?a,”与”,b,”中的最大值为:”,maxreturn例:输入一个大于0的年份值,判断该一年份是否是闰年,如果是闰年,就输出“xxxx年是闰年”,否则输出“xxxx年不是闰年”。.闰年的条件是:能被4整除但不能被100整除,或能被100整除且能被400整除。
多向选择语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。(1)语句格式:docase case〈条件表达式1〉 <命令行序列1> case〈条件表达式2> <命令行序列2> …… case〈条件表达式n> <命令行序列n>〉
[otherwise <命令行序列n+1>]endcase多分支选择【例】假设收入(p)与税率(r)的关系如下表,编程求税金。程序文件名为tax.prg。
0,p<800r=0.05,800≤p<20000.08,2000≤p<50000.1,p≥5000settalkoffclearinput“请输入收入:”topdocasecasep<800r=0casep<2000r=0.05casep<5000r=0.08otherwiser=0.1endcasetax=p*r?”税金为:”,taxsettalkonreturn【例】用if……endif实现上例计算税金,程序文件名为tax_2.prg。
iif()函数vfp中有一个函数,它能够先进行条件判断,然后决定返回其值。它的使用效果与选择语句if…endif相同,但比选择语句更快捷。格式:iif(<条件表达式>,<表达式1>,<表达式2>)例:输入两个实数,求这两者的最大值。文件名:exam_if_1.prgsettalkoffclearinput“实数a=”toainput“实数b=”tobmax=iif(a>=b,a,b)?a,”与”,b,”中的最大值为:”,maxreturn例:用iif()来实现p.163例6-7。文件名exam_if_1.prgsettalkoff
clearinput“实数x=”toxy=iif(x>0,iif(x>10,x*x+1,3*x*x-2*x+1),x*x+4*x-1)?“分段函数值为:”+str(y,10,2)settalkonreturn使用分支语句应注意的几点①if……endif和docase……endcase必须配对使用,docase与第一个case〈条件表达式〉之间不应有任何命令。②<条件表达式>可以是各种表达式或函数的组合,其值必须是逻辑值。③<命令行序列>可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。
6.2.3循环结构1.dowhile循环语句格式:dowhile<条件表达式><语句序列>enddo【例6-9】编程求2+4+6+……+100之和。settalkoffclears=0i=2dowhilei<=100s=s+ii=i+2enddo?“2+4+6+……+100=”,ssettalkonreturn【例6-11】显示学生表中在1985年以后出生的学生记录。settalkoffclearopendatabase学生use学生dowhile.not.eof()if出生日期>=ctod(“1985-01-01”)displayendifskipenddouseclosedatabasereturn【例6-12】将自然数中的前n个完全平方数进行累加,当累加之和超过100时停止累加,即求m=02+12+22+…+(n-1)2。要求程序显示每次的累加和。说明:1.什么是完全平方数?一个数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数,也叫做平方数。例如:
0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400…2.什么是完全立方数?一个数如果是另一个整数的完全立方,那么我们就称这个数为完全立方数,也叫做立方数。例如:1,8等settalkoffclearstore0toi,mdowhile.t.ifm>100exitelsem=m+i^2endif
?”完全平方数累加和:”+str(m,6)
i=i+1enddosettalkonreturn语句格式:
for<循环变量>=<初值>to<终值>[step<步长>]
<循环体>
endfor|next
2.for循环语句
使用for循环语句的有关说明:(1)省略step<步长>,则〈步长〉为默认值1;(2)〈初值〉、〈终值〉和〈步长〉都可以是数值表达式,但这些表达式仅在循环语句开始执行时计算一次。循环语句执行过程中,初值、终值和步长是不会改变的,并由此确定循环的次数;(3)可以在循环体内改变循环变量的值,但会改变循环执行次数;(4)exit和loop命令可以出现在循环体内【例6-13】求1000之内所有偶数之和。settalkoffclears=0fori=0to1000step2s=s+inext?“1000之内所有偶数之和为”,ssettalkonreturn【例6-14】从键盘输入10个数,编程找出其中的最大值和最小值。settalkoffclearinput“请从键盘输入一个数:”toastoreatomax_val,min_valfori=2to10input“请从键盘输入一个数:”toaifmax_val<amax_val=aendififmin_val>amin_val=aendifendfor?“最大值为:”,max_val?“最小值为:”,min_valsettalkonreturn3.“指针”型循环控制语句(1)语句格式:scan[<范围>][for<条件表达式1>][while<条件表达式2>]<命令行序列>endscan(2)语句功能:该语句在指定的范围内,用数据记录指针来控制循环次数。执行语句时,首先判断函数eof()的值,若其值为“真”,则结束循环,否则,结合〈条件表达式1〉或〈条件表达式2〉,执行〈命令行序列〉,记录指针移到指定的范围和条件内的下一条记录,重新判断函数eof()的值,直到函数eof()的值为真时结束循环。【例6-16】分别统计“学生”表中男生和女生的人数。settalkoffclearopendatabase学生use学生sotre0tox,yscanif性别=“男”
x=x+1elsey=y+1endifendscan?“男生人数:”,x,”女生人数:”,yuseclosedatabasesettalkonreturn【例6-17】显示“学生”表中入学成绩在600分以上的学生名单。settalkoffclearopendatabase学生use学生scanfor入学成绩>600display学号,姓名,入学成绩endscanuseclosedatabasesettalkonreturn4.多重循环多重循环即循环的嵌套,是指在一个循环结构的循环体中又包含另一个循环。外循环——我们称外层循环为外循环内循环——被包含的循环为内循环。嵌套层数一般没有限制,但内循环的循环体必须完全包含在外循环的循环体中,不能相互交叉。下面是一个dowhile…enddo循环嵌套的一般形式:dowhile<条件表达式1><语句序列11>dowhile<条件表达式2><语句序列21>enddo<语句序列12>enddo下面是一个dowhile…enddo循环嵌套一个for循环的一般形式:dowhile<条件表达式1><语句序列11>
for<循环变量>=<初值>to<终值>[step<步长>]<语句序列21>
endfor|next<语句序列12>enddo下面是一个for循环嵌套另一个for循环的一般形式:for<循环变量>=<初值>to<终值>[step<步长>]
<语句序列11>
for<循环变量>=<初值>to<终值>[step<步长>]<语句序列21>
endfor|next<语句序列12>endfor|next下面是一个for循环嵌套一个dowhile…enddo循环的一般形式:for<循环变量>=<初值>to<终值>[step<步长>]
<语句序列11>dowhile<条件表达式2><语句序列21>enddo<语句序列12>endfor|next【例】从键盘输入n个实数,对它们按从小到大的顺序排序,并将排序后的这n个数依次输出。【例】从键盘输入n个实数,对它们按从小到大的顺序排序,并将排序后的这n个数依次输出。**************************************************************本程序使用冒泡排序法对给定的n个实数进行排序**************************************************************settalkoffcleardimensiona(100)input“自然数n=”tonfori=1ton ??“实数a(“+str(i,3)+”)=“ input“”toa(i)endforfori=1ton-1&&对n个数进行n-1趟排序
forj=1ton-i&&处理第i趟排序
ifa(j)>a(j+1) &&需要交换相邻的两个数
tmp=a(j) &&交换相邻的两个数
a(j)=a(j+1)a(j+1)=tmp
endif
endforendfor*下面按从小到大的顺序依次输出各个数fori=1ton
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理一级技师试题及答案
- 美容师考试风险管理的必要性及试题及答案
- 汽车美容师行业竞争形势分析试题及答案
- 2024年统计学考试错误分析试题及答案
- 大数据技术与应用场景试题及答案
- 汽车美容技术理论与实践研究试题及答案
- 小自考视觉传播的必考题目试题及答案
- 挖掘古代文学史试题及答案的重点
- 宠物营养师的持续教育与提升试题及答案
- 2024年计算机基础考试新动态试题及答案
- 早期阻断性矫治-乳前牙反颌的矫治(口腔正畸科)
- 手术室护士子宫切除手术护理配合常规
- DB61T 5097-2024 强夯法处理湿陷性黄土地基技术规程
- 12zg003多层和高层混凝土房屋结构抗震构造图集
- 甲状腺手术甲状旁腺保护
- DL-T-5438-2019输变电工程经济评价导则
- CJJ89-2012 城市道路照明工程施工及验收规程
- 股权转让通知函协议书
- 起重吊装及起重机械安装拆卸工程危大安全管理措施
- 2024年河南省许昌市九年级中考物理一模试卷+
- (2024年)AED(自动体外除颤器)使用指南
评论
0/150
提交评论