这里我们介绍学校教学网站应用设计,包括联考线上查榜系统、学生成绩线上查询系统、线上学校注册选课系统、研讨会线上报名系统、网路教学系统等应用的点子、设计实例、以及详细解说,让您快速地设计出各种学校教学的网站应用。
学校网站资料库应用 教学上使用网站资料库,可以透过Internet、或Intranet提供以下的应用∶ * 联考线上查榜* * 线上查询成绩单、或出勤状况* * 线上学校注册选课* * 研讨会线上报名* * 网路教学 右上角标示*的应用,本节将提供设计的范例,并详加解说。 执行本章资料库的范例,所用的资料库可为Microsoft Access、Microsoft SQL Server、或Text档案(读者可修改成其他支援ODBC的资料库,详见1-6-5节),须於NT安装IIS 3.0,并於「控制台」中的「ODBC」,新建一个名称为「BookSamp」的资料来源,驱动程式为「Microsoft Access Driver」、「SQL Server」、或「Microsoft Text 驱动程式」。 5-1 联考线上查榜系统 「联考线上查榜系统」,可以透过Internet,提供线上查榜成绩和放榜结果的功能。 放榜时,考生可以透过Internet、或Intranet,连线上学校的「联考线上查榜系统」,输入准考证编号,查询各种考试(譬如联考、研究所、就业考等)放榜的结果,包括成绩、和考取科系等 资讯。 设计实例 让我们执行一个实例。 ( 范例 data1.asp 联考线上查榜 若要查询资料,於用户端使用浏览器,浏览本书所附安装於网站伺服器的data1.asp,於「准考证编号」处输入准考证编号後,譬如输入准考证编号123456,按下「查榜」按钮,即可显示查询的结果如下,包括姓名、总分、考上科系∶ 放榜时,几家欢乐几家愁,也有人落榜的,输入准考证编号123457,显示「没考上」如下∶ 输入错误的准考证编号时,必须告诉人家,譬如输入准考证编号654321,显示「找不到」如下∶
设计实例详细解说 建立资料表 首先使用Microsoft Access、Microsoft SQL Server 、Text档案、或任何一种支援ODBC的资料库,建立一个资料表School。 使用Microsoft Access建立一个资料表School,如下∶
於栏名NAME、ID、SCORE、RESULT分别输入姓名、准考证编号、总分、考上科系,考上科系若为落榜时,输入「X」。 或使用Microsoft SQL Server建立一个资料表School,如下∶
或使用Text档案建立一个资料表School,如下∶
设计输入表单 接著,设计输入表单form,以让考生输入准考证编号ID1,按下「查榜」按钮submit时,即使用POST的方式将输入资料传送到网站伺服器,并执行於「form action=...」所设定的data1.asp档 案(与form为同一个ASP档案),程式码如下∶ <form action="data1.asp" method="post"> 准考证编号: <INPUT TYPE=TEXT VALUE="123456" NAME=ID1 SIZE=10>
<INPUT TYPE=submit VALUE="查榜" name="Action"> </form> 网站伺服器执行data1.asp档案,首先经由Request.Form("ID1")取得考生所输入的准考证编号ID1,若ID1非空白时,表示为表单输入所呼叫执行。 查询资料库 使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库 BookSamp。 再使用SELECT的SQL指令查询资料库的资料,设定SQL指令,查询为ID符合准考证编号Request.Form("ID1")的资料,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。 程式码如下∶ <% IF Request.Form("ID1") THEN Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT NAME,ID,SCORE,RESULT FROM School WHERE ID='" & Request.Form("ID1") & "'" Set RS = Conn.Execute(SQL) %> <HR> 查榜结果:<br> 接著,要显示查询的结果了。 首先,由「 IF RS.EOF THEN ...」判断是否找到ID为准考证编号Request.Form("ID1")的资料,若RS.EOF为TRUE,则显示「找不到此准考证编号」。 若RS.EOF为FALSE表示有找到符合查询条件的资料,由「IF RS(3)="X" THEN...」判断第四个栏位(栏位编号由0算起)是否为「X」(表示落榜)。若落榜( RS(3)="X"),则显示「报歉 <%=RS(0) %>, 没考上!」,RS(0)为第一个栏位代表考生的姓名。 程式码,如下∶ 查榜结果:<br> <% IF RS.EOF THEN %> <FONT COLOR="#FF0000">找不到此准考证编号 <% =Request.Form("ID1") %> !</FONT> <% ELSE %> <% IF TRIM(RS(3))="X" THEN %> 准考证编号 <% =Request.Form("ID1") %> <BR> <FONT COLOR="#FF0000">报歉 <% =RS(0) %>, 没考上!</FONT> 若考上,则显示考上的结果,包括姓名、准考证编号、总分、考上科系,分别由RecordSets物件的RS(0)、RS(1) 、RS(2)、RS(3) 取得。 RS.Fields.Count表示RecordSets物件的栏位数,由「For i = 0 to RS.Fields.Count - 1」取得RS(i) 各栏位的资料。配合<TABLE>表格的HTML语法,将结果填入表格的各栏位当中。 若还有下一笔资料,使用RS.MoveNext移到下一笔的位置。 程式码,如下∶ <% ELSE %> <FONT COLOR="#0000FF"> 准考证编号 <% =Request.Form("ID1") %> <BR> <% =RS(0) %>, 恭喜您考上 <% =RS(3) %> !<BR> </FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1> <TR> <TD BGCOLOR="#800000"><FONT>姓名</FONT></TD> <TD BGCOLOR="#800000"><FONT>准考证编号</FONT></TD> <TD BGCOLOR="#800000"><FONT>总分</FONT></TD> <TD BGCOLOR="#800000"><FONT>考上科系</FONT></TD> </TR> <% Do While Not RS.EOF %> <TR> <% For i = 0 to RS.Fields.Count - 1 %> <TD BGCOLOR="f7efde" VALIGN=TOP><FONT COLOR="#0000"><% = RS(i) %></FONT></TD> <% Next %> </TR> <% RS.MoveNext Loop RS.Close Conn.Close %> </TABLE> <% END IF %> <% END IF %> <HR> <% END IF %> 最後,使用RS.Close关闭RecordSet,使用Conn.Close关闭资料库。 全部的程式码,如下∶ <HTML> <HEAD> <TITLE>联考线上查榜系统</TITLE> <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=big5"> </HEAD> <CENTER> <BODY BGCOLOR=#FFFFFF> <FONT SIZE=+2 COLOR="#0000FF">联考线上查榜系统</FONT> <% IF Request.Form("ID1") THEN Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT NAME,ID,SCORE,RESULT FROM School WHERE ID='" & Request.Form("ID1") & "'" Set RS = Conn.Execute(SQL) %> <HR> 查榜结果:<br> <% IF RS.EOF THEN %> <FONT COLOR="#FF0000">找不到此准考证编号 <% =Request.Form("ID1") %> !</FONT> <% ELSE %> <% IF TRIM(RS(3))="X" THEN %> 准考证编号 <% =Request.Form("ID1") %> <BR> <FONT COLOR="#FF0000">报歉 <% =RS(0) %>, 没考上!</FONT> <% ELSE %> <FONT COLOR="#0000FF"> 准考证编号 <% =Request.Form("ID1") %> <BR> <% =RS(0) %>, 恭喜您考上 <% =RS(3) %> !<BR> </FONT> <TABLE COLSPAN=8 CELLPADDING=5 BORDER=1> <TR> <TD BGCOLOR="#800000"><FONT>姓名</FONT></TD> <TD BGCOLOR="#800000"><FONT>准考证编号</FONT></TD> <TD BGCOLOR="#800000"><FONT>总分</FONT></TD> <TD BGCOLOR="#800000"><FONT>考上科系</FONT></TD> </TR> <% Do While Not RS.EOF %> <TR> <% For i = 0 to RS.Fields.Count - 1 %> <TD BGCOLOR="f7efde" VALIGN=TOP><FONT COLOR="#0000"><% = RS(i) %></FONT></TD> <% Next %> </TR> <% RS.MoveNext Loop RS.Close Conn.Close %> </TABLE> <% END IF %> <% END IF %> <HR> <% END IF %> <BR> <form action="data1.asp" method="post"> 准考证编号: <INPUT TYPE=TEXT VALUE="123456" NAME=ID1 SIZE=10> <INPUT TYPE=submit VALUE="查榜" name="Action"> </form> <HR> </CENTER> </BODY> </HTML> 学会了吗?
5-2 学生成绩线上查询系统 「学生成绩线上查询系统」,可以透过Internet,提供查询成绩、出勤状况的功能。 家长或学生,可以透过Internet,连线上学校的「学生成绩线上查询系统」,输入学号,查询成绩单、名次。 也可以加上出勤状况的线上查询功能。若学生没有来上课,可自动发E-Mail通知家长。家长可以线上查询家庭作业,以及老师对其子女的建议。家长也可线上留言给老师一些教学上、管教上的建议。 设计实例 让我们执行一个实例。 ( 范例 data4.asp 学生成绩线上查询 若要查询资料,於用户端使用浏览器,浏览本书所附安装於网站伺服器的data4.asp,於「学号」处输入学号,譬如输入学号123456後,按下「成绩查榜」按钮,即可显示查询的结果如下,包括姓名、各科成绩、总分∶ 输入错误的学号时,必须告诉人家找不到,譬如输入学号123123,显示「找不到」如下∶ 设计实例详细解说 建立资料表 首先使用Microsoft Access、Microsoft SQL Server 、Text档案、或任何一种支援ODBC的资料库,建立一个资料表Student。 於栏名NAME、ID、SCORE1~5分别输入姓名、学号、各科成绩。 使用Microsoft Access建立一个资料表Student,如下∶ 或使用Microsoft SQL Server建立一个资料表Student,如下∶ 或使用Text档案建立一个资料表Student,如下∶ 设计输入表单 接著,设计输入表单form,以让查询者输入学号ID1,按下「成绩查询」按钮submit时,即使用POST的方式将输入资料传送到网站伺服器,并执行於「form action=...」所设定的data4.asp档案(与form为同一个ASP档案), 程式码如下∶ <form action="data4.asp" method="post"> 学号: <INPUT TYPE=TEXT VALUE="123456" NAME=ID1 SIZE=10> <INPUT TYPE=submit VALUE="成绩查询" name="Action"> </form> 网站伺服器执行data4.asp档案,首先经由Request.Form("ID1")取得查询者所输入的学号ID1,若ID1非空白时,表示为表单输入所呼叫执行。 查询资料库 使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库BookSamp。 再使用SELECT的SQL指令查询资料库的资料,设定SQL指令,查询为ID符合学号 Request.Form("ID1")的资料,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。 程式码如下∶ <% IF Request.Form("ID1") THEN Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT ID,NAME,SCORE1,SCORE2,SCORE3,SCORE4,SCORE5 FROM Student WHERE ID='" & Request.Form("ID1") & "'" Set RS = Conn.Execute(SQL) %> <HR> 查询结果:<br> 接著,要显示查询的结果了。 首先,由「 IF RS.EOF THEN ...」判断是否找到ID为学号Request.Form("ID1")的资料,若 RS.EOF为TRUE,则显示「找不到此学号」。 程式码,如下∶ 查询结果:<br> <% IF RS.EOF THEN %> <FONT COLOR="#FF0000">找不到此学号 <% =Request.Form("ID1") %> !</FONT> 若找到ID为学号Request.Form("ID1")的资料,则显示查询结果,包括姓名、各科成绩,分别由RecordSets物件的RS(0)、RS(1)、RS(2)~RS(6) 取得。 总分的计算,由「If Left(RS(i).Name,5) = "SCORE" Then...」判断是否以SCORE为起头的栏位,若是则由「 total = total + RS(i) 」将各科成绩加总起来。RS.Fields.Count表示RecordSets物件的栏位数,由「For i = 0 to RS.Fields.Count - 1」取得RS(i) 各栏位的资料。配合<TABLE>表格的HTML语法,将结果填入表格的各栏位当中。 若还有下一笔资料,使用RS.MoveNext移到下一笔的位置。 程式码,如下∶ <% ELSE %> <FONT COLOR="#0000FF"> 学号 <% =Request.Form("ID1") %> <BR> <% =RS(1) %>, 成绩为下表:<BR> </FONT> <TABLE COLSPAN=8 CELLPADDING=5 BORDER=1> <TR> <TD BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD BGCOLOR="#800000"><FONT>姓名</FONT></TD> <TD BGCOLOR="#800000"><FONT>数学</FONT></TD> <TD BGCOLOR="#800000"><FONT>英文</FONT></TD> <TD BGCOLOR="#800000"><FONT>国文</FONT></TD> <TD BGCOLOR="#800000"><FONT>自然</FONT></TD> <TD BGCOLOR="#800000"><FONT>社会</FONT></TD> <TD BGCOLOR="#800000"><FONT>总分</FONT></TD> </TR> <% Do While Not RS.EOF %> <TR> <% total = 0 For i = 0 to RS.Fields.Count - 1 If Left(RS(i).Name,5) = "SCORE" Then total = total + RS(i) End If %> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% = RS(i) %></FONT></TD> <% Next %> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% = total %></FONT></TD> </TR> <% RS.MoveNext Loop RS.Close Conn.Close %> </TABLE> <% END IF %> 最後,使用RS.Close关闭RecordSet,使用Conn.Close关闭资料库。 全部的程式码,如下∶ <HTML> <HEAD> <TITLE>学生成绩线上查询系统</TITLE> <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=big5"> </HEAD> <CENTER> <BODY BGCOLOR=#FFFFFF> <FONT SIZE=+2 COLOR="#0000FF">学生成绩线上查询系统</FONT> <% IF Request.Form("ID1") THEN Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT ID,NAME,SCORE1,SCORE2,SCORE3,SCORE4,SCORE5 FROM Student WHERE ID='" & Request.Form("ID1") & "'" Set RS = Conn.Execute(SQL) %> <HR> 查询结果:<br> <% IF RS.EOF THEN %> <FONT COLOR="#FF0000">找不到此学号 <% =Request.Form("ID1") %> !</FONT> <% ELSE %> <FONT COLOR="#0000FF"> 学号 <% =Request.Form("ID1") %> <BR> <% =RS(1) %>, 成绩为下表:<BR> </FONT> <TABLE COLSPAN=8 CELLPADDING=5 BORDER=1> <TR> <TD BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD BGCOLOR="#800000"><FONT>姓名</FONT></TD> <TD BGCOLOR="#800000"><FONT>数学</FONT></TD> <TD BGCOLOR="#800000"><FONT>英文</FONT></TD> <TD BGCOLOR="#800000"><FONT>国文</FONT></TD> <TD BGCOLOR="#800000"><FONT>自然</FONT></TD> <TD BGCOLOR="#800000"><FONT>社会</FONT></TD> <TD BGCOLOR="#800000"><FONT>总分</FONT></TD> </TR> <% Do While Not RS.EOF %> <TR> <% total = 0 For i = 0 to RS.Fields.Count - 1 If Left(RS(i).Name,5) = "SCORE" Then total = total + RS(i) End If %> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% = RS(i) %></FONT></TD> <% Next %> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% = total %></FONT></TD> </TR> <% RS.MoveNext Loop RS.Close Conn.Close %> </TABLE> <% END IF %> <HR> <% END IF %> <BR> <form action="data4.asp" method="post"> 学号: <INPUT TYPE=TEXT VALUE="123456" NAME=ID1 SIZE=10> <INPUT TYPE=submit VALUE="成绩查询" name="Action"> </form> <HR> </CENTER> </BODY> </HTML> 5-3 线上学校注册选课系统 「线上学校注册选课系统」,可以透过Internet、或Intranet,提供选修课程、完成注册手续的功能。 学生可以透过Internet、或Intranet,连线上学校的「线上学校注册选课系统」,输入其学号、要选修的课程後,完成注册手续。 选课系统将自动统计每一个选修课程的报名人数,若超过名额,将自动告之,要求学生选修其他的课程。 选修课程时,选课系统提供可以增加、取消、查询选修课程的功能。 学生可以线上查询各选修课程的授课内容简介。 完成注册後,课程时刻表将自动汇集於萤幕上显示、或发E-Mail通知学生。 学费可由信用卡、划拨、或银行转帐来支付。 设计实例 让我们执行一个实例。 ( 范例 data15.asp 线上学校注册选课 若要线上学校注册选课,於用户端使用浏览器,浏览本书所附安装於网站伺服器的data15.asp, 於「选修课程」处选择选修课程如婚姻学,於「学号」处输入学号如123456後,按下「选课」按钮,即可显示选课的结果如下,包括学号、选修课程、选课顺序∶ 选修课程时,若选修的课程已经选过,则重覆选修相同的课程,将显示「已经选过课」如下∶
选修课程时,若超过选修课程的50个名额时,则显示「名额已满」如下∶ 取消选课 选修课程後,可以取消所选修的课程,於「选修课程」处选择待取消选修课程如婚姻学,於「学号」处输入学号如123456後,按下「取消选课」按钮,即可显示取消选课的结果如下∶ 若待取消的课程尚未选过,则取消选课时将显示「找不到」如下∶ 查询选课 选修课程後,可以查询所有选修的课程,仅须於「学号」处输入学号如123456後,按下「查询选课」按钮,即可显示查询选课的结果如下∶ 查询选课时,若尚未选课,则查询选课时将显示「找不到」如下∶
设计实例详细解说 建立资料表 首先使用Microsoft Access、Microsoft SQL Server 、Text档案、或任何一种支援ODBC的资料库,建立一个资料表ClassCount,储存选课人数、和最後选课顺序。 这个资料表系供选课和取消选课时,记录选课人数、和最後选课顺序号码之用。 建立栏位TOTAL、COUNT0、CLASS,分别代表一个选课记录的选课人数、最後选课顺序号码、选修 课程名称。 建立资料表时不必输入资料。 使用Microsoft Access建立一个资料表ClassCount,如下∶ 或使用Microsoft SQL Server建立一个资料表ClassCount,如下∶ 或使用Text档案建立一个资料表ClassCount,如下∶ 尚需要建立另一个资料表ClassReg,储存选课的记录,建立栏位ID、COUNT0、CLASS,分别代表一笔选修课程的学号、选课顺序号码、选修课程名称。这个资料表系供选课、查询选课、和取消选课时,记录所选修课程、和选课顺序号码之用。建立资料表时不必输入资料。 使用Microsoft Access建立一个资料表ClassReg,如下∶ 或使用Microsoft SQL Server建立一个资料表ClassReg,如下∶ 或使用Text档案建立一个资料表ClassReg,如下∶ 设计输入的表单 接著,设计输入的表单form,当学生选择选修课程CLASS1,输入学号ID1,按下「查榜」按钮submit时,即使用POST的方式将输入资料传送到网站伺服器,并执行於「form action=...」所设定的data15.asp档案(与form为同一个ASP档案),程式码如下∶ 线上学校选课, 请输入以下资料:<br> <form action="data15.asp" method="post"> <FONT COLOR="#FF8080">■ </FONT>选修课程: <select name="CLASS1"> <OPTION SELECTED>微电脑 <OPTION>热传学 <OPTION>电子学 <OPTION>半导体 <OPTION>记忆体 <OPTION>网路学 <OPTION>婚姻学 <OPTION>家政学 </select> <br> <FONT COLOR="#FF8080">■ </FONT>学号 (如123456): <INPUT TYPE=TEXT VALUE="123456" NAME="ID1" SIZE=10><BR> <INPUT TYPE=submit VALUE="选课" name="Action"> <INPUT TYPE=submit VALUE="取消选课" name="Action"><br> <INPUT TYPE=submit VALUE="查询选课" name="Action"> 仅须填入学号<br> </form> 网站伺服器执行data15.asp档案,首先经由Request.Form("Action")取得所按submit按钮上的显示文字VALUE,Left(Request.Form("Action"),2)系只取前两个中文字,若Request.Form("Action")非空白时,表示为表单输入所呼叫执行。 由「SELECT CASE Left(Request.Form("Action"),2) 」判断是按了那个按钮。若按钮上前两个字为「选课」时,则执行AddReg() 副程式;若为「取消」时,则执行DeleteReg() 副程式;若 为「查询」时,则执行CheckReg() 副程式。 <% SELECT CASE Left(Request.Form("Action"),2) CASE "选课" AddReg() CASE "取消" DeleteReg() CASE "查询" CheckReg() END SELECT %> 选课 按了「选课」按钮时,将执行AddReg() 副程式。 首先,使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库BookSamp。 再寻找所待新增的选课记录,以检查是否已经选过课,使用SELECT的SQL指令查询资料库的资料,於ClassReg资料表,设定SQL指令,查询为栏位ID符合所输入学号Request.Form("ID1"),和栏位CLASS符合所选择选修课程Request.Form("CLASS1")的资料,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。 程式码如下∶ Sub AddReg() Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT * FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) %> 接著,要显示执行的结果了。 首先於ClassReg资料表,寻找选课的记录,由「IF RS.EOF THEN ...」判断是否找到栏位ID符合所输入学号ID1,和栏位CLASS符合所选择选修课程CLASS1的资料。 若RS.EOF为TRUE,表示此选修课程尚未选课,再寻找所待选修的课程是否已经有人选过课。於ClassCount资料表,设定SQL指令,查询为CLASS符合所选择选修课程Request.Form("CLASS1")的资料。若RS.EOF为TRUE,表示此选修课程尚未有人选课,则於ClassCount资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的选课人数TOTAL、和最後选课顺序号码COUNT0都设定为1,选修课程名称CLASS设定为Request.Form("CLASS1")。 然後再於ClassReg资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的选课顺序号码COUNT0设定为1,学号ID为Request.Form("ID1"),选修课程名称CLASS为Request.Form("CLASS1")。 显示执行的结果时,配合<TABLE>表格的HTML语法,将结果填入表格的各栏位当中。 程式码,如下∶ IF RS.EOF THEN RS.Close SQL = "SELECT * FROM ClassCount WHERE CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) IF RS.EOF THEN '此科次尚未有人选课 ! 於ClassCount新增一笔 SQL = "INSERT INTO ClassCount(COUNT0, TOTAL, CLASS) VALUES(1,1,'" & LEFT(Request.Form("CLASS1"),3) & "')" Set RS = Conn.Execute(SQL) 'ClassReg新增一笔 SQL = "INSERT INTO ClassReg(COUNT0, ID, CLASS) VALUES(1,'" & Request.Form("ID1") & "','" & LEFT(Request.Form("CLASS1"),3) & "')" Set RS = Conn.Execute(SQL) %> <FONT COLOR="#0000FF">选课 OK ! 选课顺序为第 1 号</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选课顺序</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %> </FONT> </TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"> <%=LEFT(Request.Form("CLASS1"),3) %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000">1</FONT></TD> </TR> </TABLE> 若找到ID符合所输入学号ID1,和CLASS符合所选择选修课程CLASS1的资料,即RS.EOF为FALSE,表示此课程已有人选课。 由「IF RS(0) < 50 THEN...」判断RS(0) 选课人数TOTAL是否超过50个名额。 若未超过,则於ClassCount资料表,使用「UPDATE...」指令,将此笔资料的选课人数TOTAL、和最後选课顺序号码COUNT0都加一。 然後,再於ClassReg资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的学号ID为Request.Form("ID1") ,选课顺序号码COUNT0为ClassCount资料表的加一後之COUNT0新值,选修课程名称CLASS为Request.Form("CLASS1")。 接著,显示执行的结果时,配合<TABLE>表格的HTML语法,将於ClassReg资料表新增的资料,填入表格的各栏位当中显示出来。 程式码,如下∶ <% ELSE IF RS(0) < 50 THEN '此课程已有人选课 ! ClassCount的COUNT,TOTAL增一 TotalNo = RS(0)+1 CountNo = RS(1)+1 SQL = "UPDATE ClassCount SET TOTAL = " & TotalNo & ",COUNT0 = " & CountNo & " WHERE CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) 'ClassReg新增一笔 SQL = "INSERT INTO ClassReg(COUNT0, ID, CLASS) VALUES(" & CountNo & ",'" & Request.Form("ID1") & "','" & LEFT(Request.Form("CLASS1"),3) & "')" Set RS = Conn.Execute(SQL) %> <FONT COLOR="#0000FF">选课 OK ! 选课顺序为第 <% =CountNo %> 号</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选课顺序</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =CountNo %></FONT></TD> </TR> </TABLE> 若此课程的选课人数TOTAL超过50个名额,则显示「本选修课程名额已满 ! 请选修其他课程 !」。接著,显示执行的结果,配合<TABLE>表格的HTML语法,将学号和选修课程的资料,填入表格的各栏位当中显示出来。程式码,如下∶ <% ELSE %> <% '50名额已满 %> <FONT COLOR="#FF0000">报歉 !</FONT><br> <FONT COLOR="#FF0000">本选修课程名额已满 ! 请选修其他课程 !</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> </TR> </TABLE> <% END IF %> <% END IF %> 当於ClassReg资料表,由「IF RS.EOF THEN ...」判断是否找到ID符合所输入学号ID1,和CLASS符合所选择选修课程CLASS1的资料时,若RS.EOF为FALSE,表示此选修课程已经选课,则显示「报歉! 已经选过课! 选课顺序为第...号」。接著,显示执行的结果,配合<TABLE>表格的HTML语法,将学号、选修课程、和选课顺序的资料,填入表格的各栏位当中显示出来。 程式码,如下∶ <% ELSE %> <% '已经选修 %> <FONT COLOR="#FF0000">报歉 !</FONT><br> <FONT COLOR="#FF0000">已经选过课 !</FONT> 选课顺序为第 <% =RS(1) %> 号</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选课顺序</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =RS(1) %></FONT></TD> </TR> </TABLE> <% END IF Conn.Close End Sub %> 最後,使用Conn.Close关闭资料库。 取消选课 按了「取消选课」按钮时,将执行DeleteReg() 副程式。 首先,先寻找到所待取消的选课记录,使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库BookSamp。 再使用SELECT的SQL指令查询资料库的资料,於ClassReg资料表,设定SQL指令,查询为ID符合所输入学号Request.Form("ID1"),和CLASS符合所选择选修课程Request.Form("CLASS1")的资料,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。 由「IF RS.EOF THEN ...」判断是否找到所待取消的选课记录,若RS.EOF为TRUE,表示此选修课程尚未选课,则显示「找不到 ! 尚未选课 !」。 程式码如下∶ <% Sub DeleteReg() Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) %>
<HR> <FONT COLOR="#0000FF">取消选课结果:</FONT><br> <% IF RS.EOF THEN '找不到 ! 尚未选课 ! %> <FONT COLOR="#FF0000">找不到 ! 尚未选课 !</FONT> 若找到所待取消的选课记录,则於ClassReg资料表,使用「DELETE FROM...」指令删除此笔资料。 然後,再於ClassCount资料表,使用「UPDATE...」指令,将此笔课程的选课人数TOTAL减一。 接著,显示执行的结果,配合<TABLE>表格的HTML语法,将於ClassReg资料表删除的资料,填入表格的各栏位当中,以显示出来。 程式码,如下∶ <% ELSE '取消选课 ! 'ClassReg删除一笔 SQL = "DELETE FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL)
'ClassCount的TOTAL减一 'RS.Close SQL = "SELECT * FROM ClassCount WHERE CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) IF RS.EOF THEN %> <FONT COLOR="#FF0000">找不到选课资料 !</FONT> <%
ELSE TotalNo = RS(0)-1
SQL = "UPDATE ClassCount SET TOTAL = " & TotalNo & " WHERE CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'"
Set RS = Conn.Execute(SQL) %> <FONT COLOR="#FF0000">选课已经取消 !</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> </TR> </TABLE> <% END IF END IF Conn.Close End Sub %> 最後,使用Conn.Close关闭资料库。 查询选课 按了「查询选课」按钮时,执行CheckReg() 副程式。 首先,先寻找到所待查询的选课记录,使用「Server.CreateObject」建立连线的物件,并使用 「Open」开启待存取查询资料库BookSamp。 再使用SELECT的SQL指令查询资料库的资料,於ClassReg资料表,设定SQL指令,查询为ID符合所 输入学号Request.Form("ID1")的资料,下个「Execute」指令,即可开始执行存取查询资料库的 动作,并将查询结果储存到RecordSets物件RS。 由「IF RS.EOF THEN ...」判断是否找到所待查询学号的所有选课记录,若RS.EOF为TRUE,表示 此学号的学生尚未选课,则显示「找不到 ! 尚未选课 !」。 程式码如下∶ <% Sub CheckReg() Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa",""
SQL = "SELECT ID,CLASS,COUNT0 FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "'"
Set RS = Conn.Execute(SQL) %> <HR> <FONT COLOR="#0000FF">查询选课结果:</FONT><br>
<% IF RS.EOF THEN '找不到 ! 尚未选课 ! %> <FONT COLOR="#FF0000">找不到 ! 尚未选课 !</FONT> 若找到ID为学号Request.Form("ID1")的资料,则显示查询的结果,包括学号、选修课程、选课 顺序,分别由RecordSets物件的RS(0)、RS(1)、RS(2)取得。 RS.Fields.Count表示RecordSets物件的栏位数,由「For i = 0 to RS.Fields.Count - 1」取 得RS(i) 各栏位的资料。配合<TABLE>表格的HTML语法,将结果填入表格的各栏位当中。 若还有下一笔资料,使用RS.MoveNext移到下一笔的位置。 程式码,如下∶ <% ELSE %> <% '有选课 ! %> <FONT COLOR="#0000ff">选课如下:</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选课顺序</FONT></TD> </TR>
<% j = 1 %> <% Do While Not RS.EOF %>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %> <% If INT(j/2)*2 <> j Then %> <TD BGCOLOR="E8FFFF" ALIGN=CENTER> <FONT COLOR="#000000"><%= RS(i) %></FONT></TD>
<% Else %> <TD ALIGN=CENTER BGCOLOR="#C0FFFF"> <FONT COLOR="#000000"><%= RS(i) %></FONT></TD> <% END IF %>
<% Next %> </TR> <% RS.MoveNext j = j + 1 Loop %> </TABLE>
<% END IF RS.Close Conn.Close End Sub %> 最後,使用RS.Close关闭RecordSet,使用Conn.Close关闭资料库。 全部的程式码,如下∶ <HTML> <HEAD> <TITLE>线上学校注册选课系统</TITLE> <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=big5"> </HEAD>
<BODY BGCOLOR=#FFFFFF> <FONT SIZE=+2 COLOR="#0000FF">线上学校注册选课系统</FONT> <% SELECT CASE Left(Request.Form("Action"),2)
CASE "选课" AddReg()
CASE "取消" DeleteReg()
CASE "查询" CheckReg()
END SELECT
Sub AddReg() Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT * FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) %>
<HR> <FONT COLOR="#0000FF">选课结果:</FONT><br>
<% IF RS.EOF THEN RS.Close SQL = "SELECT * FROM ClassCount WHERE CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) IF RS.EOF THEN '此科次尚未有人选课 ! 於ClassCount新增一笔 SQL = "INSERT INTO ClassCount(COUNT0, TOTAL, CLASS) VALUES(1,1,'" & LEFT(Request.Form("CLASS1"),3) & "')" Set RS = Conn.Execute(SQL)
'ClassReg新增一笔 SQL = "INSERT INTO ClassReg(COUNT0, ID, CLASS) VALUES(1,'" & Request.Form("ID1") & "','" & LEFT(Request.Form("CLASS1"),3) & "')" Set RS = Conn.Execute(SQL) %> <FONT COLOR="#0000FF">选课 OK ! 选课顺序为第 1 号</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选课顺序</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000">1</FONT></TD> </TR> </TABLE>
<% ELSE IF RS(0) < 50 THEN '此课程已有人选课 ! ClassCount的COUNT0,TOTAL增一 TotalNo = RS(0)+1 CountNo = RS(1)+1 SQL = "UPDATE ClassCount SET TOTAL = " & TotalNo & ",COUNT0 = " & CountNo & " WHERE CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL)
'ClassReg新增一笔 SQL = "INSERT INTO ClassReg(COUNT0, ID, CLASS) VALUES(" & CountNo & ",'" & Request.Form("ID1") & "','" & LEFT(Request.Form("CLASS1"),3) & "')" Set RS = Conn.Execute(SQL) %> <FONT COLOR="#0000FF">选课 OK ! 选课顺序为第 <% =CountNo %> 号</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选课顺序</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =CountNo %></FONT></TD> </TR> </TABLE>
<% ELSE %> <% '50名额已满 %> <FONT COLOR="#FF0000">报歉 !</FONT><br> <FONT COLOR="#FF0000">本选修课程名额已满 ! 请选修其他课程 !</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> </TR> </TABLE> <% END IF %>
<% END IF %>
<% ELSE %> <% '已经选修 %> <FONT COLOR="#FF0000">报歉 !</FONT><br> <FONT COLOR="#FF0000">已经选过课 !</FONT> 选课顺序为第 <% =RS(1) %> 号</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选课顺序</FONT></TD> </TR>
<TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =RS(1) %></FONT></TD> </TR> </TABLE> <% END IF Conn.Close End Sub %>
<% Sub DeleteReg() Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT * FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) %> <HR> <FONT COLOR="#0000FF">取消选课结果:</FONT><br> <% IF RS.EOF THEN '找不到 ! 尚未选课 ! %> <FONT COLOR="#FF0000">找不到 ! 尚未选课 !</FONT> <% ELSE '取消选课 ! 'ClassReg删除一笔 SQL = "DELETE FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL)
'ClassCount的TOTAL减一 'RS.Close SQL = "SELECT * FROM ClassCount WHERE CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) IF RS.EOF THEN %> <FONT COLOR="#FF0000">找不到选课资料 !</FONT> <%
ELSE TotalNo = RS(0)-1 SQL = "UPDATE ClassCount SET TOTAL = " & TotalNo & " WHERE CLASS = '" & LEFT(Request.Form("CLASS1"),3) & "'" Set RS = Conn.Execute(SQL) %>
<FONT COLOR="#FF0000">选课已经取消 !</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),3) %></FONT></TD> </TR> </TABLE> <% END IF END IF Conn.Close End Sub %>
<% Sub CheckReg() Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT ID,CLASS,COUNT0 FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "'" Set RS = Conn.Execute(SQL) %> <HR> <FONT COLOR="#0000FF">查询选课结果:</FONT><br> <% IF RS.EOF THEN '找不到 ! 尚未选课 ! %>
<FONT COLOR="#FF0000">找不到 ! 尚未选课 !</FONT> <% ELSE %>
<% '有选课 ! %> <FONT COLOR="#0000ff">选课如下:</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>学号</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选修课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>选课顺序</FONT></TD> </TR> <% j = 1 %> <% Do While Not RS.EOF %> <TR> <% For i = 0 to RS.Fields.Count - 1 %> <% If INT(j/2)*2 <> j Then %> <TD BGCOLOR="E8FFFF" ALIGN=CENTER> <FONT COLOR="#000000"><%= RS(i) %></FONT></TD> <% Else %> <TD ALIGN=CENTER BGCOLOR="#C0FFFF"> <FONT COLOR="#000000"><%= RS(i) %></FONT></TD> <% END IF %> <% Next %> </TR>
<% RS.MoveNext j = j + 1 Loop %> </TABLE>
<% END IF RS.Close Conn.Close End Sub %>
<HR> 线上学校选课, 请输入以下资料:<br> <form action="data15.asp" method="post"> <FONT COLOR="#FF8080">■ </FONT>选修课程: <select name="CLASS1"> <OPTION SELECTED>微电脑 <OPTION>热传学 <OPTION>电子学 <OPTION>半导体 <OPTION>记忆体 <OPTION>网路学 <OPTION>婚姻学 <OPTION>家政学 </select> <br>
<FONT COLOR="#FF8080">■ </FONT>学号 (如123456): <INPUT TYPE=TEXT VALUE="123456" NAME="ID1" SIZE=10><BR> <INPUT TYPE=submit VALUE="选课" name="Action"> <INPUT TYPE=submit VALUE="取消选课" name="Action"><br> <INPUT TYPE=submit VALUE="查询选课" name="Action"> 仅须填入学号<br> </form>
<HR>
</BODY> </HTML> 学会了吗?
5-4 研讨会线上报名系统 「研讨会线上报名系统」,可以透过Internet,提供线上报名研讨会的功能。想要参加研讨会的学生,可以透过Internet,连线上「研讨会线上报名系统」,输入其身分证号码、要报名的研讨会课程後,即可完成报名手续。报名系统将自动统计每一个研讨会课程的报名人数,若超过名额,将自动告之,要求报名其他的课程。 报名研讨会时,报名系统提供可以增加、取消、查询报名课程的功能。 学生可以线上查询各研讨会课程的授课内容简介。 学费可由信用卡、划拨、或银行转帐来支付。 设计实例 让我们执行一个实例。 ( 范例 data16.asp 研讨会线上报名 若要线上报名研讨会,於用户端使用浏览器,浏览本书所附安装於网站伺服器的data16.asp,於「参加研讨会课程」处选择课程如Windows NT,於「身份证号码」处输入身份证号码如A123456789後,按下「报名」按钮,即可显示报名的结果如下,包括身份证号码、课程、和报名顺序∶ 报名研讨会时,若课程已经报名过,则重覆报名相同的课程时将显示「已经报名」如下∶ 报名研讨会时,若超过研讨会课程的50个名额时,将显示「名额已满」如下∶ 取消报名 报名研讨会後,可以取消所报名的课程,於「研讨会课程」处选择待取消的课程如Windows NT,於「身份证号码」处输入身份证号码如A123456789後,按下「取消报名」按钮,即可显示取消报名的结果如下∶ 若待取消的课程尚未报名过,则取消报名时将显示「找不到」如下∶ 查询报名 报名研讨会後,可以查询所有报名的课程,仅须於「身份证号码」处输入身份证号码如A123456789後,按下「查询报名」按钮,即可显示所有报名的课程如下∶ 查询报名时,若尚未报名,则查询报名时将显示「找不到」如下∶
设计实例详细解说 建立资料表 首先使用Microsoft Access、Microsoft SQL Server 、Text档案、或任何一种支援ODBC的资料库,建立一个资料表ClassCount,储存报名人数、和最後报名顺序。 这个资料表系供报名和取消报名时,记录报名人数、和最後报名顺序号码之用。建立栏位TOTAL、COUNT0、CLASS,分别代表一个研讨会课程的报名人数、最後报名顺序号码、研讨会课程名称。建立资料表时不必输入资料。 使用Microsoft Access建立一个资料表ClassCount,如下∶ 或使用Microsoft SQL Server建立一个资料表ClassCount,如下∶ 或使用Text档案建立一个资料表ClassCount,如下∶ 尚需要建立另一个资料表ClassReg,储存报名的记录,建立栏位ID、COUNT0、CLASS,分别代表一笔报名记录的报名者身份证号码、报名顺序号码、报名课程名称。这个资料表系供报名、查询报名、和取消报名时,记录所报名课程、和报名顺序号码之用。建立资料表时不必输入资料。 使用Microsoft Access建立一个资料表ClassReg,如下∶ 或使用Microsoft SQL Server建立一个资料表ClassReg,如下∶ 或使用Text档案建立一个资料表ClassReg,如下∶
设计输入的表单 接著,设计输入的表单form,当学生选择研讨会课程CLASS1,输入报名者身份证号码ID1,按下「报名」等按钮submit时,即使用POST的方式将输入资料传送到网站伺服器,并执行於「form action=...」所设定的data16.asp档案(与form为同一个ASP档案), 程式码如下∶ 报名研讨会, 请输入以下资料:<br> <form action="data16.asp" method="post"> <FONT COLOR="#FF8080">■ </FONT>参加研讨会课程:
<select name="CLASS1"> <OPTION SELECTED>Office 97 <OPTION>VB 5.0 <OPTION>IIS 3.0 <OPTION>IE 4.0 <OPTION>Windows NT <OPTION>Internet Web Server <OPTION>Web Master </select> <br> <FONT COLOR="#FF8080">■ </FONT>报名者身份证号码: <INPUT TYPE=TEXT VALUE="A123456789" NAME="ID1" SIZE=10><BR> <INPUT TYPE=submit VALUE="报名" name="Action"> <INPUT TYPE=submit VALUE="取消报名" name="Action"><br> <INPUT TYPE=submit VALUE="查询报名" name="Action"> 仅须填入身份证号码<br> </form> 网站伺服器执行data16.asp档案,首先经由Request.Form("Action")取得所按submit按钮上的显示文字VALUE,Left(Request.Form("Action"),2)系只取前两个中文字,若Request.Form("Action")非空白时,表示为表单输入所呼叫执行。 由「SELECT CASE Left(Request.Form("Action"),2) 」判断是按了那个按钮。若按钮上前两个字为「报名」时,则执行AddReg() 副程式;若为「取消」时,则执行DeleteReg() 副程式;若为「查询」时,则执行CheckReg() 副程式。 <% SELECT CASE Left(Request.Form("Action"),2) CASE "报名" AddReg() CASE "取消" DeleteReg() CASE "查询" CheckReg() END SELECT %> 报名 按了「报名」按钮时,将执行AddReg() 副程式。 首先,使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库BookSamp。 再寻找所待新增的报名记录,以检查是否已经报过名,使用SELECT的SQL指令查询资料库的资料,於ClassReg资料表,设定SQL指令,查询身份证号码栏位ID符合所输入Request.Form("ID1"),和课程栏位CLASS符合所选择Request.Form("CLASS1")的资料,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。 程式码如下∶ Sub AddReg() Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "BookSamp","sa","" SQL = "SELECT * FROM ClassReg WHERE ID = '" & Request.Form("ID1") & "' AND CLASS = '" & Request.Form("CLASS1") & "'" Set RS = Conn.Execute(SQL) 接著,要显示执行的结果了。 首先於ClassReg资料表,寻找报名的记录,由「IF RS.EOF THEN ...」判断是否找到身份证号码栏位ID符合所输入Request.Form("ID1"),和课程栏位CLASS符合所选择Request.Form("CLASS1")的资料。 若RS.EOF为TRUE,表示此课程尚未报名,再寻找所待报名的课程是否已经有人报过名。於ClassCount资料表,设定SQL指令,查询课程栏位CLASS符合所选择Request.Form("CLASS1")的资料。若RS.EOF为TRUE,表示此课程尚未有人报名,则於ClassCount资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的报名人数栏位TOTAL、和最後报名顺序号码栏位COUNT0都设定为1,课程名称栏位CLASS设定为Request.Form("CLASS1")。 然後再於ClassReg资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的身份证号码栏位ID为Request.Form("ID1") ,报名顺序号码栏位COUNT0为1,课程名称栏位CLASS为Request.Form("CLASS1")。显示执行的结果时,配合<TABLE>表格的HTML语法,将结果填入表格的各栏位当中。 程式码,如下∶ <FONT COLOR="#0000FF">线上报名结果:</FONT><br> <% IF RS.EOF THEN RS.Close SQL = "SELECT * FROM ClassCount WHERE CLASS = '" & Request.Form("CLASS1") & "'" Set RS = Conn.Execute(SQL)
IF RS.EOF THEN '此课程尚未有人报名 ! 於ClassCount新增一笔 SQL = "INSERT INTO ClassCount(COUNT0, TOTAL, CLASS) VALUES(1,1,'" & Request.Form("CLASS1") & "')" Set RS = Conn.Execute(SQL)
'ClassReg新增一笔 SQL = "INSERT INTO ClassReg(COUNT0, ID, CLASS) VALUES(1,'" & Request.Form("ID1") & "','" & Request.Form("CLASS1") & "')" Set RS = Conn.Execute(SQL) %> <FONT COLOR="#0000FF">报名 OK ! 报名顺序为第 1 号</FONT> <TABLE COLSPAN=8 CELLPADDING=1 BORDER=1> <TR> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>身份证号码</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>研讨会课程</FONT></TD> <TD ALIGN=CENTER BGCOLOR="#800000"><FONT>报名顺序</FONT></TD> </TR> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("CLASS1") %></FONT></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000">1</FONT></TD> </TR> </TABLE> 若找到ID符合所输入身份证号码ID1,和CLASS符合所选择课程CLASS1的资料,即RS.EOF为FALSE,表示此课程已有人报名。 由「IF RS(0) < 50 THEN...」判断RS(0) 报名人数TOTAL是否超过50个名额。 若未超过,则於ClassCount资料表,使用「UPDATE...」指令,将此笔资料的报名人数TOTAL、和最後报名顺序号码COUNT0都加一。 然後,再於ClassReg资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的身份证号码ID为Request.Form("ID1"),报名顺序号码COUNT0为ClassCount? |