ASP是“Active Server Pages”的简写,即“动态服务器网页”,是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言。笔者参与的是邮政远程教学系统项目开发,本系统采用Windows NT4.0 Server,WEB服务采用IIS4.0/5.0,与后台数据库采用ODBC连接,使用ASP技术实现系统的动态页面效果。该系统主要针对邮政职工的在职远程学习、远程技术讨论和交流,并为业务管理提供支撑服务。远程教学网站将开设许多业务课、技术课供学员学习,因此学员可以自由的选择一些课程来学习。下面主要介绍本系统网上选课、退课的流程设计及如何利用ASP技术实现功能。
⑴ 选课、退课功能的实现主要采用了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.