基于OWC的在线成绩分析系统的设计与实现

时间:2022-10-29 04:53:02

基于OWC的在线成绩分析系统的设计与实现

摘要:在线成绩分析是网络教学系统中的重要功能。基于OWC的在线成绩分析系统利用OWC组件统计计算和图表功能可以在WEB上实现在线考试成绩的汇总和分析。将其设计为一个Web Services可以为各种网络教学系统提供教学评价。

关键词:OWC;成绩分析;Web Services

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)34-1665-03

The Design and Implement of Online Score Analysis System Based on OWC

SHAO Shan

(News and Media Department of Yangzhou University, Yangzhou 225002, China)

Abstract: Online score analysis is an important function of Web based instruction,Base on Office Web Component's statistic calculate and chart function, Online Score Analysis System can collect and analysis the score data of online test in Web. This system is designed as a Web Services in order to evaluate various Web based instruction.

keywords: Office Web Component; Score Analysis; Web Services

1 引言

基于WEB的远程教育强调以自主学习,个性化学习。采用必要的学习过程监控和学习效果评价手段是网络教学取得成功的重要保证。EXCEL电子表格软件包含了丰富统计分析工具和图表制作工具,利用它的公式和宏可以方便地完成成绩分析功能。但EXCEL只能单机使用,无法直接嵌入WEB教学系统中。基于Office Web Component(简称OWC)的在线成绩分析系统在WEB上实现了EXCEL的成绩分析功能,为网络教学评价提供了有力支持。

2 基于OWC的在线成绩分析系统设计

2.1 系统功能

目前,绝大多数WEB教学系统的在线考试都是通过WEB网页动态访问数据库实现,常用有ACCESS和SQL 数据库,数据库一般包含学生表(USERS)、试题库表(TEST)、成绩表(SCORE)等。基于OWC的在线成绩分析以WEB教学中的成绩表为主要数据源。系统设计为一个Web Services,只需将考试成绩表传递给该Web Services,系统就可以像EXCEL一样进行统计分析、生成图表,再将结果插入一WEB网页返回客户端。任何基于WEB的网络教学系统都可以方便调用该Web Services,实现资源共享。

2.2 技术方案

在线成绩分析系统调用的OWC是一组能够在 Web 页上使用并提供 Office 功能的 ActiveX 控件的集合,随同OFFICE软件一起安装。包含四个主要组件: Spreadsheet (电子数据表)、Chart(图表)、PivotTable(数据透视表)、Data Source(数据源)。目前Office2003提供的Office Web Component的版本为11.0(OWC11) [1]。根据成绩分析的实际需要在系统中只使用了前三个。

Spreadsheet用于接收和显示成绩表数据,同时利用函数公式计算统计数据,如排名、分段人数、正态分布率等。其接收的数据类型有XMLUrl 、XMLData,CSVUrl、CSVData和HTMLData。前两种必须是EXCEL格式的XML文件和数据,将成绩数据转换为此格式比较麻烦。CSV(Comma Separated Values)是逗号分开的数据文件,每行为一条记录,数据转换比较简单,而HTMLData不符合二维表结构,不利于生成图表,一般不用。经测试,以CSVData字符串作为Spreadsheet数据源时,由于网页中字符串变量总长度的限制,导入的数据过大会造成浏览器错误,且速度慢。因此,最终选择将成绩表转换为CSV文件作为CSVUrl数据源。

PivotTable主要是基于Spreadsheet中的数据生成数据透视表。

Chart则用于绘制各种统计图表,如柱状图、折线图、饼图等,Chart以Spreadsheet和PivotTable的数据区域作为数据源。

系统结构如图1所示,只要客户端安装了Office软件,则在WEB浏览器中均可以使用OWC。

3 利用OWC 实现在线成绩分析的方法

3.1 数据库数据导入OWC Spreadsheet

通常的成绩表结构示例如下:

SCORE(考试编号(C6)、课程名(C20)、学生名(C15)、成绩(N4.1))

在Mcrosoft Visual Studio 2005中用(VB)建立WEB SERVICES开发项目中,可以通过OleDbConnection访问ACCSE数据库,SQLConnection访问SQL数据库,将数据库成绩表读DataReader中,根据技术方案中的思路,应先将DataReader中的成绩表数据读取出来写进一个CSV文本文件score.csv中,再将该文件作为Spreadsheet的CSVUrl数据源。

在网页中插入Office web spreadsheet component11.0组件的HTML代码为:

<object classid="clsid:0002E559-0000-0000-C000-000000000046" id="Sheet" >

</object>

设置数据源代码如下:

Private Sub importData ( )

'此处为数据库连接,和将成绩表读入dtReader中代码,略

Dim csvfile as string ="score.csv"

DrtoCSV(dtReader,csvfile)

end sub

Sub DrtoCsv(dtReader as DataReader, csvfile as string)

Dim strwriterobj As StreamWriter '声明流书写对象

strwriter= File.CreateText(servermappath(csvfile ) '创建文本文件对象

Dim I as intger

Setdef_sep=","'以逗号分隔

strLine=""

For I= 0 to DtReader.fieldcount -1 '读字段名作为第一行

strLine=strLine & DtReader.GetName(I) & def_sep

Next

strwriterobj.WriteLine(strLine) '写入字段名内容

While DtReader.Read( )

strLine=""

For I=0to DtReader.fieldcuont -1

strLine=strLine & trim(DtReader.GetValue(I)) & def_sep

Next

strwriterobj.WriteLine( strLine) '写入记录内容

End while

strwriterobj.Close ( ) '完成操作,关闭流对象

End Sub

<scriptlanguage="VBScript">

sheet.CSVUrl="score.csv"'设置CSVUrl数据源

</script>

3.2 在WEB网页spreadsheet组件中修改和导出数据

将数据导入spreadsheet组件后,该组件不仅能修改数据、添加计算公式,也可以通过编程实现数据导出。操作该对象的代码为:

1) 数据区域命名:

sheet.Names.Add("ScoreRange", "sheet1! $D$2:$D")

2) 修改单元格数据:intRow,intCol 为工作表单元格行和列

sheet.ActiveSheet.Cells[intRow, intCol].Value= request.["Cellvalue"];

3) 在指定单元格中插入公式:如求考试成绩的平均值

sheet.ActiveSheet.Cells[intRow, intCol]. Formula= "=Average(ScoreRange)"

4) 导出数据:spreadSheet带有方法Exports可以将SpreadSheet中的数据和格式统统导出成ExcelXML编码的文件。该文件可用EXCEL打开或作为其它spreadSheet的XMLUrl源。

SpreadSheet.Export(desPathFileName,Owc11.SheetExportActionEnum.ssExportActionNone,Owc11.SheetExportFormat.ssExportXMLSpreadsheet);

3.3 数据筛选和排序

Spreadsheet组件本身具有的工具栏中就有筛选和排序按钮,在WEB网页中可交互方式完成数据的筛选和排序。如有必要,也可通过代码(略)实现此功能。

3.4数据统计和分析

EXCEL表格的统计分析功能主要通过计算函数和公式完成,对成绩分析来讲主要有:

成绩平均值:=AVERAGE(rangeName); 方差:=DEVSQ(rangeName)

最高:=MAX(rangeName); 最低:=MIN(rangeName);

排名:= RANK(rangeName, rangeName)

正态分布率:= NORMDIST(rangename,AVERAGE(rangename),DEVSQ( rangename),TRUE)

分段人数统计:

80分~90分的人数 =COUNTIF(rangeName,">=80")-COUNTIF(rangeName,">90")

70分~80分的人数 =COUNTIF(rangeName,">=70")-COUNTIF(rangeName,">80")

不及格的人数 =COUNTIF(rangeName,"<60")

及格率:= COUNTIF(rangeName,">=60")/COUNT(rangeName)

优秀率:= COUNTIF(rangeName,">=90")/COUNT(rangeName)

一个EXCEL工作薄(book)可以包含多个工作表(sheet),为保证数据导入和与CHART组件数据交换的安全性,一般应将成绩数据放在sheet1工作表中,而将统计数据放在sheet2中。其中的rangeName为成绩数据的区域(range)名。可通过代码修改单元格公式,只需要将公式字符串赋值给指定的单元格Formula即可:

如:speadsheet1.Names.Add("rangename", "sheet1! $D$2:$D ")

speadsheet1.sheets(2).Cells(intRow, intCol).Formula="=COUNTIF(rangename,""<60"")"

3.5 数据透视表

成绩表一般以流水帐形式记录数据,其中的每条记录内容为某位学生在某门课的某次考试成绩,记录数量较大。数据透视表是一种对大量数据快速汇总和建立交叉列表的交互式表格,能帮助用户分析、组织数据[2]。利用它可以很快地从不同角度对数据进行分类汇总。 对考试成绩来说,可以将课程作为列,将学生作为行,计算每个学生各门课程的平均成绩,生成透视表(图2)。PivotTable控件HTML代码如下:

<OBJECT classid="clsid:0002E552-0000-0000-C000-000000000046" id="pvt1" ></OBJECT>

数据透视表生成代码:

<scriptlanguage="VBScript">

strPath = server.mappath("test.mdb")

Pvt1.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & strPath

Pvt1.DataMember = "score"

Pvt1.ActiveView.AutoLayout’自动导入数据透视表。

set c=pvt1.Constants

ctotal = pvt1.activeview.AddTotal("avg", pvt.ActiveView.FieldSets(3).Fields(0),c.plFunctionAverage)

With pvt1.ActiveView

.FilterAxis.InsertFieldSet(pvt1.activeview.fieldsets(0))

.FilterAxis.InsertFieldSet(pvt1.activeview.fieldsets(1))

.RowAxis.InsertFieldSet(pvt1.activeview.fieldsets(2))

.ColumnAxis.InsertFieldSet(pvt1.activeview.fieldsets(3))

. DataAxis.InsertTotal(ctotal, 0)

.DetailAutoFit = True

.ExpandDetails = PivotTableExpandEnum.plExpandAutomatic

End With

</script>

3.6 统计图表输出

统计图表是以图表直观表现数据关系的一种方式。常用的有柱状图、饼图、折线图等[3]。需要注意的是不同图的参数和数据源选择有所不同。例如用Chart组件生成分段人数的柱状图,组件HTML代码为:

<objec classid="clsid:0002E500-0000-0000-C000-000000000046" id="Cspace">

</object>

将Chart数据源绑定到spreadsheet代码:

<scriptlanguage="VBScript">

sheet.Names.Add("RangeFenduan", "sheet1! $G$2:$G7")

Dimcht,ser,rngValues,c

Dim fSeriesInCols

fSeriesInCols=false 'false:以行产生系列,true:以列产生系列

c=sheet.Constants

cspace.Clear

cspace.DataSource=sheet '绑定数据源

cht=cspace.Charts.Add()

cht.Type=c.chChartTypeColumnClustered'定义为柱状图

cht.HasTitle=true'显示标题

cht.Title.Caption="分段人数统计图"'设置标题内容

setrngValues=sheet.Range(RangeFenduan)'取数据

foreachserincht.SeriesCollection

if fSeriesInCols then

ser.SetData(c.chDimValues,0,rngValues.Columns(ser.Index+1).Address)

else

ser.SetData(c.chDimValues,0,rngValues.Rows(ser.Index+1).Address)

endif

setdl=ser.DataLabelsCollection.Add()

dl.Position=c.chLabelPositionTop

next

cht.HasLegend=true'显示图例

</script>

4 小结

基于OWC的成绩分析可以通过成绩数据的导入、公式计算、数据透视表和图表输出,实现了对网络教学的评价。将其设计为一个Web Services,可被多个教学系统共享,在实践中取得了良好的效果。但在调用OWC组件时也存在客户端必须安装Office软件局限性。

参考文献:

[1] 构建基于 Web 的分析系统[EB/OL]./.

[2] Microsoft Office Web 组件基础[EB/OL]./.

[3] OWC中的PivotTable(透视表)使用XML数据源[EB/OL]..

上一篇:利用WMI查看系统信息 下一篇:基于UML的嵌入式系统UDP模块设计