1、Access数据库VBA编程实例通用成绩处理系统Access数据库VBA编程实例通用成绩处理系统诏安一中信息技术组 吴瑶民 同学们通过学习高中选修课4数据库管理技术第四章“开发数据库应用系统”,已初步学会了简单应用系统的设计,为了让同学们能进一步提升开发能力,以学生熟知的成绩统计为实例,结合VBA编写通用成绩处理系统。一、系统总体分析与设计成绩录入采用EXCEL电子表格模板方式,各班以电子表格形式上缴年段,由年段汇总后导入通用成绩处理系统,然后由系统进行计算总分、排名次、质量分析后,通过导出功能导出EXCEL表格形式并打印出统计结果。录入成绩与打印成绩都在教师悉熟的EXCEL电子表格进行,方便
2、教师操作,数据的统计与分析由系统自动完成,提高工作效率。将上述模块设计图示化后我们便可以得到所示的系统功能模块图:二、数据库分析与设计1数据库数据结构分析通过对成绩统计过程分析及数据要求,创建该管理系统数据库,名为“通用成绩管理系统 mdb”,主要包含的数据表有“学生成绩”、“质量分析”两个表。“学生成绩”为EXCEL格式的“学生成绩”通过导入模块生成,EXCEL格式的“学生成绩”格式如下:“质量分析”表结构设计如下表:字段名称数据类型字段大小小数位班级文本2科目文本8与考人数数字长整形自动及格人数数字长整形自动高分人数数字长整形自动平均分数字单精度2及格率数字单精度4高分率数字单精度42、窗
3、体的设计与实现窗体是Access 2003数据库系统的一个重要对象。前面介绍的数据导入、浏览记录、质量分析、显示查询结果、导出数据等都是在“数据表”视图中所进行的操作。(1)通用成绩处理系统窗体: 图一 该窗体及命令按钮VBA代码:Private Sub Form_Load() MsgBox (使用前先进入“使用帮助”,花几分钟阅读一下使用说明,会使你的工作事半功倍!)End SubPrivate Sub 命令0_Click() On Error GoTo err Dim db As Database Set db = CurrentDb() For i = 0 To db.TableDefs
4、.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 Suberr: MsgBox (找不到文件或文件格式不对)End SubPrivate
5、Sub 命令11_Click() DoCmd.OpenTable 学生成绩End SubPrivate Sub 命令12_Click() MsgBox (提示:00表示年段,01表示一班,02表示二班.) DoCmd.OpenTable 质量分析End SubPrivate Sub 命令13_Click() DoCmd.OpenQuery tempEnd SubPrivate Sub 命令15_Click() FollowHyperlink CurrentProject.Path & 功能说明.docEnd SubPrivate Sub 命令22_Click() DoCmd.Quit acQu
6、itSaveAllEnd SubPrivate Sub 命令6_Click() DoCmd.OpenForm 质量分析End SubPrivate Sub 命令7_Click() DoCmd.OpenForm 导出结果End Sub(2)质量分析窗体各命令按钮VBA代码:Private Sub 命令10_Click()Dim kmzf(15) As DoubleDim kmmc(15) As String For i = 1 To 11 kmzf(i) = Val(Me.Controls(txtzf & i).Value) Nextkmmc(1) = 数学kmmc(2) = 语文kmmc(3)
7、 = 英语kmmc(4) = 物理kmmc(5) = 化学kmmc(6) = 地理kmmc(7) = 政治kmmc(8) = 历史kmmc(9) = 生物kmmc(10) = 文综kmmc(11) = 理综Dim k As Stringtt = Falsek = 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) 算年段三率 F
8、or 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 IfNext iIf tt = False Then MsgBox (统计完毕,请返回主菜单导出结果打印)End IfEnd SubPrivate Sub 命令97_Click() Call 查询End SubPrivate
9、Sub 命令100_Click() DoCmd.CloseEnd SubPrivate 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 = kmzf * 0.6 Then jgrs = jgrs + 1 及格人数End IfIf strName = 0.8 * kmzf Then gfrs = gfrs + 1 高分的人数End IfintI = intI + 1 总人数recName.MoveNext 读取记录集的下一行记录Loopavg = sum / intI 平均分gfli = gfrs / intI 高分率jgli = jgrs / intI 及格率写入“质量分析”表Set recName = db.OpenRecordset(质量分析) 将“”表读入记录集recName.AddNewrecName.Fields(0) = jjrecName.Fields(1) = kmrecName.Fi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1