学生选课成绩管理系统.docx
《学生选课成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生选课成绩管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
学生选课成绩管理系统
学生选课成绩管理系统
前言
在21世纪的今天,随着社会经济和计算机技术的发展,社会的信息化程度越来越高,计算机的应用已经深入到社会生活的各个领域,尤其是办公系统的自动化更是计算机在社会化普及过程中的一个重要方面。
在大学教务管理中,有许多方面需要计算机的介入,本系统利用VisualFoxPro6.0程序设计语言编程实现了教务管理中的学生选课与成绩的自动化管理,对学生自由选课与学生成绩进行统一管理。
可以方便地实现课程选择、选课查询、指定任课教师、查询任课教师、成绩录入、成绩查询、输出报表、毕业审核等等。
极大地方便教务管理,提高工作效率和办公自动化水平。
学生选课成绩管理系统是一个小型的数据库应用系统程序,功能比较简单,但用户可以从该系统的整个设计过程中领会有关数据库应用系统的一般方法,为以后开发大中型的应用系统打好基础。
学生每年都要有必修课和选修课,成绩登记,查询都比较麻烦,而每年都需要学校花费很多时间来管理学生的选课成绩,造成了很多不方便。
开发这个系统是为了更方便的查询,修改,添加学生选课的各种数据,便于统一管理。
同时也有利于节省时间和人力,方便学校管理。
1
第一章学生选课成绩管理系统概述
系统开发的最先步骤是功能分析。
学生选课成绩管理系统主要管理学生的选课情况和学生成绩,该系统完成的功能模块共有:
查询、添加、修改、统计和打印。
其中每一项又有几个具体的小功能。
第1节数据库的概念
数据库于20世纪60年代末诞生,几十年来,不断得到迅速的发展,几乎已经渗透到计算机应用的每一个领域。
数据库技术的发展大致经过三个阶段:
人工管理阶段、文件系统阶段和数据库系统阶段。
数据库系统是采用数据库技术构建的复杂计算机系统。
它不是单纯的数据库或数据库管理系统,而是一种综合了计算机硬件、软件、数据集合和数据库
[1]管理人员,遵循数据库规则,向用户和应用程序提供信息服务的集成系统。
因此,数据库,软件系统,硬件系统,数据库管理人员被称为数据库系统的四要素。
数据库系统的四个要素构成有机的整体,它们之间互相紧密配合和依靠,为各类用户提供信息服务。
数据库是按一定结构组织的,各种应用相关的所有数据的集合。
它包含了数据库管理系统处理的全部数据。
其内容主要分为两个部分:
一是物理数据库,记载了所有数据;二是数据字典,描述了不同数据之间的关系和数据组织的结构。
数据库设计大概可分为五个步骤:
系统分析、概念结构设计、逻辑结构设计、物理结构设计和数据库的实现和维护。
首先是系统分析。
在这里要设计出一个有效的数据库必须要用系统工程的观点考虑问题。
这一阶段计算机人员和用户双方共同收集数据库所需要的信息内容、用户对处理的需求、系统安全性和完整性等,作为系统分析的基础。
其次是概念结构设计。
概念设计是数据库设计的关键,概念设计也称模式设计。
概念设计所用到的数据是独立于硬件和软件系统的,它的目标是以用户可以理解的形式来表达信息,以便和不熟悉计算机的用户交换意见。
这个阶段得到的概念结构要能充分地反映现实世界中各种事物之间的联系。
同时,系
[2]统结构必须易扩充、易修改。
再次是逻辑结构设计。
逻辑结构设计的任务是把概念结构转换成数据库管理系统能处理的数据模型,建立用户需要的数据库,如关系模型。
在把概念模型转换成关系模型时,要把实体类型和联系类型分别转换成一个个关系模式,可用的方法很多,必须从中选择一个良好的关系模式集作为关系数据库的模式。
接下来是对物理结构进行设计。
它是对给定的基本数据模型选择一个最适合应用环境的物理结构的过程。
其中数据库的物理结构是指数据库存储的记录格式,存储记录安排和存取方法,这些都依
2
赖于具体所使用的数据库系统以及相应的操作系统。
最后是数据库的实现和维护。
数据库实现是根据物理设计的结构产生一个具体的数据库和它的应用程序,并把原始数据装入数
[3]据库。
一般的VisualFoxPro开发都是从事这一方面的工作。
数据库的维护是在实现系统之后,有效地处理数据库的故障和修复数据库,根据新的要求对数据库进行修改升级的工作
第2节系统的需求分析
用户需求分析阶段的首要任务就是要明确数据库应用系统的开发目的。
如一般的应用系统一样,数据库应用系统的目的一般首先由用户提出,也可以由数据库应用系统开发者拟定。
学生选课成绩管理系统的目标是建立一个选课成绩计算机管理系统,以取代人工管
[4]理的大部分事务,开发的目的如下:
1、能对学生选课成绩的有关数据进行输入、修改、查询;
2、可以向数据库里添加新的学生、教师等信息;
3、对每名学生的成绩进行统计;
4、打印学生、教师等表信息。
学生选课成绩管理的要求主要是:
能够更快地、系统地知道学生选课成绩情况,包括学生基本信息、老师基本信息、课程基本信息等。
我们通过对这些数据需求的分析,应该找出需要用信息数据来表达的内容及其方式,还要找出相互之间的关系,在这种复杂的关系中进行有关主题的提炼,用这些既独立又相互关联的主题以及每一个主题所表达的,有单一信息价值内涵的数据项集合及其处理方式,来构造一个数据库系统框架结构。
通过数据需求的调研应归纳出与系统相关的数据。
对这些数据进行分析、归纳,从中找出“规律”,
[5]提炼主题并排除冗余数据。
改进完善业务流程图,分析用户需要系统完成哪些任务,逐层分解,画出功能层次图。
功能分析是要在设计过程中明确完成设计后的“学生选课成绩管理系统”所能具备的功能。
学生选课成绩管理系统的功能模块划分如图1.1所示。
图1.1功能模块
3
所有子功能的作用:
1、添加模块。
可以更新“学生”、“课程”、“成绩”、“教师”、“班级表”五个表的基本信息。
2、修改模块。
可以修改“学生”、“课程”、“成绩”、三个表的信息。
3、查询模块。
查询“学生”、“课程”、“成绩”、“教师”、“班级表”五个表的基本信息。
4、统计模块。
统计每名学生的成绩。
包括每个学生的单科最高分和最低分等。
5、打印模块。
实现“学生”、“课程”、“成绩”、“教师”、“班级表”五个表的基本信息打印。
6、退出系统模块:
退出系统返回WIDNOWS界面。
整个应用系统文件包括数据库、表、表单、视图、查询、程序等各种VFP文件。
“学生选课成绩管理系统”项目的数据源由“学生选课成绩数据库”和其下各个数据库表组成,图1.2为数据库与表的关系图。
图1.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姓名字符型否
2性别字符型否
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.2查询模块
从图中可以看出,五个页框结构基本相同,在此只提供第一页框的具体设计方法。
在表单数据环境中添加“学生”表、“课程”表、“教师”表、“班级”表和分数表、在页框处于编辑状态时利用数据环境设计器中的“学生”表往第一页框中添加表中所有字段标签和字段控件。
添加一个含四个命令按钮的命令组合框,一个标签和一组合框控件(Combo1),用于控制及浏览“学生”表记录。
执行该表单,选择“学生情况”页,可以显示“学生”表首记录的内容。
单击【上一个】、【下一个】按钮可以浏览当前记录的上下记录;单击【删除】按钮可以删除当前记录;单击下拉组合框可跳到指定记录。
当选择组合控件Combo1时将激活InteractiveChange事件,代码如下所示。
bo2.value=‘‘
locaforstudent.学号=this.value
Iffound()
thisform.refresh
endif
当浏览记录时,将发生Commandgroup1的Click事件,代码如下。
selestudent
Docase
Casethis.value=1
Gotop
{„„设置command1至command4是否可用„„}
Casethis.value=2
{„„设置command3至command4是否可用„„}
Ifnotbof()
9
Skip-1
Else
{„„设置command1至command2是否可用„„}
endif
Casethis.value=3
{„„设置command1至command2是否可用„„}
Ifnoteof()
Skip
Else
{„„设置command3至command4是否可用„„}
endif
Casethis.value=4
Gobottom
{„„设置command1至command4是否可用„„}
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(bo1.value)n4=alltrim(dtoc(this.parent.parent.text4.value))n5=alltrim(this.parent.parent.text5.value)n6=alltrim(bo2.value)n7=alltrim(this.parent.parent.edit1.value)Setexacton
Docase
Casen1=‘‘
messagebox('教师代码不能为空值~',48,'注意')
this.parent.parent.text1.setfocus
Casen2=‘‘
messagebox('姓名不能为空值~',48,'注意')
this.parent.parent.text2.setfocus
Casen3=‘‘
messagebox('性别不能为空值~',48,'注意')
bo1.setfocus
Casen4=‘‘
messagebox('不能输入空值~',48,'注意')
this.parent.parent.text4.setfocus
Casen5=‘‘
messagebox('籍贯不能为空值~',48,'注意')
this.parent.parent.text5.setfocus
Casen6=‘‘
messagebox('技术职务不能为空值~',48,'注意')
bo2.setfocusOtherwise
a=messagebox('确认添加新记录到教师表~',1+64+0,'提示')
Ifa=1
seleteacher
Gobottom
11
Insertintoteachervalues(n1,n2,n3,ctod(n4),n5,n6,n7)
b=messagebox('新记录添加成功~',64,'提示信息')
Ifb=1
this.parent.parent.text1.value=‘‘
this.parent.parent.text2.value=‘‘
bo1.value=‘‘
this.parent.parent.text4.value={}
this.parent.parent.text5.value=‘‘
bo2.value=‘‘
this.parent.parent.edit1.value=‘‘
this.parent.parent.text1.setfocus
endif
endif
endcase
当单击【重写】按钮时将发生Command2的Click事件,代码如下所示。
this.parent.parent.text1.value=‘‘
this.parent.parent.text2.value=‘‘
bo1.readonly=.F.bo1.value=‘‘
this.parent.parent.text4.value={}this.parent.parent.text5.value=‘‘
bo2.readonly=.F.bo2.value=‘‘
this.parent.parent.edit1.value=‘‘
this.parent.parent.text1.setfocus
第4节修改模块的设计
修改模块主要通过记录号修改课程表、成绩表和学生表的信息。
修改表单从课程表、
成绩表、学生表中选取相应的字段,将对应的字段罗列在列表框中供修改相应的内容。
在
修改之前要输入记录号,否则系统无法查找相应的记录。
单击确定后,完成修改内容。
运
12
行后如图2.4所示。
图2.4修改模块
当用户输入记录号后,再选择相应的表将发生InteractiveChange事件,其代码如下所
示。
jlh=Val(thisform.text5.value)Docase
Casethis.value=1
Selecourse
Docase
Casejlh=0
thisform.text5.value=‘‘
thisform.text5.setfocus
messagebox('记录号不能为0~')
this.value=0
Casejlh>recc()
messagebox('记录超出范围~')
jlh=recc()
thisform.text5.value=‘‘
thisform.text5.setfocus
this.value=0
Otherwise
Gojlh
thisform.text1.value=课程代码
thisform.text2.value=课程名称
13
thisform.text3.value=类别
thisform.text4.value=教师代码
thisform.text2.width=104
thisform.text1.visible=.T.
thisform.text2.visible=.T.
thisform.text3.visible=.T.
thisform.label1.visible=.T.
thisform.label2.visible=.T.
thisform.label3.visible=.T.
thisform.label4.visible=.T.
thisform.text4.visible=.T.
thisform.label8.visible=.F.
thisform.text6.visible=.F.
thisform.text1.readonly=.F.
thisform.text2.readonly=.F.
thisform.label1.caption='课程代码'
thisform.label2.caption='课程名称'
thisform.label3.caption='类别'
thisform.label4.caption='教师代码'
thisform.text3.alignment=3
thisform.text3.inputmask=‘‘
thisform.text3.setfocus
mand1.visible=.T.
endcase
{„„Casethis.value=2至Casethis.value=3„„}
endcase
当修改完成后单击【确定】按钮,将发生Command1的Click事件。
Setexacton
Docase
Casethisform.optiongroup1.value=1
a=alltrim(thisform.text3.value)
14
b=alltrim(thisform.text4.value)
c=alltrim(thisform.text1.value)
d=alltrim(thisform.text2.value)
Setexacton
Docase
Casea=‘‘
messagebox('类别不能为空白值~',58)
thisform.text3.setfocus
{„„Caseb=‘‘至Cased=‘‘„„}
Otherwise
m=messagebox('确定修改课程记录~',1+64+0,'信息')
Ifm=1
selecourse
replace课程代码withc
replace课程名称withd
replace类别witha
replace教师代码withb
messagebox('记录修改成功~')
thisform.text5.value=‘‘
thisform.text5.setfocus
thisform.optiongroup1.value=0
endif
endcase
{„„Casethisform.optiongroup1.value=2