Access数据库VBA编程实例通用成绩处理系统.docx
- 文档编号:2008976
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:14
- 大小:127.81KB
Access数据库VBA编程实例通用成绩处理系统.docx
《Access数据库VBA编程实例通用成绩处理系统.docx》由会员分享,可在线阅读,更多相关《Access数据库VBA编程实例通用成绩处理系统.docx(14页珍藏版)》请在冰豆网上搜索。
Access数据库VBA编程实例通用成绩处理系统
Access数据库VBA编程实例——通用成绩处理系统
诏安一中信息技术组吴瑶民
同学们通过学习高中选修课4《数据库管理技术》第四章“开发数据库应用系统”,已初步学会了简单应用系统的设计,为了让同学们能进一步提升开发能力,以学生熟知的成绩统计为实例,结合VBA编写通用成绩处理系统。
一、系统总体分析与设计
成绩录入采用EXCEL电子表格模板方式,各班以电子表格形式上缴年段,由年段汇总后导入通用成绩处理系统,然后由系统进行计算总分、排名次、质量分析后,通过导出功能导出EXCEL表格形式并打印出统计结果。
录入成绩与打印成绩都在教师悉熟的EXCEL电子表格进行,方便教师操作,数据的统计与分析由系统自动完成,提高工作效率。
将上述模块设计图示化后我们便可以得到所示的系统功能模块图:
二、数据库分析与设计
1.数据库数据结构分析
通过对成绩统计过程分析及数据要求,创建该管理系统数据库,名为“通用成绩管理系统.mdb”,主要包含的数据表有“学生成绩”、“质量分析”两个表。
“学生成绩”为EXCEL格式的“学生成绩”通过导入模块生成,EXCEL格式的“学生成绩”格式如下:
“质量分析”表结构设计如下表:
字段名称
数据类型
字段大小
小数位
班级
文本
2
科目
文本
8
与考人数
数字
长整形
自动
及格人数
数字
长整形
自动
高分人数
数字
长整形
自动
平均分
数字
单精度
2
及格率
数字
单精度
4
高分率
数字
单精度
4
2、窗体的设计与实现
窗体是Access2003数据库系统的一个重要对象。
前面介绍的数据导入、浏览记录、质量分析、显示查询结果、导出数据等都是在“数据表”视图中所进行的操作。
(1)通用成绩处理系统窗体:
图一
该窗体及命令按钮VBA代码:
PrivateSubForm_Load()
MsgBox("使用前先进入“使用帮助”,花几分钟阅读一下使用说明,会使你的工作事半功倍!
")
EndSub
PrivateSub命令0_Click()
OnErrorGoToerr
DimdbAsDatabase
Setdb=CurrentDb()
Fori=0Todb.TableDefs.Count-1
Ifdb.TableDefs(i).Name="学生成绩"Then
DoCmd.DeleteObjectacTable,"学生成绩"
EndIf
Nexti
Setdb=Nothing
MsgBox("请将要导入的文件置于“成绩统计”文件夹中,文件名必须是“学生成绩”")
DoCmd.TransferSpreadsheetacImport,8,"学生成绩",CurrentProject.Path&"\学生成绩.xls",True
MsgBox("导入完成!
")
ExitSub
err:
MsgBox("找不到文件或文件格式不对")
EndSub
PrivateSub命令11_Click()
DoCmd.OpenTable"学生成绩"
EndSub
PrivateSub命令12_Click()
MsgBox("提示:
00表示年段,01表示一班,02表示二班.....")
DoCmd.OpenTable"质量分析"
EndSub
PrivateSub命令13_Click()
DoCmd.OpenQuery"temp"
EndSub
PrivateSub命令15_Click()
FollowHyperlinkCurrentProject.Path&"\功能说明.doc"
EndSub
PrivateSub命令22_Click()
DoCmd.QuitacQuitSaveAll
EndSub
PrivateSub命令6_Click()
DoCmd.OpenForm"质量分析"
EndSub
PrivateSub命令7_Click()
DoCmd.OpenForm"导出结果"
EndSub
(2)质量分析窗体
各命令按钮VBA代码:
PrivateSub命令10_Click()
Dimkmzf(15)AsDouble
Dimkmmc(15)AsString
Fori=1To11
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)="理综"
DimkAsString
tt=False
k=""
'DimdbAsDAO.Database'声明数据库对象变量
Setdb=CurrentDb()
db.Execute"DELETE*FROM质量分析;"
Fori=1To11
IfMe.Controls("check"&i)<>0Then
Call统计(kmmc(i),kmzf(i),"00")'算年段三率
Forj=Val(TXTbjks.Value)ToVal(TXTbjks.Value)+bjzs-1
Ifj<10Then
k="0"&CStr(j)
Call统计(kmmc(i),kmzf(i),k)'算班级三率
Else
k=CStr(j)
Call统计(kmmc(i),kmzf(i),k)
EndIf
Nextj
EndIf
Nexti
Iftt=FalseThen
MsgBox("统计完毕,请返回主菜单导出结果打印")
EndIf
EndSub
PrivateSub命令97_Click()
Call查询
EndSub
PrivateSub命令100_Click()
DoCmd.Close
EndSub
PrivateSub命令111_Click()
DimkkAsString
Call计算总分
Fori=Val(TXTbjks.Value)ToVal(TXTbjks.Value)+Val(txtbjzs.Value)-1
Debug.Printi
Ifi<10Then
kk="""0"&CStr(i)&"*"""
Else
kk=""""&CStr(i)&"*"""
EndIf
Debug.Printkk
CallRangBerechnen_bj("学生成绩",kk,"总分")
Nexti
MsgBox("处理完毕!
")
EndSub
PrivateSub命令98_Click()
tt=True
'Call计算总分
CallRangBerechnen("学生成绩","总分")'年段排名
Call查询
IfttThen
MsgBox("统计完毕,请返回主菜单导出结果打印")
EndIf
EndSub
(3)导出结果窗体
各命令按钮VBA代码:
PrivateSub命令0_Click()
DoCmd.OutputToacOutputQuery,"temp",acFormatXLS,CurrentProject.Path&"\学生站队表.xls"
MsgBox"导出完毕!
结果为“成绩统计\学生站队表.xls”"
EndSub
PrivateSub命令1_Click()
DoCmd.OutputToacOutputTable,"质量分析",acFormatXLS,CurrentProject.Path&"\质量分析.xls"
MsgBox"导出完毕!
结果为“成绩统计\质量分析.xls”"
EndSub
PrivateSub命令3_Click()
DoCmd.Close
EndSub
(4)通用模块代码
PublicttAsBoolean
PubliciAsInteger
PublicjAsInteger
PublicstrAsString
PublicbjzsAsInteger
Publickmzf(15)'存放各科总分
Publickmmc(15)'存放科目名称
Sub统计(kmAsString,kmzfAsDouble,jjAsString)
DimsumAsLong
DimintIAsLong
DimavgAsSingle
DimgfliAsSingle
DimjgliAsSingle
DimstrsqlAsString
DimdbAsDAO.Database'声明数据库对象变量
DimrecNameAsDAO.Recordset'声明记录集对象变量
DimstrNameAsDAO.Field'声明字段对象变量
OnErrorGoTowrong
Setdb=CurrentDb()'指定数据库为当前数据库
Ifjj="00"Then
SetrecName=db.OpenRecordset("学生成绩")'计算年段
Else
SetrecName=db.OpenRecordset("select*from学生成绩where班号like"&""""&jj&"*"&"""")'计算班级
EndIf
SetstrName=recName.Fields(km)'指定记录集“科目”字段
'计算三率
jgrs=0'及格人数
sum=0'总分
gfrs=0'高分人数
intI=0'总人数
DoUntilrecName.EOF
sum=sum+IIf(IsNull(strName),0,strName)'将“科目”字段读入数组
IfstrName>=kmzf*0.6Then
jgrs=jgrs+1'及格人数
EndIf
IfstrName>=0.8*kmzfThen
gfrs=gfrs+1'高分的人数
EndIf
intI=intI+1'总人数
recName.MoveNext'读取记录集的下一行记录
Loop
avg=sum/intI'平均分
gfli=gfrs/intI'高分率
jgli=jgrs/intI'及格率
'写入“质量分析”表
SetrecName=db.OpenRecordset("质量分析")'将“”表读入记录集
recName.AddNew
recName.Fields(0)=jj
recName.Fields
(1)=km
recName.Fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Access 数据库 VBA 编程 实例 通用 成绩 处理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)