Skip Navigation Links.
Collapse 电工与电子技术 代码阅读实践
Collapse 电工与电子技术 计算机文化基础
Collapse 电工与电子技术 Visual Foxpro数据库应用技术
Expand 实验室简介 实验课程简介
Expand 实验室简介 实验室简介
Expand 实验室简介 实验大纲
Expand 实验室简介 实验内容
Expand 实验室简介 实验课件
Expand 实验室简介 实验视频
Expand 实验室简介 常见问题及解答
Expand 实验室简介 在线测试
Expand 实验室简介 等级考试题集
Expand 实验室简介 相关知识点
Expand 实验室简介 学习推荐
Collapse 电工与电子技术 数字图像处理
Collapse 电工与电子技术 数据结构和VC编程
Collapse 电工与电子技术 数据库
Collapse 电工与电子技术 多媒体技术应用
Collapse 电工与电子技术 汇编语言程序设计
Collapse 电工与电子技术 VB程序设计
Expand 实验室简介 课程简介
Expand 实验室简介 实验室简介
Expand 实验室简介 理论教学
Expand 实验室简介 实验教学
Expand 实验室简介 创新型实验
Expand 实验室简介 教学视频
Expand 实验室简介 课程习题
Expand 实验室简介 在线测试
Expand 实验室简介 VB等级考试
Expand 实验室简介 软件下载
Expand 实验室简介 2012年秋“VB程序设计”考试题目
Collapse 电工与电子技术 计算机维护维修
首页 >   主页 > 课程 > 计算机类 > Visual Foxpro数据库应用技术 > 实验内容 > 基础实验5 VF程序设计基础
基础实验5 VF程序设计基础 
 

学时安排:
理论教学6学时,实验教学4学时。

 

实验目的:
1. 理解Visual FoxPro命令,理解Visual FoxPro命令文件的建立和执行;
2. 掌握Visual FoxPro中程序设计的三种结构(顺序、选择和循环);
3. 理解过程文件,掌握过程文件的建立和使用;
4. 掌握程序调试器的使用。

 

实验要求:
1. 每人一机,独立完成实验。
2. 对书本上的程序案例进行输入、编译与运行并记录程序运行结果。自由编写程序,并进行程序运行。对程序通过多种数据进行测试。
3. 每次实验完成将结果存入自己的U盘,或上传至信息中心个人网络U盘中保存。

 

实验设备:
硬件配置:计算机实验教学示范中心机房计算机。
软件配置:Windows操作系统,Visual Foxpro6.0系统。

 

实验内容及步骤:
一、顺序结构程序设计
1. 仔细阅读并研究下列程序,然后将该程序输入到计算机内建立一个程序文件,并运行之。
*求解一元二次方程X^2+4*X+3=0
A=1
B=4
C=3
D=B*B-4*A*C
X1=(-B+SQRT(D)/(2*A)
X2=(-B-SQRT(D)/(2*A)
? “X1=”,X1,”X2=”,X2
RETURN


2. 依照上述程序,编写一个求解一元二次方程:3X2 +5x-4=0的程序,并输入到计算机中运行。


3.编写一个按姓名查找工资的程序,程序如下:
SET TALK OFF && 置命令输出为关
USE GZ && 打开工资库
CLEAR && 清屏
ACCEPT "请输入欲找姓名 " TO CZ
LOCATE FOR 姓名=CZ && 查找该姓名同志
DISPLAY && 显示该同志工资数
SET TALK ON
RETURN

 

二、分支结构程序设计
1、单分支结构程序
(1)将上例完善一些,如找到显示该记录。程序如下:
SET TALK OFF && 置命令输出为关
USE GZ && 打开工资库
CLEAR && 清屏
ACCEPT "请输入欲找姓名 " TO CZ
LOCATE FOR 姓名=CZ && 查找该姓名同志
IF FOUND() && 如找到
DISPLAY && 显示该同志工资数
ENDIF
SET TALK ON
RETURN


(2)乘客乘坐出租车,2km以内需付费3元,2km以上每公里加付1.0元。试编写一个计费程序。
CLEAR
SET TALK OFF
INPUT“请输入行驶里程:” TO X
Y=3
IF X>2
Y=(X-2)*1.0+3
ENDIF
? “应付费:”,Y, “元”
SET TALK ON
RETURN


2、双分支结构程序
(1)试编写一个检验用户输入密码的程序。
CLEAR
SET TALK OFF
ACCEPT”请您输入密码” TO MM
IF UPPER(MM)<>”ABC”
? “您是非法用户,无权使用本系统!”
QUIT
ELSE
? “您是合法用户,欢迎使用本系统!”
ENDIF
SET TALK ON
RETURN


(2)IF语句嵌套
* 计算电费程序
INPUT "请输入用电量" TO X
IF X<=1000 && 当用电量小于一千度电
Y=X*0.58
ELSE && 大于一千度电
IF X<=2000 && 当用电量小于二千度电
Y=(X-1000)*0.68+1000*0.58
ELSE && 当用电量大于二千度电
Y=(X-2000)*0.88+1000*0.58+1000*0.68
ENDIF
ENDIF
? "电费 = ",Y
RETURN


(3)输入一个学生成绩,判断学生成绩的等级。假设成绩等级划分为5等:[0,60 ]为不及格,[60,70 ]为及格,[70,80 ]为良,[80,90 ]为好,[90,100]为优。
SET TALK OFF
CLEAR
INPUT "请输入学生成绩" TO p
IF p<60
? "不及格"
ELSE
IF p<70
? "及格"
ELSE
IF p<80
? "良"
ELSE
IF p<90
? "好"
ELSE
?"优"
ENDIF
ENDIF
ENDIF
ENDIF
SET TALK ON
RETURN


3、DO CASE—ENDCASE命令
(1)编写一个判定当前日期所属季节的程序
CLEAR
SET TALK OFF
YUE=MONTH(DATE())
DO CASE
CASE INLIST(YUE,3,4,5)
JJ=“春天”
CASE INLIST(YUE,6,7,8)
JJ=“夏天”
CASE INLIST(YUE,9,10,11)
JJ=“秋天”
CASE INLIST(YUE,12,1,2)
JJ=“冬天”
ENDCASE
WAIT “当前是&JJ” WINDOUS
SET TALK ON
RETURN


(2) 例:用DO CASE语句重新编制计算电费的程序。程序如下:
* 计算电费程序
INPUT "请输入用电量" TO X
DO CASE
CASE X<=1000 && 当用电量小于一千度电
Y=X*0.58
CASE X<=20 && 当用电量小于二千度电
Y=(X-1000)*0.68+1000*0.58
OTHERWISE && 当用电量大于二千度电
Y=(X-2000)*0.88+1000*0.58+1000*0.68
ENDCASE
? "电费 = ",Y
RETURN

 

三、循环结构程序设计
1、DO WHILE —ENDDO命令
(1)例:求N个数之和。
* N个数累加
SET TALK OFF
INPUT "输入欲累加数个数" TO N
S=0
I=1
DO WHILE I<=N
INPUT "X=" TO X
S=S+X
I=I+1
ENDDO
? "S= ",S
SET TALK ON
RETURN


(2)试编一程序,将若干个数累加,当输入“0”时结束累加。
* 遇到结束标记停止累加模块
SET TALK OFF
S=0
DO WHILE .T. && 用真循环
INPUT "X=" TO X && 输入欲加数
IF X=0 && 是结束标记
EXIT && 跳出循环
ENDIF
S=S+X && 累加
ENDDO
? "S= ",S
SET TALK ON
RETURN


(3)逐条输出“RS.DBF”中1980年出生的记录
CLEAR
USE RS
LOCATE FOR YEAR(出生日期)=1980
DO WHILE .NOT. EOF( )
DISPLAY
WAIT
CONTINUE
ENDDO
RETURN

 

2、FOR—ENDFOR命令
(1)使用FOR循环语句改写S=1+2+3+…+100的程序
SET TALK OFF
CLEAR
S=0
FOR I=1 TO 100
S=S+I
ENDFOR
? “S=”,S
SET TALK ON
RETURN


(2)编程求S=1!+2!+3!+…+10!的和
SET TALK OFF
CLEAR
S=0
FOR I=1 TO 10
F=F*I
S=S+F
ENDFOR
?“S=”,S
SET TALK ON
RETURN

 

3、SCAN—ENDSCAN命令
显示RS表中性别为女的全部记录。
SET TALK OFF
USE RS
SCAN
IF 性别= “男”
Loop
ENDIF
ENDSCAN
USE
RETURN

 

4、多重循环
(1)例:编写打印乘法口诀表程序。
* 打印乘法口诀表
SET TALK OFF
FOR X=1 TO 9 STEP 1
FOX Y=1 TO 9 STEP 1
S=X*Y && 乘积
? STR(X,1)+"*"+STR(Y,1)+"="+STR(S,2)+" " && 不换行打印
ENDFOR
? "" && 换行
ENDFOR
SET TALK ON
RETURN


(2)例:编程打印此图案
*
***
*****
*******
*********
①解法1
SET TALK OFF
FOR X=1 TO 5
?SPACE(15-X)
FOR Y=1 TO 2*X-1
?? “X”
ENDFOR
ENDFOR
SET TALK ON
RETURN
②解法2
SET TALK OFF
X=1
DO WHILE X<=5
Y=1
? SPACE(15-X)
DO WHILE Y=2*X-1
?? “*”
Y=Y+1
ENDDO
ENDDO
SET TALK ON
RETURN


(3)打印0-99内平方根表,要求保留二位小数。
*EX5_23.PRG
* 打印平方根表
SET TALK OFF
? " 平 方 根 表"
? " ──────────"
? " 0 1 2 3 4 5 6 7 8 9"
FOR X=0 TO 9 && 十位数循环
? STR(X,2)+" " && 打印列头
FOX Y=0 TO 9 && 个位数循环
?? STR(SQRT(X*10+Y),4,2)+" " && 打印平方根
ENDFOR
ENDFOR
SET TALK ON
RETURN

 

(4)找出0-999之间的所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153=1**3+5**3+3**3,故153是水仙花数。
SET TALK OFF
FOR X=0 TO 9 && 百位数循环
FOR Y=0 TO 9 && 十位数循环
FOR Z=0 TO 9 && 个位数循环
S1=X*100+Y*10+Z
S2=X**3+Y**3+Z**3
IF S1=S2 && 是水仙花数
? "X=",X,"Y=",Y,"Z=",Z
ENDIF
ENDFOR
ENDFOR
ENDFOR
SET TALK ON
RETURN

 

四、子程序与过程调用
1、编写一个计算长方形面积的子程序,在主程序中用带参数的DO语句调用它。
SET TALK OFF SUB1.PRG
S=0 PARA A,B,C
INPUT “长=” TO L C=A*B
INPUT “宽=” TO W RETURN
DO SUB1 WITH L,W,S
? “面积=”,S
SET TALK ON
RETURN

 

2、内部过程
① 判断下面程序的执行结果
****EXAMPL.PRG****
num1=1
num2=2
? num1,num2
do SWAP with num1,num2
? num1,num2
Do SWAP with (num1),(num2)
? num1,num2
PROCEDURE SWAP
PARAMETERS X,Y
T=X
X=Y
Y=T
ENDPROC


②用主程序MAIN.PRG实现对过程文件SUB.PRG中的两个过程文件SUB1.PRG和SUB2.PRG的调用。
*主程序文件
CLEAR
SET PROCEDURE TO SUB
?“***过程调用示例***”
? “##################”
DO SUB1
? “##################”
DO SUB2
CLOSE PROCEDURE
RETURN
*过程文件名:SUB.PRG
PROCEDURE SUB1
? “& & & & & & & & & & &1”
RETURN
PROCEDURE SUB2
? “& & & & & & & & & & &2”
RETURN
ENDPROC

 

3、自定义函数
①建立一个自定义函数,求半径为3,4,5的3个圆面积之和.
FUNCTION QSYM
PARAMETERS R
S=3.14159*R*R
RETURN S
调用:
? QSYM(3)+QSYM(4)+QSYM(5)


②定义一函数,可以根据输入的年,月,计算出本月的最后一天的日期。程序RQ.PRG
FUNCTION RQ
PARAMETERS Y,M
SET TALK OFF
D="31"
Y=VAL(Y)
M=VAL(M)
DO CASE
CASE M=4.OR.M=6.OR.M=9.OR.M=11 && 为小月
D="30"
CASE M=2
IF INT(Y/4)=Y/4.AND.(INT(Y/100)#Y/100.OR.INT(Y/400)=Y/400)
D="29"
ELSE && 为平月
D="28"
ENDIF
ENDCASE


③定义一函数,可以将百亿以内的阿拉伯数字金额转换为中文大写数字。RMB.PRG
FUNCTION RMB
PARAMETERS N
SET TALK OFF
NC=STR(N,14,2)
C1="零壹贰叁肆伍陆柒捌玖"
C2="佰拾亿仟佰拾万仟佰拾元 角分"
ND=""
SW=.T.
FOR K=1 TO 14
IF K#12
ND=ND+SUBS(C1,VAL(SUBS(NC,K,1))*2+1,2)
ND=ND+SUBS(C2,K*2-1,2)
ENDIF
ENDFOR
ND=ND+"整"
RETURN ND