Visual FoxPro程序设计基础实例
- 格式:doc
- 大小:296.50 KB
- 文档页数:14
37 Visual FoxPro程序设计基础实例
▲ 表文件CJ.DBF情况: 学生成绩数据库的表文件cj.dbf 结构为: 字段名 字段类型 宽度 小数位 学号 字符型 6 姓名 字符型 10 英语 数值型 6 2 高等数学 数值型 6 2 计算机应用 数值型 6 2 总分 数值型 7 2 平均分 数值型 6 2
建立表文件cj.dbf 结构显示如下:
输入一些学生成绩。 例2-1计算表CJ.DBF中的平均分和总分的程序 set talk off CLOSE ALL USE c:\000\CJ REPLACE ALL 总分 WITH 英语+数学+计算机应用 REPLACE ALL 平均分 WITH 总分/3 LIST 执行结果为: 38
例2-2 统计成绩表CJ.DBF中平均分大于90分的所有学生数目。 SET TALK OFF CLEAR USE c:\000\CJ M=0 SCAN FOR 平均分>90 DISPLAY M=M+1 ENDSCAN "总数为:",M USE RETURN 执行结果:
例2-3 统计成绩表CJ.DBF中所有英语大于等于75分的学生数目。 SET TALK OFF USE C:\000\CJ MCOUNT=0 FOR REC=1 TO RECCOUNT() && RECCOUNT() 为该库中的记录数 GO REC IF 英语<75 LOOP ENDIF DISPLAY MCOUNT=MCOUNT+1 ENDFOR "英语成绩不小于75分的总数为:", MCOUNT USE RETURN 执行结果: 39
例2-4 显示表CJ.DBF中英语成绩小于90分的学生。 SET TALK OFF CLEAR USE CJ DO WHILE.T. ( ** 或DO WHILE.NOT.EOF( ) ) IF 英语>=90 SKIP (或** LOOP ) ENDIF DISPLAY WAIT"按任一键继续显示.…" SKIP ENDDO USE RETURN 执行结果:
例2-5 对成绩表CJ.DBF查询,若首记录的平均分数大于60分,则显示及格;成绩不及格”否则显示不及格。 SET TALK OFF CLEAR USE C:\000\CJ IF 平均分 > 60 ? 姓名+"成绩及格" 40
ELSE ? 姓名+"成绩不及格" ENDIF USE RETURN 执行结果如下:
例2-6 对成绩表CJ.DBF查询,根据该学生的平均分进行分类 : 优秀 90<=平均分 优良 80<=平均分< 90 良好 70<=平均分<80 及格 60<=平均分<70 不及格 平均分<60 程序为: SET TALK OFF CLEAR USE C:\000\CJ DO CASE CASE 平均分 >= 90 ? 姓名 +":成绩优秀" CASE 平均分 >= 80 ? 姓名 + ": 成绩优良" CASE 平均分 >= 70 ? 姓名 + ":成绩良好" CASE 平均分 >= 60 ? 姓名 + ": 成绩及格" OTHERWISE ? 姓名 + ": 成绩不及格" ENDCASE USE RETURN 执行结果如下:
例 2-7 设计5乘5的乘法表 set talk off clear x=1 do while x<=5 y=1 41
do while y<=x s=x*y ??str(y,1)+"*"+str(x,1)+"="+str(s,2)+" " y=y+1 enddo ? x=x+1 enddo 执行结果:
例2-8 DO CASE……ENDCASE命令的嵌套用法. SET TAlK OFF CLEAR "1…………录入" "2……… 查询" "3…………修改" "4…………打印" ACCEPT"输入选择(0-4):"TO MSELECT DO CASE CASE MSELECT="l" DO APP && 录入程序 CASE MSELECT="2" DO QUER &&查询程序 CASE MSElECT="3" DO MOD && 修改程序 CASE MSELECT="4" CLEAR "1--打印A类表" "2--打印B类表" "3--打印C类表" ACCEPT"输入选择(1-3):"TO MY DO CASE CASE MY="1" DO PRINT A CASE MY="2" DO PRINT B CASE MY="3" DO PRINT C END CASE 例 2-9 显示成绩库CJ.DBF中记录号为偶数的前三个学生记录。 SET TALK OFF 42
CLEAR USE C:\000\CJ FOR REC=2 TO 6 STEP 2 GO REC DISPLAY SKIP 2 ENDFOR USE RETURN 执行结果:
例2-10 编程计算:S=l! +2! +3!+...+10! 的值。要求用过程求阶乘。 SET TALK OFF CLEAR PUBLIC T S=0 &&FOR N=1 TO 10 for n=1 to 10 DO JC S=S+T ENDFOR ? "S=", S SET TALK ON RETURN
PROCEDURE JC && 过程放在调用它的上层程序之后 PRIVATE S && 这里的S是局部变量,与主程序中的S占用不同的存贮单元 T=1 FOR S=1 TO N T=T*S && 这里T为N! 的值 ENDFOR ? str(N,2)+"!="+str(T,8) && ? STR(N ,2) RETURN 执行结果: 43
例2-11 主程序MAIN.PRG中调用过程SUBl,SUB2,主程序如下: ?"#######1" DO SUB1 ?"#######2" DO SUB2 ?"#######3" RETURN && 过程SUB1.PRG如下: PROCEDURE SUB1 ? "********1" RETURN && 过程SUB2.PRG如下: PROCEDURE SUB2 ?"*******2" RETURN 执行结果:
例2-12 求职工的平均工资(职工信息档案为:DA.DBF ) clear set talk off use c:\000\da average all 基本工资 to a " 职工平均工资:"+str(a,8,2) use set talk on return 执行结果:
例 2-13 执行以下程序段: 44
PUBLIC A PRIVATE B ? "A=", A ? "B=", B 例2-14 显示库文件CJ.DBF的姓名及总分字段,要求用模式符定义显示总分字 SET TALK OFF CLEAR use c:\000\cj DO WHILE .NOT. EOF() @ ROW()+1,4 SAY "姓名: " @ ROW(),COL() +1 SAY 姓名 PICTURE"@J XXXXXXXX" @ ROW(),COL() +1 SAY "总分:" @ ROW(),COL() +1 SAY 总分 PICTURE "999.99" SKIP ENDDO 执行结果:
例2-15 根据下面程序求出结果。 set talk off clear x1=4
do while x1>=1 x2=1 do while x2 x2*x1 x2=x2+1 enddo
x1=x1-1 enddo set talk on 执行结果:
例2-16 字母大小写变换程序。 set talk off clear 45
accept "请输入一字符串:" to x i=1 s="" do while i<=len(X) s=substr(x,i,1)+s &&s=s+substr(x,i,1) i=i+1 enddo "X=",upper(x) "s=",lower(s) set talk on 执行结果:
例 2-17 求1--10的阶乘 set talk off clear i=1 do while.t. k=1 j=1 do while jk=k*j j=j+1 enddo k i=i+1 if i>10 exit endif enddo return
执行结果: