VFP课程设计

江 苏 科 技 大 学

VFP

课程设计报告

 学院:经济管理学院

专业:经济学

学号:XXXXXX

姓名:XXX

FOX

20##年12月23日星期五

一、目的

《关系数据库管理系统》课程的学习,不仅需要理论上的深入探讨,而且需要通过实践上机,自己开发一个数据库管理信息系统,才能真正理解书本知识,牢固掌握课堂教学内容。因此,本上机操作的目的就是要通过一个实际的管理信息系统的开发,提高学生应用所学知识分析问题,解决问题和实际动手的能力。

通过本课程的上机操作,使学生进一步掌握关系数据库管理系统这门课程的内容,熟悉用VFP开发一个简单系统的基本步骤。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

二、内容和要求

(一)内容:学生成绩管理系统

(1)系统功能设计

)要求

要求学生针对上机操作任务书,进一步掌握有关表、数据库、项目、类的基本概念及基本操作,在此基础上进行查询设计、菜单设计、表单设计及报表设计,并掌握常用的属性、事件及方法的使用。

(1)表结构:a. 学生基本信息

b. 教师基本信息

c.考试成绩

 d. 课程信息

(32)表之间的关系:

(3)菜单设计:上表中的系统功能模块即菜单。

(4)设计要求、主要界面及操作要求:

1)数据管理

主要是对学生基本信息、课程基本信息、学生成绩信息、教师基本信息的录入、删除、保存、定位等操作

a. 学生基本信息

b. 课程基本信息

c. 学生成绩信息

 d. 教师基本信息

2)查询设计

a. 学生选修课程信息:创建一个一对多表单,当在一个组合框中选择学生后,在下面的GRID中反映该学生选修的课程名,课时数,任课教师及该门课程的成绩。

b. 教师任课情况:以一对多的形式,在表格一中选择教师后,表格二中显示该教师的

任课情况。

3)统计处理

a. 学生成绩统计:创建一个视图,该视图用来反映每个学考选修了几门课,总成绩是多少,并将该视图加到表单的数据环境中,创建一个学生总成绩查询表单。 要求用页框来实现,第一页反映学生的总成绩,第二页反映学生的明细成绩。

b. 各教师的任课时数:创建一个视图,该视图用来反映每个教师上了几门课,总学时是多少,并将该视图加到表单的数据环境中,创建一个教师情况查询表单。

    4)打印输出

a. 在报表设计器中设计一个学生总成绩报表,然后在学生总成绩查询表单上添加一个打印按钮,当按下该按钮时,调用上述创建的报表。

b. 在报表设计器中设计一个教师任课信息报表,在菜单中调用该报表。

三、参考书目:

《Visual FoxPro教程》

《Visual FoxPro实验指导书》

《二级考试试卷汇编》

四、心得体会

在VFP程序设计的过程中,虽然遇到了一些小的问题,但是我在这个过程中学了很多关于VFP程序设计的相关知识。在系统完成后,进行运行测试时有时会出现运行不正常的问题,经过纠正,修改和完善,最终运行正常。

这个作业花了三四天的时间,每次都是整个上午或者整个下午的在机房或宿舍里呆着才做上一部分,期间遇到了一些问题,有时做的题保存在优盘后,但是到机房后会打不开等等。当遇到新问题自己解决不了的,先参考书籍,或上网查,或者请教老师然后接着做,不断尝试。在这一系列的发现问题和解决问题的过程中,真的发现了自己好多的不足和以前听课的疏漏,现在都很后悔自己当初没有将学习的内容及时掌握并应用。还好自己还能亡羊补牢,多花点时间花点精力多问来解决自己的问题!经过这次的课程设计,我又有很多的体会与进步,以后一定会更加重视计算机的学习,把应该掌握的内容及时掌握,绝不拖沓!

 

第二篇:VFP程序设计题答案

三、程序改错题

1.下列程序为求s=1-1/3+1/5-1/7+...-1/99之值,(精确到小数后两位), 程序中有错误。 改正后运行程序,将程序执行结果填入答案框内。

set talk off

s=0

n=1

do while n<=99

s=s+1/n

n=n+1

enddo

?s

return

set talk off

s=0

n=1

i=1

do while n<=99

s=s+i/n

n=n+2

i=-i

enddo

?s

return

2.下面的程序是求3+9+27+81+243+...这样的数之和. 若累加数大于500时,则结束累加.程序中有一处错误。改正后运行程序,将程序执行结果填入答案框内。

SET TALK OFF

CLEAR

X=3

Y=0

DO WHILE .F.

Y=Y+X

IF Y>500

EXIT

ENDIF

STORE 3*X TO X

ENDDO

?Y

SET TALK ON

RETURN

Do while .f. 改为 Do while .t.

3.已知S1=1,S2=1+2,S3=1+2+3,?,SN=1+2+?+N,下面的程序求S20到S80有多少数能被17或35整除。改正后运行程序,将程序执行结果填入答案框内。

SET TALK OFF

I=20

N=0

DO WHILE I<=80

STORE 1 TO S 改为 s=0

J=1

DO WHILE J<=I

S=S+J

J=J+1

ENDDO

IF MOD(S,17)=0 or mod(s,35)=0

N=N+1

ENDIF

I=I+1

ENDDO

? N

SET TALK ON

RETURN

4.下列程序为求满足s=1^3+2^3+3^3+...+N^3,当s>=100000的最小的整数N。

程序中有错误。

改正后运行程序,将程序执行结果填入答案框内。

set talk off

s=0

n=1

do while s>=100000 改为 s<10000

s=s+n^3

n=n+1

enddo

?n

return

5.计算S=1*5*9*13*...*k,直到累乘数k>=25中止。程序中有错误。改正后运行程序,将程序执行结果填入答案框内。

SET TALK OFF

CLEAR

s=0 改为 s=1

k=1

DO WHILE .T.

s=s*k

IF k>=25

EXIT

ENDIF

k=k+4

ENDDO

?s

RETURN

6.下面的程序是求1到500的偶数立方和与奇数立方和之差。程序中有一处错。 更正程序中的错误,运行更正后的程序,记录运行结果,将结果填入答题窗口内。

SET TALK OFF

STORE 0 TO I,S1,S2

DO WHILE I<=500改为I<500

I=I+1

IF MOD(I,2)=0

S1=S1+I*I*I

ELSE

S2=S2+I*I*I

ENDIF

ENDDO

? S1-S2

SET TALK ON

RETURN

7.下面的程序是计算1*2*3*4*5...的积,要求其积大于10000后结束程序运行,输出乘积的值。程序有一处错误。更正程序中的错误,运行更正后的程序,记录运行结果,将结果填入答题窗口内。

SET TALK OFF

STORE 1 TO X,Y

DO WHILE X<30

Y=Y*X

X=X+1

IF Y>10000

LOOP改为EXIT

ENDIF

ENDDO

? Y

SET TALK ON

RETURN

8. 已知一个数列的前三个数是1,2,3,从第四个数起,每个数都是前三个数之和。下面的程序是求出该数列的第35个数。改正程序中的错误后运行程序,将程序执行结果填入答案框内。

SET TALK OFF

DIME A(35)

A(1)=1

A(2)=2

A(3)=3

I=4

DO WHILE I=35 改为 I<=35

A(I)=A(I-1)+A(I-2)+A(I-3)

I=I+1

ENDDO

? A(35)

SET TALK ON

RETURN

9. 下面的程序是求在1,2,3,4,...,10这10个数中,任意选 两个不同的数,求它们的和能被2整除的数的总对数. (注意: 象3+5和5+3认为是同一对数). 程序中有一处错误。改正程序中的错误后运行程序,将程序执行结果填入答案框内。

SET TALK OFF

CLEAR

N=0

I=1

DO WHILE I<=10

J=1

DO WHILE J<I

IF INT((I+J)/2)<>(I+J)/2 <> 改为 =

N=N+1

ENDIF

J=J+1

ENDDO

I=I+1

ENDDO

?N

SET TALK ON RETURN

四、程序填空题

1. 下列的程序是求S=8!+9!+10!的程序.在下列程序中填上缺少的语句或 另外编写程序,(程序名由考生自定)运行程序,将结果填入答题窗口。

SET TALK OFF

CLEAR

S=0

I=8

DO WHILE I<=10

STORE 1 TO T,J

DO WHILE J<=I

T=T*J

J=J+1

ENDDO

S=s+t

I=I+1

ENDDO

?S

SET TALK ON

RETURN

其它方法:

Set talk off

Clear

S=0

T=1

For i=1 to 10

T=t*i

If i>=8

S=s+t

Endif

Endfor

?s

Set talk off

Clear

S=0

For i=8 to 10

T=1

For j=1 to i

T=t*j

Endfor

S=s+t

Endfor

?s

2.s=3!+5!+7!+?+n!,求直到s>=680000为止的最大阶乘数n。

SET TALK OFF

CLEAR

s=0

n=3

DO WHILE .T.

T=1

FOR I=1 TO n

T=T*I

NEXT

s=s+t

IF S>=680000

EXIT

ENDIF

N=n+2

ENDDO

?n

其它方法:

Set talk off

Clear

S=0

I=3

Do while .t

T=1

For j=1 to i

T=t*j

Endfor

S=s+t

If s>=680000

Exit

endif

I=i+2

Enddo

?s

Set talk off

Clear

S=0

T=1

I=1

Do while .t.

T=t*i

If i>=3 and mod(I,2)=1

S=s+t

Endif

If s>=680000

Exit

endif

I=i+1

Enndo

?s

3. 下面的程序是求出1到5000之间的能被5整除的前若干个奇数之和,当和大于500时退出。在下列程序中填上缺少的语句或另外编写程序,

(程序名由考生自定)运行程序,将结果填入答题窗口。

SET TALK OFF

CLEAR

I=1

S=0

DO WHILE I<5000 AND S<=500

IF mod(I,5)=0 and mod(I,2)=1

S=S+I

ENDIF

I=I+1

ENDDO

?S

SET TALK ON

RETURN

其它方法:

Set talk off

Clear

S=0

For i=1 to 5000 step 2

If mod(I,5)=0

S=s+i

Endif

If s>500

Exit

Endif

Endfor

?s

4.设S=1+1/2+1/3+...+1/N,N为正整数。编程求使S不超过10的最大的N.(程序名由考生自定)。在下列程序中填上缺少的语句或另外编写程序,运行程序,将结果填入答题窗口。 set talk off

clear

s=0

i=1

do while s<=10

s=s+1/i

i=i+1

enddo

? i-2

set talk on

return

5.编程求区间[5000,9999]中所有素数的个数.(程序名由考生自定)。 在下列程序中填上缺少的语句或另外编写程序,运行程序,将结果填入答题窗口.

set talk off

i=9999

t=0

do while i>=5000

j=2

do while j<=i-1

if int(i/j)=i/j

exit

endif

j=j+1

enddo

if j=i

t=t+1

endif

i=i-1

enddo

?t

6. 输出[10,100]中除以17的余数和除以5的商相等的整数及其个数。

SET TALK OFF

N=0

FOR K=10 TO 100

IF MOD(K,17)=INT(I/5)

? K

N=N+1

ENDIF

ENDFOR

? N

RETURN

7. 编程求区间[5000,9999]中按递增顺序,第15大的素数。在下列程序中填上缺少的语句或另外 编写程序,运行程序,将结果填入答题窗口。

SET TALK OFF

I=9999

T=0

do while i>=5000

j=2

do while j<=i-1

if int(i/j)=i/j

exit

endif

j=j+1

enddo

if j=i

t=t+1

if t=15

?i

endif

endif

i=i-1

enddo

其它方法:

set talk off

clear

n=0

for i=9999 to 5000 step -1

for j=2 to i-1

if mod(I,j)=0

exit

endif

endfor

if i=j

n=n+1

endif

if n=15

exit

endif

endfor

?i

五、程序设计题

1.求[600,900]之间素数的个数。

2.统计[1000,5000]内所有既能被7整除,且至少有一位数字是9的数的个数。 Set talk off

clear

n=0

for i=1000 to 5000

if i%7=0 and ‘9’$str(i) n=n+1

endif

next

?n

3.编程序求出3000到5000之间同时满足除3余2和除5余3条件的数的个数。

4.已知a>b>c,且a+b+c<100,求满足条件1/(a^2)+1/(b^2)=1/(c^2)的共有多少组。

5.编程序求出1到5000之间同时满足除7余2和除9余5条件的数的和。

6.编程序,计算在0至50的范围内有多少个数,其每位数的乘积小于每位数的和。

7.求出[100,500]以内同时满足除以7余3,除以5余3,除以3余1的所有整数个数。

8.求[105,625]间能被7和11整除的自然数之和。

9.设s=1+1/2+1/3+?+1/n, n为正整数。编程求使S刚好超过6时的n。

10.有30个人在一家小餐馆里用餐,其中有男人、女人和小孩。每个男人花了3元,每个女人花了2元,每个小孩花了1元,一共花去50元,问有几种组合?

11.编写程序,求共有几组I、j、k符合算式ijk+kji=1333,其中I、j、k是0~9之间的一位整数。

12.一个数如果刚好与小于它的所有因子之和相等,则称该数为一个“完数”,如:6=1+2+3,则6就是一个完数。求出1000以内的所有的完数之和。

Set talk off

clear

s=0

for x=1 to 1000

t=0

for i=1 to x-1

if x%i=0

t=t+i

endif

next

if x=t

s=s+x

endif

next

?s

程序设计分类

第1类题目:

求在某范围内的,满足被某数整除的数的个数(或这些数的和)

如:

[1]编程序求出100到800之间同时满足除4余1和除5余3条件的数的个数。

set talk off

clear

n=0

for i=100 to 800

if mod(i,4)=1 and mod(i,5)=3

n=n+1

endif

endfor

?n

[2]编程序,计算在0至70的范围内有多少个数,其每位数的乘积小于每位数的和。 set talk off

clear

n=0

for i=10 to 70

a=int(i/10)

b=i%10 if a*b>a+b n=n+1

endif

next

?n

[3]编程序求出1到100之间同时满足除3余2和除4余2条件的数的和。

set talk off

clear

s=0

for i=1 to 100

if mod(i,3)=2 and mod(i,4)=2

s=s+i

endif

endfor

?s

[4]编程序求出1-600以内的能被5整除的数的平方和。

set talk off

clear

s=0

for i=1 to 600

if mod(i,5)=0

s=s+i*i

endif

endfor

?s

[5]编写程序,统计区间[1000,9999]内所有能被6整除,且千位数字与个位数字之和为5的整数的个数。

set talk off

clear

n=0

for a=1 to 9

for b=0 to 9

for c=0 to 9

for d=0 to 9

i=a*1000+b*100+c*10+d

if mod(i,6)=0 and a+d=5

n=n+1

endif

endfor

endfor

endfor

endfor

?n

第2类题目:求阶乘数之和,或阶乘

如:

[1] s=1!+2!+3!+....+10!

set talk off

clear

s=0

t=1

i=1

for i=1 to 10

t=t*i

s=s+t

endfor

?s

[2] 1!+2!+3!+....+n! 当s大于61000时结束累加,求n set talk off

clear

s=0

t=1

i=1

do while .t.

t=t*i

s=s+t

if s>6100

exit

endif

i=i+1

enddo

?i

[3] 2!+4!+6!....+10!

set talk off

clear

s=0

t=1

i=1

for i=1 to 10

t=t*i

if mod(i,2)=0

s=s+t

endif

endfor

?s

[4] 3!+5!+7!+....+9!

set talk off

clear

s=0

t=1

i=1

for i=1 to 10

t=t*i

if mod(i,2)=1 and i>=3

s=s+t

endif

endfor

?s

[5]求15!

set talk off

clear

s=0

for i=1 to 15

s=s*i

endfor

?s

第3类题目:求某范围内的数据之和,当累加数大于某个数时,累加结束

[1]下面和程序是求1+3+5+7+9+11+?这样的奇数之和.若累加数大于10000时,则结束累加。 set talk off

clear

s=0

i=1

do while .t.

s=s+i

if s>10000

exit

endif

i=i+2

enddo

?s

[2]设S=1+1/2+1/3+...+1/N,N为正整数。编程求使S不超过8的最大的N。

set talk off

clear

s=0

i=1

do while .t.

s=s+1/i

if s>8

exit

endif

i=i+1

enddo

?i-1

[3]设S=1+1/2+1/3+...+1/N,N为正整数。编程求当算到100项时S的值为多少?精确到小数点后两位。

set talk off

clear

s=0

for i=1 to 100

s=s+1/i

endfor

?str(s,10,2)

[4]编写程序,求出1到5000 之间能被3整除的前若干个奇数之和,当和大于 2000 时程序退出。

set talk off

clear

s=0

for i=1 to 5000 step 2

if mod(i,3)=0

s=s+i

endif

if s>2000

exit

endif

endfor

? s

[5]编写程序,求3+6+12+24+48+ ?之和。当累加和大于500时终止累加,输出此时的和。 set talk off

clear

s=0

i=3

do while .t.

s=s+i

if s>500

exit

endif

i=i*2

enddo

?s

第三类题目:实际应用题目

[1]把30元钱分成一元、二元和五元的纸币且纸币数共为15张的分法有多少种?(注:在兑换中一元、二元、五元的纸币数可以为0)。

set talk off

clear

n=0

for one=0 to 15

for two=0 to 15

for five=0 to 6

if one+two+five=15 and one+two*2+five*5=30

n=n+1

endif

endfor

endfor

endfor

?n

[2]有35个学生一起买小吃,共花钱100元,其中每个大学生花4元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生为0的解)?

set talk off

clear

n=0

for a=1 to 35

for b=1 to 35

for c=1 to 35

if a+b+c=35 and a*4+b*2+c*1=100

n=n+1

endif

endfor

endfor

endfor

?n

第四类题目

[1]已知a>b>c,且a+b+c<30,求满足条件1/(a^2)+1/(b^2)=1/(c^2)的共有多少组。 set talk off

clear

n=0

for a=1 to 29

for b=1 to a-1

for c=1 to b-1

if a+b+c<30 and 1/a^2+1/b^2=1/c^2

n=n+1

endif

next

next

next

?n

[2]编写程序,求200到800之间素数的个数。

方法1:

Set talk off

clear

n=0

for x=200 to 800

flag=.t.

for i=2 to x-1

if x%i=0

flag=.f.

exit

endif

next

if flag=.t.

n=n+1

endif

next

?n

方法2:

Set talk off

Clear

n=0

for i=200 to 800

for j=2 to i-1

if mod(I,j)=0

exit

endif

endfor

if i=j

n=n+1

endif

endfor

?n

[3]编写程序,求共有几组I、j、k符合算式ijk+kji=2333,其中I、j、k是0~9之间的一位整数。

Set talk off

clear

n=0

for i=0 to 9

for j=0 to 9

for k=0 to 9

if (i*100+j*10+k)+(k*100+j*10+i)=2333

n=n+1

endif

next

next

next

?n

相关推荐