XXX XXX (石家庄邮电职业技术学院计算机系,河北石家庄 050021) 摘要 结合远程教学系统开发的经历,介绍了如何利用ASP技术实现网上选课、退课功能。 关键词 ASP;远程教学;选课;退课;Oracle 1 引言 ASP是“Active Server Pages”的简写,即“动态服务器网页”,是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言。笔者参与的是邮政远程教学系统项目开发,本系统采用Windows NT4.0 Server,WEB服务采用IIS4.0/5.0,与后台数据库采用ODBC连接,使用ASP技术实现系统的动态页面效果。该系统主要针对邮政职工的在职远程学习、远程技术讨论和交流,并为业务管理提供支撑服务。远程教学网站将开设许多业务课、技术课供学员学习,因此学员可以自由的选择一些课程来学习。下面主要介绍本系统网上选课、退课的流程设计及如何利用ASP技术实现功能。 2 远程教学系统概述 现代远程教育是随着现代信息技术的发展而产生的一种新型教育方式,是构筑知识经济时代人们终身学习体系的主要手段。远程教学是邮政继续教育的一个有效途径。邮政远程教学系统可以及时把邮政新技术、新业务放在网上交流探讨,网上学员可以随时随地学习、提高,一定程度上可以减轻脱产短期培训给企业造成费用支出的压力。 本系统总体上定位为“基于Web的开放式多媒体远程教学系统”。这一类远程教学系统主要为窄带、非实时的应用系统,它采用WEB服务器和数据库服务器作为远程教育网的服务器,用户(学员)在接入因特网的计算机上,通过浏览器连到教学系统的WEB服务器上,完成教学内容的浏览、课件下载、实时答疑等各项学习活动。同样,教师也通过浏览器以教师身份登录到WEB服务器上实施教学和答疑。系统采用目前流行的Web应用的三层B/S瘦客户体系结构,即数据层、功能层、表示层。 3学员学习流程 首先学员通过网络浏览远程教学网页,根据自己的需要选择不同的专业、课程,在学员将学习课程所需要的费用交纳后即可以通过该网站进行学员注册,学员输入个人的相关信息并注册成功后就成为了远程教育网的正式学员,从而可以将自己所选择的课程课件下载学习(为降低费用推荐课件下载,网下学习)。为了解决学员在学习过程中遇到的问题,教学网安排老师在网上进行辅导,学员可以通过发E-mail询问,也可以登录教学网站的交流室与其他学生或辅导老师进行讨论,或访问课程问题集锦,发表自己的问题、查看问题的答案。在学员学习完成后,如顺利通过相应考试即可结业,并且可以通过远程教育网查询成绩。 3选课、退课功能概要设计 目标:为登录远程教学系统的学员提供选择学习课程的功能,要根据学员的交费情况判断课程是否可选。 输入:本人资金余额(来自帐户信息表),可选课程清单(来自学员课程信息表)。 加工: ⑴ 学员类型、权限,禁止非法客户操作。 ⑵ 帐户表中查出本人帐户资金余额,若为零则禁止。 ⑶ 从学员选课表中,查出并显示该学员已选课程。 ⑷ 列出目前网站可供该学员选择的课程(该学员的已选课程出外),以及每门课程的具体信息,包括课程开课时间、任课教师、学时、费用及简单的内容介绍。 ⑸ 接收用户选课、退课操作,如开课时间未到,学员可以把已选课程退掉,及退课。也可将新课程选中,即选课。根据员的操作,系统随时计算、显示该学员的资金余额,并随时刷新该学员已选课程列表和可选课程列表。 ⑹ 选课操作过程中,计算学员‘资金余额-所选课程费用’的值,该值小于零,则选择无效、操作失败;若大于等于零,经用户确认后保存,同时把该值记入账户信息表,形成新的资金余额;退课操作完成之前,计算学员‘资金余额+所退课程费用’的值,并把该值记入账户信息表,形成新的资金余额。 ⑺ 在学员选课表中添加(选课)或注销记录(退课),资金余额写入帐户信息表,资金增减明细写入资金明细表。 输出:选课结果(学员选课表),费用明细(资金明细表),资金余额(帐户信息表)的更新。 4选课、退课功能程序实现 ⑴ 选课、退课功能的实现主要采用了ORACLE数据库访问的ADO技术,ADO是ASP技术的核心之一,它集中体现了ASP技术丰富而灵活的数据库访问功能。 ⑵ 将学员已选课程列表显示、可选课程列表显示与选课操作的处理写成了一个应用程序choicelesson.asp,这样通过多次调用应用程序本身,可以随时刷新这两个课程列表及资金余额显示。 ⑶ 将学员已选课程列表显示、可选课程列表显示与退课操作的处理写成了一个应用程序cancellesson.asp,这样通过多次调用应用程序本身,可以随时刷新这两个课程列表及资金余额显示。 下面以选课功能的源程序为例: 选课功能部分源代码choicelesson.asp: <% id=cstr(session("id")) set cn=server.createobject("adodb.connection") cnstr=application("oleconn") cn.open cnstr na=request.cookies("username") sqls="select suplus,class_no from account where account_no='"&session("id")&"'" set rss=cn.execute(sqls) '取出用户的余额 su=cint(rss("suplus")) classno=trim(rss("class_no")) '以下是用户提交选课操作的处理 if request("ch")="yy" then '先判断用户的资金剩余情况 if su<cint(request("suplus")) then response.redirect "choicelesson.asp" end if '再判断用户是否选过此课 sql="select count(*) from fstudent_lesson where account_no='"_ &id&"' and lesson_id='"&request("lessonid")&"'" set rs=cn.execute(sql) rnum=cint(rs(0)) rs.close set rs=nothing '如果用户没有选过此课,则可以选课 if rnum=0 then ye=cint(request("suplus")) '向选课表写入一条记录 sql="insert into fstudent_lesson"_ &"(account_no,lesson_id,completed,lesson_name,selected_time) values('"_ &id&"','"&request("lessonid")&"','n','"&request("lessonname")&"',sysdate)" '修改资金余额 sql1="update account set suplus="&ye&" where account_no='"&id&"'" '写用户的费用明细流水 sql2="insert into fee"_ &"(account_no,money,opreate_time,suplus,remark) values('"_ &id&"',"&request("lessonfee")&",sysdate,"&ye&",'选课')" cn.execute sql2 cn.execute sql cn.execute sql1 end if '显示学员的新选课表及新的可选课程列表,即刷新页面显示 response.redirect "choicelesson.asp" else '如用户未提交选课 sqls="select suplus from account where account_no='"&id&"'" set rss=cn.execute(sqls) su=cint(rss("suplus")) '显示用户已选课程列表 sql="select a.selected_time,b.* from fstudent_lesson a,lesson b "_ &"where a.lesson_id=b.lesson_id and a.account_no='"&session("id")&"'" set rs=cn.execute(sql) response.write "<h3><font color=#006699>姓名:"&na response.write " 你的资金余额为:"&su&"元!</font> <font color=#339933>(选课操作)</h3></h3>" response.write "<p><font color=#009966>已选的课程列表:</font>" response.write "<table cellspacing=0 cellPadding=0 bordercolor=#009966 border=1 align=center bordercolorlight=009966 bordercolordark=#FFFFFF>" response.write "<tr align=center bgcolor=#cccccc><td>课程编号</td><td>课程名</td><td>学时</td><td>学分</td><td>费用</td><td>开课时间</td><td>结课时间</td><td>选课时间</td></tr>" do while not rs.eof … loop response.write "</table></p>" end if response.write "<p><font color=#009966>可选的课程列表:</font>" //判断用户是否选过课 if rs.eof then sql2="select * from lesson a ,teacher_lesson b "_ &"where a.lesson_id=b.lesson_id and b.class_no='"&classno&"'" set rs2=cn.execute(sql2) //判断是否有允许选的课程 if rs2.eof then response.write "<font color=red>无</font><br>" else response.write "<table cellspacing=0 cellPadding=0 bordercolor=blue border=1 align=center bordercolorlight=blue bordercolordark=#FFFFFF>" response.write "<tr align=center bgcolor=#cccccc>"_ &"<td>课程编号</td><td>课程名</td><td>学时</td><td>学分</td>"_ &"<td>费用</td><td>开课时间</td><td>截课时间</td><td>操作</td></tr>" do while not rs2.eof response.write "<tr align=center><td>"_ &rs2("lesson_id")&"</td><td>"_ &rs2("lesson_name")&"</td><td>"_ &rs2("period")&"</td><td>"_ &rs2("credit")&"</td><td>"_ &rs2("lesson_fee")&"</td><td>"_ &rs2("start_time")&"</td><td>"_ &rs2("end_time")&"</td>" fy=cint(rs2("lesson_fee")) fy1=su-cint(rs2("lesson_fee")) if fy1<0 then response.write "<td align=center><img src=images\faceno.gif title='资金不足,你无法选择此课程!' align=absmiddle height=25></td></tr>" else //资金足可以选此课,带着数据链接到本程序文件,即回到前面用户提交选课操作的处理 response.write "<td><a href=choicelesson.asp?ch=yy&suplus="_ &fy1&"&lessonfee="&trim(rs2("lesson_fee"))&"&lessonid="_ &rs2("lesson_id")&"><img src=images\faceok.gif"_ &" title='你可以选择此课程!' align=absmiddle height=25></td></tr>" end if rs2.movenext loop response.write "</table></p>" end if //用户已经选过课 else sql1="select b.* from teacher_lesson a,lesson b where a.class_no='"_ &classno&"' and a.lesson_id=b.leson_id and a.lesson_id not in"_ &"(select lesson_id from fstudent_lesson where account_no='"&session("id")&"')" set rs1=cn.execute(sql1) //判断用户是否还有未选的课程 … 5结束语 以上是笔者利用ASP技术开发邮政远程教学系统的选课、退课功能的设计与程序实现。程序实现比较巧妙,实现了页面信息的随时更新,但程序结构稍显复杂,有待于进一步做程序优化工作。 参考文献: [1] 《挑战asp与网页数据库设计》邓文渊,陈惠贞,陈俊华编著 中国铁路出版社(2004) [2] 《ASP动态网页设计》赵增敏编著 电子工业出版社(2003) [3] 《ASP数据库系统开发实例导航》宣小平等编著 人民邮电出版社(2003) |