VFP程序设计题汇总

VFP程序设计题汇总
VFP程序设计题汇总

一.程序设计题汇总

1.通过输入学生的学号(字符型)查找学生,若找到该学生,先输出学号与姓名,然后输出“英语”和“计算机实用技术”成绩。若找不到该学生输出“查无该生”。(设表文件“学生信息”满足题目需要)

set talk off

clear

use 学生信息

accept "请输入学生学号:" to xh

locate for 学号==xh

if !eof()

?学号,姓名

list fiel 英语,计算机实用技术for 学号=xh

else

?"查无该生"

endif

use

2.输入学生成绩,并要求:成绩小于60分时,输出“不及格”;成绩在60~69分之间时,输出“及格”;成绩在70~79之间时,输出“中”;当成绩在80~89之间时,输出“良”;当成绩在90~100之间时,输出“优”。

set talk off

clear

input "请输入成绩:" to cj

do case

case cj>=90

?"优秀"

case cj >=80

?"良好"

case cj >=70

?"中"

case cj >=60

?"及格"

case cj<60

?"不及格"

otherwise

?"数据有误"

set talk on

3.按学号在“学生信息.dbf”文件中查找并显示指定的记录。要求可以重复查询,找到则显示该生的记录,找不到则提示“查无此人!”,按非“Y”、“y”可结束查询。

SET TALK OFF

CLEAR

USE 学生信息&&设当前目录下表文件存在

ACCEPT '学号查询吗(Y/N)?' TO cx &&循环条件的初始化

DO WHILE cx='Y'.OR.cx='y' &&大小写均可执行查询

CLEAR

ACCEPT '请输入学号:' TO xh

LOCATE ALL FOR 学号=xh &&此处ALL可以缺省,默认为在全部记录查找。

IF EOF()

?'查无此人!'

W AIT

ELSE

DISPLAY

ENDIF

ACCEPT '继续按学号查询吗(Y/N)?' TO cx &&修改循环条件

ENDDO

SET TALK ON

USE

4.逐条显示“学生信息.dbf”文件中“英语成绩”大于等于75的记录。

方法一:

SET TALK OFF

CLEAR

USE 学生信息

DO WHILE !EOF()

IF 英语成绩>=75

DISP

ENDIF

SKIP &&按默认值1向下移动记录指针

ENDDO

SET TALK ON

方法二:

SET TALK OFF

CLEAR

USE 学生信息

locate for 英语成绩>=75

DO WHILE !EOF()

display

continue

ENDDO

USE

SET TALK ON

5.分别用DO循环和FOR循环求1+2+3+……+36的和值。用DO循环的写法:

SET TALK OFF

CLEAR

S=0

N=1

DO WHILE N<=36

S=S+N

N=N+1

ENDDO

? " 1+2+3+……+36的值为:", S

SET TALK ON

用FOR循环的写法:

SET TALK OFF

CLEAR

S=0

FOR N=1 TO 36

S=S+N

ENDFOR

? " 1+2+3+……+36的和值:", S

SET TALK ON

6.用“SCAN…ENDSCAN循环结构”显示“学生信息.dbf”文件中“英语成绩”大于等于75的记录。

SET TALK OFF

CLEAR

USE 学生信息

SCAN FOR 英语成绩>=75

DISPLAY

ENDSCAN

USE

SET TALK ON

7.求当1!+3!+5!+…+n!的值不超过10的20次幂时的临界值及n的值。

SET TALK OFF

CLEAR

S=1 &&初始化存放累加和的变量S为1

STORE 1 TO T,N &&初始化变量T,N的值为1

DO WHILE S<=1E+20

T=T*(N+1)*(N+2) &&从第二项开始,计算每一项阶乘。

S=S+T &&追加每一项阶乘

N=N+2 &&下一个奇数

ENDDO

?"S=",S-T &&最后一个S由于是多加了一个T后不满足条件,故减去。

?"N=",N-2 &&最后一个N由于是多加了一个2后不满足条件,故减去。

SET TALK ON

8.在程序所在的目录中已有学生表(学生.Dbf)(字段为:学号,姓名,性别,出生年月,简历,奖学金,照片)。要求:显示输出“学生”表中的1975年或以前出生的学生姓名和出生年月。

SET TALK OFF

CLEAR

USE 学生

LOCATE FOR 出生年月<={^1975-12-31} &&定位满足出生年月的记录

DO WHILE !EOF() &&如果没有到表尾,显示姓名与出生年月

?姓名,出生年月

CONTINUE &&继续指向满足条件的下一条记录

ENDDO

USE

SET TALK ON

9.显示输出正整数M(从键盘输入)内的偶数及偶数和。

SET TALK OFF

CLEAR

INPUT "输入一个整数:" TO M &&输入指定的正整数M的值

S=0 &&初始化存放累加和变量S为0

FOR P=1 TO M

IF INT(P/2)=P/2 &&判断P是否是偶数

?P

S=S+P &&是偶数就把它累加起来

ENDIF

ENDFOR

?S

SET TALK ON

10.求解百鸡问题,“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一,百钱百鸡,问鸡翁、母、雏各几何?”

note 设公鸡、母鸡、小鸡的数量分别为x、y、z。

set talk off

clear

for x=0 to 20

for y=0 to 33

z=100-x-y

if 5*x+3*y+z/3=100

?" 公鸡数"," 母鸡数"," 小鸡数"

?x,y,z

endif

endfor

endfor

set talk on

11. 从键盘任意输入两个整数,求出最小公倍数和最大公约数。

SET TALK OFF

CLEAR

INPUT "输入第一个整数: " TO N

INPUT "输入第二个整数: " TO M

X=MAX(N,M) &&大的有可能是最小公倍数

FOR I=X TO M*N &&如果X 不是最小公倍数,M*N 一定是公倍数,但不一定是最小公倍数。 IF MOD(I,M)=0 AND MOD(I,N)=0 &&在循环控制变量递增的过程中,如果出现能被M 和N 同时整除(余数为0),则为公倍数。

GBS=I &&把第一次出现的公倍数(最小公倍数)赋给变量“GBS ”。

GYS=M*N/GBS &&最大公约数

EXIT &&找到第一个“I ”便跳出循环

ENDIF

ENDFOR

? "最小公倍数= "+ltrim(STR(GBS))," 最大公约数= "+ltrim(STR(GYS))

SET TALK ON

12. 在给定“学生.DBF ”表文件中包含有“学号”、“姓名”字段,对学号编制一个抽奖表单。要求,不能有重复中奖学生。程序运行时,字号在文本框中显示,用标签显示中奖学生的学号、姓名。应有“开始”、“抽取”、“退出”控件。建议表单(Form1)包括的控件是:一个文本框(Text1)、两个标签(Label1、Label2)、三个按钮(Command1、Command2、Command3)和一个计时器(Timer1)。

请编写:

(1) 表单Form1的Init 事件代码:

this.text1.value="学生学号" &&文本框显示初值“学生学号”

https://www.360docs.net/doc/8612169262.html,bel2.visible=.f. &&标签label2不可见

this.timer1.enabled=.f. &&计时器timer1不可用

this.timer1.interval=10 &&计时器时间间隔为10/1000秒(即0.01秒)

表单设计界面 单击“选中”界面

(2)“开始”按钮Command1的Click事件代码:

set delete on &&隐藏已加入删除标记的记录

thisform.timer1.enabled=.t. &&使计时器可用

https://www.360docs.net/doc/8612169262.html,bel2.visible=.f. &&标签label2不可见

(3)“选中”按钮Command2的Click事件代码:

thisform.timer1.enabled=.f.

https://www.360docs.net/doc/8612169262.html,bel2.caption="中奖学生是:学号"+ thisform.text1.value+" 姓名"+姓名

https://www.360docs.net/doc/8612169262.html,bel2.visible=.t.

delete

(4)“退出”按钮Command3的Click事件代码:

recall all &&恢复已做删除标记的所有记录

thisform.release

(5)计时器(Timer1)的Timer事件代码:

if !eof() &&如果不到记录尾

skip &&跳到下一记录,频率由Timer值决定。

Else &&如果已到记录尾

go top &&跳到第一条记录

endif

thisform.text1.value=alltrim(学号) &&显示学生的学号

thisform.refresh

13.编制一个表单完成表文件“学生.dbf”内容的只读浏览显示功能;表单初始显示内容为表文件“学生.dbf”的首记录;当按前翻、后翻、首记录、末记录按钮时,表单将自动显示相应记录的内容;当翻至表头或表尾时,将自动设置相应按钮不可访问。参见下面的表单设计及运行示意图。

表单(Form1)的Init(初始化)事件代码

https://www.360docs.net/doc/8612169262.html,mand1.enabled=.f.

https://www.360docs.net/doc/8612169262.html,mand2.enabled=.f.

“首记录”(Command1)的Click(单击)事件代码go top

https://www.360docs.net/doc/8612169262.html,mand1.enabled=.f.

https://www.360docs.net/doc/8612169262.html,mand2.enabled=.f.

https://www.360docs.net/doc/8612169262.html,mand3.enabled=.t.

https://www.360docs.net/doc/8612169262.html,mand4.enabled=.t.

thisform.refresh

“上一记录”(Command2)的Click(单击)事件代码if !bof()

skip -1

https://www.360docs.net/doc/8612169262.html,mand3.enabled=.t.

https://www.360docs.net/doc/8612169262.html,mand4.enabled=.t.

else

https://www.360docs.net/doc/8612169262.html,mand1.enabled=.f.

https://www.360docs.net/doc/8612169262.html,mand2.enabled=.f.

endif

thisform.refresh

“下一记录”(Command3)的Click(单击)事件代码if !eof()

skip

https://www.360docs.net/doc/8612169262.html,mand1.enabled=.t.

https://www.360docs.net/doc/8612169262.html,mand2.enabled=.t.

else

https://www.360docs.net/doc/8612169262.html,mand3.enabled=.f.

https://www.360docs.net/doc/8612169262.html,mand4.enabled=.f.

endif

thisform.refresh

“未记录”(Command4)的Click(单击)事件代码go bottom

https://www.360docs.net/doc/8612169262.html,mand4.enabled=.f.

https://www.360docs.net/doc/8612169262.html,mand3.enabled=.f.

https://www.360docs.net/doc/8612169262.html,mand1.enabled=.t.

https://www.360docs.net/doc/8612169262.html,mand2.enabled=.t.

thisform.refresh

14. 编制一个显示当前时间的时钟显示界面,要求每秒动态跳动一次,并将表单的背景设置蓝,绿两色自动变换(与时间同步切换),Timer1的Interval 属性已在属性窗口中设置完成。

请编写计时器(Timer1)的Timer 事件代码:

thisform.text1.value=time() &&使文本框显示系统时间

if val(right(time(),2))%2=0 &&如果秒值是2秒的整数倍。

thisform.backcolor=rgb(0,255,0) &&表单背景为绿色

else

thisform.backcolor=rgb(0,0,255) &&表单背景为篮色

endif

15. 请设计一个右图所示的表单。表单实现的功能是:单击字体按钮和颜色按钮,“欢迎使用VFP !”的字体和颜色会随之改变。表单(Form1)包括的控件有:两个命令按钮组(Commandgroup1、Commandgroup2)、一个标签(Label1)。请写出相应控件的事件代码。

请写出:

(1)命令按钮组Commandgroup1的Click 事件代码。

(2)命令按钮组Commandgroup2的Click 事件代码。

命令按钮组Commandgroup1的Click 事件代码

do case

case this.value=1

https://www.360docs.net/doc/8612169262.html,bel1.fontname="隶书"

case this.value=2

https://www.360docs.net/doc/8612169262.html,bel1.fontname="楷体_GB2312"

case this.value=3

https://www.360docs.net/doc/8612169262.html,bel1.fontname="黑体"

case this.value=4

https://www.360docs.net/doc/8612169262.html,bel1.fontname="仿宋_GB2312"

endcase

命令按钮组Commandgroup2的Click 事件代码

do case

case this.value=1

表单设计界面

表单运行界面

https://www.360docs.net/doc/8612169262.html,bel1.forecolor=rgb(255,0,0) case this.value=2

https://www.360docs.net/doc/8612169262.html,bel1.forecolor=rgb(0,0,255) case this.value=3

https://www.360docs.net/doc/8612169262.html,bel1.forecolor=rgb(0,255,0) case this.value=4

https://www.360docs.net/doc/8612169262.html,bel1.forecolor=rgb(255,255,0) endcase

相关主题
相关文档
最新文档