VFP实验报告学生成绩管理系统.docx
《VFP实验报告学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《VFP实验报告学生成绩管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
VFP实验报告学生成绩管理系统
VFP实验报告
学生成绩管理系统
密码:
08605214
班级:
06国贸(3)班
学号:
200610430302
姓名:
李建成
1、需求分析
某大学因扩招需求,需要建立一个“学生成绩管理系统”,以取代人工管理。
开发目的和功能如下:
(1)能进行成绩及相关数据的录入。
(2)具有修改功能。
(3)能按姓名、学号查询任意一名同学的成绩。
(4)能完成上表中各项统计。
(5)能将全班同学按从高分到低分的顺序排序。
(6)能打印上述表格。
一、数据需求
在调研的过程中,用户提供了该系统所需的输入、输出单据。
输入单据包括学生成绩单、基本信息单等,输出单据包括成绩从高到低排序单、分数段人数单、相关数据统计单等,另外,在最终的打印输出中还有两张表:
成绩分析表和成绩排序表。
学号
姓名
平时成绩
考试成绩
最终成绩
学生成绩表
课程名称
任课老师
上课班级
学生人数
考试时间
考试形式
考试基本信息表
命题形式
命题负责人
阅卷人
阅卷负责人
平卷负责人
教研室主任
填表日期
分数段人数表
分数
不及格
60-70
70-80
80-90
90-100
人数
相关数据统计表
相关数据
平均分数
平均离差
标准差
极差
合格率
数值
二、功能需求
功能分析的任务,是弄清用户对目标系统数据处理功能所提出的需求,根据系统目标和数据需求,本系统的功能需求可归纳为以下几个方面。
1、数据录入
录入功能用于在各种手填单据中增加新的记录,及时补充到系统将要运行的表中。
这些单据包括学生成绩表、基本信息表等。
2、数据浏览和修改
能够浏览所要得到的数据表单,并且有修改功能。
这些表单包括学生成绩表、基本信息表等。
3、数据查询
此查询功能包括两个:
按姓名查询和按学号查询,能够查询到学生成绩表中各个字段的信息,并显示相关内容。
4、数据统计和管理
此功能能够统计出各个分数段的人数和分数的相关信息,包括全班学生的平均分数、平均离差、标准差、极差和合格率等。
它从学生成绩表中调用相关数据,把计算得到的数据放入分数段人数表和相关数据统计表。
平均分数=
平均离差=平均分数-期望值标准差S=
极差=最高分-最低分合格率=合格人数÷实考人数
5、表格打印
此功能把上面得到的考试基本信息、分数段人数、相关数据统计中的数据填入到最终的打印报表中,这些报表包括成绩排序表和成绩分析表。
课程名称
任课教师
上课班级
学生人数(n)
考试时间
考试形式
命题
命题形式
负责人
阅卷
阅卷人
负责人
成绩分析
成绩评价
成绩分布
成绩
0-59.5
60-69.5
70-79.5
80-89.5
90-100
人数
主
要
指
标
平均分数=
平均离差=平均分数-期望值
标准差S=
极差=最高分-最低分=
合格率=合格人数÷实考人数=
评卷负责人
教研室主任
填表日期
年月日
考试情况统计分析表
2、数据库设计
数据库设计的任务是确定系统所需的数据库。
数据库是表的集合,通常一个系统只需一个数据库。
数据库设计可分为逻辑设计与物理设计两个步骤,第一步确定数据库所包含的表及字段,第二步是确定表的具体结果,即确定字段的名称、类型及宽度等。
一、逻辑设计
设计从分析数据入手,输入数据中的某类相关数据可以归纳为一个类。
对需要同时调用的若干表,应使它们符合关联要求。
数据库设计好后,可通过分析输出数据来验证起可用性,若发现有的输出数据不能导出,必须检查问题,重新调试。
本系统根据学生成绩单、基本信息单等单据的数据需求,从学生成绩单、基本信息单、成绩从高到低排序单、分数段人数单、相关数据统计单中归纳出了包含五个表的数据库。
现将这些表列出如下:
(1)学生成绩单:
姓名、学号、平时成绩、考试成绩、最终成绩。
(2)基本信息单等:
课程名称、任课教师、上课班级、学生人数、考试时间、考试形式、命题形式、命题负责人、阅卷人、阅卷负责人、成绩评价、评卷负责人、教研室主任、填表日期。
(3)成绩从高到低排序单:
姓名、学号、平时成绩、考试成绩、最终成绩。
(4)分数段人数单:
成绩段、人数。
(5)相关数据统计单:
,平均分数、平均离差、标准差、极差、合格率。
根据数据库处理的需求,这些表需要和打印表关联起来,如下图所示。
图中矩形框表示表,需要关联的表用线段连接。
分数段人数单
成绩分析表
相关数据统计单
基本信息单
成绩排序表
学生成绩单
成绩从高到低排序单
二、物理设计
下面列出了学生成绩管理系统的部分的表结构,为了便于理解系统,同时也列出了表的部分记录。
1、学生成绩单(学生成绩.DBF)
结构:
学生成绩单(姓名c(10)、学号c(10)、平时成绩n(10)、考试成绩n(10)、最终成绩n(10))
记录:
学号姓名平时成绩考试成绩最终成绩
08605201小红918589
08605202小明888888
08605203小云959394
2、分数段人数(分数段人数.DBF)
结构:
分数段人数(成绩段c(10)、人数n(10))
记录:
分数不及格60-7070-8080-9090-100
人数11133
3、相关数据统计表(相关数据统计表.DBF)
结构:
相关数据统计表(平均分数n(10)、平均离差n(10)、标准差n(10)、极差n(10)、合格率n(10))
记录:
相关数据平均分数平均离差标准差极差合格率
数值82.888922.888913.8759947.00000.88889
出来上述的三个表外,还有基本信息单(学基本信息单.DBF)、成绩从高到低排序单(成绩从高到低排序单.DBF),其结构为课程名称c(10)、任课教师c(10)、上课班级c(10)、学生人数n(10)、考试时间c(10)、考试形式c(10)、命题形式c(10)、命题负责人c(10)、阅卷人c(10)、阅卷负责人c(10)、成绩评价c(10)、评卷负责人c(10)、教研室主任c(10)、填表日期c(10)。
3、应用成绩设计
一、总统设计
按照功能分类是总体设计中常用的方法,系统的总体结构可用层次图(HierarchyChart,简称HC图)来表示,此学生成绩管理系统的HC可由下图表示。
自上而下进行分层:
第一层是系统层,对应主程序;第二层为子系统层,起分类控制作用,但是当该层没有下一层时也可直接用来表达功能;第三层为功能层;第四层为操作层。
下图所示的学生成绩管理系统有三层,系统功能分类如下:
学生成绩表和基本信息表的新增功能归入数据录入一类,它们俩的浏览和修改功能归入数据修改一类,数据查询功能包括了按姓名查询和按学号查询,相关成绩统计和成绩排序归入数据统计与管理一类,最后的表格打印中有打印成绩分析表和打印排序结果。
图中未画出操作层,该层次的程序模块在模块设计中列出。
二、初始用户界面设计
从总统结构图很容易列出应用程序的菜单,由总体结构图转换到菜单时,其对应的情况如下:
系统层对应菜单文件,子系统层对应菜单标题,功能层则对应子菜单项。
下图是“学生成绩管理系统”下拉式菜单的示意图,说明如下:
(1)本系统使用菜单作为输入密码后进入系统的初始界面,并设置一个主文件来调用菜单程序。
(2)若改用表单为初始界面,可以在表单上设置若干按钮来表示格子系统的功能。
对于图中的菜单项,下文将为它们进行设计与编码。
三、模块设计与编码
本小节将对“学生成绩管理系统”的主要模块的设计与编写作简要说明。
1、主文件(主文件.PRG)
菜单文件名为“主菜单”,并设置一个主文件来调用它。
主文件的代码编写如下:
settalkoff
cleaall
setviewtosjhj.vue
publicxm,xh
xm=space(8)
xh=space(8)
doformfm.scx
keyb'{CTRL+F4}'
modiwindscreentitl'欢迎使用跑跑成绩查询系统'
clea
do主菜单.mpr
readevent
quit
下图为fm(封面)的示意图:
上图确定键的Click事件的代码为:
i=i+1
ifthisform.text1.value="08605214"
thisform.release
else
ifi<3&&允许输入三次
messagebox("密码错误,请重新输入!
最多三次尝试机会^_^哦")
thisform.text1.value=""&&清空表单
thisform.text1.setfocus&&获得焦点
else
messagebox("密码错,明天再试吧")
thisform.release
endif
endif
取消键的Click事件的代码为:
quit
2、主菜单程序
按照菜单图示建立菜单的内容,一层菜单包括数据录入、数据修改、数据查询、数据统计与管理、数据打印和退出项。
(1)退出菜单项的命令
clearevents
(2)数据录入项
此项有两个子菜单,分别是学生成绩和基本信息,用于输入新学生的各项成绩和增加最终打印报表中的基本信息。
其中,学生成绩子菜单是过程,其代码是:
closeall
use学生成绩
append
use
基本信息子菜单也是过程,其代码是:
closeall
use基本信息表
append
use
(3)数据修改项
此项也有两个子菜单,也是学生成绩和基本信息,用于修改学生的各项成绩和最终打印报表中的基本信息。
其中,学生成绩子菜单是过程,其代码是:
closeall
use学生成绩
browse
use
基本信息子菜单也是过程,其代码是:
closeall
use基本信息表
browse
use
(4)数据查询项
此项包括两个子菜单,按姓名查询和按成绩查询,它们都是命令,分别用于显示各自的表单。
按姓名查询的命令是“doform输入学生姓名”,所出现的表单如下:
其中Text1中的LostFocus事件的代码是:
xm=thisform.Text1.VALUE
Form1的Load事件的代码是:
publicxm,用来定义公共变量xm
确定按钮的Click事件的代码是
use学生成绩
locatefor姓名=trim(xm)
ifnotfound()
waitwindow"无此学生!
"
else
browfor姓名=trim(xm)
thisform.release
endif
在Text1中输入学生姓名,点击确定即可查出此学生的相关成绩。
按学号查询的命令是“doform输入学生学号”,所出现的表单如下:
其中Text1中的LostFocus事件的代码是:
xh=thisform.Text1.VALUE
Form1的Load事件的代码是:
publicxh,用来定义公共变量xh
确定按钮的Click事件的代码是
use学生成绩
locatefor学号=trim(xh)
ifnotfound()
waitwindow"无此学生!
"
else
browfor学号=trim(xh)
thisform.release
endif
在Text1中输入学生姓名,点击确定即可查出此学生的相关成绩。
(4)数据统计与管理项
此项包括两个子菜单,分别是相关成绩统计和成绩排序。
其中相关成绩统计是过程,其代码是:
clear
*成绩人数段
use学生成绩
countfor最终成绩<=100and最终成绩>=90toa
?
"90-100分的学生人数为:
",a
?
countfor最终成绩<90and最终成绩>=80tob
?
"80-90分的学生人数为:
",b
?
countfor最终成绩<80and最终成绩>=70toc
?
"80-90分的学生人数为:
",c
?
countfor最终成绩<70and最终成绩>=60tod
?
"80-90分的学生人数为:
",d
?
countfor最终成绩<60and最终成绩>=0toe
?
"80-90分的学生人数为:
",e
?
use分数段人数
replace不及格withe
replace六十到七十withd
replace七十到八十withc
replace八十到九十withb
replace九十到一百witha
*平均分数
use学生成绩
calculateavg(平时成绩),avg(考试成绩),avg(最终成绩)tof,g,h
?
"全班学生的平时成绩平均分数为:
",f
?
?
"全班学生的考试成绩平均分数为:
",g
?
?
"全班学生的平均分数为:
",h
?
*平均离差
i=h-60
?
"全班学生的平均离差为:
",i
?
*标准差
j=a+b+c+d+e
store0tox,y
gotop
fork=1toj
x=最终成绩-h
y=y+x*x
skip
endfor
z=y/j
l=sqrt(z)
?
"全班学生的标准差为:
",l
?
*极差
store0tos
store100tot
gotop
form=1toj
ifs<最终成绩
s=最终成绩
endif
skip
endfor
gotop
form=1toj
ift>最终成绩
t=最终成绩
endif
skip
endfor
n=s-t
?
"全班学生的极差为:
",n
?
*合格率
o=a+b+c+d
p=o/j
?
"全班学生的合格率为:
",p*100,"%"
use相关数据统计
replace平均分数withh
replace平均离差withi
replace标准差withl
replace极差withn
replace合格率withp
此过程命令完成后会在屏幕上显示相关内容,另外还会把显示的数据输入到相关成绩统计.DBF和分数段人数.DBF两个表中,用于和以后的打印报表相关联,输出数据。
成绩排序也是子菜单,包括从按成绩高到低排序和从按成绩低到高排序两个过程。
其中从按成绩高到低排序的过程代码是:
clear
use学生成绩
sortto从高到低成绩排序on最终成绩/Dfields学号,姓名,平时成绩,考试成绩,最终成绩
use从高到低成绩排序
list
r=recc(select())
dimensionshuzu(r,5)
copytoarrayshuzufields学号,姓名,平时成绩,考试成绩,最终成绩
use成绩从高到低排序
deletall
pack
appendfromarrayshuzu
closeall
从按成绩低到高排序的过程代码是:
clear
use学生成绩
sortto从低到高成绩排序on最终成绩fields学号,姓名,平时成绩,考试成绩,最终成绩
use从低到高成绩排序
list
r=recc(select())
dimensionshuzu(r,5)
copytoarrayshuzufields学号,姓名,平时成绩,考试成绩,最终成绩
use成绩从高到低排序
deletall
pack
appendfromarrayshuzu
closeall
这两个过程命令执行完成后,会生成从低到高成绩排序.DBF和从高到低成绩排序.DBF俩个表,然后分别传递到成绩从高到低排序.DBF和成绩从低到高排序.DBF,因为前两个表是自己生成,在每次显示时都会先删除在生成,所以学要另外两个表用于存放,这就要设临时变量,然后把后两个表与打印报表相关联,用于输出数据。
(5)表格打印项
此项包括两个子菜单,分别是打印成绩分析表和打印排序结果,它们都是命令,其代码分别是:
reportform成绩分析表和reportform成绩排序表。
用于显示各自需要打印的报表。
其中“reportform成绩分析表”显示结果如下图:
此报表的数据环境中添加了分数段人数表、基本信息表和相关数据统计表,用报表控件控制栏填入个空的相关信息,用于带入数据,输出打印。
“reportform成绩排序表”显示结果如下图:
此报表的数据环境中添加了成绩从高到低排序表,用报表控件控制栏填入个空的相关信息,用于带入数据,输出打印。
最后,结束编码以后,应对系统进行测试与调试,进一步完善系统设计。
4、运行设计
一、装载数据
在应用系统连编运行之前,要先在数据库中装如必要的或已有的成批数据。
这里包括:
成绩从高到低排序、分数段人数、基本信息表相关数据统计和学生成绩等五个表,如下图:
二、连编形成.APP文件
在所有的程序、代码和数据表单都完成之后,在上图的右端点击连编按钮就可以生成一个.app文件,然后双击此.app文件,查看所要实现的功能,进一步调试和完善此系统。