论文导读::本文主要采用基于WEB的动态网页的制作技术,针对我校成绩管理软件功能上存在的缺陷,在减少软件再次开发的投入、提高办事效率、方便学生查询等原则的指导下,根据本人研究方向,对原有我校的《宿迁电大大中专成绩处理软件》最终产生的原始成绩数据通过ASP开发环境实现了网上的在线查询功能。 
关键词:原始数据,在线成绩查询,WEB,ASP,ODBC数据源 
 
  
一、问题的产生: 
作者所在的学校是一所具有本、专科教育与中专教育并举、全日制教育与开放教育、远程教育(奥鹏学习中心)协调发展的多层次办学的地方高等学校;下辖三所县级电大,在校生总数达1万多人。在教务学籍管理中比较烦琐但又非常重要的一个环节便是每学期的期末考试成绩处理了。在历年操作过程中,由于都是手工作业,因此出现了诸如抄错、算错、漏算、人情分、统计不准确等各种问题。 
为了提高教务处的工作效率,减少错误和因错误带来的不必要的麻烦,我校于2002年组织一批教师自主开发了学生成绩处理软件ODBC数据源,所使用主要工具为VFP发表论文。它主要针对我校不同的办学层次和课程不同的评价标准进行最后的成绩处理,本软件具体功能有学生花名册生成、所开课程库的生成、录分、合算、打印输出成绩单等,成绩单一式三份,一份报省校备案、一份留市校,一份下发给县校或班主任。在实际使用过程中,确实提高了教务处工作的效率,同时也减少了一些人为的错误。但随着我校办学模式主体的转移以及学生对于获取信息途径的改变,由原来的到班主任处查成绩到迫切希望在网上查成绩,很显然,原有的软件根本不可能满足要求。 
二、分析问题: 
针对以上问题的出现,本人采用目前比较流行的软件开发模式---B/S模式,借助ASP+ACCESS 
开发技术实现这一功能。 
原有软件最终产生的是一个数据库文件--成绩.dbc,其中有几个主要的数据表如下: 
  
    
        
            | 
             表名 
             | 
            
             含义 
             | 
         
        
            | 
             User 
             | 
            
             记录用户信息表 
             | 
         
        
            | 
             Init 
             | 
            
             记录年度学期表 
             | 
         
        
            | 
             Course 
             | 
            
             记录所开课程信息表 
             | 
         
        
            | 
             Sele_course 
             | 
            
             记录所选开课程信息表 
             | 
         
        
            | 
             Class_x(其中X代表不同班组编号) 
             | 
            
             记录不同班级成绩库 
             | 
         
    
 
原有软件的内部执行流程是这样的: 
将本学期所开课程全部录入course表中; 
创建所有班级ODBC数据源,其中包括学号、姓名、所开课程;这里尤其要说明的一点是,[所开课程]字段均为代号,和course表中产生的课程代号相同,这样就给后面的成绩查询带来一定的困难; 
录入学员花名册并开始录分; 
进行成绩合算并打印报表上报省校、备案和下发到班主任。 
而目前我们需要做的就是在原有软件的基础上,将其产生的成绩数据库文件发布到网上,让学员只需简单的选择和录入姓名、学号提交后便可在线生成某位学员的成绩单。 
实现后最终的页面如下两幅图所示: 
  
图1 考生选择年度后的界面图2 学员录入学号提交后的界面 
三、问题的具体解决方法: 
本软件具体的操作以及软件运行流程: 
针对以上的操作运行流程来看,第①、③、④、⑥四个功能模块实现起来比较简单,页面上显示的数据来源不是很复杂,只有功能模块②和⑤实现起来比较复杂,其间涉及到代号与实名的转换问题。 
由于在原成绩处理软件的开发过程中,最终产生的关系表中所使用的字段均是代号,比如在00计算机(五年制)班级表中字段关系: 
class_0501(XH C(12),XM C(8)ODBC数据源,A01N(5,1),B22 N(5,1),F23 N(5,1)) 
如不加以转换而直接输出到浏览器中,相信谁也不知道是代表什么意思,由于每个班级所对应的字段均不一样(因为所开课程是不尽统一的),这就要求进行灵活转换,而且具有一定的通用性发表论文。 
转换思想:首先将所选班级的代表课程的相关字段放入一数组中,然后将其与课程表对应的课程代号进行比较,将找到相对应的课程名称再放入相对应的数据中,即可实现课程代号与相对应课程名称的转换。 
在进行调试运行此软件时,必须要事先进行ODBC的数据源配置,在这里就不详细介绍,我这里配置了一个数据源名称为“成绩”,它对应的数据库即为前面提到的” 成绩.dbc”数据库文件。 
关键性的代码摘录如下(一些相关的HTML标识符均被去掉)ODBC数据源,并有相应的注释: 
主程序chafen.asp: 
<formaction="chfen_2.asp" method="post"name="form1"> 
<%dim db 
setdb=Server.Createobject("ADODB.Connection") 
db.Open"成绩" 
setrs=db.Execute("select * from bjk ") 
'以下显示所有班级数据库的内容即班级名称 
%> 
<SELECTsize=6 name="班级名称"> 
<%dowhile not rs.eof %> 
<OPTION ><%=rs("bjmc")%></OPTION> 
<%rs.movenext 
loop 
%> 
</SELECT> 
<hr><font size=3 >第二步:请输入你的姓名或学号</font> <br><br> 
姓名(或学号):<inputtype=text name="xh"> <br><br> 
<input type="submit" value=" 查询成绩 "name=submit1> 
<input type="reset" value=" 重新查询 " name=submit2> 
</form> 
子程序chafen_2.asp: 
<% dim xh 
xh=request("xh") 
if xh="" then 
Response.Write("对不起,姓名或学号不能为空") 
Response.End 
end if 
dimdb 
setdb=Server.Createobject("ADODB.Connection") 
db.Open"成绩" 
dimrs 
setrs=db.Execute("select * from bjk ") 
'以下显示数据库记录 
'将所选中的班级名称存入变量bjname中,以备后面使用 
dim bjname 
bjname=request("班级名称") 
if bjname="" then 
Response.Write ("你没有选择所在的班级!") 
Response.End 
end if 
%> 
<formaction="" method="post" name="form2"> 
<%dim rs1,strsql,rs2,strsql2,temp,fcount 
'查找满足所选课程名称的记录并将该班级的课程库存入变量temp中 
strsql="selectbjk from bjk where bjmc=" & "'" & bjname&"'" 
set rs1=db.Execute(strsql) 
temp=rs1("bjk") 
'将所选班级对应的库打开并将所有记录集放入对象rs2中,并将字段总数放入变量fcount中 
strsql2="select * from " & temp & "where 姓名='" & xh& "'" & "or 学号='"& xh & "'" 
setrs2=db.Execute(strsql2) 
ifrs2.eof and rs2.bof then 
Response.Write("不存在此考生,请与我们联系:4369677(教务处)") 
Response.End 
end if 
fcount=rs2.fields.count 
dim k,h,arr(12) 
'将所有成绩的课程代号送入数组arr中 
for k=1 to (fcount-2)/2 
arr(k)=rs2(k+1).name 
next 
dim strsql3,rs3,a,b(12) 
for a=1to (fcount-2)/2 
strsql3="select kcmc from 课程 where kcdm='" & Lcase(arr(a)) &"'" 
set rs3=db.Execute(strsql3) 
if not rs3.eof then 
b(a)=rs3("kcmc") 
endif 
next%> 
<tableborder="1" width="100%"> 
<tr> 
<td>学号</td> 
<td>姓名</td> 
<%'将所有字段显示在表格中 
for h=1 to (fcount-2)/2+2 
%> 
<td><%=b(h)%></td> 
<%next%> 
</tr> 
<%dim j,ss 
do while not rs2.eof%> 
<tr> 
<%for j=0 to (fcount-2)/2+1 
if j>1 then 
‘如果成绩不及格,用红色表示 
ifcint(rs2.fields(j))<60 then %> 
<td><fontcolor=#ff44ff><b><%=rs2.fields(j)%> 
</b></font></td> 
<%else%> 
<td ><%=rs2.fields(j)%></td> 
<%end if %> 
<%else%> 
<td ><%=rs2.fields(j)%></td> 
<%endif %> 
<%next %> 
<%rs2.movenext 
loop%> 
</tr> 
</table> 
</form> 
四、结束语: 
本文是一篇应用型文章,通过对一个软件平台的长升迁及功能上的扩展,详细讲解了如何通过ASP+ACCESS技术来开发基于WEB的动态网页的制作过程,对于软件开发的初学者有一定的借鉴之处。当然,在具体的分析和实现过程中,可能有些不当或是不够精简之处,敬请各位专家和同行批评指正。 
 
【参考资料】 
1.尚俊杰,网络程序设计-ASP(第二版)[M],北方交通大学出版社,2004.2 
2.陈孟建,沈美莉等,ASP技术与动态网页设计[M],清华大学出版社,2007.3 
3.刘瑞新等,Visual Basic程序设计教程(第3版)[M],电子工业出版社,2010.7 
4.李存斌,樊建平,ASP高级编程及其项目应用开发[M],中国水利水电出版社,2003.4 
5.张钰彦,朱海华等,网站编程手册(服务器端)[M],中国水利水电出版社,2001.6 
6.张峰,浅谈基于WEB的交互式网页的制作过程[J],湖南医科大学学报(社会科学版),2003年第3期 
7.张红荣,浅谈基于WEB应用软件开发的制作过程[J],电气电子教学学报,2004年第5期 
  
   |