-
您的位置:首页 → 精文荟萃 → 软件资讯 → 学校教学网站应用设计
学校教学网站应用设计
时间:2004/10/7 18:17:00来源:本站整理作者:蓝点我要评论(0)
-
这里我们介绍学校教学网站应用设计,包括联考线上查榜系统、学生成绩线上查询系统、线上学校注册选课系统、研讨会线上报名系统、网路教学系统等应用的点子、设计实例、以及详细解说,让您快速地设计出各种学校教学的网站应用。
学校网站资料库应用
教学上使用网站资料库,可以透过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档案),程式码如下∶
网站伺服器执行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)
%>
查榜结果:
接著,要显示查询的结果了。
首先,由「 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)为第一个栏位代表考生的姓名。
程式码,如下∶
查榜结果:
<% IF RS.EOF THEN %>
找不到此准考证编号 <% =Request.Form("ID1") %> !
<% ELSE %>
<% IF TRIM(RS(3))="X" THEN %>
准考证编号 <% =Request.Form("ID1") %>
报歉 <% =RS(0) %>, 没考上!
若考上,则显示考上的结果,包括姓名、准考证编号、总分、考上科系,分别由RecordSets物件的RS(0)、RS(1) 、RS(2)、RS(3) 取得。
RS.Fields.Count表示RecordSets物件的栏位数,由「For i = 0 to RS.Fields.Count - 1」取得RS(i) 各栏位的资料。配合表格的HTML语法,将结果填入表格的各栏位当中。
若还有下一笔资料,使用RS.MoveNext移到下一笔的位置。
程式码,如下∶
<% ELSE %>
准考证编号 <% =Request.Form("ID1") %>
<% =RS(0) %>, 恭喜您考上 <% =RS(3) %> !
姓名 |
准考证编号 |
总分 |
考上科系 |
<% Do While Not RS.EOF %>
<% For i = 0 to RS.Fields.Count - 1 %>
<% = RS(i) %> |
<% Next %>
<%
RS.MoveNext
Loop
RS.Close
Conn.Close
%>
<% END IF %>
<% END IF %>
<% END IF %>
最後,使用RS.Close关闭RecordSet,使用Conn.Close关闭资料库。
全部的程式码,如下∶
联考线上查榜系统
联考线上查榜系统
<%
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)
%>
查榜结果:
<% IF RS.EOF THEN %>
找不到此准考证编号 <% =Request.Form("ID1") %> !
<% ELSE %>
<% IF TRIM(RS(3))="X" THEN %>
准考证编号 <% =Request.Form("ID1") %>
报歉 <% =RS(0) %>, 没考上!
<% ELSE %>
准考证编号 <% =Request.Form("ID1") %>
<% =RS(0) %>, 恭喜您考上 <% =RS(3) %> !
姓名 |
准考证编号 |
总分 |
考上科系 |
<% Do While Not RS.EOF %>
<% For i = 0 to RS.Fields.Count - 1 %>
<% = RS(i) %> |
<% Next %>
<%
RS.MoveNext
Loop
RS.Close
Conn.Close
%>
<% END IF %>
<% END IF %>
<% END IF %>
学会了吗?
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档案),
程式码如下∶
网站伺服器执行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)
%>
查询结果:
接著,要显示查询的结果了。
首先,由「 IF RS.EOF THEN ...」判断是否找到ID为学号Request.Form("ID1")的资料,若
RS.EOF为TRUE,则显示「找不到此学号」。
程式码,如下∶
查询结果:
<% IF RS.EOF THEN %>
找不到此学号 <% =Request.Form("ID1") %> !
若找到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) 各栏位的资料。配合表格的HTML语法,将结果填入表格的各栏位当中。
若还有下一笔资料,使用RS.MoveNext移到下一笔的位置。
程式码,如下∶
<% ELSE %>
学号 <% =Request.Form("ID1") %>
<% =RS(1) %>, 成绩为下表:
学号 |
姓名 |
数学 |
英文 |
国文 |
自然 |
社会 |
总分 |
<% Do While Not RS.EOF %>
<%
total = 0
For i = 0 to RS.Fields.Count - 1
If Left(RS(i).Name,5) = "SCORE" Then
total = total + RS(i)
End If
%>
<% = RS(i) %> |
<% Next %>
<% = total %> |
<%
RS.MoveNext
Loop
RS.Close
Conn.Close
%>
<% END IF %>
最後,使用RS.Close关闭RecordSet,使用Conn.Close关闭资料库。
全部的程式码,如下∶
学生成绩线上查询系统
学生成绩线上查询系统
<%
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)
%>
查询结果:
<% IF RS.EOF THEN %>
找不到此学号 <% =Request.Form("ID1") %> !
<% ELSE %>
学号 <% =Request.Form("ID1") %>
<% =RS(1) %>, 成绩为下表:
学号 |
姓名 |
数学 |
英文 |
国文 |
自然 |
社会 |
总分 |
<% Do While Not RS.EOF %>
<%
total = 0
For i = 0 to RS.Fields.Count - 1
If Left(RS(i).Name,5) = "SCORE" Then
total = total + RS(i)
End If
%>
<% = RS(i) %> |
<% Next %>
<% = total %> |
<%
RS.MoveNext
Loop
RS.Close
Conn.Close
%>
<% END IF %>
<% END IF %>
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档案),程式码如下∶
线上学校选课, 请输入以下资料:
网站伺服器执行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")。
显示执行的结果时,配合表格的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)
%>
选课 OK ! 选课顺序为第 1 号
学号 |
选修课程 |
选课顺序 |
<% =Request.Form("ID1") %>
|
<%=LEFT(Request.Form("CLASS1"),3) %> |
1 |
若找到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")。
接著,显示执行的结果时,配合表格的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)
%>
选课 OK ! 选课顺序为第 <% =CountNo %> 号
学号 |
选修课程 |
选课顺序 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
<% =CountNo %> |
若此课程的选课人数TOTAL超过50个名额,则显示「本选修课程名额已满 ! 请选修其他课程 !」。接著,显示执行的结果,配合表格的HTML语法,将学号和选修课程的资料,填入表格的各栏位当中显示出来。程式码,如下∶
<% ELSE %>
<% '50名额已满 %>
报歉 !
本选修课程名额已满 ! 请选修其他课程 !
学号 |
选修课程 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
<% END IF %>
<% END IF %>
当於ClassReg资料表,由「IF RS.EOF THEN ...」判断是否找到ID符合所输入学号ID1,和CLASS符合所选择选修课程CLASS1的资料时,若RS.EOF为FALSE,表示此选修课程已经选课,则显示「报歉! 已经选过课! 选课顺序为第...号」。接著,显示执行的结果,配合表格的HTML语法,将学号、选修课程、和选课顺序的资料,填入表格的各栏位当中显示出来。
程式码,如下∶
<% ELSE %>
<% '已经选修 %>
报歉 !
已经选过课 ! 选课顺序为第 <% =RS(1) %> 号
学号 |
选修课程 |
选课顺序 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
<% =RS(1) %> |
<% 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)
%>
取消选课结果:
<%
IF RS.EOF THEN
'找不到 ! 尚未选课 !
%>
找不到 ! 尚未选课 !
若找到所待取消的选课记录,则於ClassReg资料表,使用「DELETE FROM...」指令删除此笔资料。
然後,再於ClassCount资料表,使用「UPDATE...」指令,将此笔课程的选课人数TOTAL减一。
接著,显示执行的结果,配合表格的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
%>
找不到选课资料 !
<%
ELSE
TotalNo = RS(0)-1
SQL = "UPDATE ClassCount SET TOTAL = " & TotalNo & " WHERE CLASS = '" &
LEFT(Request.Form("CLASS1"),3) & "'"
Set RS = Conn.Execute(SQL)
%>
选课已经取消 !
学号 |
选修课程 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
<% 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)
%>
查询选课结果:
<%
IF RS.EOF THEN
'找不到 ! 尚未选课 !
%>
找不到 ! 尚未选课 !
若找到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) 各栏位的资料。配合表格的HTML语法,将结果填入表格的各栏位当中。
若还有下一笔资料,使用RS.MoveNext移到下一笔的位置。
程式码,如下∶
<% ELSE %>
<% '有选课 ! %>
选课如下:
学号 |
选修课程 |
选课顺序 |
<% j = 1 %>
<% Do While Not RS.EOF %>
<% For i = 0 to RS.Fields.Count - 1 %>
<% If INT(j/2)*2 <> j Then %>
<%= RS(i) %> |
<% Else %>
<%= RS(i) %> |
<% END IF %>
<% Next %>
<%
RS.MoveNext
j = j + 1
Loop
%>
<% END IF
RS.Close
Conn.Close
End Sub %>
最後,使用RS.Close关闭RecordSet,使用Conn.Close关闭资料库。
全部的程式码,如下∶
线上学校注册选课系统
线上学校注册选课系统
<%
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)
%>
选课结果:
<%
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)
%>
选课 OK ! 选课顺序为第 1 号
学号 |
选修课程 |
选课顺序 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
1 |
<% 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)
%>
选课 OK ! 选课顺序为第 <% =CountNo %> 号
学号 |
选修课程 |
选课顺序 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
<% =CountNo %> |
<% ELSE %>
<% '50名额已满 %>
报歉 !
本选修课程名额已满 ! 请选修其他课程 !
学号 |
选修课程 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
<% END IF %>
<% END IF %>
<% ELSE %>
<% '已经选修 %>
报歉 !
已经选过课 ! 选课顺序为第 <% =RS(1) %> 号
学号 |
选修课程 |
选课顺序 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
<% =RS(1) %> |
<% 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)
%>
取消选课结果:
<%
IF RS.EOF THEN
'找不到 ! 尚未选课 !
%>
找不到 ! 尚未选课 !
<% 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
%>
找不到选课资料 !
<%
ELSE
TotalNo = RS(0)-1
SQL = "UPDATE ClassCount SET TOTAL = " & TotalNo & " WHERE CLASS = '" &
LEFT(Request.Form("CLASS1"),3) & "'"
Set RS = Conn.Execute(SQL)
%>
选课已经取消 !
学号 |
选修课程 |
<% =Request.Form("ID1") %> |
<% =LEFT(Request.Form("CLASS1"),3) %> |
<% 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)
%>
查询选课结果:
<%
IF RS.EOF THEN
'找不到 ! 尚未选课 !
%>
找不到 ! 尚未选课 !
<% ELSE %>
<% '有选课 ! %>
选课如下:
学号 |
选修课程 |
选课顺序 |
<% j = 1 %>
<% Do While Not RS.EOF %>
<% For i = 0 to RS.Fields.Count - 1 %>
<% If INT(j/2)*2 <> j Then %>
<%= RS(i) %> |
<% Else %>
<%= RS(i) %> |
<% END IF %>
<% Next %>
<%
RS.MoveNext
j = j + 1
Loop
%>
<% END IF
RS.Close
Conn.Close
End Sub %>
线上学校选课, 请输入以下资料:
学会了吗?
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档案),
程式码如下∶
报名研讨会, 请输入以下资料:
网站伺服器执行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")。显示执行的结果时,配合
查看所有0条评论>>