因胸联盟 发表于 2015-1-16 22:11:18

ASP教程之用ASP开辟一个在线测验体系

对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。在线  本文所先容的使用程序是以ASP编程的初学者为读者的。固然这个例子十分复杂,可是它关于那些试图在线对他们的雇员、先生或客户举行测验的构造长短常有效的。

  关于这个使用程序

  我们的使用程序中的第一个界面包括在index.asp中,由一个注册页构成,个中有两个输出域,一个是用户名,另外一个是口令。非会员要想列入测验的话必需要注册。这一页是初始屏幕,为用户供应用户名和口令的输出框。



  必要注重的是,这两个将要同意的会员域应当有客户机真个JavaScript确认,以便不把它们作为空缺域来传送。
if(theForm.username.value=="")
{
alert("Pleaseenterthe"UserName"");
theForm.username.focus();
return(false);
}
if(theForm.password.value=="")
{
alert("Pleaseenterthe"Password"");
theForm.password.focus();
return(false);
}
  创立这些域的HTML代码以下:
<tableborder="0"cellpadding="0">
<tr>
<tdwidth="50%">
<fontface="Verdana"size="2">UserName:</font>
</td>
<tdwidth="50%">
<fontface="Verdana"size="2"><inputtype=textname=username
size=20maxlength=50></font>
</td>
</tr>
<tr>
<tdwidth="50%">
<fontface="Verdana"size="2">Password:</font>
</td>
<tdwidth="50%">
<fontface="Vedana"size=2><inputtype=passwordname=password
size=20maxlength=50></font>
</td>
</tr>
<tr>
<tdwidth="100%"colspan="2"align="center">
<fontface="Verdana"size="2"><br><inputtype="submit"value="Submit"name="B3">
<inputtype="reset"value="Reset"name="B4">
</font>
</td>
</tr>
</table>
  要注重这个ASP页多几少是一个HTML页面,作为ASP页的缘故原由是要显现毛病信息,比方“毛病的用户名或口令或选择一个新用户名”,大概是必要显现的别的任何信息。注册表单中包括一些团体信息,如姓名、Email、口令等。一样能够从会见者失掉关于岁数、教导水平、职业等方面的信息。一旦乐成的输出了团体信息,会见者就成为一位会员,可使用站点的别的部分了。依据使用程序的计划请求,这些域能够是必需输出的,也能够不是。

  登录代码Register.asp
  当一个新的会见者注册了一个在线测验时就显现这一页。它大概会请求大批的团体信息,可是在本例中只需求姓名、Email和口令。表单提交后,用户被引领至sendregister.asp。
  Sendregister.asp
  这一页从register.asp中获得表单域的内容,将它们拔出数据库中。要注重用户名必需是独一的。以是,起首查询要考证输出的用户名是不是已存在。假如是的话,用户被从头引回register.asp页,并被请求选择另外一个用户名。假如用户名是新的,输出的内容就被传送给数据库。
sql_findmember="selectcount(*)fromloginuserwhereusername="&username&""
SetRS_findmember=Application("Conn").Execute(sql_findmember)
IfRS_findmember(0)0Then
Session("message")="THEENTRYHADBEENINSERTEDEARLIER..Pleasetryanotherloginname"
response.redirect"register.asp"
EndIf
IfRS_findmember(0)=0Then
sql_insert="insertintologinuser(username,useremail,password)_
values("&username&","&useremail&","&pwd&")"
SetRS_insert=Application("Conn").Execute(sql_insert)
Session("message")="THEENTRYHASBEENINSERTED..ThankYou"
response.redirect"index.asp"
EndIf
  如许,假如RS_findmember(0)前往的值是0,就暗示用户名在数据库中不存在,名字就被输出了。会员就能够利用站点的别的部分了。反之,假如RS_findmember(0)前往的值年夜于0,用户就被引诱回注册主页,并被请求填写一个新的用户名。
  还要注重,在向数据库中拔出数据之前有一些事变必要小心。交换函数用来确保当会见者键进了"",就必要用取代。
username=replace(request.form("txt_name"),"","")




  Checkuser.asp
  在使用程序的入手下手,会见者键进了他们的口令以后,他们的细节被指向了一页,如sendregister.asp,来查验一下详细的用户名和口令在数据库中是不是存在。
sql_check="selectcount(*)fromloginuserwhereusername="&_
username&"andpassword="&useremail&""
SetRS_check=Application("Conn").Execute(sql_check)
IfRS_check(0)0Then
Session("username")=request.form("username")
response.redirect"default.asp"
EndIf
IfRS_check(0)=0Then
Session("error")="WRONGUSERNAMEORPASSWORD"
response.redirect"index.asp"
EndIf
  sql命令反省一个特定的用户是不是已注册了。假如前往值为0,就标明用户名或email有效,将用户引诱回注册页。假如是会员,就被引诱到default.asp页。这一次又用到了交换函数,以包管假如会员键进了‘(单引号),就要用(双引号)来交换。
username=replace(request.form("username"),"","")
useremail=replace(request.form("password"),"","")
  选择一个检验Default.asp
  一旦乐成登录,就呈现第二个界面,供应会员能够选择的检验科目标列表。在本例中,我们有HTML和DHTML,固然能够增添表格以进步主题数。Default.asp请求表格安装一个下拉菜单,个中包括主题的列表。查询数据库,从试卷的表格中汇集两个域。
sql_papers="select*id,topicfrompapersortorderbytopicasc"
SETRS_papers=Application("Conn").Execute(sql_papers)
  为了鄙人拉菜单中显现了局,利用以下代码:
SELECTsize=1name=select1>
<optionvalue="0">Selecttheexamination
<%DowhilenotRS_papers.EOF%>
<optionvalue="<%=RS_papers("id")%>"><%=lcase(RS_papers("topic"))%></OPTION>
<%
RS_papers.MoveNext
Loop
%>
  msec函数在X值的基本上挪用redirect.asp,把查询字符串:?x的值作为下拉菜单中被选择的项的值。
functionmsec(x)
{if(x==0)
{alert("PleaseselectanyoneoftheExaminations")
}
else
{location.f="redirect.asp?section="+x
}
}




  Redirect.asp
  这一页将用户送到实践天生标题和选项的ASP页。假如数据库中没有所选择的特定主题的任何标题,就显现毛病信息和前往毗连。
起首:
id=Request.QueryString("section")
挪用查询字符串部分,将值存进变量id中。
然后:
SQL="selecttbl_namefrompaperwhereid="&id
SetRS=Application("Conn").Execute(SQL)
subject=RS(0)
MyString=Split(subject,"tbl",-1,1)
  SQL声明传送试卷表格中的域名table_name。了局存储在subject中。进一步分别变量subject,将其存储在MyString中。Split函数用来在客户端显现检验名,是为了看起来效果更好。
IFRS_subject.BOFANDRS_subject.EOFThen
Response.WriteOnline"&MyString(1)&Testisstilltobelaunched.Comeback_
later<ahref=default.asp>BACK</a>"
Else
Response.Redirect("exam.asp?section="&id)
EndIf
  假如以上查询发生了却果,就暗示会员所选择的科目中有标题,能够举行在线测验。假如特定部分还在创立中,就告知会见者稍后再返来举行测验。这是主考者的特别乐趣,由于会员可以晓得在后面的屏幕高低拉菜单所供应的科目哪些是悬而未决的。如许,假如这个部分有标题和响应的选项,这一页就被从头引诱到exam.asp页,个中包括实在际的标题。
  检验代码
  Exam.asp供应一系列的标题和以单选按钮为格局的选项。为了使检验更具应战性,还要偶然间限定。我设置了一个装载时主动启动的时钟,将当时间设为20秒。残剩的工夫在屏幕底部的形态窗口中显现。工夫要素同标题个数一样能够改动。为了在每次会员想要列入测验时,都从数据库当选择分歧的标题,我利用了随机函数。在数据库中,标题的个数流动为10个,每次会员回覆5个成绩。一切的标题都一同显现出来,然后入手下手计时。以下代码是计时器的函数:
<scriptlanguage="JavaScript">
varck=0;
vartf=0;
vartimeUp=0;
vartimeLeft=0;
vartcount=0;
TimerFunc();
functionTimerFunc(){
tf=window.setTimeout("TimerFunc();",1000);
tcount++;
timeLeft=20-tcount;
window.status=timeLeft+"Secondsremaining";
}
</script>
  要注重,没偶然间限定的检验是没有兴趣的。
这页的查询是如许的:
id=Request.QueryString("section")
session("id")=id
sql_tblname="selecttbl_namefrompaperwhereid="&id
SetRS_tblname=Application("Conn").Execute(sql_tblname)
subject=RS_tblname(0)
MyString=Split(subject,"tbl",-1,1)
  查询字符串存储在一个session("id")中,按按次启动查询。这个SQL声明的目标是从试卷表格中找到表格名。利用split函数的目标是从了局中往失落tbl。(我利用了表格名前加tbl前缀的定名常规)。一旦找到了表格名,就入手下手了向指定表格的查询。为了使使用程序更成心思,我利用了随机函数,天生从1到10之间的恣意数字。这些数字用来从指定的科目表格当选取id:
sql_details="selecta.id,a.question,a.choice1,a.choice2,a.choice3,"&_
"a.choice4from"&subject&"awherea.id="&MyArray(Counter)
  在这个查询中,id,question、choice1、choice2、choice3、choice4都是科目表格中的域名。
MyArray(Counter)是已天生的随机数字。




  检验停止后,了局被存储起来并被增添到数据库的细节表格中。如许会员就可以看到检验的了局了。(在本例中,我只保存了科目标一个纪录和百分制的分数。还能够有一个工夫-日期标记。)
  纪录了局Result.asp
  这一页的次要目标是显现了局,同时将这些了局拔出数据库以备未来参考。
foreachiteminRequest.Form
sql_check="selectCount(*)from"&subject&"whereanswer="&Request.Form(item)&""
SetRS_check=Application("Conn").Execute(sql_check)
ifRS_check(0)>0then
result=result+1
endif
next
  变量result中存储了却果。
  百分数是从result中算出来的,以下所示:
percent=round((100*result)/count)
  要将这个了局存储在数据库中,实行以下查询:
sql_id="selectidfromloginuserwhereusername="&Session("username")&""
SetRS_id=Application("Conn").Execute(sql_id)
id=RS_id(0)
SQL_insert="insertintodetails(ref_id,subject,score)values("&id&","_
&subject&","&percent&")"
SetRS_insert=Application("Conn").Execute(SQL_insert)
  View.asp
  寓目模块反省会员是不是之前已经举行过在线测验。假如是的话,将用户引诱到viewrecord.asp。假如没有的话,显现响应的信息。
sql_id="selectidfromloginuserwhereusername="&Session("username")&""
SetRS_id=Application("Conn").Execute(sql_id)
id=RS_id(0)
sql_count="Selectcount(*)fromdetailswhereref_id="&id&""
SetRS_count=Application("Conn").Execute(sql_count)
IfRS_count(0)0Then
response.redirect"viewrecord.asp"
EndIf
IfRS_count(0)=0Then
Session("noview")="NOONLINEEXAMINATIONSHAVEBEENGIVEN"
response.redirect"default.asp"
EndIf
  Viewrecord.asp
  Viewrecord.asp页使会员可以寓目一些他们的细节信息。查询以下:
sql_details="Select*subject,scorefromdetailswhereref_id="&id&""
SetRS_details=Application("Conn").Execute(sql_details)
了局是用一个复杂的表格格局来显现的。



  请注重,我并未将会员能够举行一个主题的测验次数限定为一次。统一个主题测验能够举行恣意次。
ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不错的选择。

仓酷云 发表于 2015-2-2 22:04:01

下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...

莫相离 发表于 2015-2-8 11:24:16

ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。

分手快乐 发表于 2015-2-25 10:56:15

我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.

飘飘悠悠 发表于 2015-3-7 20:11:10

完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。

海妖 发表于 2015-3-15 13:41:40

学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:

愤怒的大鸟 发表于 2015-3-22 01:31:11

Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
页: [1]
查看完整版本: ASP教程之用ASP开辟一个在线测验体系