Access数据库VBA编程实例——通用成绩处理系统
诏安一中信息技术组 吴瑶民
同学们通过学习高中选修课4《数据库管理技术》第四章“开发数据库应用系统”,已初步学会了简单应用系统的设计,为了让同学们能进一步提升开发能力,以学生熟知的成绩统计为实例,结合VBA编写通用成绩处理系统。 一、系统总体分析与设计
成绩录入采用EXCEL电子表格模板方式,各班以电子表格形式上缴年段,由年段汇总后导入通用成绩处理系统,然后由系统进行计算总分、排名次、质量分析后,通过导出功能导出EXCEL表格形式并打印出统计结果。录入成绩与打印成绩都在教师悉熟的EXCEL电子表格进行,方便教师操作,数据的统计与分析由系统自动完成,提高工作效率。
将上述模块设计图示化后我们便可以得到所示的系统功能模块图:
导入成绩(EXCEL格式) 导入信息浏览 统计分析 三率浏览 学生站队浏览 计算三率 班级排名 年段排名 返 回 导出质量分析通用成绩处理系统 导出学生站队表 导出结果(EXCEL格式) 使用帮助 退出系统 返 回
二、数据库分析与设计
1.数据库数据结构分析
通过对成绩统计过程分析及数据要求,创建该管理系统数据库,名为“通用成绩管理系统 .mdb”,主要包含的数据表有“学生成绩”、“质量分析”两个表。“学生成绩”为EXCEL格式的“学生成绩”通过导入模块生成,EXCEL格式的“学生成绩”格式如下:
“质量分析”表结构设计如下表:
字段名称 班级 科目 与考人数 及格人数 高分人数 平均分 及格率 高分率 数据类型 文本 文本 数字 数字 数字 数字 数字 数字 字段大小 2 8 长整形 长整形 长整形 单精度 单精度 单精度 小数位 自动 自动 自动 2 4 4 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 = \学生成绩\ DoCmd.DeleteObject acTable, \学生成绩\ End If Next i
Set db = Nothing
MsgBox (\请将要导入的文件置于“成绩统计”文件夹中,文件名必须是“学生成绩”\ DoCmd.TransferSpreadsheet acImport, 8, \学生成绩\学生成绩.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 \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(\ 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 \质量分析;\For i = 1 To 11
If Me.Controls(\
Call 统计(kmmc(i), kmzf(i), \算年段三率
For j = Val(TXTbjks.Value) To Val(TXTbjks.Value) + bjzs - 1 If j < 10 Then
k = \
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 Debug.Print i If i < 10 Then
kk = \ Else
kk = \ End If
Debug.Print kk
Call RangBerechnen_bj(\学生成绩\总分\ 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, \学生站队表.xls\
MsgBox \导出完毕!结果为“成绩统计\\学生站队表.xls”\