视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于VBA开发成绩分析管理系统
2025-09-29 08:50:44 责编:小OO
文档
苏州大学高等教育自学考试“专接本”

毕业论文(设计)

题目        基于VBA开发成绩分析管理系统  

专科学校          

专业              计算机信息管理          

班级                       

考生姓名                      

准考证号                  

指导教师                 

2013 年 4 月 12 日

目  录

前  言    1

第一章 概  述    2

1.1系统开发背景    2

1.2 系统开发环境与开发工具    2

1.3 系统开发目标    2

1.4 可行性分析    2

1.4.1 技术上可行性    2

1.4.2 运行上可行性    3

第二章 需求分析    4

2.1 成绩分析系统现状分析    4

2.2 基于VBA技术的应用    4

2.2.1  VBA简介    4

2.2.2  VBA与其他开发技术的比较    4

第三章 成绩分析系统设计与实现    5

3.1 系统结构    5

3.2 程序逻辑    6

3.2.1 系统E-R图    6

3.2.2 查询模块流程图    6

3.2.3 分析模块流程图    7

3.3 主程序设计说明    7

3.3.1 用户登录模块    7

3.3.2 系统设计    9

3.3.3 数据错误检查及维护    29

第四章 成绩分析系统系统测试    32

4.1 概述    32

4.2 测试的原则和目标    32

4.2.1测试的原则    32

4.2.2测试的目标    32

4.3 测试方法    33

4.3.1 界面测试    33

4.3.2 性能测试    33

4.4 系统的优点与不足    34

第五章 总结与展望    35

参考文献    36

摘  要

随着计算机技术的飞速发展,计算机的应用已经越来越普及,其渗透到人类社会的各个领域并发挥着重要的作用。同样,运用计算机对学生成绩信息进行分析与管理已经成为各大院校的迫切需求。

学生成绩信息是教育单位不可或缺的一部分,然而使用传统的人工方式对学生成绩进行分析存在着许多缺点,比如说误差性大、效率低、成本高等,这时迫切需要一种能够自动对学生成绩信息进行分析管理的方法。运用成绩分析系统对学生成绩信息进行分析,具有人工分析无法比拟的优点,例如:检索迅速、可靠性高、成本低等,这些优点能够极大的提高管理者对学生成绩管理的效率,使得学校的管理正规化、科学化。而运用基于Visual Basic发展而来的VBA技术,不但继承了VB的开发机制,而且具有与VB相似的语言结构,它具有效率高、简单易学及功能强大的特点。

关键词:VBA、成绩分析、Excel、成绩管理。

前  言

计算机网络技术的发展,使得人们的生活与工作方式发生了很大的改变,人工处理数据信息的模式已经远远不能满足人们的需求,在这种形势下,使用计算机软件技术处理学生成绩信息成为了必然。

90年代早期,使应用程序自动化还是一块充满挑战性的领域,对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言,例如,可以用Excel的宏语言来使Excel自动化,微软决定让它开发出来的应用程序共享一种通用的自动化语言——Visual Basic For Application(VBA),可以说VBA是一种非常流行的应用程序开发语言,使用它可以自定义Excel工具栏、菜单和界面,可以自定义Excel,使其成为开发平台等等。

本篇论文将从系统的开发背景、可行性分析、需求分析、概要设计、详细设计和系统测试等主要方面对成绩分析系统进行详细讲解,在论文的最后,将再次通过总结系统的设计、功能对系统进行整体上的认识。

第一章 概  述

1.1系统开发背景

计算机应用的普及使得学校使用计算机技术对学生成绩信息进行分析变得越来越频繁,而基于VBA技术的成绩分析系统通过Visual Basic for Application与Excel的巧妙结合运用让学生成绩信息分析变得更加准确、高效。

1.2 系统开发环境与开发工具

成绩信息分析系统的开发环境如下:windows xp操作系统。

开发所使用的工具有:Microsoft office 2003,Visual Basic For Application。

1.3 系统开发目标

本系统开发的主要目标是为了实现对学生成绩信息的高效和准确的分析,同时学生可以通过本系统查询成绩以及档案等信息。

1.4 可行性分析

1.4.1 技术上可行性

可行性研究的目的是用最小的代价在尽可能的时间内确定问题是否能够得到解决。

本系统的设计开发利用Microsoft office Excel作为本系统的开发平台,操作简单易学,容易上手,适用于大中规模的数据量需求。

使用Visual Basic For Application作为系统的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。

综上所述,本成绩分析系统无论在硬件设备上还是开发技术上都是可行的。

1.4.2 运行上可行性

本系统作为一个使用Microsoft office Excel对数据进行分析,所耗费的资源非常少,要求的环境配置也非常简单,同时对硬件的要求很低,在运行上具有非常大的可行性。

第二章 需求分析

2.1 成绩分析系统现状分析

目前市场上的成绩分析系统层出不穷,系统结构千变万化,然而当我们在使用别人做的系统时会发现此类系统会出现很多不必要出现的问题,比如系统打开速度慢,系统很多功能用不到,安装系统时要求的环境配置很高等等的这些问题使得市场上的系统在用户体验上做的很差。

于是,在这种形势下,一种更适合用户体验的成绩分析系统成为了使用者的迫切需求,基于VBA技术的成绩分析系统采用的是以Excel形式对成绩信息进行分析管理的模式,它无需与数据库进行连接,同时要求的环境配置非常低,用户非常容易上手操作,这种系统在现今这种状态下非常值得提倡使用。

2.2 基于VBA技术的应用

2.2.1  VBA简介

Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能。也可说是一种应用程式视觉化的Basic Script。

2.2.2  VBA与其他开发技术的比较

Microsoft Office software的普及使得人们常见的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 登陆用户信息

用户类别管理员学生
登录号8888812001
密码123123
操作权限成绩分析、成绩查询、统计人数、科目分析、数据错误检查维护、缺考人员名单查询等个人成绩查询,个人排名查询,单科成绩分析,个人密码修改,档案信息维护等
具体实现过程如下代码所示:

Private Sub CommandButton1_Click()

zc = Sheets("登录").Range("A65536").End(xlUp).Row

If TextBox1.Value = "" Then MsgBox "请输入登录号", vbOKOnly, "错误"

For i = 2 To zc

If TextBox1.Text = Sheets("登录").Cells(i, 1) Then

If TextBox2.Text = Sheets("登录").Cells(i, 3) Then

Application.StatusBar = "当前用户为:" & Sheets("登录").Cells(i, 1) & ";" & "姓名为:" & Sheets("登录").Cells(i, 2) & ";身份为:" & Sheets("登录").Cells(i, 4)

登录.Hide

If Sheets("登录").Cells(i, 4) = "学生" Then

主界面2.Show

Else

主界面1.Show

End If

Else

MsgBox "密码错误!", vbOKOnly, "错误"

End If

Exit For

End If

Next i

If i > zc Then: MsgBox "登录号不存在!", vbOKOnly, "错误"

End Sub
当用学生的账号和密码登录时,可以进入学生个人成绩查询模块;当用管理员的账号和密码登录时,可以进入学生成绩分析模块。

3.3.2 系统设计

本系统分为学生个人成绩查询模块与学生成绩分析模块。

1. 学生个人成绩查询模块

其中学生个人成绩查询主界面如图3-6所示:

图3-6 学生成绩查询模块

学生通过登陆窗口输入登录号与密码进入此目录,在此目录下,学生可以查看个人成绩、个人排名、单科成绩以及档案等信息。

(1)个人成绩查询功能实现

通过点击个人成绩查询,可以看到如图3-7:

                                图3-7 个人成绩查询结果

该按钮其功能主要是学生用来查询个人成绩信息,主要代码如下图所示:

Set sth = Sheets("成绩表")

yh = Mid(Application.StatusBar, 7, WorksheetFunction.Find(";", Application.StatusBar) - 7)

For i = 2 To sth.Range("B65536").End(xlUp).Row

If sth.Cells(i, 3) = Val(yh) Then Exit For

Next i

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 个人成绩排名

学生通过点击该按钮,可以查看自己的成绩排名,主要代码如下图所示:

Set sth = Sheets("成绩表")

zccjb = sth.Range("B65536").End(xlUp).Row

yh = Mid(Application.StatusBar, 7, WorksheetFunction.Find(";", Application.StatusBar) - 7)

For i = 2 To sth.Range("B65536").End(xlUp).Row

If sth.Cells(i, 3) = Val(yh) Then Exit For

Next i

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

For j = 2 To zccjb

If WorksheetFunction.Sum(sth.Range("E" & j & ":I" & j)) > cj Then

m2 = m2 + 1

If sth.Cells(j, "D") = bj Then m1 = m1 + 1

End If

Next j

Label9.Caption = m1

Label10.Caption = m2
(3)单科成绩分析功能实现

当你点击单科成绩分析时,会要求你选择分析的科目如下图3-9所示:

图3-9 单科成绩分析

比如选择了“语文”这门课程,当你点击确定时,就能将“语文”的成绩分析结果显示出来,如下图3-10所示:

图3-10 单科成绩查询结果

该按钮是用来对单科成绩进行分析的,其功能主要代码如下图所示:

Set sth = Sheets("成绩表")

zccjb = sth.Range("B65536").End(xlUp).Row

yh = Mid(Application.StatusBar, 7, WorksheetFunction.Find(";", Application.StatusBar) - 7)

For i = 2 To zccjb

If sth.Cells(i, 3) = Val(yh) Then Exit For

Next i

km = Sheets("主界面").Cells(40, 1)

Label2.Caption = yh

Label4.Caption = sth.Cells(i, 2)

Label6.Caption = sth.Cells(i, 4)

For j = 5 To 9

If sth.Cells(1, j) = km Then Exit For

Next j

科目分析结果.Caption = "[" & km & "]成绩分析结果"

Label14.Caption = sth.Cells(i, j)

mcbj = 1

mcbjmax = sth.Cells(i, j)

mcnj = 1

mcnjmax = sth.Cells(i, j)

For k = 2 To zccjb

If sth.Cells(k, j) > sth.Cells(i, j) Then

mcnj = mcnj + 1

If sth.Cells(k, j) > mcnjmax Then mcnjmax = sth.Cells(k, j)

If sth.Cells(k, "D") = sth.Cells(i, "D") Then

mcbj = mcbj + 1

If sth.Cells(k, j) > mcbjmax Then mcbjmax = sth.Cells(k, j)

End If

End If

Next k

Label15.Caption = mcbj

Label16.Caption = mcbjmax

Label17.Caption = mcnj

Label18.Caption = mcnjmax
(5)密码修改功能实现

该功能顾名思义是学生用来修改个人密码的,如下图3-11所示:

图3-11 密码修改

可以通过该窗口随时更换学生的个人密码。

学生为了保护个人数据,需要定期修改密码,该密码修改功能主要代码如下图所示:

If TextBox2.Text <> TextBox3.Text Then

MsgBox "新密码确认错误!", vbOKOnly, "失败了"

Exit Sub

End If

yh = Mid(Application.StatusBar, 7, WorksheetFunction.Find(";", Application.StatusBar) - 1)

For i = 2 To Sheets("登录").Range("B65536").End(xlUp).Row

If Sheets("登录").Cells(i, 1) = Val(yh) Then

If Sheets("登录").Cells(i, 3) = TextBox1.Text Then

Sheets("登录").Cells(i, 3) = TextBox2.Text    

MsgBox "密码修改成功!", vbOKOnly, "成功了"

Else

MsgBox "错误的原密码!", vbOKOnly, "失败了"

End If

Exit For

End If

Next i
(6)档案信息维护功能实现

通过点击个人档案维护,会出现如下窗口,学生可以通过该窗口修改个人基本档案信息。

图3-12 个人档案信息维护

学生可以对其档案进行维护,其功能主要代码如下图所示:

Set sth = Sheets("学生花名册")

xh = Mid(Application.StatusBar, 7, WorksheetFunction.Find(";", Application.StatusBar) - 7)

For i = 2 To sth.Range("B65536").End(xlUp).Row

If sth.Cells(i, 1) = Val(xh) Then Exit For

Next i

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

For Each w In ThisWorkbook.Sheets

If w.Name = "年级排名" Then

cz = MsgBox("存在[年级排名]表,是否确定删除后重新开始?", vbYesNo, "是否继续操作")

If cz = vbYes Then Sheets("年级排名").Delete Else: Exit Sub

End If

Next w

Application.DisplayAlerts = True

gs = Sheets.Count + 1

Sheets.Add after:=Sheets(gs - 1)

Sheets(gs).Name = "年级排名"

Sheets("成绩表").Cells.Copy Destination:=Sheets(gs).Range("A1")

Sheets(gs).Range("K1:L1") = Array("总分", "名次")

zccjb = Sheets(gs).Range("B65536").End(xlUp).Row

For i = 2 To zccjb

Sheets(gs).Cells(i, "K") = WorksheetFunction.Sum(Sheets(gs).Range("E" & i & ":I" & i))

Next i

Sheets(gs).Range("A2:K" & zccjb).Sort Key1:=Range("K2"), Order1:=xlDescending

For j = 2 To zccjb

Sheets(gs).Cells(j, "A") = j - 1

If Sheets(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

End If

Next j

Sheets(gs).Range("J1").Copy

Sheets(gs).Range("K1:L1").PasteSpecial Paste:=xlPasteFormats

Sheets(gs).Range("E2").Copy

Sheets(gs).Range("K2:L" & zccjb).PasteSpecial Paste:=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

For i = 1 To Sheets.Count

If Sheets(i).Name = "前N名人数统计" Then

If MsgBox("已存在[前N名人数统计]表,是否要删除?", vbYesNo, "已存在") = vbYes Then

Sheets("前N名人数统计").Delete

Exit For

Else

Exit Sub

End If

End If

Next i

Application.DisplayAlerts = True

For i = 1 To Sheets.Count

If Sheets(i).Name = "年级排名" Then Exit For

Next i

If i > Sheets.Count Then

MsgBox "在未形成年级排名表前无法进行前N名人数统计," & Chr(13) & "请先生成年级排名表!!!", vbYesonly, "注意"

Exit Sub

End If

n = Val(Application.InputBox(prompt:="请输入需要需要统计的人数(n值):", Title:="请输入数字"))

Set sth1 = Sheets("年级排名")

zcnjpm = sth1.Range("B65536").End(xlUp).Row

If n < 1 Or n > sth1.Range("B65536").End(xlUp).Row - 1 Then

MsgBox "输入的[" & n & "]不符合统计范围,无法继续统计!": Exit Sub

End If

Sheets.Add after:=Sheets(Sheets.Count)

Sheets(Sheets.Count).Name = "前N名人数统计"

Worksheets(Sheets.Count).Move after:=sth1

Set sth2 = Sheets("前N名人数统计")

sth2.Cells(1, 1) = "前" & n & "名人数统计情况"

sth2.Range("A2:C2") = Array("班级", "人数", "比例")

sth2.Cells(3, 1) = sth1.Cells(2, "D")

m = 3

For i = 2 To zcnjpm

For j = 3 To m

If sth1.Cells(i, "D") = sth2.Cells(j, "A") Then Exit For

Next j

If j > m Then

m = m + 1

sth2.Cells(m, 1) = sth1.Cells(i, "D")

End If

Next i

For i = 3 To m

sth2.Cells(i, 2) = WorksheetFunction.CountIf(sth1.Range("D2:D" & n + 1), sth2.Cells(i, 1))

sth2.Cells(i, 3) = sth2.Cells(i, 2) / n

Next i

sth2.Cells(m + 1, 1) = "合计"

sth2.Cells(m + 1, 2) = n

sth2.Cells(m + 1, 3) = 1

sth2.Range("A1").Font.Bold = True

sth2.Range("A2:C" & m + 1).Borders.LineStyle = xlContinuous

sth2.Range("C3:C" & m + 1).Style = "Percent"
(3)年级前N名分析图功能实现

该功能是建立在人数统计功能的基础上实现的,只有在统计完年级前N名学生人数的情况下,才能运用此功能,否则会出现如下问题,如图3-17所示。

图3-17

然而,当我们已经对年级前N名学生人数进行了统计时,便可以使用该功能,最终效果如下图3-18所示:

图3-18 年级前N名图表分析

通过统计前N名学生人数,可以用分析图形象的表示出其结果,实现该分析图的主要代码如下图所示:

For i = 1 To Sheets.Count

If Sheets(i).Name = "前N名人数统计" Then Exit For

Next i

If i > Sheets.Count Then

MsgBox "在未形成前N名人数统计表前无法进行前N名人数分析," & Chr(13) & "请先生前N名人数统计表!!!", vbYesonly, "注意"

Exit Sub

End If

If Sheets("前N名人数统计").ChartObjects.Count > 0 Then

MsgBox "已存在分析图,请删除当前分析图后再试", vbOKOnly, "失败"

Exit Sub

End If

bjcd = Sheets("前N名人数统计").Range("A300").End(xlUp).Row - 1

Charts.Add.ChartType = xl3DPieExploded '插入图饼图

ActiveChart.SetSourceData Source:=Sheets("前N名人数统计").Range("A2:C" & bjcd), PlotBy:=xlColumns '取数

ActiveChart.Location Where:=xlLocationAsObject, Name:="前N名人数统计" '插入的图放置在总分排名表中

ActiveChart.ChartTitle.Characters.Text = "各班人数所占比例分析"    '设置图的表头

ActiveChart.SeriesCollection(1).ApplyDataLabels ShowPercentage:=True  '图上增加百分比

(4)班级成绩表功能实现

班级成绩表功能用来生成班级学生成绩信息,当我们运行此按钮时,如下图3-19所示。

图3-19 选择班级

我们选择统计一班的学生成绩,运行结果如下图3-20:

图3-20 班级排名

该功能用来生成班级成绩表,实现其功能的主要代码如下所示:

Set sth1 = Sheets("成绩表")

zccjb = sth1.Range("B65536").End(xlUp).Row

Application.DisplayAlerts = False

For Each w In Sheets

If w.Name = ComboBox1.Value & "成绩" Then

If MsgBox("已存在[" & ComboBox1.Value & "成绩]表,是否要删除?", vbYesNo, "已存在") = vbYes Then

Sheets(ComboBox1.Value & "成绩").Delete

Else

Exit Sub

End If

End If

Next w

Application.DisplayAlerts = True

Sheets.Add after:=Sheets(Sheets.Count)

Sheets(Sheets.Count).Name = ComboBox1.Value & "成绩"

Set sth2 = Sheets(ComboBox1.Value & "成绩")

sth2.Cells(1, 1) = "班级:" & ComboBox1.Value

sth1.Range("A1:C1").Copy Destination:=sth2.Range("A2")

sth1.Range("E1:J1").Copy Destination:=sth2.Range("D2")

sth2.Range("J2:K2") = Array("总分", "班级名次")

m = 3

For i = 2 To zccjb

If sth1.Cells(i, "D") = ComboBox1.Value Then

sth1.Range("A" & i & ":C" & i).Copy Destination:=sth2.Range("A" & m)

sth1.Range("E" & i & ":J" & i).Copy Destination:=sth2.Range("D" & m)

sth2.Cells(m, "J") = WorksheetFunction.Sum(sth2.Range("D" & m & ":H" & m))

m = m + 1

End If

Next i

sth2.Range("A2:K" & m - 1).Sort Key1:=Range("K2"), Order1:=xlDescending

For j = 3 To m - 1

sth2.Cells(j, "A") = j - 2

If sth2.Cells(j, "J") = sth2.Cells(j - 1, "J") Then

sth2.Cells(j, "K") = sth2.Cells(j - 1, "K")

Else

sth2.Cells(j, "K") = j - 2

End If

Next j

sth2.Range("I2").Copy

sth2.Range("J2:K2").PasteSpecial Paste:=xlPasteFormats

sth2.Range("E3").Copy

sth2.Range("J3:K" & m - 1).PasteSpecial Paste:=xlPasteFormats

Application.CutCopyMode = False

sth2.Range("B1").Select
(5)科目分段分析功能实现

科目分析的主要功能是统计不同班级不同分数段的学生人数,运行结果如下图3-21。

图3-21 选择科目

当我们选择分析的科目是语文的时候,通过点击确定按钮即可形象地得到分析结果,如下图3-22所示。

图3-22 单科成绩统计

本按钮主要是用来对科目进行分析,实现其功能的主要代码如下:

Application.DisplayAlerts = False

For Each w In ThisWorkbook.Sheets

If w.Name = "科目分段分析" Then

cz = MsgBox("存在[科目分段分析]表,是否确定删除后重新开始?", vbYesNo, "是否继续操作")

If cz = vbYes Then Sheets("科目分段分析").Delete Else: Exit Sub

End If

Next w

Application.DisplayAlerts = True

gs = Sheets.Count + 1

Sheets.Add after:=Sheets(gs - 1)

Sheets(gs).Name = "科目分段分析"

Set sth = Sheets(gs)

sth.Cells(1, 1) = "科目名称:" & ComboBox1.Value

sth.Range("A2:D2") = Array("序号", "班级", "人数", "单科分段情况")

sth.Range("J2") = "三率情况"

sth.Range("M2:N2") = Array("最高分", "最低分")

sth.Range("D3:L3") = Array("130以上", "130-120", "120-100", "100-80", "80-60", "60-0", "及格率(90)", "良好率(112.5)", "优秀率(127.5)")

sth.Range("A2:N3").HorizontalAlignment = xlCenter

sth.Range("A2:A3").MergeCells = True

sth.Range("B2:B3").MergeCells = True

sth.Range("C2:C3").MergeCells = True

sth.Range("D2:I2").MergeCells = True

sth.Range("J2:L2").MergeCells = True

sth.Range("M2:M3").MergeCells = True

sth.Range("N2:N3").MergeCells = True

sth.Range("J3:L3").WrapText = True

sth.Rows("3:3").RowHeight = 40

sth.Columns("K:L").ColumnWidth = 9.38

Dim dkfd(6) As Integer  '单科分段

Dim kmCol As String 'F2单元格的科目在成绩表中对应的列号

dkfd(0) = 151

dkfd(1) = 130

dkfd(2) = 120

dkfd(3) = 100

dkfd(4) = 80

dkfd(5) = 60

dkfd(6) = 0

Set sth1 = Sheets("成绩表")

zccjb = sth1.Range("B65536").End(xlUp).Row

For k = 1 To 5

If sth1.Cells(1, k + 4) = ComboBox1.Value Then Exit For

Next k

kmCol = Chr(68 + k)  '将字符码转换为字符,chr(69)为"E"

sth.Cells(4, 1) = 1

sth.Cells(4, 2) = sth1.Cells(2, 4)

m = 4

For i = 2 To zccjb

For j = 4 To m

If sth1.Cells(i, 4) = sth.Cells(j, 2) Then Exit For

Next j

If j > m Then

sth.Cells(m + 1, 2) = sth1.Cells(i, 4)

sth.Cells(m + 1, 1) = m - 2

m = m + 1

End If

If sth1.Cells(j, kmCol) <> "" Then

sth.Cells(j, 3) = sth.Cells(j, 3) + 1

For k = 1 To 6

If sth1.Cells(i, kmCol) >= dkfd(k) And sth1.Cells(i, kmCol) < dkfd(k - 1) Then

sth.Cells(j, k + 3) = sth.Cells(j, k + 3) + 1

Exit For

End If

Next k

If sth1.Cells(i, kmCol) >= 90 Then sth.Cells(j, "J") = sth.Cells(j, "J") + 1

If sth1.Cells(i, kmCol) >= 112.5 Then sth.Cells(j, "K") = sth.Cells(j, "K") + 1

If sth1.Cells(i, kmCol) >= 127.5 Then sth.Cells(j, "L") = sth.Cells(j, "L") + 1

If sth1.Cells(i, kmCol) > sth.Cells(j, "M") Then sth.Cells(j, "M") = sth1.Cells(i, kmCol)

If sth1.Cells(i, kmCol) < sth.Cells(j, "N") Or sth.Cells(j, "N") = "" Then sth.Cells(j, "N") = sth1.Cells(i, kmCol)

End If

Next i

sth.Cells(m, "A") = "合计"

sth.Cells(m, "B") = Application.WorksheetFunction.CountA(sth.Range("B4:B" & m - 1))

For i = 3 To 12

sth.Cells(m, i) = Application.WorksheetFunction.Sum(sth.Range(Cells(2, i), Cells(m - 1, i)))

Next i

For i = 4 To m

sth.Cells(i, "J") = sth.Cells(i, "J") / sth.Cells(i, "C")

sth.Cells(i, "K") = sth.Cells(i, "K") / sth.Cells(i, "C")

sth.Cells(i, "L") = sth.Cells(i, "L") / sth.Cells(i, "C")

Next i

sth.Cells(m, "M") = Application.WorksheetFunction.Max(sth.Range("M4:M" & m - 1))

sth.Cells(m, "N") = Application.WorksheetFunction.Min(sth.Range("N4:N" & m - 1))

sth.Range("A2:N" & m).Borders.LineStyle = xlContinuous

sth.Range("J2:L" & m).NumberFormatLocal = "0.00%"
(6)科目分段分析图功能实现

同样的道理,该功能也是建立在科目分段分析功能的基础上建立起来的,运行结果如下图3-23。

图3-23 科目分段

同样,也可以用分析图的形式对科目进行分析,实现其功能的主要代码如下:

For i = 1 To Sheets.Count

If Sheets(i).Name = "科目分段分析" Then Exit For

Next i

If i > Sheets.Count Then

MsgBox "在未形成[科目分段分析]表前无法形成科目分段分析图," & Chr(13) & "请先进行科目分段分析!!!", vbYesonly, "注意"

Exit Sub

End If

Set sth = Sheets("科目分段分析")

zckmhd = sth.Range("B1000").End(xlUp).Row - 1

If sth.ChartObjects.Count > 0 Then

MsgBox "已存在分析图,请删除当前分析图后再试", vbOKOnly, "失败"

Exit Sub

End If

Charts.Add.ChartType = xlColumnClustered  '插入柱形图表

ActiveChart.SetSourceData Source:=sth.Range("D3:I" & zckmhd), PlotBy:=xlRows '取数

For i = 1 To zckmhd - 3

 ActiveChart.SeriesCollection(i).Name = sth.Cells(i + 3, 2)       '图例改名,改为1班,2班等等

Next i

ActiveChart.Location Where:=xlLocationAsObject, Name:="科目分段分析"

    With ActiveChart

        .HasTitle = True

        .ChartTitle.Characters.Text = Mid(sth.Range("A1"), 6, 50) & "分段情况分析"

    End With
(7)数据错误检查功能实现

其运行结果如下图3-24所示:

图3-24 数据错误检查

该功能管理员用来进行数据错误检查,实现其功能的主要代码如下:

Application.DisplayAlerts = False

For Each w In ThisWorkbook.Sheets

If w.Name = "错误检查结果" Then

cz = MsgBox("存在[错误检查结果]表,是否确定删除后重新开始?", vbYesNo, "是否继续操作")

If cz = vbYes Then Sheets("错误检查结果").Delete Else: Exit Sub

End If

Next w

Application.DisplayAlerts = True

gs = Sheets.Count + 1

Sheets.Add after:=Sheets(gs - 1)

Sheets(gs).Name = "错误检查结果"

Set sth = Sheets(gs)

Set sth1 = Sheets("学生花名册")

Set sth2 = Sheets("成绩表")

zchmz = sth1.Range("A65536").End(xlUp).Row

zccjb = sth2.Range("B65536").End(xlUp).Row

sth.Range("A1:B1") = Array("表名", "存在的错误")

m = 2

For i = 2 To zchmz               '对学生花名册数据检查

If sth1.Cells(i, 1) = "" Or sth1.Cells(i, 2) = "" Or sth1.Cells(i, 2) = "" Then

sth.Cells(m, 1) = "学生花名册"

sth.Cells(m, 2) = "花名册第" & i & "行学号或姓名或班级为空"

m = m + 1

End If

For j = i + 1 To zchmz  '对花名册学号重复检查

If sth1.Cells(i, 1) = sth1.Cells(j, 1) Then

sth.Cells(m, 1) = "学生花名册"

sth.Cells(m, 2) = "花名册第" & i & "行与第" & j & "行学号重复"

m = m + 1

End If

Next j

Next i

For i = 2 To zccjb

If sth2.Cells(i, 2) = "" Or sth2.Cells(i, 3) = "" Or sth2.Cells(i, 4) = "" Then

sth.Cells(m, 1) = "成绩表"

sth.Cells(m, 2) = "成绩表第" & i & "行学号或姓名或班级为空"

m = m + 1

End If

For j = i + 1 To zccjb  '对成绩表学号重复检查

If sth2.Cells(i, 3) = sth2.Cells(j, 3) Then

sth.Cells(m, 1) = "成绩表"

sth.Cells(m, 2) = "成绩表第" & i & "行与第" & j & "行学号重复"

m = m + 1

End If

Next j

n = 0

For k = 2 To zchmz

If sth2.Cells(i, 3) = sth1.Cells(k, 1) Then

If sth2.Cells(i, 2) <> sth1.Cells(k, 2) Or sth2.Cells(i, 4) <> sth1.Cells(k, 3) Then

sth.Cells(m, 1) = "成绩表"

sth.Cells(m, 2) = "成绩表第" & i & "行的姓名或班级与学生花名册不一致"

m = m + 1

End If

n = 1

Exit For

End If

Next k

If n = 0 Then

sth.Cells(m, 1) = "成绩表"

sth.Cells(m, 2) = "成绩表第" & i & "行的学号在学生花名册中找不到"

m = m + 1

End If

Next i

MsgBox "错误检查完毕,请查看结果!", vbOKOnly, "已完成"

(8)缺考人员名单功能实现

其运行结果如下图3-25所示:

图3-25 缺考人员名单

如果有学生缺考,通过该功能即可轻松实现查询,主要代码如下:

Application.DisplayAlerts = False

For Each w In ThisWorkbook.Sheets

If w.Name = "缺考人员名单" Then

cz = MsgBox("存在[缺考人员名单]表,是否确定删除后重新开始?", vbYesNo, "是否继续操作")

If cz = vbYes Then Sheets("缺考人员名单").Delete Else: Exit Sub

End If

Next w

Application.DisplayAlerts = True

gs = Sheets.Count + 1

Sheets.Add after:=Sheets(gs - 1)

Sheets(gs).Name = "缺考人员名单"

Set sth = Sheets(gs)

Set sth1 = Sheets("学生花名册")

Set sth2 = Sheets("成绩表")

zchmz = sth1.Range("A65536").End(xlUp).Row

zccjb = sth2.Range("B65536").End(xlUp).Row

sth.Range("A1:D1") = Array("学号", "姓名", "班级", "缺少科目")

m = 2

For i = 2 To zccjb

For j = 5 To 9

If sth2.Cells(i, j) = "" Then

sth.Cells(m, 1) = sth2.Cells(i, 3)

sth.Cells(m, 2) = sth2.Cells(i, 2)

sth.Cells(m, 3) = sth2.Cells(i, 4)

sth.Cells(m, 4) = sth2.Cells(1, j)

m = m + 1

End If

Next j

Next i

For i = 2 To zchmz

For j = 2 To zccjb

If sth1.Cells(i, 1) = sth2.Cells(j, 3) Then Exit For

Next j

If j > zccjb Then

sth.Range("A" & m & ":C" & m) = sth1.Range("A" & i & ":C" & i).Value

sth.Cells(m, 4) = "缺考5门"

m = m + 1

End If

Next i

MsgBox "缺考人员检查完毕,请查看结果!", vbOKOnly, "已完成"

3.3.3 数据错误检查及维护

数据错误检查在系统的开发建设中占据了非常重要的地位,通过数据错误检查功能,我们能够发现在处理数据过程中出现的错误,通过对检查出的错误进行修改,使得数据分析能够更加准确。

具体实现代码如下:

Application.DisplayAlerts = False

For Each w In ThisWorkbook.Sheets

If w.Name = "错误检查结果" Then

cz = MsgBox("存在[错误检查结果]表,是否确定删除后重新开始?", vbYesNo, "是否继续操作")

If cz = vbYes Then Sheets("错误检查结果").Delete Else: Exit Sub

End If

Next w

Application.DisplayAlerts = True

gs = Sheets.Count + 1

Sheets.Add after:=Sheets(gs - 1)

Sheets(gs).Name = "错误检查结果"

Set sth = Sheets(gs)

Set sth1 = Sheets("学生花名册")

Set sth2 = Sheets("成绩表")

zchmz = sth1.Range("A65536").End(xlUp).Row

zccjb = sth2.Range("B65536").End(xlUp).Row

sth.Range("A1:B1") = Array("表名", "存在的错误")

m = 2

For i = 2 To zchmz               '对学生花名册数据检查

If sth1.Cells(i, 1) = "" Or sth1.Cells(i, 2) = "" Or sth1.Cells(i, 2) = "" Then

sth.Cells(m, 1) = "学生花名册"

sth.Cells(m, 2) = "花名册第" & i & "行学号或姓名或班级为空"

m = m + 1

End If

For j = i + 1 To zchmz  '对花名册学号重复检查

If sth1.Cells(i, 1) = sth1.Cells(j, 1) Then

sth.Cells(m, 1) = "学生花名册"

sth.Cells(m, 2) = "花名册第" & i & "行与第" & j & "行学号重复"

m = m + 1

End If

Next j

Next i

For i = 2 To zccjb

If sth2.Cells(i, 2) = "" Or sth2.Cells(i, 3) = "" Or sth2.Cells(i, 4) = "" Then

sth.Cells(m, 1) = "成绩表"

sth.Cells(m, 2) = "成绩表第" & i & "行学号或姓名或班级为空"

m = m + 1

End If

For j = i + 1 To zccjb  '对成绩表学号重复检查

If sth2.Cells(i, 3) = sth2.Cells(j, 3) Then

sth.Cells(m, 1) = "成绩表"

sth.Cells(m, 2) = "成绩表第" & i & "行与第" & j & "行学号重复"

m = m + 1

End If

Next j

n = 0

For k = 2 To zchmz

If sth2.Cells(i, 3) = sth1.Cells(k, 1) Then

If sth2.Cells(i, 2) <> sth1.Cells(k, 2) Or sth2.Cells(i, 4) <> sth1.Cells(k, 3) Then

sth.Cells(m, 1) = "成绩表"

sth.Cells(m, 2) = "成绩表第" & i & "行的姓名或班级与学生花名册不一致"

m = m + 1

End If

n = 1

Exit For

End If

Next k

If n = 0 Then

sth.Cells(m, 1) = "成绩表"

sth.Cells(m, 2) = "成绩表第" & i & "行的学号在学生花名册中找不到"

m = m + 1

End If

Next i

MsgBox "错误检查完毕,请查看结果!", vbOKOnly, "已完成"

主界面1.Hide

第四章 成绩分析系统系统测试

4.1 概述

系统测试是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。

4.2 测试的原则和目标

4.2.1测试的原则

1.程序员应该避免检查自己的程序,系统测试应该由第三方负责;

2.设计测试用例时应考虑到合法输入和不合法的输入以及各种边界条件,特殊情况下不要制造极端状态和意外状态。

3.对策就错误结果进行一个确认过程,一般由A测试出来的错误,一定要由B来确认。严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格的确认,是否真的存在这个问题以及严重程度等。

4.要妥善保存测试计划、测试用例、出错统计和最终分析报告、为维护提供方便。

4.2.2测试的目标

1.发现一些可以通过测试避免的开发风险

2.实施测试来降低所发现的风险

3.确定测试何时可以结束

4.3 测试方法

4.3.1 界面测试

界面是软件系统与用户交互的最直接的面,界面的好坏决定用户对软件系统的第一印象,而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能够给用户带来轻松愉悦的感受成就感,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧于放弃中付诸东流。

本系统的界面测试主要包括以下几个方面的内容:

1.界面在窗口中的显示是否正确、美观;

2.界面上的按钮布局是否合理、美观,是否符合用户需求;

3.为实现功能,是否将所需要的元素全部罗列出来了,如单选框、复选框、输入框等。

4.3.2 性能测试

系统性能测试毋庸置疑是软件开发最重要的指标,通过对系统性能的测试,我们可以评估系统的能力,发现系统结构中的不足之处以及验证系统稳定性和可靠性等。

本成绩分析系统测试主要包括以下几个方面的内容:

1.管理员与普通用户登录是否能够按照要求登录到规定的界面以及登录名与密码是否能够验证成功。

2.学生登录主界面后能否准确查询个人成绩信息、个人排名信息。通过点击单科成绩分析,是否能对成绩进行准确的分析。

3.管理员登录主界面后对年级进行排名时是否出现错误排名,在对年级前N名人数进行统计时能否准确统计信息,年级前N名分析图是否合理。另外,在对不同科目分段进行分析时是否会出现误差,分析图是否合理。在对数据错误进行检查时结果是否有误等等。

安全性测试(Security)这个领域正在研究中,不过防火墙,补丁包.杀毒软件等的就不必说了,不过可以考虑破坏性测试时任意。

兼容性 (Compatibility) 不同浏览器,不同应用程序版本在实现功能时的表现,不同的上网方式,如果你测试的是一个公共网站的话。 

4.4 系统的优点与不足

本系统采用VBA技术通过灵活运用vb代码进行设计开发,具有成本低、操作简单、高效等优点,另外安装本系统要求的环境配置非常简单,无论用户的电脑安装的是windows XP还是Windows 7 或者更高级的系统都能够轻松使用此系统。然而本系统也有很多不容忽视的缺点,比如系统安全性低,在多用户同时登陆本系统的情况下,会出现访问速度慢的情况。

第五章 系统开发技巧与难点

本系统开发的技术难点是业务逻辑的理解业务逻辑是依据成绩分析系统的特点及特殊的应用领域需要来进行设计的,只有在准确理解一个系统的业务逻辑之后才可能开发出适应其应用的应用系统来,并且在系统之间模块的科学划分与结构组织都是正确的理解实际应用的业务逻辑需求的前提下完成的。

第五章 总结与展望

本次系统的设计与开发是在辅导老师和同学的热心帮助下完成的,经过漫长的努力与奋斗,系统基本上开发完毕,其功能基本符合用户的需求,能够完成学生信息的查询与分析。自我感觉还是比较满意的。

由于本次毕业设计时间短,系统还存在很多不尽如人意的地方,比如主界面不够美观,系统功能有点过于简单,在安全性和出错处理方面做的不是很严谨,等等的这些问题都是需要在今后的学习或工作中值得重视的。

参考文献

[1] 沈洪、施明利、朱军、谭浩强. VB程序设计.2010.第1版.清华大学出版社

[2] JamesFoxall、梅兴文.Visual Basic 2010入门经典.2011.第1版.人民邮电出版社

[3] 江鸿宾、沈洪、施明利.VB程序设计案例汇编. 2010.第1版.清华大学出版社

[4] 罗刚君. Excel VBA程序开发自学宝典.2011.第1版.电子工业出版社

[5] 俞磊. Visual Basic完全自学手册.2009. 第1版.机械工业出版社

[6] 赵志东. Excel VBA基础入门.2011.第2版.人民邮电出版社

[7] 龚沛曾、杨志强、陆慰民. Visual Basic 程序设计教程.2007.第1版.高等教育出版社

[8] 创锐文化. Excel VBA从入门到精通.2011.第1版.中国铁道出版社

[9] 杨本伦. Visual Basic开发技术大全.2010.第1版.清华大学出版社

[10] 魏汪洋. 从零开始学Excel VBA.2011. 第2版.电子工业出版社

致  谢

经过这几个月来的勤奋努力,自己终于完成了毕业设计和毕业论文的整体工作,在这里我要感谢我的设计指导教师,是他在论文的选题及技术方向上给我提出许多宝贵的设计意见,在最后的测试修改阶段又在百忙之中抽出时间为我提供了必要的帮助,这样使得我得以顺利的完成毕业设计开发及毕业论文的整理,老师渊博的知识、敏锐的思路和实事求是的工作作风给我留下了深刻的印象,使得我终身受益,谨此向老师表示衷心的感谢。

感谢老师们在校期间对我的谆谆教诲和无私的帮助,在实际的开发工作中,我深深体会到了基础理论知识的重要性,在大学阶段只有好好学习,掌握好扎实的理论基础,这样才能在将来的工作中更快的学习,从而得心应手,有所成就,真正成为一个对社会和他人有用的人。

最后还要感谢我的同学们在这次毕业设计及论文写作中给我的支持和帮助。下载本文

显示全文
专题