江 苏 科 技 大 学
VFP
课程设计报告
学院:经济管理学院
专业:经济学
学号:XXXXXX
姓名:XXX
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程序设计的相关知识。在系统完成后,进行运行测试时有时会出现运行不正常的问题,经过纠正,修改和完善,最终运行正常。
这个作业花了三四天的时间,每次都是整个上午或者整个下午的在机房或宿舍里呆着才做上一部分,期间遇到了一些问题,有时做的题保存在优盘后,但是到机房后会打不开等等。当遇到新问题自己解决不了的,先参考书籍,或上网查,或者请教老师然后接着做,不断尝试。在这一系列的发现问题和解决问题的过程中,真的发现了自己好多的不足和以前听课的疏漏,现在都很后悔自己当初没有将学习的内容及时掌握并应用。还好自己还能亡羊补牢,多花点时间花点精力多问来解决自己的问题!经过这次的课程设计,我又有很多的体会与进步,以后一定会更加重视计算机的学习,把应该掌握的内容及时掌握,绝不拖沓!
三、程序改错题
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
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过…
课程设计总结经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课…
《化工原理课程设计》总结本学期顺利完成了化学工程与工艺专业共100名同学的化工原理课程设计,总体来看学生的工艺计算、过程设计及绘图…
PLC自动门课程设计心得体会:通过此次C语言程序设计实践本人实在是获益不浅!C语言是上个学期开的课程所以这个学期并没怎么看过当要开…
课程设计心得体会在初学C语言的一个学期后,学校组织我们进行了C语言实训,尝试编写一些有难度的程序。在为期两周的时间中,同组同学共同…
20xx年年终总结20xx年的工作将告一段落,我们怀着喜悦的的心情,迎来了新的20xx年。回顾一年来的工作,对于物资供应部来说是相…
xx年度个人工作总结xx年x月x日20xx年度个人工作总结今年,我加强对新课改理论的学习,学习创新教育教学的方法,教育教学工作取得…
排球比赛总结排球赛是体育活动中最需要动脑的一个项目,它包含一个人的团体意识,在场上反应的能力,我们班举行了这样的团体活动,对我们当…
皮带队3月份工作总结20xx年x月份我队认真贯彻执行矿领导指示精神,在各区队的相互配合下,坚持“安全第一,预防为主”的工作方针,强…
尊敬的领导:您们好!20xx年x月,我有幸来到公司工作。时间一晃而过,转眼间试用期已接近尾声。这是我人生中弥足珍贵的经历,也给我留…