Web表格批量数据录入的控制及实现
2012-05-08鞠宏军杜丽娟
鞠宏军 杜丽娟
摘要:该文结合实际应用,以重修成绩单录入为例,详细阐述了基于Web页面的批量数据录入控制及实现。该方法有效避免了以往Web页面录入,键盘输入和鼠标操作频繁交替,输入焦点控制能力差,数据上传有延时,数据量大录入明显变慢的问题,有效地提高了教务管理的工作效率,具有良好的实用性、先进性和推广价值。该录入控制程序,既可以直接应用于其他基于asp.net技术的管理系统中,也可为jsp、php等页面录入控制实现提供良好的设计思路。
关键词:asp.net;web页面;数据录入;管理系统
中图分类号:TP315文献标识码:A文章编号:1009-3044(2012)07-1473-05
Batch Data Inputing Control and Implementation of Web Table
JU Hong-jun1, DU Li-juan2
(1.Department of Computer Science, North China Institute of Science and Technology, Beijing 101601,China; 2.Department of Telecom, North China Institute of Science and Technology, Beijing 101601, China)
Abstract: Combined with practical application and exampled with inputing of revampment credit, Web table -based.input control and implementation of batch data are introduced in detail. The method proposed effectively avoids some defects such as frequently alternation of keyboard and mouse, difficult control of input focus, larger delay in data uploading and low speed with large volume of data entry. The method improves the efficiency of educatonal administration significantly and has good usability, advancement and promotional value. It not only can be directly applied to asp.net-based management system, but also offers idea for designment of Jsp, php related input control system.
Key words: asp.net; web table; data input; management system
随着基于B/S结构信息管理系统应用的迅速普及,Web页面的录入需求也越来越多,如果少量、分散、固定样式的数据,Html的Form表单提供了输入框、单选、复选、菜单等多种录入选择,比较容易实现,但若需要录入的数据量比较大,则处理比较困难,即使实现了录入页面也不像单机、C/S模式界面录入,或者Excel录入那么方便。经常会出现,键盘输入和鼠标操作频繁交替,输入焦点获取和控制能力较差,受网络速度影响,数据上传有延时,并且随数据量越大上传延时也越大。本文结合重修管理系统、期末考试考务管理系统的实际应用,通过后台Asp.net对Form表单进行循环处理,JavaScript输入框焦点控制,提交数据的每条更新,实现了和Excel类似的批量、灵活、动态、实时的数据输入。
1重修成绩单录入需求分析
重修是学生没有通过课程考核,重新修读该课程,并再次参加课程考核。重修班级的成绩单填报比正常教学班级更复杂、繁琐,因为某班100人,可能是由30-40个自然班中不及格的学生所组合而成的。如果用手工填报成绩,每个自然班需要填写4份,一个重修班就要写120多份成绩单。即使每班填寫1份再去复印,也要填写30-40份,并且好多象课程名称、系部班级等填写项都是重复的,成绩汇总前的试卷按班级分拣也很麻烦,不但工作量大、重复、繁琐,而且容易出错。因此,重修班级的成绩更加需要、适合在网上填报,自动分班打印输出。为方便教务管理人员、任课教师及学生的使用,重修系统采用B/S结构。
基于web页面的批量数据录入,也有许多解决方案。如:用友华表cell插件、FlexCell控件、神农氏SmartGrid for Asp.net表格控间等,均可以实现页面表格的输入处理,但以上各控件需要收费,功能侧重web打印报表处理,并且安装使用下载较复杂;再有如Jquery、Ext的表格插件,使用起来也比较复杂。因此,本例采用简单的asp.net循环,和JavaScript,实现了Web页面的批量录入,和实时上传。
2重修成绩单录入页面控制及实现
在进行重修成绩填报时,系统先按教师把所有学生数据读取到页面上,再按姓名填写成绩并更新到数据库中;同时,各重修课程、各教师重修的人数差别很大,有的几个人,有的上百人,为方便处理,录入成绩页面按每页15人分页处理,每次刷新录入页面时,需要先判断当前所在页数;为防止数据上传的更新延迟,系统采用每输入一个人成绩,提交上传一次数据,因此在提交处理程序和录入成绩页面中也要判断,当前正在处理的记录是那一条;为避免以往鼠标、键盘交替输入的麻烦,录入页面没有设置提交按钮,每次输入数据回车,激活提交action程序,并且提交一条记录后,光标通过JavaScript控制自动转到下一学生成绩输入框。具体成绩输入页面关键代码如下:
<!--#include file="../database/conn.asp"-->
<%
pys=request("ys")rem返回当前处理页面
pnum=request("num")rem返回当前处理记录指针,用于设置焦点
if pnum<>"" then
pnum=pnum+1
else
pnum=1
end ifrem若第一次调用,默认为第1条记录,否则记录指针加1
%>
<body background="../image/bj.jpg">
<table width="720" border="1" align="center" cellpadding="0" cellspacing="0" class="ztt">
<tr>
<td width="50">序号</td>
<td width="200">课程名</td>
……
</tr>
<%
sql="select cxcjbsy.id,cxcjbsy.kcm,xbb.xbmc,cxcjbsy.bjm,cxcjbsy.xh,cxcjbsy.xm,cxcjbsy.cxcj,cxskbjb.rkjs,cxskbjb.cxbj "
sql=sql&" from (cxcjbsy inner join cxskbjb on cxcjbsy.cxbj=cxskbjb.id) inner join xbb on cxcjbsy.xbbh=xbb.xbbh where”
sql=sql" cxskbjb.rkjs=&pxm&" ORDER BY cxskbjb.cxbj,xbb.xbmc,cxcjbsy.bjm,cxcjbsy.xh;"
set rs=con.execute(sql)rem根据教师姓名,读取特定学生信息记录集
if not rs.eof then
i=1
k=1
rs.movefirst
do while not rs.eof
if k>(pys-1)*15 then
exit do
end if
k=k+1
i=i+1
rs.movenext
looprem控制分页
num=1
do while (not rs.eof and num<=15)
%>
<form name="fm" method="post" action= "cj cl.asp?num=<%=num%>&ys=<%=pys%>&id=<%=rs("id")%>">
rem每人一form,并将当前页、当前记录及id传至成绩更新处理程序
<tr>
<td><%=i%></td>
<td><%=rs("cxbj")%></td>
<td><%=rs("xbmc")%></td>
<td><%=rs("bjm")%></td>
<td><%=rs("xh")%></td>
<td><%=rs("xm")%></td>
<td><%=rs("cxcj")%></td>
<td><input name="cj" type="tex t" value=" <%=rs("cxcj")%>" size="4" maxlength ="4"/></td>
</tr>
</form>
<%
i=i+1
num=num+1
rs.movenext
loop
end if
if (pnum>num-1) then
pnum=num-1
end if
rem如果指向最后一条,则回车跳至第一条
%>
</table>
document.form[pnum-1].cj.focus(); //设置输入框焦点
</script>
<%if pys+0<>1 then%>
<a href="cj.asp?ys=<%=pys-1%>">上一页</a>
<%end if%>
<%if not rs.eof then%>
<a href="cj.asp?ys=<%=pys+1%>">下一页</a>
<%end if%>
<%end if%>
</body>
</html>
成绩更新处理程序如下:
<!--#include file="../database/conn.asp"-->
<%
pnum=request("num")
pid=request("id")
pcj=request("cj")
pys=request("ys")
if IsNumeric(pcj) then
rem如果数字正常更新,否则更新为null
sql="update cxcjbsy set cxcj="&pcj&" where id="&pid
else
sql="update cxcjbsy set cxcj=null where id="&pid
end if
con.execute(sql)
response.redirect "cxcjcl.asp?num="&pnum&"&ys="&pys%>
成绩录入页面运行效果如图1所示。
图1重修成绩录入页面
3多行多列批量录入的扩展
以上成绩处理只录入每条记录的成绩字段,如果需要录入的数据是类似excel多行、多列的,只需在form中设置多个文本输入框,在前n-1个输入框输入成绩并回车依次跳到下一框,最后输入框输入数据回车时激活action处理程序即可。例如,四六级考试成绩处理,输入听力、阅读、写作、综合4个分数,自动计算总成绩。录入页面及提交处理程序代码扩展如下。
…
function fun(snum,i)
{
if(i<4)
{
document.fm[snum-1].cj[i].focus();
document.fm[snum-1].zcj.value=parseInt(document.fm[snum-1].cj[0].value)+parseInt(document.fm[snum-1].cj[1].value)+parseInt(document.fm[snum-1].cj[2].value)+parseInt(document.fm[snum-1].cj[3].value);
//当第1-3框输入时焦点转向下一框,并计算更新总成绩列
}
else
document.fm[snum-1].submit(); //当第4框回车,激活action成绩处理程序
}
</script>
……
<form name="fm" method="post" action="yydjc l.asp?num=<%=num%>&ys=<%=pys%>&id=<%=rs("id")%>">
<tr>
<td ><%=i%></td>
<td><%=rs("bjm")%></td>
<td><%=rs("xh")%></td>
<td><%=rs("xm")%></td>
<td><input name="cj" type="text" value="<%=rs("tl")%>" size="3" maxlength="3" onkeypress="if(event. keyCode==13) {fun(<%=
<td><input name="cj" type="text" value="<%=rs("xz")%>" size="3" maxlength="3" onkeypress="if(event. keyCode==13) {fun(<%= num%>,2);}"/> </td>
<td><input name="cj" type="text" value="<%=rs("yd")%>" size="3" maxlength="3" onkeypress="if(event. keyCode==13) {fun(<%= num%>,3);}"/> </td>
<td><input name="cj" type="text" value="<%=rs("zh")%>" size="3" maxlength="3" onkeypress="if(event. keyCode==13) {fun(<%= num%>,4);}"/> </td>
<td><input name="zcj" type="text" value="<%=rs("zcj")%>" size="4" maxlength="3" disabled/></td>
</tr>
</form>
……
var pnum="<%=pnum%>";
document.form[pnum-1].cj[0].focus();
//提交数据后,设置焦点为下一记录第1个框
</script>
成绩更新处理程序如下:
<!--#include file="../database/conn.asp"-->
<%
pnum=request("num")
pid=request("id")
pcj=request("cj")
pys=request("ys")
mcj=split(pcj,",")
cj1=mcj(0)+0
cj2=mcj(1)+0
cj3=mcj(2)+0
cj4=mcj(3)+0
con.execute("update yyks set tl="&cj1&", xz="&cj2&",yd="&cj3&",zh="&cj4&",zcj="&cj1+cj2+cj3+cj4&" where id="&pid)
response.redirect "yydj.asp?num="&pnum&"&ys ="&pys
%>
多行多列四级成绩录入页面运行效果如图2所示。
图2多行多列输入效果图
4结束语
本文结合《基于校园网的重修管理系统》重修成绩录入页面,和《基于校园网的期末考试考务管理系统》考场教室录入的实际需求及应用,详细分析了B/S模式下结合Form循环和JavaScript焦点控制的,数据批量录入方法。该录入程序实现及操作简单、控制效果较好,是Web页面批量数据录入处理比较简洁实用的方法,具有一定的实用性、先进性及推广价值。该方案较好地实现B/S模式的页面批量数据录入,既可以直接应用于其他基于asp.net技术的管理系统中,也可为jsp、php等web数据录入控制实现提供良好的设计思路。
参考文献:
[1]郑齐心.ASP.NET项目开发案例全程实录[M].2版.北京:清华大学出版社,2010.
[2]洪石丹.ASP.NET范例开发大全[M].北京:清华大学出版社,2010.
[3]庞娅娟,房大伟.ASP.NET从入门到精通[M].2版.北京:清华大学出版社,2010.
[4]炎士涛.ASP.NET项目开发案例精粹[M].北京:清华大学出版社,2010.
[5]张领.ASP.NET项目开发全程实录[M].北京:清华大学出版社,2008.
[6]余金山.ASP.NET 2.0+SQL Server 2005企业项目开发与实战[M].北京:电子工业出版社,2008.
[7]李玉林.ASP.NET 2.0网络编程从入门到精通[M].北京:清华大学出版社,2006.
[8]马苏拉.高校考试管理信息系统的设计与实现[J].计算机系统应用,2009(10):37-42.