学生选课成绩管理系统呕心沥血整理版Word文件下载.docx
《学生选课成绩管理系统呕心沥血整理版Word文件下载.docx》由会员分享,可在线阅读,更多相关《学生选课成绩管理系统呕心沥血整理版Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
[3]据库。
一般的VisualFoxPro开发都是从事这一方面的工作.数据库的维护是在实现系统之后,有效地处理数据库的故障和修复数据库,根据新的要求对数据库进行修改升级的工作
第2节系统的需求分析
用户需求分析阶段的首要任务就是要明确数据库应用系统的开发目的.如一般的应用系统一样,数据库应用系统的目的一般首先由用户提出,也可以由数据库应用系统开发者拟定。
学生选课成绩管理系统的目标是建立一个选课成绩计算机管理系统,以取代人工管
[4]理的大部分事务,开发的目的如下:
1、能对学生选课成绩的有关数据进行输入、修改、查询;
2、可以向数据库里添加新的学生、教师等信息;
3、对每名学生的成绩进行统计;
4、打印学生、教师等表信息。
学生选课成绩管理的要求主要是:
能够更快地、系统地知道学生选课成绩情况,包括学生基本信息、老师基本信息、课程基本信息等。
我们通过对这些数据需求的分析,应该找出需要用信息数据来表达的内容及其方式,还要找出相互之间的关系,在这种复杂的关系中进行有关主题的提炼,用这些既独立又相互关联的主题以及每一个主题所表达的,有单一信息价值内涵的数据项集合及其处理方式,来构造一个数据库系统框架结构。
通过数据需求的调研应归纳出与系统相关的数据。
对这些数据进行分析、归纳,从中找出“规律”,
[5]提炼主题并排除冗余数据。
改进完善业务流程图,分析用户需要系统完成哪些任务,逐层分解,画出功能层次图。
功能分析是要在设计过程中明确完成设计后的“学生选课成绩管理系统"
所能具备的功能。
学生选课成绩管理系统的功能模块划分如图1.1所示。
图1。
1功能模块
3
所有子功能的作用:
1、添加模块。
可以更新“学生”、“课程”、“成绩"
、“教师"
、“班级表"
五个表的基本信息。
2、修改模块.可以修改“学生"
、“课程”、“成绩”、三个表的信息。
3、查询模块.查询“学生”、“课程”、“成绩”、“教师”、“班级表”五个表的基本信息。
4、统计模块.统计每名学生的成绩.包括每个学生的单科最高分和最低分等。
5、打印模块.实现“学生”、“课程”、“成绩"
、“教师”、“班级表”五个表的基本信息打印。
6、退出系统模块:
退出系统返回WIDNOWS界面。
整个应用系统文件包括数据库、表、表单、视图、查询、程序等各种VFP文件。
“学生选课成绩管理系统"
项目的数据源由“学生选课成绩数据库"
和其下各个数据库表组成,图1.2为数据库与表的关系图。
2数据库与表的关系
第3节系统数据库设计
经过以上的分析后需要建立学生选课成绩数据库.现在按照系统开发步骤和系统需求,设计“学生选课成绩管理系统”应用程序。
在“学生选课成绩管理系统"
项目管理器中切换到“数据”选项卡,选中“数据库”,单击【新建】按钮,弹出一个“新建数据库"
对话框,单击【新建数据库】按钮。
弹出“创建”对话框,在“数据库名"
右方的文本框中输入要创建的数据库的名称“学生选课成绩数据库”,单击【保存】按钮,建立“学生选课成绩”数据库。
如图1.3所示.
4
图1.3“学生选课成绩"
数据库
“学生选课成绩”数据库建立完成后,接下来在数据库中建立学生表、课程表、成绩表等表。
添加学生表:
学生表用于存储有关学生的基本信息,包括学号、姓名、性别、出生日期等基本信息。
学生表结构如表1-1所示。
其中:
学号建立升序的主索引.班级编号建立升序的普通索引。
表1—1学生表
字段名字段类型字段长度是否为空备注
6学号字符型否主索引
8姓名字符型否普通索引
2性别字符型否
8出生日期日期型否
4班级编号字符型否
添加课程表:
课程表用于存储有关课程的基本信息,包括课程代码、课程名称、类别等基本信息。
“课程"
表结构如表1-2所示。
其中:
课程代码建立升序的主索引;
教师代码和课程名称建立升序的普通索引。
表1—2课程表
5课程代码字符型否主索引
14课程名称字符型否普通索引
4类别字符型否
4教师代码字符型否普通索引
添加成绩表:
成绩表用于存储选课成绩的基本信息,包括学号、课程代码、成绩等基本信息。
成绩表结构如表1—3所示。
学号+课程代码建立升序的主索引.
5
表1—3成绩表
6学号字符型否索引
5课程代码字符型否索引
4成绩数值型否添加教师表:
教师表用于存储有关教师的基本信息,包括教师代码、姓名、性别、出
生日期等基本信息。
教师表结构如表1—4所示。
教师代码建立升序的主索引。
表1—4教师表
4教师代码字符型否主索引
8姓名字符型否
6籍贯字符型否
10技术职务字符型否
4备注备注型否添加班级表:
班级表用于存储有关班级的基本信息,包括班级编号、年级、专业等基
本信息。
班级表结构如表1—5所示。
班级编号建立升序的主索引.
表1-5班级表
4班级编号字符型否主索引
2年级字符型否
10专业字符型否
1系代码字符型否
1学制字符型否
4类型字符型否表建立好后,就要往各个表中录入数据。
当数据录入完成后,整个数据库也就建立完
成。
6
第二章学生选课成绩管理系统开发
[6]学生选课成绩管理系统是面向用户的,其界面主要包括:
查询:
可以查询学生和教师的基本情况、学生成绩和课程情况。
添加:
可以向学生表、教师表等表中录入信息.
修改:
可以按照记录号修改课程表等信息。
统计:
可以统计学生的各科成绩.
打印:
可以打印学生表、教师表等表中信息.
退出:
用来退出系统程序。
第1节主程序和界面的设计
主程序即系统的引导程序,通过它可以关闭主窗口中与该系统有关的内容,可以设置系统标题、主窗口背景、定义系统的公用参数、打开数据库等。
下面是学生选课成绩管理系统的主程序main。
prg.
SETTALKOFF
SETSYSMENUOFF
SETDEFAULTTOD:
\学生选课成绩管理系统
_SCREEN。
AUTOCENTER=。
T.
MODIFYWINDOWSCREENTITLE”学生选课成绩管理系统”
CLEARALL
DO主菜单。
MPR
DOFORM主界面。
SCX
READEVENTS
在主界面中首先看到的是主菜单。
主菜单位于窗口顶部,利用主菜单界面随时可以打开相应的界面。
在项目管理器中创建菜单并保存为“主菜单。
mpr”。
主菜单设计好后,接下来对主界面进行设计,主界面可以不用添加数据环境。
最后的运行效果如图2。
1所示。
7
图2。
1运行效果
当用户点击图2.1中相应的按钮,则激发各自按钮的Click事件,其代码如下所示.
Form1的Command1的Click事件代码:
doform查询
thisform.release
{„„Form1的Command2至Command5的Click事件代码„„}
Form1的Command6的Click事件代码:
a=messagebox("
是否退出本系统,”,4+32+256,"
cyc~”)
Ifa=6
thisform。
release
Closeall
Clearevents
Setsysmenutodefault
endif
第2节查询模块的设计
查询模块主要是用来查询学生的情况和成绩、浏览学生选课和教师的信息。
新建一个空表单,在上面创建一个含五个页面的页框、一个命令按钮组(含有5个命令按钮)以及一个命令按钮。
其中页框的第一页为学生情况,第二页为全局浏览,第三页为学生年龄,第四页为课程浏览,第五页为多项查询,系统运行如图2。
2所示。
8
2查询模块
从图中可以看出,五个页框结构基本相同,在此只提供第一页框的具体设计方法.在表单数据环境中添加“学生"
表、“课程”表、“教师"
表、“班级”表和分数表、在页框处于编辑状态时利用数据环境设计器中的“学生”表往第一页框中添加表中所有字段标签和字段控件.添加一个含四个命令按钮的命令组合框,一个标签和一组合框控件(Combo1),用于控制及浏览“学生”表记录。
执行该表单,选择“学生情况”页,可以显示“学生”表首记录的内容。
单击【上一个】、【下一个】按钮可以浏览当前记录的上下记录;
单击【删除】按钮可以删除当前记录;
单击下拉组合框可跳到指定记录.当选择组合控件Combo1时将激活InteractiveChange事件,代码如下所示。
pageframe1。
page1。
combo2.value=‘‘
locaforstudent。
学号=this。
value
Iffound()
refresh
当浏览记录时,将发生Commandgroup1的Click事件,代码如下。
selestudent
Docase
Casethis。
value=1
Gotop
{„„设置command1至command4是否可用„„}
value=2
{„„设置command3至command4是否可用„„}
Ifnotbof()
9
Skip—1
Else
{„„设置command1至command2是否可用„„}
Casethis.value=3
{„„设置command1至command2是否可用„„}
Ifnoteof()
Skip
{„„设置command3至command4是否可用„„}
value=4
Gobottom
endcase
thisform.refresh
第3节添加模块的设计该模块主要是在学生表、教师表、班级表、课程表和成绩表添加各类新的信息。
系统
运行后的效果如图2.3所示.下面仅对学生表作为介绍,其它表的添加与其类似。
图2.3添加模块
单击【添加】按钮将发生Command1的Click事件,代码如下所示。
n1=alltrim(this.parent.parent.text1。
value)
10
n2=alltrim(this。
parent。
parent.text2。
value)n3=alltrim(this。
combo1。
value)n4=alltrim(dtoc(this。
text4。
value))n5=alltrim(this.parent。
text5。
value)n6=alltrim(this.parent.parent。
combo2。
value)n7=alltrim(this.parent。
edit1。
value)Setexacton
Casen1=‘‘
messagebox('
教师代码不能为空值~’,48,’注意’)
this。
text1.setfocus
Casen2=‘‘
messagebox(’姓名不能为空值~'
,48,'
注意’)
parent.text2.setfocus
Casen3=‘‘
messagebox(’性别不能为空值~'
,48,’注意'
)
this.parent。
combo1.setfocus
Casen4=‘‘
messagebox(’不能输入空值~'
48,’注意’)
parent.text4.setfocus
Casen5=‘‘
messagebox(’籍贯不能为空值~'
48,’注意’)
parent.text5.setfocus
Casen6=‘‘
messagebox(’技术职务不能为空值~'
bo2。
setfocusOtherwise
a=messagebox('
确认添加新记录到教师表~'
,1+64+0,’提示'
Ifa=1
seleteacher
11
Insertintoteachervalues(n1,n2,n3,ctod(n4),n5,n6,n7)
b=messagebox(’新记录添加成功~'
64,’提示信息’)
Ifb=1
text1。
value=‘‘
text2。
value={}
bo2.value=‘‘
this.parent.parent。
parent.parent。
setfocus
当单击【重写】按钮时将发生Command2的Click事件,代码如下所示。
this.parent。
text1.value=‘‘
thisform.pageframe1。
page2。
combo1.readonly=。
F。
this.parent.parent。
value={}this.parent。
parent.text5。
bo2.readonly=.F。
parent.edit1.value=‘‘
第4节修改模块的设计
修改模块主要通过记录号修改课程表、成绩表和学生表的信息.修改表单从课程表、
成绩表、学生表中选取相应的字段,将对应的字段罗列在列表框中供修改相应的内容。
在
修改之前要输入记录号,否则系统无法查找相应的记录.单击确定后,完成修改内容.运
12
行后如图2。
4所示。
图2.4修改模块
当用户输入记录号后,再选择相应的表将发生InteractiveChange事件,其代码如下所
示.
jlh=Val(thisform。
text5.value)Docase
Selecourse
Casejlh=0
thisform.text5.value=‘‘
记录号不能为0~’)
value=0
Casejlh〉recc()
记录超出范围~’)
jlh=recc()
text5.value=‘‘
this.value=0
Otherwise
Gojlh
thisform.text1.value=课程代码
text2.value=课程名称
13
text3。
value=类别
thisform.text4。
value=教师代码
width=104
thisform.text1.visible=.T。
thisform.text2.visible=.T.
thisform.text3。
visible=。
T。
thisform.label1。
thisform.label2.visible=.T.
label3.visible=。
label4.visible=。
text4.visible=.T。
thisform.label8。
F.
text6。
visible=.F.
thisform.text1。
readonly=。
caption='
课程代码’
thisform.label2.caption=’课程名称'
label3。
caption=’类别’
label4。
caption=’教师代码’
alignment=3
inputmask=‘‘
command1。
{„„Casethis。
value=2至Casethis.value=3„„}
当修改完成后单击【确定】按钮,将发生Command1的Click事件。
Setexacton
Casethisform.optiongroup1。
a=alltrim(thisform。
14
b=alltrim(thisform。
text4.value)
c=alltrim(thisform。
d=alltrim(thisform。
text2.value)
Setexacton
Casea=‘‘
messagebox(’类别不能为空白值~’,58)
{„„Caseb=‘‘至Cased=‘‘„„}
m=messagebox(’确定修改课程记录~’,1+64+0,’信息’)
Ifm=1
selecourse
replace课程代码withc
replace课程名称withd
replace类别witha
replace教师代码withb
messagebox(’记录修改成功~’)
thisform.text5.setfocus
thisform.optiongroup1。
{„„Casethisform。
optiongroup1。