VisualFoxPro程序设计基础实例.docx
《VisualFoxPro程序设计基础实例.docx》由会员分享,可在线阅读,更多相关《VisualFoxPro程序设计基础实例.docx(22页珍藏版)》请在冰豆网上搜索。
VisualFoxPro程序设计基础实例
VisualFoxPro程序设计基础实例
▲表文件CJ.DBF情况:
学生成绩数据库的表文件cj.dbf结构为:
字段名字段类型宽度小数位
学号字符型6
姓名字符型10
英语数值型62
高等数学数值型62
计算机应用数值型62
总分数值型72
平均分数值型62
建立表文件cj.dbf结构显示如下:
输入一些学生成绩。
例2-1计算表cj.dbf中的平均分和总分的程序
settalkoff
CLOSEALL
USEc:
\000\CJ
REPLACEALL总分WITH英语+数学+计算机应用
REPLACEALL平均分WITH总分/3
LIST
执行结果为:
例2-2统计成绩表cj.dbf中平均分大于90分的所有学生数目。
SETTALKOFF
CLEAR
USEc:
\000\CJ
M=0
SCANFOR平均分>90
DISPLAY
M=M+1
ENDSCAN
?
"总数为:
",M
USE
RETURN
执行结果:
例2-3统计成绩表cj.dbf中所有英语大于等于75分的学生数目。
SETTALKOFF
USEC:
\000\CJ
MCOUNT=0
FORREC=1TORECCOUNT()&&RECCOUNT()为该库中的记录数
GOREC
IF英语<75
LOOP
ENDIF
DISPLAY
MCOUNT=MCOUNT+1
ENDFOR
?
"英语成绩不小于75分的总数为:
",MCOUNT
USE
RETURN
执行结果:
例2-4显示表cj.dbf中英语成绩小于90分的学生。
SETTALKOFF
CLEAR
USECJ
DOWHILE.T.(**或DOWHILE.NOT.EOF())
IF英语>=90
SKIP(或**LOOP)
ENDIF
DISPLAY
WAIT"按任一键继续显示.…"
SKIP
ENDDO
USE
RETURN
执行结果:
例2-5对成绩表cj.dbf查询,若首记录的平均分数大于60分,则显示及格;成绩不及格”否则显示不及格。
SETTALKOFF
CLEAR
USEC:
\000\CJ
IF平均分>60
?
姓名+"成绩及格"
ELSE
?
姓名+"成绩不及格"
ENDIF
USE
RETURN
执行结果如下:
例2-6对成绩表cj.dbf查询,根据该学生的平均分进行分类:
优秀90<=平均分
优良80<=平均分<90
良好70<=平均分<80
及格60<=平均分<70
不及格平均分<60
程序为:
SETTALKOFF
CLEAR
USEC:
\000\CJ
DOCASE
CASE平均分>=90
?
姓名+":
成绩优秀"
CASE平均分>=80
?
姓名+":
成绩优良"
CASE平均分>=70
?
姓名+":
成绩良好"
CASE平均分>=60
?
姓名+":
成绩及格"
OTHERWISE
?
姓名+":
成绩不及格"
ENDCASE
USE
RETURN
执行结果如下:
例2-7设计5乘5的乘法表
settalkoff
clear
x=1
dowhilex<=5
y=1
dowhiley<=x
s=x*y
?
?
str(y,1)+"*"+str(x,1)+"="+str(s,2)+""
y=y+1
enddo
?
x=x+1
enddo
执行结果:
例2-8DOCASE……ENDCASE命令的嵌套用法.
SETTAlKOFF
CLEAR
?
"1…………录入"
?
"2………查询"
?
"3…………修改"
?
"4…………打印"
ACCEPT"输入选择(0-4):
"TOMSELECT
DOCASE
CASEMSELECT="l"
DOAPP&&录入程序
CASEMSELECT="2"
DOQUER&&查询程序
CASEMSElECT="3"
DOMOD&&修改程序
CASEMSELECT="4"
CLEAR
?
"1--打印A类表"
?
"2--打印B类表"
?
"3--打印C类表"
ACCEPT"输入选择(1-3):
"TOMY
DOCASE
CASEMY="1"
DOPRINTA
CASEMY="2"
DOPRINTB
CASEMY="3"
DOPRINTC
ENDCASE
例2-9显示成绩库CJ.DBF中记录号为偶数的前三个学生记录。
SETTALKOFF
CLEAR
USEC:
\000\CJ
forrec=2to6STEP2
gorec
DISPLAY
SKIP2
ENDFOR
USE
RETURN
执行结果:
例2-10编程计算:
S=l!
+2!
+3!
+...+10!
的值。
要求用过程求阶乘。
SETTALKOFF
CLEAR
PUBLICT
S=0
&&FORN=1TO10
forn=1to10
DOJC
S=S+T
ENDFOR
?
"S=",S
SETTALKON
RETURN
PROCEDUREJC&&过程放在调用它的上层程序之后
PRIVATES&&这里的S是局部变量,与主程序中的S占用不同的存贮单元
T=1
FORS=1TON
T=T*S&&这里T为N!
的值
ENDFOR
?
str(N,2)+"!
="+str(T,8)
&&?
STR(N,2)
RETURN
执行结果:
例2-11主程序MAIN.PRG中调用过程SUBl,SUB2,主程序如下:
?
"#######1"
DOSUB1
?
"#######2"
DOSUB2
?
"#######3"
RETURN
&&过程SUB1.PRG如下:
PROCEDURESUB1
?
"********1"
RETURN
&&过程SUB2.PRG如下:
PROCEDURESUB2
?
"*******2"
RETURN
执行结果:
例2-12求职工的平均工资(职工信息档案为:
DA.DBF)
clear
settalkoff
usec:
\000\da
averageall基本工资toa
?
"职工平均工资:
"+str(a,8,2)
use
settalkon
return
执行结果:
例2-13执行以下程序段:
PUBLICA
PRIVATEB
?
"A=",A
?
"B=",B
例2-14显示库文件CJ.DBF的姓名及总分字段,要求用模式符定义显示总分字
SETTALKOFF
CLEAR
usec:
\000\cj
DOWHILE.NOT.EOF()
@ROW()+1,4SAY"姓名:
"
@ROW(),COL()+1SAY姓名PICTURE"@JXXXXXXXX"
@ROW(),COL()+1SAY"总分:
"
@ROW(),COL()+1SAY总分PICTURE"999.99"
SKIP
ENDDO
执行结果:
例2-15根据下面程序求出结果。
settalkoff
clear
x1=4
?
dowhilex1>=1
x2=1
dowhilex2?
?
x2*x1
x2=x2+1
enddo
?
x1=x1-1
enddo
settalkon
执行结果:
例2-16字母大小写变换程序。
settalkoff
clear
accept"请输入一字符串:
"tox
i=1
s=""
dowhilei<=len(X)
s=substr(x,i,1)+s
&&s=s+substr(x,i,1)
i=i+1
enddo
?
"X=",upper(x)
?
"s=",lower(s)
settalkon
执行结果:
例2-17求1--10的阶乘
settalkoff
clear
i=1
dowhile.t.
k=1
j=1
dowhilej
k=k*j
j=j+1
enddo
?
k
i=i+1
ifi>10
exit
endif
enddo
return
执行结果:
例2-18字符串颠倒程序
settalkoff
x="子女"
y=""
i=len(x)
dowhilei>=1
y=y+substr(x,i-1,2)
i=i-2
enddo
?
y
return
执行结果:
例2-19计算100以内自然数的和
settalkoff
store0tox,y
dowhile.t.
x=x+1
y=y+x
ifx>=100
exit
endif
enddo
?
"y"+str(y,5)
return
执行结果:
例2-20写数学公式程序:
Y=3*X(x>0),Y=0(x<0);
settalkoff
clear
input"请输入X的值"tox
ifx>0
?
"Y的值等于",3*x
else
?
"Y的值等于",0
endif
例2-21求三个数的最大数;
clear
input"请输入A的值"toA
input"请输入B的值"toB
input"请输入C的值"toC
ifA>=BandA>=C
?
"MAX=",A
else
ifB>=AandB>=C
?
"MAX=",B
else
?
"MAX=",C
endif
endif
例2-22求三个数的最大数;
clear
input"请输入A的值"toA
input"请输入B的值"toB
input"请输入C的值"toC
?
max(A,B,C)
例2-23求用年月日表示今天。
clear
xdate=str(year(date()),4)+"年"
xdate=xdate+str(month(date()),2)+"月"
xdate=xdate+ltrim(str(day(date()),2))+"日"
?
xdate
例2-24显示课号为C301的记录;
settalkoff
clear
usec:
\000\student.dbf
m=0
scanfor课号="C301"
display
m=m+1
endscan
?
"总数为:
",m
use
return
执行结果:
例2-25统计分数>80的人数;
settalkoff
clear
usec:
\000\student.dbf
n=0
scanfor分数>80
display
n=n+1
endscan
?
"总数为:
",n
use
return
执行结果:
例2-26求100以内奇数的和;
settalkoff
clear
s=0
fori=1to99step2
s=s+i
endfor
?
"s=",s
return
执行结果:
例2-27求1到11中奇数的和;
settalkoff
clear
s=0
fori=11to1step-2
s=s+i
endfor
?
"s=",s
return
执行结果:
例2-28求出下列程序执行的结果;
settalkoff
clear
s=0
n=1
K=1
dowhilek<=10
ifint(k/2)#k/2
s=s+k
else
n=n+k
endif
k=k+1
enddo
?
"s=",s
?
"n=",n
settalkon
程序执行的结果为:
例2-29求下列程序执行的结果;
settalkoff
clear
store0tox,y
dowhilex<101
x=x+1
ifmod(x,3)=0
loop
endif
y=y+1
enddo
?
"y="
?
?
str(y,2)
settalkon
程序执行的结果:
y=68
例2-30求下列程序执行的结果;
settalkoff
clear
dimensiona(7)
i=1
dowhilei<=7
a(i)=3*i+1
i=i+1
enddo
?
a(a
(1)+1),a(a(3)-5)-1
settalkon
程序执行的结果:
例2-31求下列程序执行的结果;
settalkoff
clear
fori=4to1step-1
j=1
s="*"
dowhilej<2*i-1
s=s+"*"
j=j+1
enddo
@ROW()+1,20-i+1says
endfor
程序执行的结果: