高校正方教务系统成绩一键导入与下载的设计与实现
2018-09-23马浩东
马浩东
引言
随着校园网的普及,许多教学工作都搬到网上处理了,比如学生成绩录入系统,大大方便了学校的教学管理,同时,也对各个专业老师的计算机操作技能提出更高的要求.
由于客观存在的课程差异,班级人数少的老师,输入工作量不大,一般没遇到什么太多麻烦;但是,大班课程,人数达到150以上的老师,经常抱怨录入工作的烦扰,由于学校服务器出于安全的考虑,一般一段时间没有交互性操作,会自动退出登录账户,而老师仍然在成绩录入页面上辛苦的做录入工作,等到录完提交时却发现,服务器那头已经自动断开,辛辛苦苦的页面成绩录入工作等于白费,有些老师提出录入小部分成绩后,先进行保存交互操作,再继续录入,但是,页面录入需要不停地改变录入位置,导致录入大量学生成绩的工作变得压抑和烦躁,因此,许多基础课老迫切希望一款外挂工具软件.
前期调研发现,也有其他学校类似的外挂软件程序,但是只适合XP操作系统,不再适用于现在大多数人系统的配置环境.因此,我们打算自行开发一款类似的工具软件,以适应当前老师们的迫切需要.
1 设计所用程序语言和GUI介绍
1.1 Java语言简介
Java语言是1995年由Sun公司发布的,直接免费供大家应用,源代码也向互联网上的所有人公开,由于其实用性和跨平台特性,迅速被大家接受.Java平台由JVM和API构成,JVM是java程序跨平台的关键,不同的平台有不同的JVM,而java字节码不包含任何与平台相关的信息,不直接与平台交互,而是通过JVM间接与平台交互.应用程序在执行时,JVM加载字节码,将字节码解释成特定平台的机器码,让平台执行.任何一个应用程序都必须转化为机器码,才能与计算机进行交互,如果机器码的来源依赖于具体的平台,那么这个应用程序就不能跨平台.而java应用程序运行时机器码由java体系的一部分JVM提供,不受平台的限制,所以实现了跨平台.
Java特点:简单,面向对象,分布性,跨平台,安全性,健壮性,多线程
1.2 图形用户界面
GUI就是指图形用户界面,java的输出方式有两种,其中一种是命令行输出,另外一种就是通过图形界面输出;通过GUI可以增强人机交互的体验,使操作更加方便,给人带来更好的视觉体验.
2 设计整体模块结构图
高校教务系统成绩一键导入和下载主要有浏览器,成绩表单下载,选择文件,成绩自动填写四大模块组成,其整体模块结构图如图5-1所示.
3 设计过程及实现
3.1 内嵌浏览器及界面制作
图2 -1 设计整体模块结构图
在一键下载学生名单和导入之前,首先要实现对高校教务系统的访问,该文使用Eclipse工具内嵌一个基于JWebBrowser浏览器来实现,JWeb-Browser调用客户本机浏览器,通常是IE;浏览器实现部分代码如下,
//开启本地接口
NativeInterface.open();
//开辟一个线程来跑浏览器
UIUtils.setPreferredLookAndFeel();
//设置浏览器的默认网址为www.baidu.com
final JWebBrowser wbs=new JWebBrowser();
wbs.navigate("http://www.baidu.com");
界面是一个直接反映信息交互的平台,起着举足轻重的作用,该文采用BorderLayout边界布局管理器和FlowLayout流式布局管理器.
BorderLayout是将每个组件放在指定的东南西北中五个方向之一,并调整其大小,使其在东南西北方向的控件贴边放置.
FlowLayout是最简单的布局,是将各个控件按照从左到右的次序依次排放,遇到边界就另起一行再按照顺序排放.
选择好的容器后再在其中添加各个控件,我们这里主要用到的是Panel和Frame容器.页面布局部分代码如下:
JFrame frame=new JFrame("网页表单便捷式输入工具1.0");//JFrame是最底层,JPanel是置于其面上
JPanel jp1 = new JPanel(new Border-Layout());//浏览器放在面板的中间
final JWebBrowser wbs=new JWebBrowser();
wbs.navigate("http://www.baidu.com");
jp1.add(wbs,BorderLayout.CENTER);
frame.getContentPane().add(jp1, BorderLayout.CENTER);
JButton b1=new JButton("下载");//将三个按钮控件按照流式布局排列
JButton b2=new JButton("自动填写");
final JButton b3=new JButton("选择文件");
JPanel buttonPanel=new JPanel(new FlowLayout());
buttonPanel.add(b1);
buttonPanel.add(b2);
buttonPanel.add(b3);
JPanel jp=new JPanel(new BorderLayout());//将buttonPanel按边界布局放在jp的南方向上
jp.add(buttonPanel,BorderLayout.SOUTH);
frame.add(jp,BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(850, 600);
frame.setLocationByPlatform(true);
frame.setVisible(true);
界面如图3-1所示:
图3 -1
3.2 成绩输入页面源码分析及导入成绩
通过对成绩录入界面的分析,其中最关键的就是对框架iframe的操作,通过document.frames来得到操作的表单所在的HTML,然后对Document对象所包含的HTML所指定的元素进行操作,最后通过Eclipse把excel中的有效数据解析出来,然后把数据导入到网页的对应的空的框里,该模块的主要语法为:
document.getElementById(id)
此语法是查找网页中的一个特定的元素最有效的方法,在操作HTML中的的一个特定的元素时,最好给该元素一个id属性,为它指定一个(在HTML中)唯一的名称,然后就可以用该ID查找想要的元素.部分代码如下,代码的功能是把excel中的有效数据解析出来录入到网页的对应的框里
String s = "var a = document.frames['iframeautoheight'].document.getElementById ('Data-Grid1__ctl2_ps');a.value="+alist.get(0)+"";
String s1 = "var a = document.frames['iframeautoheight'].document.getElementById('Data-Grid1__ctl2_qm');a.value="+alist.get(1)+"";
wbs.executeJavascriptWithResult(s);
wbs.executeJavascriptWithResult(s1);
3.3 学生成绩表单的一键下载
高校教务系统是采用ASP.NET的WinForm开发的,成绩录入页面采用了DataGrid控件,Data-Grid控件是用来显示数据的一个极其高效的网格控件,并提供了选择、分组、排序等功能.DataGrid同时可以缩短开发时间,操作简单.此模块的作用就是把数据从DataGrid控件中爬取出来填充到excel中来实现学生成绩表单下载的功能,因为vb短小精炼,执行效率高,所以此模块的功能通过java调用vb编写的dll来实现,vb部分代码如下:
Set mytable=WebBrowser1.Document.frames("zhuti").Document.getelementbyid("DataGrid1")
For x=0 To mytable.Rows.length-1
For y=0 To mytable.Rows(x).Cells.length-4
xlSheet.Cells(x+1,y+1)=mytable.Rows(x).Cells(y).innertext
Nexty
Nextx
xlSheet.Columns.EntireColumn.AutoFit
xlapp.DisplayAlerts = False
xlBook.Close True'先保存修改再关闭工作簿
xlapp.Application.Quit
4 结束语
随着现代教育的普及,各高校教学工作的开展效率至关重要,无纸化办公的出现更让老师们习惯将各科成绩登记在EXCEL表格中,在将成绩录入到各高校正方系统的过程中,将EXCEL表格里的成绩快速导入到成绩录入页面显得尤为重要.因此,开发一个成绩录入辅助系统是极其必要的.本文提供教师离线完成成绩录入工作,一键完成网上提交工作,解决了成绩录入的效率问题.