VF程序实例文件_第1页
VF程序实例文件_第2页
VF程序实例文件_第3页
VF程序实例文件_第4页
VF程序实例文件_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、PAGE PAGE 8VF程序实例一、多工作区、Replace、copy to .例题1: 涉及 set relation rilein to & n. 关系;亲属关系;叙述;故事 &有如下表: (1) XS.DBF(学号 C(8),姓名 C(8),性别 C(2),班级 C(9),出生日期 D,走读 L)(2) CJ.DBF(学号 C(8),课程名 C(20),成绩N(5,1) 说明:一个学生可以选择多门课程。请编写一个完整的程序,该程序能完成以下功能:1、 将表XS.DBF和表CJ.DBF建立关联,并显示出所有男同学的姓名以及他们所选课程的课程名2、 将XS.DBF表中所有班级为“2002级

2、2班”的同学信息拷贝到新表STUDENT.DBF中,STUDENT .DBF只含有学号、姓名、性别、走读四个字段 3、将姓名为“王小平”的同学的所有成绩提高10%CLEARCLOSE ALLSELECT 2USE CJINDEX ON 学号 TO XH & index onSELECT 1USE XSSET RELATION TO 学号 INTO B & relationSET SKIP TO BLIST FOR 性别=男 FIELDS 姓名,B.课程名 COPY TO STUDENT FOR 班级=2002级2班 FIELDS 学号,姓名,性别,走读replace b.成绩 with b.成

3、绩*1.1 for a.姓名=王小平例题2: 涉及update下面有两张表:总分表:ZF.DBF学号 姓名 语文 数学 总分110 张三 114 李四119王二成绩表: CJ.DBF学号 语文 数学110 67 65114 89 67119 78 95按照成绩表的成绩修改总分表的成绩,并计算出总分表的总分字段参考答案:CLOSE ALLSELE 2USE CJINDEX ON 学号 TAG XHCJSELE 1USE ZFINDEX ON 学号 TAG XHZFUPDA ON 学号 FROM B REPL 语文 WITH B.语文,数学 WITH B.数学REPL ALL 总分 WITH 语文

4、+数学LIST例题3: 涉及 join with:将 STUDENT.DBF 和 学生成绩.DBF 连接成新文件 NEW.DBF表1: student(学号 c(4),姓名 c(8),性别 L,出生日期 D,高考成绩 N(5,2)表2: 学生成绩(学号 c(4),课程号 C(3),分数 N(2)SELECT 1USE STUDENTSELECT 2USE 学生成绩JOIN WITH A TO NEW FOR 学号=A.学号 ; FIEL 学号,A.姓名,A.性别,A.出生日期,课程号,分数USE NEW LIST如果再增加一张表,三表相连:表3: 课程(课程号 C(3),课程名称 C(10)S

5、ELECT 1USE STUDENTSELECT 2USE 学生成绩JOIN WITH A TO NEW FOR 学号=A.学号SELE 1USE NEW SELE 2USE 课程JOIN WITH A TO STU FOR 课程号=A.课程号USE STULIST二、累加、累乘例1:累加:求1100的和SUM=0FOR I=1 TO 100SUM=SUM+IENDFOR?1100的总和为:,SUM使用DO WHILE 实现:SUM=0I=1DO WHILE I INT(SQRT(I) ?I,是质数 ENDIF ENDFOR4、运行XY.PRG程序后,将在屏幕上显示如下乘法表:1) 12) 2

6、 43) 3 6 94) 4 8 12 165) 5 10 15 20 256) 6 12 18 24 30 367) 7 14 21 28 35 42 498) 8 16 24 32 40 48 56 649) 9 18 27 36 45 54 63 72 81请对下面的程序填空:* * * 计算乘法XY.PRG * * *CLEARFOR J=1 TO 9 ?STR(J,2)+) FOR _ ? _ ENDFOR ?ENDFORRETURN第一空 K=1 TO J 第二空 STR(J*k,6)5、排序问题四、排序输入10个数,将它们从小到大排列分析: 用i代表趟数,j代表次数(1)10个数

7、要比较9趟(2)每趟要比较的次数为 : 10-趟数(3)每次比较: 如果当前数 a(j)大于 本次比较的最后一个数 a(10+1-i) 那么就交换,否则不交换cleardime a(10)?输入10个数: for i=1 to 10 input 请输入: to a(i)endforfor i=1 to 9 for j=1 to 10-i if a(j)a(10-i+1) t=a(10-i+1) a(10-i+1)=a(j) a(j)=t endif endforendforlist memo like a另外可以参看书:P162-163页例 4.45五、查询:locateseek有下列表:bo

8、ok(书名 C(20),作者 C(8),出版日期 D,内容简介 M)编写程序:查询关于 foxpro 的图书.USE BOOKLOCATE FOR foxpro $ 书名IF ! FOUND() ?没有关于foxpro的图书 ELSEDO WHILE ! EOF() CLEAR ?书名,作者,出版日期 ?内容介绍 WAIT “是否继续查找?(Y/N)” TO M IF M$nN EXIT ENDIF CONTINUEENDDO?”全部显示完成”ENDIF注意:关键地方在于1、什么地方用locate,什么地方用continue2、if . exit . endif3、do while not 的

9、条件使用Locate查找出所有入校总分在580及以上的所有同学信息clearuse 学生locate for 入校总分=580do while .not. eof() disp continuenddo?结束cancel六、循环插入新记录编写程序,对于学生.dbf能够在程序末尾循环插入新记录CLEARCLOSE ALLUSE 学生DO WHILE .T. APPE BLANK 5,20 SAY 学号 GET 学号 5,40 SAY 姓名 GET 姓名 7,20 SAY 性别 GET 性别 7,30 SAY 出生年月 GET 出生年月 9,20 SAY 入校总分 GET 入校总分 READ WA

10、IT 你想继续插入新记录吗?(Y/N) : TO X IF X=N OR X=n EXIT ENDIF CLEARENDDOCLEARLISTCLOSE ALL类似:编写程序,该程序能够顺序修改表学生.DBF中的所有数据。 (要求:必须使用 行,列 say . get . 进行数据修改)CLEARCLOSE ALLUSE 学生DO WHILE .T. 5,20 SAY 学号 GET 学号 5,40 SAY 姓名 GET 姓名 7,20 SAY 性别 GET 性别 7,30 SAY 出生年月 GET 出生年月 9,20 SAY 入校总分 GET 入校总分 READ WAIT 你想继续修改记录吗?

11、(Y/N) : TO X IF X=N OR X=n EXIT ENDIF CLEAR SKIPENDDOCLEARLISTCLOSE ALL七、参数传递变量的作用域&MAIN.PRG &P1.PRG X1=1 PARA W1,W2 X2=2 PRIVATE W1 DO P1 WITH X1,X2 W1=W1*3 ?X1=+STR(X1,1) W2=W2*4 ?X2=+STR(X2,1) RETURN X1=1 X2=2 DO P1 WITH X1,X1+X2 ?X1=+STR(X1,1) ?X2=+STR(X2,1) RETURN(1)第一次显示X1,X2的值是( )A. 1 , 8 B.

12、3 , 8 C. 1 , 1 D. 8 , 8(2)第二次显示X1,X2的值是( )A. 1 , 2 B. 3 , 1 C. 3 , 2 D. 1 , 3参考答案: B C下面看第二个实例: 主程序MCX2.PRG clea public i,j store 1 to i,j,k do scx2.prg ?主程序的输出结果: ?i=+str(i,2)+ j=+str(j,2)+ k=+str(k,2) cancel子程序scx2.prg clea private j,k i=i*2 j=j+1 k=j+1 ?子程序中输出的结果: ?i=+str(i,2)+ j=+str(j,2)+ k=+st

13、r(k,2) return执行结果是: 子程序中输出的结果: i= 2 j= 3 k= 4 主程序的输出结果: i= 2 j= 1 k= 1看等级考试中的题.(2003年10月笔试)八、行,列 say . get . default . read字幕问题:1、有如下程序段,其功能是显示汉字“2008年北京申奥成功!”从屏幕的顶部移至底部,请填空补充该程序CLEARCH=2008年北京申奥成功!R=1DO WHILE R=23 R,26 SAY SPACE(60) R+1, 26 SAY CH T=INKEY(0.2) R=R+1ENDDORETURN答案说明:R,26 SAY SPACE(60

14、)的作用是将上一行显示的2008年北京申奥成功!清除掉,然后R+1, 26 SAY CH 显示新一行的数据R=R+1是保证do while不是死循环2、从左到右显示同志们,要到期末了,努力奋斗吧!两次clears=space(80)+同志们,要到期末了,努力奋斗吧!+space(40)for nn1=1 to 2 & 显示两次 for nn2=1 to 110 step 2 &110=80+30,30是那个字符串的宽度 20,0 say substr(s,nn2,80) inkey(2,H) endforendfor九、scatter/gather(本节选用的表是 学生.dbf)掌握:1、sc

15、atter是将一条记录的值copy到一个数组中。(对应一维数组) copy from array 则是多条记录拷贝到数组中。(对应二维数组) 2、scatter和copy from array使用数组都可以不先定义,大小系统自己搞定 3、如果事先定义了的话,scatter会自动扩展大小,而copy from array 则不会请大家阅读下面两个例题体会:例1:将江冰同学的名字修改成姜冰clearuse 学生locate for 姓名=江冰if found() scatter to x &思考:数组X应该有多少个单元? list memo like x &显示数组X的单元和值 x(2)=江冰 g

16、ather from x wait clear list else ?对不起,没有江冰这个人endifclose all思考答案:6个, 那个备注型和通用型不算.当然,上个题改为下例也对:clearuse 学生locate for 姓名=江冰dime x(4) &先定义数组X有4个单元if found() scatter to x &思考:数组X应该有多少个单元? list memo like x &显示数组X的单元和值 x(2)=江冰 gather from x wait clear list else ?对不起,没有江冰这个人endifclose all思考答案:也是6个, 那个备注型和通

17、用型不算,虽然定义了四个,但是会自动扩展例2:关于copy to array 和append from arrayclearuse 学生copy stru to newlistcopy to array y fields 学号,姓名,性别 &思考:数组Y应该是什么样的?Y(1,2)=张波 &将王小平改为了张波sele 0use newappend from array ylistclose all思考答案: 数组Y是: y(10,3)另外请分析本程序段的功能。如果程序改为:clearuse 学生dime y(3,2)listcopy stru to newcopy to array y fie

18、lds 学号,姓名,性别 &思考:数组Y应该是什么样的?Y(1,2)=张波 sele 0use new append from array ylistclose all那么:数组Y是: y(3,2) 和scatter它们的区别: 不会自动扩展执行程序观察结果。十、数组1、排序问题。2、书:163-164 例4.46-4.471、 数组的定义DIMENTION 数组名(数值表达式1,数组表达式2.)定义后单元默认值为.F.2、一维数组(1)、定义一个一维数组:dime a(10) 定义一个10数组,且所有单元默认值为.F.(2)、赋值:例如: a=a(1)=20 a(3)=2002/09/23a

19、(7)=.T.循环赋值:dime a(10)i=1do while i80 SELECT 1 SEEK B.借书证号 IF TS100 .OR. 职称教授 H,4 SAY 姓名+同志,您借的书已过期,请归还 H=H+1 ENDIF SELECT 2 ENDIF SKIPENDDOSET DEVICE TO SCREENRETURN(1)设当前系统日期为06/15/99,程序将打印(孟小梅、郑财勇各一行)还书的信息(2)高级职称和其它职称借书的最多天数分别是(100天,80天)(3)本程序的功能是:(查询并打印超期未还书者)例2: CLEAR OPEN DATABASE emplorer USE

20、 compen SCAN FOR RECNO()y则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。6、题目:用*号输出字母C的图案。&程序分析:可先用*号在纸上写出字母C,再分行输出。9、题目:要求输出国际象棋棋盘。&程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。11、题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?&程序分析:兔子的规律为数列1,1,2,3,5,8,13,2112、题目:判断101-200之间

21、有多少个素数,并输出所有素数。&程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。13、题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方5的三次方3的三次方。&程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。14、题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。&程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因

22、数的过程已经结束,打印出即可。(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。16、题目:输入两个正整数m和n,求其最大公约数和最小公倍数。&程序分析:利用辗除法。17、题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。&程序分析:利用while语句,条件为输入的字符不为n.18、题目:求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。&程序分析:关键

23、是计算出每一项的值。19、题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=123.编程找出1000以内的所有完数。20、题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?21、题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。&程序分析:采取逆向思维的方法,从后往前推断。22、 题目:两个乒乓球队进行比赛,各出三人。甲

24、队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 &程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 23、题目:打印出如下图案(菱形)&程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。24、题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。&程序分析:请抓住分子与分母的变化规律。25、题目:求1+2!+3!+

25、.+20!的和&程序分析:此程序只是把累加变成了累乘。26、题目:利用递归方法求5!。&程序分析:递归公式:fn=fn_1*4!27、题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。28、题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?&程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。29、题目:给一个不多于5位的正整数,

26、要求:一、求它是几位数,二、逆序打印出各位数字。&程序分析:学会分解出每一位数,如下解释:30、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。&程序分析:同29例31、题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。&程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。37、题目:对10个数进行排序&程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。54、题目:取一个整数a从右端开始的47位。&程序分析:可以这样考虑: (1)先使a右移4位。(2)设置一个低4位全为1,其余全为0的数。可用(0

温馨提示

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

最新文档

评论

0/150

提交评论