Access数据库VBA编程实例通用成绩处理系统

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”\

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4