Access数据库VBA编程实例——通用成绩处理系统
诏安一中信息技术组吴瑶民
同学们通过学习高中选修课4《数据库管理技术》第四章“开发数据库应用系统”,已初步学会了简单应用系统的设计,为了让同学们能进一步提升开发能力,以学生熟知的成绩统计为实例,结合VBA编写通用成绩处理系统。
一、系统总体分析与设计
成绩录入采用EXCEL电子表格模板方式,各班以电子表格形式上缴年段,由年段汇总后导入通用成绩处理系统,然后由系统进行计算总分、排名次、质量分析后,通过导出功能导出EXCEL表格形式并打印出统计结果。录入成绩与打印成绩都在教师悉熟的EXCEL电子表格进行,方便教师操作,数据的统计与分析由系统自动完成,提高工作效率。
将上述模块设计图示化后我们便可以得到所示的系统功能模块图:
二、数据库分析与设计
1.数据库数据结构分析
通过对成绩统计过程分析及数据要求,创建该管理系统数据库,名为“通用成绩管理系统.mdb”,主要包含的数据表有“学生成绩”、“质量分析”两个表。“学生成绩”为EXCEL 格式的“学生成绩”通过导入模块
生成,EXCEL格式的“学生成绩”格式如下:
“质量分析”表结构设计如下表:
2、窗体的设计与实现
窗体是Access 2003数据库系统的一个重要对象。前面介绍的数据导入、浏览记录、质量分析、显示查询结果、导出数据等都是在“数据表”视图中所进行的操作。
(1)通用成绩处理系统窗体:
图一
该窗体及命令按钮VBA代码:
Private Sub Form_Load()
MsgBox ("使用前先进入“使用帮助”,花几分钟阅读一下使用说明,会使你的工作事半功倍!")
End Sub
Private Sub 命令0_Click()
On Error GoTo err
Dim db As Database
Set db = CurrentDb()
For i = 0 To db.TableDefs.Count - 1
If db.TableDefs(i).Name = "学生成绩" Then
DoCmd.DeleteObject acTable, "学生成绩"
End If
Next i
Set db = Nothing
MsgBox ("请将要导入的文件置于“成绩统计”文件夹中,文件名必须是“学生成绩”") DoCmd.TransferSpreadsheet acImport, 8, "学生成绩", CurrentProject.Path & "\学生成绩.xls", True
MsgBox ("导入完成!")
Exit Sub
err:
MsgBox ("不到文件或文件格式不对")
End Sub
Private Sub 命令11_Click()
DoCmd.OpenTable "学生成绩"
End Sub
Private Sub 命令12_Click()
MsgBox ("提示:00表示年段,01表示一班,02表示二班.....")
DoCmd.OpenTable "质量分析"
End Sub
Private Sub 命令13_Click()
DoCmd.OpenQuery "temp"
End Sub
Private Sub 命令15_Click()
FollowHyperlink CurrentProject.Path & "\功能说明.doc"
End Sub
Private Sub 命令22_Click()
DoCmd.Quit acQuitSaveAll
End Sub
Private Sub 命令6_Click()
DoCmd.OpenForm "质量分析"
End Sub
Private Sub 命令7_Click()
DoCmd.OpenForm "导出结果"
End Sub
(2)质量分析窗体
各命令按钮VBA代码:
Private Sub 命令10_Click()
Dim kmzf(15) As Double
Dim kmmc(15) As String
For i = 1 To 11
kmzf(i) = Val(Me.Controls("txtzf" & i).Value)
Next
kmmc(1) = "数学"
kmmc(2) = "语文"
kmmc(3) = "英语"
kmmc(4) = "物理"
kmmc(5) = "化学"
kmmc(6) = "地理"
kmmc(7) = "政治"
kmmc(8) = "历史"
kmmc(9) = "生物"
kmmc(10) = "文综"
kmmc(11) = "理综"
Dim k As String
tt = False
k = ""
'Dim db As DAO.Database '声明数据库对象变量
Set db = CurrentDb()
db.Execute "DELETE * FROM 质量分析;"
For i = 1 To 11
If Me.Controls("check" & i) <> 0 Then
Call 统计(kmmc(i), kmzf(i), "00") '算年段三率
For j = Val(TXTbjks.Value) To Val(TXTbjks.Value) + bjzs - 1        If j < 10 Then
k = "0" & CStr(j)
Call 统计(kmmc(i), kmzf(i), k)  '算班级三率
Else
k = CStr(j)
Call 统计(kmmc(i), kmzf(i), k)
End If
Next j
End If
Next i
If tt = False Then
MsgBox ("统计完毕,请返回主菜单导出结果打印")
End If
End Sub
Private Sub 命令97_Click()
Call 查询
End Sub
Private Sub 命令100_Click()
DoCmd.Close
End Sub
Private Sub 命令111_Click()
Dim kk As String
Call 计算总分
For i = Val(TXTbjks.Value) To Val(TXTbjks.Value) + Val(txtbjzs.Value) - 1
vba数据库编程Debug.Print i
If i < 10 Then
kk = """0" & CStr(i) & "*"""
Else
kk = """" & CStr(i) & "*"""
End If
Debug.Print kk
Call RangBerechnen_bj("学生成绩", kk, "总分")
Next i
MsgBox ("处理完毕!")
End Sub
Private Sub 命令98_Click()
tt = True
'Call 计算总分
Call RangBerechnen("学生成绩", "总分") '年段排名
Call 查询
If tt Then
MsgBox ("统计完毕,请返回主菜单导出结果打印")
End If
End Sub
(3)导出结果窗体
各命令按钮VBA代码:
Private Sub 命令0_Click()
DoCmd.OutputTo acOutputQuery, "temp", acFormatXLS, CurrentProject.Path & "\学生站队表.xls"
MsgBox "导出完毕!结果为“成绩统计\学生站队表.xls”"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。