基于VBA开发成绩分析管理系统.docx
《基于VBA开发成绩分析管理系统.docx》由会员分享,可在线阅读,更多相关《基于VBA开发成绩分析管理系统.docx(39页珍藏版)》请在冰豆网上搜索。
基于VBA开发成绩分析管理系统
摘要
随着计算机技术的飞速发展,计算机的应用已经越来越普及,其渗透到人类社会的各个领域并发挥着重要的作用。
同样,运用计算机对学生成绩信息进行分析与管理已经成为各大院校的迫切需求。
学生成绩信息是教育单位不可或缺的一部分,然而使用传统的人工方式对学生成绩进行分析存在着许多缺点,比如说误差性大、效率低、成本高等,这时迫切需要一种能够自动对学生成绩信息进行分析管理的方法。
运用成绩分析系统对学生成绩信息进行分析,具有人工分析无法比拟的优点,例如:
检索迅速、可靠性高、成本低等,这些优点能够极大的提高管理者对学生成绩管理的效率,使得学校的管理正规化、科学化。
而运用基于VisualBasic发展而来的VBA技术,不但继承了VB的开发机制,而且具有与VB相似的语言结构,它具有效率高、简单易学及功能强大的特点。
关键词:
VBA、成绩分析、Excel、成绩管理。
前言
计算机网络技术的发展,使得人们的生活与工作方式发生了很大的改变,人工处理数据信息的模式已经远远不能满足人们的需求,在这种形势下,使用计算机软件技术处理学生成绩信息成为了必然。
90年代早期,使应用程序自动化还是一块充满挑战性的领域,对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言,例如,可以用Excel的宏语言来使Excel自动化,微软决定让它开发出来的应用程序共享一种通用的自动化语言——VisualBasicForApplication(VBA),可以说VBA是一种非常流行的应用程序开发语言,使用它可以自定义Excel工具栏、菜单和界面,可以自定义Excel,使其成为开发平台等等。
本篇论文将从系统的开发背景、可行性分析、需求分析、概要设计、详细设计和系统测试等主要方面对成绩分析系统进行详细讲解,在论文的最后,将再次通过总结系统的设计、功能对系统进行整体上的认识。
第一章概述
1.1系统开发背景
计算机应用的普及使得学校使用计算机技术对学生成绩信息进行分析变得越来越频繁,而基于VBA技术的成绩分析系统通过VisualBasicforApplication与Excel的巧妙结合运用让学生成绩信息分析变得更加准确、高效。
1.2系统开发环境与开发工具
成绩信息分析系统的开发环境如下:
windowsxp操作系统。
开发所使用的工具有:
Microsoftoffice2003,VisualBasicForApplication。
1.3系统开发目标
本系统开发的主要目标是为了实现对学生成绩信息的高效和准确的分析,同时学生可以通过本系统查询成绩以及档案等信息。
1.4可行性分析
1.4.1技术上可行性
可行性研究的目的是用最小的代价在尽可能的时间内确定问题是否能够得到解决。
本系统的设计开发利用MicrosoftofficeExcel作为本系统的开发平台,操作简单易学,容易上手,适用于大中规模的数据量需求。
使用VisualBasicForApplication作为系统的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。
综上所述,本成绩分析系统无论在硬件设备上还是开发技术上都是可行的。
1.4.2运行上可行性
本系统作为一个使用MicrosoftofficeExcel对数据进行分析,所耗费的资源非常少,要求的环境配置也非常简单,同时对硬件的要求很低,在运行上具有非常大的可行性。
第二章需求分析
2.1成绩分析系统现状分析
目前市场上的成绩分析系统层出不穷,系统结构千变万化,然而当我们在使用别人做的系统时会发现此类系统会出现很多不必要出现的问题,比如系统打开速度慢,系统很多功能用不到,安装系统时要求的环境配置很高等等的这些问题使得市场上的系统在用户体验上做的很差。
于是,在这种形势下,一种更适合用户体验的成绩分析系统成为了使用者的迫切需求,基于VBA技术的成绩分析系统采用的是以Excel形式对成绩信息进行分析管理的模式,它无需与数据库进行连接,同时要求的环境配置非常低,用户非常容易上手操作,这种系统在现今这种状态下非常值得提倡使用。
2.2基于VBA技术的应用
2.2.1VBA简介
VisualBasicforApplications(VBA)是一种VisualBasic的一种宏语言,主要能用来扩展Windows的应用程式功能。
也可说是一种应用程式视觉化的BasicScript。
2.2.2VBA与其他开发技术的比较
MicrosoftOfficesoftware的普及使得人们常见的Office软件中的Word、Excel、Access、Powerpoint都可以利用VBA使这些软件的应用更高效率,例如:
通过一段VBA代码,可以实现画面的切换和复杂逻辑的统计。
第三章成绩分析系统设计与实现
3.1系统结构
本成绩分析系统从功能上划分以下两个模块:
学生成绩分析模块,学生信息查询模块,以下对这两个模块进行详细的说明。
学生成绩分析模块:
该模块可以对整个年级的学生成绩信息进行排名,并通过输入班级名生成班级成绩表,另外该模块还可以对每一科目的成绩进行分析。
如果在管理员想查询某次考试的缺考人员信息,可以通过点击主界面的缺考人员名单进行查询分析。
同时,可以对数据信息进行维护与查错。
学生信息查询模块:
该模块是学生用来查询个人信息包括个人成绩查询,个人成绩排名查询,单科成绩的详细情况查询以及对个人档案信息的简单维护,同时如果学生为了保证信息安全需要定期修改个人密码,只需要点击主界面上的修改密码选项即可以轻松实现密码的修改。
系统整体模块如图3-1所示:
图3-1系统整体模块结构图
3.2程序逻辑
3.2.1系统E-R图
系统E-R图如图3-2所示。
图3-2系统E-R图
3.2.2查询模块流程图
查询模块流程图如图3-3所示。
图3-3查询模块流程图
3.2.3分析模块流程图
分析模块流程图如图3-4所示。
图3-4分析模块流程图
3.3主程序设计说明
3.3.1用户登录模块
成绩分析系统的用户登录模块如图3-5所示:
图3-5成绩分析系统登录模块
用户登录类别分为两种:
管理员与学生,其中学生具有查询个人信息的权限而无法查看其他学生、班级等信息。
管理员同样不能登陆学生信息主界面,管理员具有对全年级学生信息进行操作的权限,包括对成绩信息的分析,查询,对学生档案信息的查询等。
通过下面的表格,可以清楚的看到管理员的登录号和密码以及相关权限。
表3-1登陆用户信息
用户类别
管理员
学生
登录号
88888
12001
密码
123
123
操作权限
成绩分析、成绩查询、统计人数、科目分析、数据错误检查维护、缺考人员名单查询等
个人成绩查询,个人排名查询,单科成绩分析,个人密码修改,档案信息维护等
具体实现过程如下代码所示:
PrivateSubCommandButton1_Click()
zc=Sheets("登录").Range("A65536").End(xlUp).Row
IfTextBox1.Value=""ThenMsgBox"请输入登录号",vbOKOnly,"错误"
Fori=2Tozc
IfTextBox1.Text=Sheets("登录").Cells(i,1)Then
IfTextBox2.Text=Sheets("登录").Cells(i,3)Then
Application.StatusBar="当前用户为:
"&Sheets("登录").Cells(i,1)&";"&"姓名为:
"&Sheets("登录").Cells(i,2)&";身份为:
"&Sheets("登录").Cells(i,4)
登录.Hide
IfSheets("登录").Cells(i,4)="学生"Then
主界面2.Show
Else
主界面1.Show
EndIf
Else
MsgBox"密码错误!
",vbOKOnly,"错误"
EndIf
ExitFor
EndIf
Nexti
Ifi>zcThen:
MsgBox"登录号不存在!
",vbOKOnly,"错误"
EndSub
当用学生的账号和密码登录时,可以进入学生个人成绩查询模块;当用管理员的账号和密码登录时,可以进入学生成绩分析模块。
3.3.2系统设计
本系统分为学生个人成绩查询模块与学生成绩分析模块。
1.学生个人成绩查询模块
其中学生个人成绩查询主界面如图3-6所示:
图3-6学生成绩查询模块
学生通过登陆窗口输入登录号与密码进入此目录,在此目录下,学生可以查看个人成绩、个人排名、单科成绩以及档案等信息。
(1)个人成绩查询功能实现
通过点击个人成绩查询,可以看到如图3-7:
图3-7个人成绩查询结果
该按钮其功能主要是学生用来查询个人成绩信息,主要代码如下图所示:
Setsth=Sheets("成绩表")
yh=Mid(Application.StatusBar,7,WorksheetFunction.Find(";",Application.StatusBar)-7)
Fori=2Tosth.Range("B65536").End(xlUp).Row
Ifsth.Cells(i,3)=Val(yh)ThenExitFor
Nexti
Label2.Caption=sth.Cells(i,2)
Label18.Caption=sth.Cells(i,3)
Label3.Caption=sth.Cells(1,"E")
Label4.Caption=sth.Cells(1,"F")
Label5.Caption=sth.Cells(1,"G")
Label6.Caption=sth.Cells(1,"H")
Label7.Caption=sth.Cells(1,"I")
Label8.Caption=sth.Cells(1,"J")
Label10.Caption=sth.Cells(i,"E")
Label11.Caption=sth.Cells(i,"F")
Label12.Caption=sth.Cells(i,"G")
Label13.Caption=sth.Cells(i,"H")
Label14.Caption=sth.Cells(i,"I")
Label15.Caption=sth.Cells(i,"J")
Label16.Caption=WorksheetFunction.Sum(sth.Range("E"&i&":
I"&i))
(2)个人排名查询功能实现
通过点击该功能,可以看到如下结果,如图3-8所示:
图3-8个人成绩排名
学生通过点击该按钮,可以查看自己的成绩排名,主要代码如下图所示:
Setsth=Sheets("成绩表")
zccjb=sth.Range("B65536").End(xlUp).Row
yh=Mid(Application.StatusBar,7,WorksheetFunction.Find(";",Application.StatusBar)-7)
Fori=2Tosth.Range("B65536").End(xlUp).Row
Ifsth.Cells(i,3)=Val(yh)ThenExitFor
Nexti
Label2.Caption=yh
Label4.Caption=sth.Cells(i,2)
bj=sth.Cells(i,"D")
cj=WorksheetFunction.Sum(sth.Range("E"&i&":
I"&i))
Label8.Caption=cj
m1=1
m2=1
Forj=2Tozccjb
IfWorksheetFunction.Sum(sth.Range("E"&j&":
I"&j))>cjThen
m2=m2+1
Ifsth.Cells(j,"D")=bjThenm1=m1+1
EndIf
Nextj
Label9.Caption=m1
Label10.Caption=m2
(3)单科成绩分析功能实现
当你点击单科成绩分析时,会要求你选择分析的科目如下图3-9所示:
图3-9单科成绩分析
比如选择了“语文”这门课程,当你点击确定时,就能将“语文”的成绩分析结果显示出来,如下图3-10所示:
图3-10单科成绩查询结果
该按钮是用来对单科成绩进行分析的,其功能主要代码如下图所示:
Setsth=Sheets("成绩表")
zccjb=sth.Range("B65536").End(xlUp).Row
yh=Mid(Application.StatusBar,7,WorksheetFunction.Find(";",Application.StatusBar)-7)
Fori=2Tozccjb
Ifsth.Cells(i,3)=Val(yh)ThenExitFor
Nexti
km=Sheets("主界面").Cells(40,1)
Label2.Caption=yh
Label4.Caption=sth.Cells(i,2)
Label6.Caption=sth.Cells(i,4)
Forj=5To9
Ifsth.Cells(1,j)=kmThenExitFor
Nextj
科目分析结果.Caption="["&km&"]成绩分析结果"
Label14.Caption=sth.Cells(i,j)
mcbj=1
mcbjmax=sth.Cells(i,j)
mcnj=1
mcnjmax=sth.Cells(i,j)
Fork=2Tozccjb
Ifsth.Cells(k,j)>sth.Cells(i,j)Then
mcnj=mcnj+1
Ifsth.Cells(k,j)>mcnjmaxThenmcnjmax=sth.Cells(k,j)
Ifsth.Cells(k,"D")=sth.Cells(i,"D")Then
mcbj=mcbj+1
Ifsth.Cells(k,j)>mcbjmaxThenmcbjmax=sth.Cells(k,j)
EndIf
EndIf
Nextk
Label15.Caption=mcbj
Label16.Caption=mcbjmax
Label17.Caption=mcnj
Label18.Caption=mcnjmax
(5)密码修改功能实现
该功能顾名思义是学生用来修改个人密码的,如下图3-11所示:
图3-11密码修改
可以通过该窗口随时更换学生的个人密码。
学生为了保护个人数据,需要定期修改密码,该密码修改功能主要代码如下图所示:
IfTextBox2.Text<>TextBox3.TextThen
MsgBox"新密码确认错误!
",vbOKOnly,"失败了"
ExitSub
EndIf
yh=Mid(Application.StatusBar,7,WorksheetFunction.Find(";",Application.StatusBar)-1)
Fori=2ToSheets("登录").Range("B65536").End(xlUp).Row
IfSheets("登录").Cells(i,1)=Val(yh)Then
IfSheets("登录").Cells(i,3)=TextBox1.TextThen
Sheets("登录").Cells(i,3)=TextBox2.Text
MsgBox"密码修改成功!
",vbOKOnly,"成功了"
Else
MsgBox"错误的原密码!
",vbOKOnly,"失败了"
EndIf
ExitFor
EndIf
Nexti
(6)档案信息维护功能实现
通过点击个人档案维护,会出现如下窗口,学生可以通过该窗口修改个人基本档案信息。
图3-12个人档案信息维护
学生可以对其档案进行维护,其功能主要代码如下图所示:
Setsth=Sheets("学生花名册")
xh=Mid(Application.StatusBar,7,WorksheetFunction.Find(";",Application.StatusBar)-7)
Fori=2Tosth.Range("B65536").End(xlUp).Row
Ifsth.Cells(i,1)=Val(xh)ThenExitFor
Nexti
sth.Cells(i,5)=TextBox4.Text
sth.Cells(i,6)=TextBox5.Text
sth.Cells(i,7)=TextBox6.Text
sth.Cells(i,8)=TextBox7.Text
sth.Cells(i,4)=TextBox8.Text
sth.Cells(i,9)=TextBox9.Text
sth.Cells(i,10)=TextBox10.Text
sth.Cells(i,11)=TextBox11.Text
ThisWorkbook.Save
2.成绩分析模块
而成绩分析的主界面如图3-13所示:
图3-13成绩分析主目录
管理员在该目录下,可以对年级信息进行排名,统计年级前N名的人数,同时能够对科目进行分段分析以及查看各班级的成绩。
另外,管理员还能够对每次缺考的学生进行分析查询。
(1)年级排名功能实现
当管理员点击年级排名时,会得到全年级学生成绩排名,如图3-14所示:
图3-14年级排名
该按钮是管理员用来对整个年级的学生成绩信息进行排名分析,实现此功能主要代码如下图所示:
Application.DisplayAlerts=False
ForEachwInThisWorkbook.Sheets
Ifw.Name="年级排名"Then
cz=MsgBox("存在[年级排名]表,是否确定删除后重新开始?
",vbYesNo,"是否继续操作")
Ifcz=vbYesThenSheets("年级排名").DeleteElse:
ExitSub
EndIf
Nextw
Application.DisplayAlerts=True
gs=Sheets.Count+1
Sheets.Addafter:
=Sheets(gs-1)
Sheets(gs).Name="年级排名"
Sheets("成绩表").Cells.CopyDestination:
=Sheets(gs).Range("A1")
Sheets(gs).Range("K1:
L1")=Array("总分","名次")
zccjb=Sheets(gs).Range("B65536").End(xlUp).Row
Fori=2Tozccjb
Sheets(gs).Cells(i,"K")=WorksheetFunction.Sum(Sheets(gs).Range("E"&i&":
I"&i))
Nexti
Sheets(gs).Range("A2:
K"&zccjb).SortKey1:
=Range("K2"),Order1:
=xlDescending
Forj=2Tozccjb
Sheets(gs).Cells(j,"A")=j-1
IfSheets(gs).Cells(j,"K")=Sheets(gs).Cells(j-1,"K")Then
Sheets(gs).Cells(j,"L")=Sheets(gs).Cells(j-1,"L")
Else
Sheets(gs).Cells(j,"L")=j-1
EndIf
Nextj
Sheets(gs).Range("J1").Copy
Sheets(gs).Range("K1:
L1").PasteSpecialPaste:
=xlPasteFormats
Sheets(gs).Range("E2").Copy
Sheets(gs).Range("K2:
L"&zccjb).PasteSpecialPaste:
=xlPasteFormats
Application.CutCopyMode=False
Range("B1").Select
(2)年级前N名人数统计功能实现
当运行此功能时,会要求管理员输入需要统计的人数,如图3-15。
图3-15输入人数n
如需要统计20人,就可以输入“20”,通过点击确定按钮即可得到统计结果,如图3-16所示。
图3-16年级前n名
如果需要对年级前N名学生人数进行统计,那么该按钮即可实现,实现其功能的主要代码如下图所示:
Application.DisplayAlerts=False
Fori=1ToSheets.Count
IfSheets(i).Name="前N名人数统计"Then
IfMsgBox("已存在[前N名人数统计]表,是否要删除?
",vbYesNo,"已存在")=vbYesThen
Sheets("前N名人数统计").Delete
ExitFor
Else
ExitSub
EndIf
EndIf
Nexti
Application.DisplayAlerts=True
Fori=1ToSheets.Count
IfSheets(i).Name="年级排名"ThenExitFor
Nexti
Ifi>Sheets.CountThen
MsgBox"在未形成年级排名表前无法进行前N名人数统计,"&Chr(13)&"请先生成年级排名表!
!
!
",vbYesonly,"注意"
ExitSub
EndIf
n=Val(Application.InputBox(prompt:
="请输入需要需要统计的人数(n值):
",Title:
="请输入数字"))
Setsth1=Sheets("年级排名")
z