整理第13章教学信息管理系统.docx
《整理第13章教学信息管理系统.docx》由会员分享,可在线阅读,更多相关《整理第13章教学信息管理系统.docx(55页珍藏版)》请在冰豆网上搜索。
整理第13章教学信息管理系统
下篇数据库应用系统开发实例
第14章教学信息管理系统
本章依据前面章节中用到的数据库TuiMag.mdb,向读者介绍一个教学信息管理系统的开发过程,其中主要应用了ADO对象数据库访问技术,以及对SQL语法的综合运用。
14.1系统分析与设计
14.1.1需求分析
根据高校教学信息管理的实际要求,结合教学信息管理的实际流程,开发的教学信息管理系统需要满足以下需求:
(1)对学生的基本信息进行管理,其中包括学号、姓名、性别、出生日期、所在班级、联系电话、备注等。
(2)对教师的基本信息进行管理,其中包括工号、姓名、年龄、所在系(二级单位)、联系电话、备注等。
(3)对学生成绩进行管理,方便学生成绩的录入和查询。
(4)对教师的任课进行管理,能输出每位教师的课程表。
(5)对成绩等信息提供灵活的浏览和综合查询等功能,可以方便地查看和浏览学生基本信息、教师基本信息、成绩数据。
(6)教务员可以对学生、教师基本信息以及课程信息、成绩等具有添加、删除和编辑等操作。
14.1.2模块设计
根据系统需求分析,结合实际情况,经过模块分析,系统应具有以下几个功能模块:
1.用户管理模块
本系统的用户分为三类:
学生用户、教师用户和教务员用户。
学生用户是指系统学生基本信息表中的所有学生,其用户名为学生的学号,初始密码也为学号,学生用户只能查看自己的信息和成绩,不能浏览他人信息和成绩,也不能改动自己的各项信息。
教师用户是指教师基本表中的所有教师,其用户名为教师的工号,初始密码也为工号,教师用户能查看所有学生的基本信息和成绩,能改动自己所任课程的成绩信息。
教务员用户是系统的特权用户,能对所用户信息和学生、教师基本信息以及课程信息、成绩等具有添加、删除和编辑的权限。
2.学生基本信息管理模块
此部分功能只有教务员具有操作权限。
由教务人员负责学生基本信息的维护管理工作,如果学生基本信息有所变动,教务员有权及时更新有关信息,实现对学生基本信息的添加、删除和修改等操作。
3.课程基本信息管理模块
此部分功能只有教务员具有操作权限。
由教务人员负责课程基本信息的维护管理,他包括课程代号、课程名称、课程学分、是否核心课程,由教务员实现对课程基本信息的添加、删除和修改等操作。
4.教师基本信息管理模块
此部分功能只有教务员具有操作权限。
由教务人员负责教师基本信息的维护管理工作,如果教师基本信息有所变动,教务员有权及时更新有关信息,实现对教师基本信息的添加、删除和修改等操作。
5.程表查询模块
由教师根据自己的工号,查询生成相应时间所授课程的时间和地点,并生成课程表。
14.2创建数据库及数据表
14.2.1设计数据表
根据系统功能需求,数据库采用Access,它完全可以满足上述需求中提出的要求,并且它所支持的数据类型十分丰富,维护简便,费用低,人员素质要求不是很高,容易升级。
根据模块的设计,以及根据规范化设计要求,该系统的数据库表设计如表14.1到表14.6所示:
表14.1存放课程信息,表14.2存放学生信息,表14.3存放学生成绩,表14.4表存放教师信息,表14.5存放教师任课信息,表14.6存放系统的用户信息。
表14.1课程信息表(CourInfo)
字段名称
字段类型
字段大小
字段含义
是否必填
索引
是否主键
CourID
文本
3
课程代号
是
有(无重复)
是
CourName
文本
20
课程名称
是
无
CourCredit
数字
单精度型
课程学分
否
无
CourCore
是/否
是否核心课程
否
无
表14.2学生信息表(StuInfo)
字段名称
字段类型
字段大小
字段含义
是否必填
索引
是否主键
StuID
文本
6
学生学号
是
有(无重复)
是
StuName
文本
10
学生姓名
是
无
StuSex
文本
2
学生性别
否
无
StuBirthDate
日期/时间
学生出生日期
否
无
StuClass
文本
20
学生所在班级
否
无
StuFrom
文本
20
学生来源
否
无
StuTel
文本
20
学生联系电话
否
无
StuMem
文本
学生备注
否
无
StuPhoto
OLE对象
学生照片
否
无
StuPhotoSize
数字
学生照片大小
否
无
表14.3学生成绩表(StuScore)
字段名称
字段类型
字段大小
字段含义
是否必填
索引
是否主键
StuID
文本
6
学生学号
是
无
是
CourID
文本
3
课程代号
是
无
是
StuScore
数字
单精度型
学生成绩
否
无
表14.4教师信息表(TechInfo)
字段名称
字段类型
字段大小
字段含义
是否必填
索引
是否主键
TechID
文本
6
教师工号
是
有(无重复)
是
TechName
文本
20
教师姓名
否
无
TechAge
数字
整型
教师年龄
否
无
TechUnit
文本
20
教师所在系(二级单位)
否
无
TechTel
文本
20
教师联系电话
否
无
TechMem
备注
教师备注
否
无
表14.5教师任课表(TechAppoint)
字段名称
字段类型
字段大小
字段含义
是否必填
索引
是否主键
TechID
文本
6
任课教师工号
是
无
是
CourID
文本
3
任课课程代号
是
无
是
ClassTime
文本
8
上课时间
否
无
是
ClassPlace
文本
51
上课地点
否
无
表14.6用户信息表(UserInfo)
字段名称
字段类型
字段大小
字段含义
是否必填
索引
是否主键
UserName
文本
6
用户名
是
有(无重复)
是
UserRealName
文本
20
用户实名
是
无
UserTel
文本
20
用户联系电话
否
无
UserPurview
文本
10
用户权限
否
无
UserPassword
文本
8
用户密码
否
无
14.2.2创建数据库
创建数据库包括3方面的内容:
(1)首先在Access2002中创建名为TuiMag的数据库;
(2)然后按表14.1至表14.6的要求,在数据库中创建课程信息表、学生信息表、学生成绩表、教师信息表、教师任课表和用户信息表;
(3)最后建立课程信息表、学生信息表、学生成绩表之间的关系:
通过CourID字段建立课程信息表与学生成绩表间一对多的关系,通过StuID字段建立学生信息表与学生成绩表间一对多的关系,如图14.1所示。
图14.1课程信息表、学生信息表、学生成绩表间的关系
14.3创建工程和系统主窗体
14.3.1创建工程
在VB中创建一个工程,命名为“TuiMag.vbp”,将创建的TuiMag.mdb数据库拷贝到代码目录中,以便建立数据库连接。
本系统将采取ADO作为数据连接的手段,所以需要在工程中添加对ADO的引用,具体方法如下:
选择菜单中的“工程”/“引用”,在出现的表单中选择“MicrosoftActiveXDataObjects2.5Library”,单击“确定”按钮。
如图14.2所示。
图14.2添加对ADO的引用
14.3.2创建系统主窗体
在VisualBasic中,既可以创建单文档(SDI)应用程序,也可以创建多文档(MDI)应用程序。
在单文档应用程序中,每个窗体彼此独立。
而多文档应用程序,有一个窗体是主窗体,它可以包含若干个子窗体。
本例拟建立一个多文档应用程序,将所建立的多个窗体作为主窗体的子窗体,便于管理。
单击工具栏中的“添加MDI窗体”按钮,生成一个默认名称为MDIForm1的窗体,按表14.7设置它的属性。
表14.7系统主窗体属性的设置
属性
属性值
Caption
教学信息管理系统
StartUpPosition
CenterScreen
WindowState
Maximized
1.系统主窗体菜单的创建
在设计视图下,右单击主窗体,选择快捷菜单中的“菜单编辑器”,在“菜单编辑器”依据表14.8,建立系统菜单。
菜单建立完成后,运行主窗体的效果如图14.3所示。
表14.8主窗体菜单及其名称
标题
名称
标题
名称
基本信息(&B)
mnuBaseInfo
教师任课(&A)
mnuEditTechAppoint
课程信息(&C)
mnuCourInfo
教师课程表
mnuQueryTechAppoint
学生信息(&S)
mnuStuInfo
学生成绩(&S)
mnuStuScore
教师信息(&T)
mnuTechInfo
学生成绩(&S)
mnuEditStuScore
用户信息(&U)
mnuUserInfo
成绩查询(&Q)
mnuQueryStuScore
教师任课(&A)
mnuTechAppoint
退出(&X)
mnuExit
图14.3主窗体的运行效果
2.系统主窗体代码
系统各功能模块通过主窗体的菜单项来调用,因此系统主窗体各菜单项的代码主要功能是显示各窗体,当然,也可以把一些简单的代码段写在主窗体的菜单项的单击事件中。
主窗体作为系统运行时第一个装载的窗体,在窗体装载事件中,完成与数据库的连接。
代码如下:
PrivateSubMDIForm_Load()
Setcn=NewADODB.Connection
cn.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource"_
&"="&App.Path&"\TuiMag.mdb;PersistSecurityInfo=False"
EndSub
PrivateSubmnuCourInfo_Click()
frmCourInfo.Show
EndSub
PrivateSubmnuEditStuScore_Click()
frmStuScore.Show
EndSub
PrivateSubmnuEditTechAppoint_Click()
frmTechAppoint.Show
EndSub
PrivateSubmnuExit_Click()
End
EndSub
PrivateSubmnuQueryStuScore_Click()
frmQueryStuScore.Show
EndSub
PrivateSubmnuQueryTechAppoint_Click()
frmQueryTechAppoint.Show
EndSub
PrivateSubmnuStuInfo_Click()
frmStuInfo.Show
EndSub
PrivateSubmnuTechInfo_Click()
frmTechInfo.Show
EndSub
PrivateSubmnuUserInfo_Click()
frmUserInfo.Show
EndSub
另外,添加模块,在模块窗口定义模块级变量,用户数据库的连接和记录集的存储。
PubliccnAsNewADODB.Connection
PublicrsAsNewADODB.Recordset
14.4课程信息管理模块
14.4.1模块功能
课程信息管理模块主要完成课程管理的功能,内容包括课程代号、课程名称、学分、是否核心课程等,本模块实现对课程的添加、删除、修改等操作。
14.4.2界面设计
根据上述模块功能要求,按表14.9设计“课程信息管理”窗体,并添加控件,控件的属性设置参见表14.9,设计完成后的窗体界面如图14.4所示。
表14.9课程信息管理窗体主要控件的属性设置及其功能说明表
控件
名称
属性设置或功能说明
Label
Label1
Caption属性为“课程代号”
Label
Label2
Caption属性为“课程名称”
Label
Label3
Caption属性为“学分”
CheckBox
chkCourCore
Caption属性为“是否核心课程”,用于录入或编辑是否核心课程
TextBox
txtCourID
用于录入或编辑课程代号
TextBox
txtCourCredit
用于录入或编辑课程学分
TextBox
txtCourName
用于录入或编辑课程名称
CommandButton
cmdAdd
Picture属性为“add.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdDel
Picture属性为“add.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdEdit
Picture属性为“Edit.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdSave
Picture属性为“Save.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdCancel
Picture属性为“Cancel.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdFirst
Picture属性为“First.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdPrevious
Picture属性为“Previous.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdNext
Picture属性为“Next.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdLast
Picture属性为“Last.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
CommandButton
cmdExit
Picture属性为“Exit.bmp”,Style属性为“1-Graphical”,Caption属性为“”(空)
图14.4课程信息管理窗体
14.4.3编写模块代码
(1)窗体的属性设置:
名称为frmCourInfo,BorderStyle为3-FixedDialog,Caption属性为“课程信息管理”。
并在窗体的通用声明段添加如下代码,用于指定当前编辑模式。
DimAddModeAsBoolean
(2)在模块文件中添加SetCmdNotEnable过程和SetCmdEnable过程,用于设置当前各命令按钮是否可用,其中过程的参数类型为Form类型,可以被各窗体调用。
SubSetCmdNotEnable(frmAsForm)
frm.cmdAdd.Enabled=False
frm.cmdEdit.Enabled=False
frm.cmdDelete.Enabled=False
frm.cmdFirst.Enabled=False
frm.cmdPrevious.Enabled=False
frm.cmdNext.Enabled=False
frm.cmdLast.Enabled=False
frm.cmdSave.Enabled=True
frm.cmdCancel.Enabled=True
EndSub
SubSetCmdEnable(frmAsForm)
frm.cmdAdd.Enabled=True
frm.cmdEdit.Enabled=True
frm.cmdDelete.Enabled=True
frm.cmdFirst.Enabled=True
frm.cmdPrevious.Enabled=True
frm.cmdNext.Enabled=True
frm.cmdLast.Enabled=True
frm.cmdSave.Enabled=False
frm.cmdCancel.Enabled=False
EndSub
(3)定义过程clearcontrol,用于实现窗体控件内容的清空。
Subclearcontrol()
txtCourID.Text=""
txtCourName.Text=""
txtCourCredit.Text=""
chkCourCore.Value=0
EndSub
(4)定义过程ControltoField,用于实现窗体控件内容的保存,其中过程的参数类型为记录集类型。
SubControltoField(rssAsADODB.Recordset)
rss!
CourID=Trim(txtCourID.Text)
rss!
CourName=Trim(txtCourName.Text)
rss!
CourCredit=Val(Trim(txtCourCredit.Text)+"")
IfchkCourCore.Value=1Then
rss!
CourCore=True
Else
rss!
CourCore=False
EndIf
EndSub
(5)定义过程FieldtoControl,用于实现在窗体控件中显示记录集各字段内容,其中过程的参数类型为记录集类型。
SubFieldtoControl(rssAsADODB.Recordset)
txtCourID.Text=Trim(rss!
CourID)
txtCourName.Text=Trim(rss!
CourName)
txtCourCredit.Text=Trim(rss!
CourCredit)
Ifrss!
CourCore=TrueThen
chkCourCore.Value=1
Else
chkCourCore.Value=0
EndIf
EndSub
(6)窗体激活事件过程,根据CourInfo表生成记录集,并显示在窗体各控件中,也可以看成对窗体的初始化。
PrivateSubForm_Activate()
strSql="select*fromCourInfo"
Setrs=NewADODB.Recordset
rs.ActiveConnection=cn
rs.OpenstrSql,cn,adOpenKeyset,adLockPessimistic
Ifrs.RecordCount>0Then
rs.MoveFirst:
CallFieldtoControl(rs)
Else
DoEvents
MsgBox"无任何课程记录可显示!
",48,"提示"
CallclearControl
EndIf
cmdFirst_Click
EndSub
(7)为命令按钮“添加”单击事件过程,为记录的添加作好准备。
SubcmdAdd_Click()
CallSetCmdNotEnable(Me)
Callclearcontrol
IfNotrs.EOF()AndNotrs.BOF()Thenrs.MoveLast
rs.AddNew
txtCourID.SetFocus
AddMode=True
txtCourID.Enabled=True
EndSub
(8)为命令按钮“编辑”单击事件过程,为记录的编辑作好准备。
SubcmdEdit_Click()
AddMode=False
CallSetCmdNotEnable(Me)
Ifrs.EOFOrrs.BOFOrTrim(txtCourID)=""Then
MsgBox"无记录可修改?
",48+vbOKCancel,"警告"
ExitSub
EndIf
txtCourID.Enabled=False
EndSub
(9)为命令按钮“保存”单击事件过程,将添加的记录或对记录的修改进行保存。
PrivateSubcmdSave_Click()
IfTrim(txtCourID.Text)=""Then
MsgBox"课程代号不能为空",vbCritical,"不能保存"
ExitSub
EndIf
OnErrorResumeNext
CallSetCmdEnable(Me)
IfAddMode=TrueThen
strSql="select*fromCourInfowhereTrim(CourID)='"&Trim(Me.txtCourID.Text)&"'"
Setrstmp=NewADODB.Recordset
rstmp.OpenstrSql,cn,adOpenKeyset,adLockPessimistic
Ifrstmp.RecordCount>0Then
MsgBox"您添加的课程代号已存在,不能有相同的代号!
请为新课程选择不重复的代号",48,"提示"
Me.txtCourID.SetFocus:
Me.txtCourID.SelStart=0
Me.txtCourID.SelLength=Len(Me.txtCourID.Text)
CallSetCmdNotEnable(Me):
ExitSub
Else
CallMe.ControltoField(rs)
rs.Update:
txtCourID.Enabled=True
EndIf
Else
CallMe.ControltoField(rs)
rs.Update:
txtCourID.Enabled=True
EndIf
EndSub
(10)为命令按钮“取消”单击事件过程,取消当前的添加操作或对记录的修改。
SubcmdCancel_Click()
rs.CancelUpdate
CallSetCmdEnable(Me)