學(xué)校教學(xué)網(wǎng)站應(yīng)用設(shè)計(jì)
發(fā)表時(shí)間:2023-08-19 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]這里我們介紹學(xué)校教學(xué)網(wǎng)站應(yīng)用設(shè)計(jì),包括聯(lián)考線上查榜系統(tǒng)、學(xué)生成績(jī)線上查詢系統(tǒng)、線上學(xué)校注冊(cè)選課系統(tǒng)、研討會(huì)線上報(bào)名系統(tǒng)、網(wǎng)路教學(xué)系統(tǒng)等應(yīng)用的點(diǎn)子、設(shè)計(jì)實(shí)例、以及詳細(xì)解說,讓您快速地設(shè)計(jì)出各種學(xué)校教學(xué)...
這里我們介紹學(xué)校教學(xué)網(wǎng)站應(yīng)用設(shè)計(jì),包括聯(lián)考線上查榜系統(tǒng)、學(xué)生成績(jī)線上查詢系統(tǒng)、線上學(xué)校注冊(cè)選課系統(tǒng)、研討會(huì)線上報(bào)名系統(tǒng)、網(wǎng)路教學(xué)系統(tǒng)等應(yīng)用的點(diǎn)子、設(shè)計(jì)實(shí)例、以及詳細(xì)解說,讓您快速地設(shè)計(jì)出各種學(xué)校教學(xué)的網(wǎng)站應(yīng)用。
學(xué)校網(wǎng)站資料庫應(yīng)用
教學(xué)上使用網(wǎng)站資料庫,可以透過Internet、或Intranet提供以下的應(yīng)用∶
* 聯(lián)考線上查榜*
* 線上查詢成績(jī)單、或出勤狀況*
* 線上學(xué)校注冊(cè)選課*
* 研討會(huì)線上報(bào)名*
* 網(wǎng)路教學(xué)
右上角標(biāo)示*的應(yīng)用,本節(jié)將提供設(shè)計(jì)的范例,并詳加解說。
執(zhí)行本章資料庫的范例,所用的資料庫可為Microsoft Access、Microsoft SQL Server、或Text檔案(讀者可修改成其他支援ODBC的資料庫,詳見1-6-5節(jié)),須於NT安裝IIS 3.0,并於「控制臺(tái)」中的「ODBC」,新建一個(gè)名稱為「BookSamp」的資料來源,驅(qū)動(dòng)程式為「Microsoft Access Driver」、「SQL Server」、或「Microsoft Text 驅(qū)動(dòng)程式」。
5-1
聯(lián)考線上查榜系統(tǒng)
「聯(lián)考線上查榜系統(tǒng)」,可以透過Internet,提供線上查榜成績(jī)和放榜結(jié)果的功能。
放榜時(shí),考生可以透過Internet、或Intranet,連線上學(xué)校的「聯(lián)考線上查榜系統(tǒng)」,輸入準(zhǔn)考證編號(hào),查詢各種考試(譬如聯(lián)考、研究所、就業(yè)考等)放榜的結(jié)果,包括成績(jī)、和考取科系等
資訊。
設(shè)計(jì)實(shí)例
讓我們執(zhí)行一個(gè)實(shí)例。
( 范例 data1.asp 聯(lián)考線上查榜
若要查詢資料,於用戶端使用瀏覽器,瀏覽本書所附安裝於網(wǎng)站伺服器的data1.asp,於「準(zhǔn)考證編號(hào)」處輸入準(zhǔn)考證編號(hào)後,譬如輸入準(zhǔn)考證編號(hào)123456,按下「查榜」按鈕,即可顯示查詢的結(jié)果如下,包括姓名、總分、考上科系∶
放榜時(shí),幾家歡樂幾家愁,也有人落榜的,輸入準(zhǔn)考證編號(hào)123457,顯示「沒考上」如下∶
輸入錯(cuò)誤的準(zhǔn)考證編號(hào)時(shí),必須告訴人家,譬如輸入準(zhǔn)考證編號(hào)654321,顯示「找不到」如下∶
設(shè)計(jì)實(shí)例詳細(xì)解說
建立資料表
首先使用Microsoft Access、Microsoft SQL Server 、Text檔案、或任何一種支援ODBC的資料庫,建立一個(gè)資料表School。
使用Microsoft Access建立一個(gè)資料表School,如下∶
於欄名NAME、ID、SCORE、RESULT分別輸入姓名、準(zhǔn)考證編號(hào)、總分、考上科系,考上科系若為落榜時(shí),輸入「X」。
或使用Microsoft SQL Server建立一個(gè)資料表School,如下∶
或使用Text檔案建立一個(gè)資料表School,如下∶
設(shè)計(jì)輸入表單
接著,設(shè)計(jì)輸入表單form,以讓考生輸入準(zhǔn)考證編號(hào)ID1,按下「查榜」按鈕submit時(shí),即使用POST的方式將輸入資料傳送到網(wǎng)站伺服器,并執(zhí)行於「form action=...」所設(shè)定的data1.asp檔
案(與form為同一個(gè)ASP檔案),程式碼如下∶
<form action="data1.asp" method="post">
準(zhǔn)考證編號(hào): <INPUT TYPE=TEXT VALUE="123456" NAME=ID1 SIZE=10>
<INPUT TYPE=submit VALUE="查榜" name="Action">
</form>
網(wǎng)站伺服器執(zhí)行data1.asp檔案,首先經(jīng)由Request.Form("ID1")取得考生所輸入的準(zhǔn)考證編號(hào)ID1,若ID1非空白時(shí),表示為表單輸入所呼叫執(zhí)行。
查詢資料庫
使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫
BookSamp。
再使用SELECT的SQL指令查詢資料庫的資料,設(shè)定SQL指令,查詢?yōu)镮D符合準(zhǔn)考證編號(hào)Request.Form("ID1")的資料,下個(gè)「Execute」指令,即可開始執(zhí)行存取查詢資料庫的動(dòng)作,并將查詢結(jié)果儲(chǔ)存到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>
查榜結(jié)果:<br>
接著,要顯示查詢的結(jié)果了。
首先,由「 IF RS.EOF THEN ...」判斷是否找到ID為準(zhǔn)考證編號(hào)Request.Form("ID1")的資料,若RS.EOF為TRUE,則顯示「找不到此準(zhǔn)考證編號(hào)」。
若RS.EOF為FALSE表示有找到符合查詢條件的資料,由「IF RS(3)="X" THEN...」判斷第四個(gè)欄位(欄位編號(hào)由0算起)是否為「X」(表示落榜)。若落榜( RS(3)="X"),則顯示「報(bào)歉 <%=RS(0) %>, 沒考上!」,RS(0)為第一個(gè)欄位代表考生的姓名。
程式碼,如下∶
查榜結(jié)果:<br>
<% IF RS.EOF THEN %>
<FONT COLOR="#FF0000">找不到此準(zhǔn)考證編號(hào) <% =Request.Form("ID1") %> !</FONT>
<% ELSE %>
<% IF TRIM(RS(3))="X" THEN %>
準(zhǔn)考證編號(hào) <% =Request.Form("ID1") %> <BR>
<FONT COLOR="#FF0000">報(bào)歉 <% =RS(0) %>, 沒考上!</FONT>
若考上,則顯示考上的結(jié)果,包括姓名、準(zhǔn)考證編號(hào)、總分、考上科系,分別由RecordSets物件的RS(0)、RS(1) 、RS(2)、RS(3) 取得。
RS.Fields.Count表示RecordSets物件的欄位數(shù),由「For i = 0 to RS.Fields.Count - 1」取得RS(i) 各欄位的資料。配合<TABLE>表格的HTML語法,將結(jié)果填入表格的各欄位當(dāng)中。
若還有下一筆資料,使用RS.MoveNext移到下一筆的位置。
程式碼,如下∶
<% ELSE %>
<FONT COLOR="#0000FF">
準(zhǔn)考證編號(hào) <% =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>準(zhǔn)考證編號(hào)</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關(guān)閉RecordSet,使用Conn.Close關(guān)閉資料庫。
全部的程式碼,如下∶
<HTML>
<HEAD>
<TITLE>聯(lián)考線上查榜系統(tǒng)</TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=big5">
</HEAD>
<CENTER>
<BODY BGCOLOR=#FFFFFF>
<FONT SIZE=+2 COLOR="#0000FF">聯(lián)考線上查榜系統(tǒng)</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>
查榜結(jié)果:<br>
<% IF RS.EOF THEN %>
<FONT COLOR="#FF0000">找不到此準(zhǔn)考證編號(hào) <% =Request.Form("ID1") %> !</FONT>
<% ELSE %>
<% IF TRIM(RS(3))="X" THEN %>
準(zhǔn)考證編號(hào) <% =Request.Form("ID1") %> <BR>
<FONT COLOR="#FF0000">報(bào)歉 <% =RS(0) %>, 沒考上!</FONT>
<% ELSE %>
<FONT COLOR="#0000FF">
準(zhǔn)考證編號(hào) <% =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>準(zhǔn)考證編號(hào)</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">
準(zhǔn)考證編號(hào): <INPUT TYPE=TEXT VALUE="123456" NAME=ID1 SIZE=10>
<INPUT TYPE=submit VALUE="查榜" name="Action">
</form>
<HR>
</CENTER>
</BODY>
</HTML>
學(xué)會(huì)了嗎?
5-2
學(xué)生成績(jī)線上查詢系統(tǒng)
「學(xué)生成績(jī)線上查詢系統(tǒng)」,可以透過Internet,提供查詢成績(jī)、出勤狀況的功能。
家長(zhǎng)或?qū)W生,可以透過Internet,連線上學(xué)校的「學(xué)生成績(jī)線上查詢系統(tǒng)」,輸入學(xué)號(hào),查詢成績(jī)單、名次。
也可以加上出勤狀況的線上查詢功能。若學(xué)生沒有來上課,可自動(dòng)發(fā)E-Mail通知家長(zhǎng)。家長(zhǎng)可以線上查詢家庭作業(yè),以及老師對(duì)其子女的建議。家長(zhǎng)也可線上留言給老師一些教學(xué)上、管教上的建議。
設(shè)計(jì)實(shí)例
讓我們執(zhí)行一個(gè)實(shí)例。
( 范例 data4.asp 學(xué)生成績(jī)線上查詢
若要查詢資料,於用戶端使用瀏覽器,瀏覽本書所附安裝於網(wǎng)站伺服器的data4.asp,於「學(xué)號(hào)」處輸入學(xué)號(hào),譬如輸入學(xué)號(hào)123456後,按下「成績(jī)查榜」按鈕,即可顯示查詢的結(jié)果如下,包括姓名、各科成績(jī)、總分∶
輸入錯(cuò)誤的學(xué)號(hào)時(shí),必須告訴人家找不到,譬如輸入學(xué)號(hào)123123,顯示「找不到」如下∶
設(shè)計(jì)實(shí)例詳細(xì)解說
建立資料表
首先使用Microsoft Access、Microsoft SQL Server 、Text檔案、或任何一種支援ODBC的資料庫,建立一個(gè)資料表Student。
於欄名NAME、ID、SCORE1~5分別輸入姓名、學(xué)號(hào)、各科成績(jī)。
使用Microsoft Access建立一個(gè)資料表Student,如下∶
或使用Microsoft SQL Server建立一個(gè)資料表Student,如下∶
或使用Text檔案建立一個(gè)資料表Student,如下∶
設(shè)計(jì)輸入表單
接著,設(shè)計(jì)輸入表單form,以讓查詢者輸入學(xué)號(hào)ID1,按下「成績(jī)查詢」按鈕submit時(shí),即使用POST的方式將輸入資料傳送到網(wǎng)站伺服器,并執(zhí)行於「form action=...」所設(shè)定的data4.asp檔案(與form為同一個(gè)ASP檔案),
程式碼如下∶
<form action="data4.asp" method="post">
學(xué)號(hào): <INPUT TYPE=TEXT VALUE="123456" NAME=ID1 SIZE=10>
<INPUT TYPE=submit VALUE="成績(jī)查詢" name="Action">
</form>
網(wǎng)站伺服器執(zhí)行data4.asp檔案,首先經(jīng)由Request.Form("ID1")取得查詢者所輸入的學(xué)號(hào)ID1,若ID1非空白時(shí),表示為表單輸入所呼叫執(zhí)行。
查詢資料庫
使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫BookSamp。
再使用SELECT的SQL指令查詢資料庫的資料,設(shè)定SQL指令,查詢?yōu)镮D符合學(xué)號(hào)
Request.Form("ID1")的資料,下個(gè)「Execute」指令,即可開始執(zhí)行存取查詢資料庫的動(dòng)作,并將查詢結(jié)果儲(chǔ)存到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>
查詢結(jié)果:<br>
接著,要顯示查詢的結(jié)果了。
首先,由「 IF RS.EOF THEN ...」判斷是否找到ID為學(xué)號(hào)Request.Form("ID1")的資料,若
RS.EOF為TRUE,則顯示「找不到此學(xué)號(hào)」。
程式碼,如下∶
查詢結(jié)果:<br>
<% IF RS.EOF THEN %>
<FONT COLOR="#FF0000">找不到此學(xué)號(hào) <% =Request.Form("ID1") %> !</FONT>
若找到ID為學(xué)號(hào)Request.Form("ID1")的資料,則顯示查詢結(jié)果,包括姓名、各科成績(jī),分別由RecordSets物件的RS(0)、RS(1)、RS(2)~RS(6) 取得。
總分的計(jì)算,由「If Left(RS(i).Name,5) = "SCORE" Then...」判斷是否以SCORE為起頭的欄位,若是則由「 total = total + RS(i) 」將各科成績(jī)加總起來。RS.Fields.Count表示RecordSets物件的欄位數(shù),由「For i = 0 to RS.Fields.Count - 1」取得RS(i) 各欄位的資料。配合<TABLE>表格的HTML語法,將結(jié)果填入表格的各欄位當(dāng)中。
若還有下一筆資料,使用RS.MoveNext移到下一筆的位置。
程式碼,如下∶
<% ELSE %>
<FONT COLOR="#0000FF">
學(xué)號(hào) <% =Request.Form("ID1") %> <BR>
<% =RS(1) %>, 成績(jī)?yōu)橄卤?<BR>
</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1>
<TR>
<TD BGCOLOR="#800000"><FONT>學(xué)號(hào)</FONT></TD>
<TD BGCOLOR="#800000"><FONT>姓名</FONT></TD>
<TD BGCOLOR="#800000"><FONT>數(shù)學(xué)</FONT></TD>
<TD BGCOLOR="#800000"><FONT>英文</FONT></TD>
<TD BGCOLOR="#800000"><FONT>國(guó)文</FONT></TD>
<TD BGCOLOR="#800000"><FONT>自然</FONT></TD>
<TD BGCOLOR="#800000"><FONT>社會(huì)</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關(guān)閉RecordSet,使用Conn.Close關(guān)閉資料庫。
全部的程式碼,如下∶
<HTML>
<HEAD>
<TITLE>學(xué)生成績(jī)線上查詢系統(tǒng)</TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=big5">
</HEAD>
<CENTER>
<BODY BGCOLOR=#FFFFFF>
<FONT SIZE=+2 COLOR="#0000FF">學(xué)生成績(jī)線上查詢系統(tǒng)</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>
查詢結(jié)果:<br>
<% IF RS.EOF THEN %>
<FONT COLOR="#FF0000">找不到此學(xué)號(hào) <% =Request.Form("ID1") %> !</FONT>
<% ELSE %>
<FONT COLOR="#0000FF">
學(xué)號(hào) <% =Request.Form("ID1") %> <BR>
<% =RS(1) %>, 成績(jī)?yōu)橄卤?<BR>
</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1>
<TR>
<TD BGCOLOR="#800000"><FONT>學(xué)號(hào)</FONT></TD>
<TD BGCOLOR="#800000"><FONT>姓名</FONT></TD>
<TD BGCOLOR="#800000"><FONT>數(shù)學(xué)</FONT></TD>
<TD BGCOLOR="#800000"><FONT>英文</FONT></TD>
<TD BGCOLOR="#800000"><FONT>國(guó)文</FONT></TD>
<TD BGCOLOR="#800000"><FONT>自然</FONT></TD>
<TD BGCOLOR="#800000"><FONT>社會(huì)</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">
學(xué)號(hào): <INPUT TYPE=TEXT VALUE="123456" NAME=ID1 SIZE=10>
<INPUT TYPE=submit VALUE="成績(jī)查詢" name="Action">
</form>
<HR>
</CENTER>
</BODY>
</HTML>
5-3
線上學(xué)校注冊(cè)選課系統(tǒng)
「線上學(xué)校注冊(cè)選課系統(tǒng)」,可以透過Internet、或Intranet,提供選修課程、完成注冊(cè)手續(xù)的功能。
學(xué)生可以透過Internet、或Intranet,連線上學(xué)校的「線上學(xué)校注冊(cè)選課系統(tǒng)」,輸入其學(xué)號(hào)、要選修的課程後,完成注冊(cè)手續(xù)。
選課系統(tǒng)將自動(dòng)統(tǒng)計(jì)每一個(gè)選修課程的報(bào)名人數(shù),若超過名額,將自動(dòng)告之,要求學(xué)生選修其他的課程。
選修課程時(shí),選課系統(tǒng)提供可以增加、取消、查詢選修課程的功能。
學(xué)生可以線上查詢各選修課程的授課內(nèi)容簡(jiǎn)介。
完成注冊(cè)後,課程時(shí)刻表將自動(dòng)匯集於螢?zāi)簧巷@示、或發(fā)E-Mail通知學(xué)生。
學(xué)費(fèi)可由信用卡、劃撥、或銀行轉(zhuǎn)帳來支付。
設(shè)計(jì)實(shí)例
讓我們執(zhí)行一個(gè)實(shí)例。
( 范例 data15.asp 線上學(xué)校注冊(cè)選課
若要線上學(xué)校注冊(cè)選課,於用戶端使用瀏覽器,瀏覽本書所附安裝於網(wǎng)站伺服器的data15.asp,
於「選修課程」處選擇選修課程如婚姻學(xué),於「學(xué)號(hào)」處輸入學(xué)號(hào)如123456後,按下「選課」按鈕,即可顯示選課的結(jié)果如下,包括學(xué)號(hào)、選修課程、選課順序∶
選修課程時(shí),若選修的課程已經(jīng)選過,則重覆選修相同的課程,將顯示「已經(jīng)選過課」如下∶
選修課程時(shí),若超過選修課程的50個(gè)名額時(shí),則顯示「名額已滿」如下∶
取消選課
選修課程後,可以取消所選修的課程,於「選修課程」處選擇待取消選修課程如婚姻學(xué),於「學(xué)號(hào)」處輸入學(xué)號(hào)如123456後,按下「取消選課」按鈕,即可顯示取消選課的結(jié)果如下∶
若待取消的課程尚未選過,則取消選課時(shí)將顯示「找不到」如下∶
查詢選課
選修課程後,可以查詢所有選修的課程,僅須於「學(xué)號(hào)」處輸入學(xué)號(hào)如123456後,按下「查詢選課」按鈕,即可顯示查詢選課的結(jié)果如下∶
查詢選課時(shí),若尚未選課,則查詢選課時(shí)將顯示「找不到」如下∶
設(shè)計(jì)實(shí)例詳細(xì)解說
建立資料表
首先使用Microsoft Access、Microsoft SQL Server 、Text檔案、或任何一種支援ODBC的資料庫,建立一個(gè)資料表ClassCount,儲(chǔ)存選課人數(shù)、和最後選課順序。
這個(gè)資料表系供選課和取消選課時(shí),記錄選課人數(shù)、和最後選課順序號(hào)碼之用。
建立欄位TOTAL、COUNT0、CLASS,分別代表一個(gè)選課記錄的選課人數(shù)、最後選課順序號(hào)碼、選修
課程名稱。
建立資料表時(shí)不必輸入資料。
使用Microsoft Access建立一個(gè)資料表ClassCount,如下∶
或使用Microsoft SQL Server建立一個(gè)資料表ClassCount,如下∶
或使用Text檔案建立一個(gè)資料表ClassCount,如下∶
尚需要建立另一個(gè)資料表ClassReg,儲(chǔ)存選課的記錄,建立欄位ID、COUNT0、CLASS,分別代表一筆選修課程的學(xué)號(hào)、選課順序號(hào)碼、選修課程名稱。這個(gè)資料表系供選課、查詢選課、和取消選課時(shí),記錄所選修課程、和選課順序號(hào)碼之用。建立資料表時(shí)不必輸入資料。
使用Microsoft Access建立一個(gè)資料表ClassReg,如下∶
或使用Microsoft SQL Server建立一個(gè)資料表ClassReg,如下∶
或使用Text檔案建立一個(gè)資料表ClassReg,如下∶
設(shè)計(jì)輸入的表單
接著,設(shè)計(jì)輸入的表單form,當(dāng)學(xué)生選擇選修課程CLASS1,輸入學(xué)號(hào)ID1,按下「查榜」按鈕submit時(shí),即使用POST的方式將輸入資料傳送到網(wǎng)站伺服器,并執(zhí)行於「form action=...」所設(shè)定的data15.asp檔案(與form為同一個(gè)ASP檔案),程式碼如下∶
線上學(xué)校選課, 請(qǐng)輸入以下資料:<br>
<form action="data15.asp" method="post">
<FONT COLOR="#FF8080">■ </FONT>選修課程:
<select name="CLASS1">
<OPTION SELECTED>微電腦
<OPTION>熱傳學(xué)
<OPTION>電子學(xué)
<OPTION>半導(dǎo)體
<OPTION>記憶體
<OPTION>網(wǎng)路學(xué)
<OPTION>婚姻學(xué)
<OPTION>家政學(xué)
</select>
<br>
<FONT COLOR="#FF8080">■ </FONT>學(xué)號(hào) (如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"> 僅須填入學(xué)號(hào)<br>
</form>
網(wǎng)站伺服器執(zhí)行data15.asp檔案,首先經(jīng)由Request.Form("Action")取得所按submit按鈕上的顯示文字VALUE,Left(Request.Form("Action"),2)系只取前兩個(gè)中文字,若Request.Form("Action")非空白時(shí),表示為表單輸入所呼叫執(zhí)行。
由「SELECT CASE Left(Request.Form("Action"),2) 」判斷是按了那個(gè)按鈕。若按鈕上前兩個(gè)字為「選課」時(shí),則執(zhí)行AddReg() 副程式;若為「取消」時(shí),則執(zhí)行DeleteReg() 副程式;若
為「查詢」時(shí),則執(zhí)行CheckReg() 副程式。
<%
SELECT CASE Left(Request.Form("Action"),2)
CASE "選課"
AddReg()
CASE "取消"
DeleteReg()
CASE "查詢"
CheckReg()
END SELECT
%>
選課
按了「選課」按鈕時(shí),將執(zhí)行AddReg() 副程式。
首先,使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫BookSamp。
再尋找所待新增的選課記錄,以檢查是否已經(jīng)選過課,使用SELECT的SQL指令查詢資料庫的資料,於ClassReg資料表,設(shè)定SQL指令,查詢?yōu)闄谖籌D符合所輸入學(xué)號(hào)Request.Form("ID1"),和欄位CLASS符合所選擇選修課程Request.Form("CLASS1")的資料,下個(gè)「Execute」指令,即可開始執(zhí)行存取查詢資料庫的動(dòng)作,并將查詢結(jié)果儲(chǔ)存到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)
%>
接著,要顯示執(zhí)行的結(jié)果了。
首先於ClassReg資料表,尋找選課的記錄,由「IF RS.EOF THEN ...」判斷是否找到欄位ID符合所輸入學(xué)號(hào)ID1,和欄位CLASS符合所選擇選修課程CLASS1的資料。
若RS.EOF為TRUE,表示此選修課程尚未選課,再尋找所待選修的課程是否已經(jīng)有人選過課。於ClassCount資料表,設(shè)定SQL指令,查詢?yōu)镃LASS符合所選擇選修課程Request.Form("CLASS1")的資料。若RS.EOF為TRUE,表示此選修課程尚未有人選課,則於ClassCount資料表,使用「INSERT INTO...」指令新增一筆資料。此筆新增資料的選課人數(shù)TOTAL、和最後選課順序號(hào)碼COUNT0都設(shè)定為1,選修課程名稱CLASS設(shè)定為Request.Form("CLASS1")。
然後再於ClassReg資料表,使用「INSERT INTO...」指令新增一筆資料。此筆新增資料的選課順序號(hào)碼COUNT0設(shè)定為1,學(xué)號(hào)ID為Request.Form("ID1"),選修課程名稱CLASS為Request.Form("CLASS1")。
顯示執(zhí)行的結(jié)果時(shí),配合<TABLE>表格的HTML語法,將結(jié)果填入表格的各欄位當(dāng)中。
程式碼,如下∶
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 ! 選課順序?yàn)榈?nbsp;1 號(hào)</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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符合所輸入學(xué)號(hào)ID1,和CLASS符合所選擇選修課程CLASS1的資料,即RS.EOF為FALSE,表示此課程已有人選課。
由「IF RS(0) < 50 THEN...」判斷RS(0) 選課人數(shù)TOTAL是否超過50個(gè)名額。
若未超過,則於ClassCount資料表,使用「UPDATE...」指令,將此筆資料的選課人數(shù)TOTAL、和最後選課順序號(hào)碼COUNT0都加一。
然後,再於ClassReg資料表,使用「INSERT INTO...」指令新增一筆資料。此筆新增資料的學(xué)號(hào)ID為Request.Form("ID1") ,選課順序號(hào)碼COUNT0為ClassCount資料表的加一後之COUNT0新值,選修課程名稱CLASS為Request.Form("CLASS1")。
接著,顯示執(zhí)行的結(jié)果時(shí),配合<TABLE>表格的HTML語法,將於ClassReg資料表新增的資料,填入表格的各欄位當(dāng)中顯示出來。
程式碼,如下∶
<% 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 ! 選課順序?yàn)榈?nbsp;<% =CountNo %> 號(hào)</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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>
若此課程的選課人數(shù)TOTAL超過50個(gè)名額,則顯示「本選修課程名額已滿 ! 請(qǐng)選修其他課程 !」。接著,顯示執(zhí)行的結(jié)果,配合<TABLE>表格的HTML語法,將學(xué)號(hào)和選修課程的資料,填入表格的各欄位當(dāng)中顯示出來。程式碼,如下∶
<% ELSE %>
<% '50名額已滿 %>
<FONT COLOR="#FF0000">報(bào)歉 !</FONT><br>
<FONT COLOR="#FF0000">本選修課程名額已滿 ! 請(qǐng)選修其他課程 !</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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 %>
當(dāng)於ClassReg資料表,由「IF RS.EOF THEN ...」判斷是否找到ID符合所輸入學(xué)號(hào)ID1,和CLASS符合所選擇選修課程CLASS1的資料時(shí),若RS.EOF為FALSE,表示此選修課程已經(jīng)選課,則顯示「報(bào)歉! 已經(jīng)選過課! 選課順序?yàn)榈?..號(hào)」。接著,顯示執(zhí)行的結(jié)果,配合<TABLE>表格的HTML語法,將學(xué)號(hào)、選修課程、和選課順序的資料,填入表格的各欄位當(dāng)中顯示出來。
程式碼,如下∶
<% ELSE %>
<% '已經(jīng)選修 %>
<FONT COLOR="#FF0000">報(bào)歉 !</FONT><br>
<FONT COLOR="#FF0000">已經(jīng)選過課 !</FONT> 選課順序?yàn)榈?nbsp;<% =RS(1) %> 號(hào)</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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關(guān)閉資料庫。
取消選課
按了「取消選課」按鈕時(shí),將執(zhí)行DeleteReg() 副程式。
首先,先尋找到所待取消的選課記錄,使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫BookSamp。
再使用SELECT的SQL指令查詢資料庫的資料,於ClassReg資料表,設(shè)定SQL指令,查詢?yōu)镮D符合所輸入學(xué)號(hào)Request.Form("ID1"),和CLASS符合所選擇選修課程Request.Form("CLASS1")的資料,下個(gè)「Execute」指令,即可開始執(zhí)行存取查詢資料庫的動(dòng)作,并將查詢結(jié)果儲(chǔ)存到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">取消選課結(jié)果:</FONT><br>
<%
IF RS.EOF THEN
'找不到 ! 尚未選課 !
%>
<FONT COLOR="#FF0000">找不到 ! 尚未選課 !</FONT>
若找到所待取消的選課記錄,則於ClassReg資料表,使用「DELETE FROM...」指令刪除此筆資料。
然後,再於ClassCount資料表,使用「UPDATE...」指令,將此筆課程的選課人數(shù)TOTAL減一。
接著,顯示執(zhí)行的結(jié)果,配合<TABLE>表格的HTML語法,將於ClassReg資料表刪除的資料,填入表格的各欄位當(dāng)中,以顯示出來。
程式碼,如下∶
<% 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">選課已經(jīng)取消 !</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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關(guān)閉資料庫。
查詢選課
按了「查詢選課」按鈕時(shí),執(zhí)行CheckReg() 副程式。
首先,先尋找到所待查詢的選課記錄,使用「Server.CreateObject」建立連線的物件,并使用
「Open」開啟待存取查詢資料庫BookSamp。
再使用SELECT的SQL指令查詢資料庫的資料,於ClassReg資料表,設(shè)定SQL指令,查詢?yōu)镮D符合所
輸入學(xué)號(hào)Request.Form("ID1")的資料,下個(gè)「Execute」指令,即可開始執(zhí)行存取查詢資料庫的
動(dòng)作,并將查詢結(jié)果儲(chǔ)存到RecordSets物件RS。
由「IF RS.EOF THEN ...」判斷是否找到所待查詢學(xué)號(hào)的所有選課記錄,若RS.EOF為TRUE,表示
此學(xué)號(hào)的學(xué)生尚未選課,則顯示「找不到 ! 尚未選課 !」。
程式碼如下∶
<%
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">查詢選課結(jié)果:</FONT><br>
<%
IF RS.EOF THEN
'找不到 ! 尚未選課 !
%>
<FONT COLOR="#FF0000">找不到 ! 尚未選課 !</FONT>
若找到ID為學(xué)號(hào)Request.Form("ID1")的資料,則顯示查詢的結(jié)果,包括學(xué)號(hào)、選修課程、選課
順序,分別由RecordSets物件的RS(0)、RS(1)、RS(2)取得。
RS.Fields.Count表示RecordSets物件的欄位數(shù),由「For i = 0 to RS.Fields.Count - 1」取
得RS(i) 各欄位的資料。配合<TABLE>表格的HTML語法,將結(jié)果填入表格的各欄位當(dāng)中。
若還有下一筆資料,使用RS.MoveNext移到下一筆的位置。
程式碼,如下∶
<% ELSE %>
<% '有選課 ! %>
<FONT COLOR="#0000ff">選課如下:</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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關(guān)閉RecordSet,使用Conn.Close關(guān)閉資料庫。
全部的程式碼,如下∶
<HTML>
<HEAD>
<TITLE>線上學(xué)校注冊(cè)選課系統(tǒng)</TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=big5">
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<FONT SIZE=+2 COLOR="#0000FF">線上學(xué)校注冊(cè)選課系統(tǒng)</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">選課結(jié)果:</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 ! 選課順序?yàn)榈?nbsp;1 號(hào)</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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 ! 選課順序?yàn)榈?nbsp;<% =CountNo %> 號(hào)</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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">報(bào)歉 !</FONT><br>
<FONT COLOR="#FF0000">本選修課程名額已滿 ! 請(qǐng)選修其他課程 !</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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 %>
<% '已經(jīng)選修 %>
<FONT COLOR="#FF0000">報(bào)歉 !</FONT><br>
<FONT COLOR="#FF0000">已經(jīng)選過課 !</FONT> 選課順序?yàn)榈?nbsp;<% =RS(1) %> 號(hào)</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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">取消選課結(jié)果:</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">選課已經(jīng)取消 !</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>學(xué)號(hào)</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">查詢選課結(jié)果:</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>學(xué)號(hào)</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>
線上學(xué)校選課, 請(qǐng)輸入以下資料:<br>
<form action="data15.asp" method="post">
<FONT COLOR="#FF8080">■ </FONT>選修課程:
<select name="CLASS1">
<OPTION SELECTED>微電腦
<OPTION>熱傳學(xué)
<OPTION>電子學(xué)
<OPTION>半導(dǎo)體
<OPTION>記憶體
<OPTION>網(wǎng)路學(xué)
<OPTION>婚姻學(xué)
<OPTION>家政學(xué)
</select>
<br>
<FONT COLOR="#FF8080">■ </FONT>學(xué)號(hào) (如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"> 僅須填入學(xué)號(hào)<br>
</form>
<HR>
</BODY>
</HTML>
學(xué)會(huì)了嗎?
5-4
研討會(huì)線上報(bào)名系統(tǒng)
「研討會(huì)線上報(bào)名系統(tǒng)」,可以透過Internet,提供線上報(bào)名研討會(huì)的功能。想要參加研討會(huì)的學(xué)生,可以透過Internet,連線上「研討會(huì)線上報(bào)名系統(tǒng)」,輸入其身分證號(hào)碼、要報(bào)名的研討會(huì)課程後,即可完成報(bào)名手續(xù)。報(bào)名系統(tǒng)將自動(dòng)統(tǒng)計(jì)每一個(gè)研討會(huì)課程的報(bào)名人數(shù),若超過名額,將自動(dòng)告之,要求報(bào)名其他的課程。
報(bào)名研討會(huì)時(shí),報(bào)名系統(tǒng)提供可以增加、取消、查詢報(bào)名課程的功能。
學(xué)生可以線上查詢各研討會(huì)課程的授課內(nèi)容簡(jiǎn)介。
學(xué)費(fèi)可由信用卡、劃撥、或銀行轉(zhuǎn)帳來支付。
設(shè)計(jì)實(shí)例
讓我們執(zhí)行一個(gè)實(shí)例。
( 范例 data16.asp 研討會(huì)線上報(bào)名
若要線上報(bào)名研討會(huì),於用戶端使用瀏覽器,瀏覽本書所附安裝於網(wǎng)站伺服器的data16.asp,於「參加研討會(huì)課程」處選擇課程如Windows NT,於「身份證號(hào)碼」處輸入身份證號(hào)碼如A123456789後,按下「報(bào)名」按鈕,即可顯示報(bào)名的結(jié)果如下,包括身份證號(hào)碼、課程、和報(bào)名順序∶
報(bào)名研討會(huì)時(shí),若課程已經(jīng)報(bào)名過,則重覆報(bào)名相同的課程時(shí)將顯示「已經(jīng)報(bào)名」如下∶
報(bào)名研討會(huì)時(shí),若超過研討會(huì)課程的50個(gè)名額時(shí),將顯示「名額已滿」如下∶
取消報(bào)名
報(bào)名研討會(huì)後,可以取消所報(bào)名的課程,於「研討會(huì)課程」處選擇待取消的課程如Windows NT,於「身份證號(hào)碼」處輸入身份證號(hào)碼如A123456789後,按下「取消報(bào)名」按鈕,即可顯示取消報(bào)名的結(jié)果如下∶
若待取消的課程尚未報(bào)名過,則取消報(bào)名時(shí)將顯示「找不到」如下∶
查詢報(bào)名
報(bào)名研討會(huì)後,可以查詢所有報(bào)名的課程,僅須於「身份證號(hào)碼」處輸入身份證號(hào)碼如A123456789後,按下「查詢報(bào)名」按鈕,即可顯示所有報(bào)名的課程如下∶
查詢報(bào)名時(shí),若尚未報(bào)名,則查詢報(bào)名時(shí)將顯示「找不到」如下∶
設(shè)計(jì)實(shí)例詳細(xì)解說
建立資料表
首先使用Microsoft Access、Microsoft SQL Server 、Text檔案、或任何一種支援ODBC的資料庫,建立一個(gè)資料表ClassCount,儲(chǔ)存報(bào)名人數(shù)、和最後報(bào)名順序。
這個(gè)資料表系供報(bào)名和取消報(bào)名時(shí),記錄報(bào)名人數(shù)、和最後報(bào)名順序號(hào)碼之用。建立欄位TOTAL、COUNT0、CLASS,分別代表一個(gè)研討會(huì)課程的報(bào)名人數(shù)、最後報(bào)名順序號(hào)碼、研討會(huì)課程名稱。建立資料表時(shí)不必輸入資料。
使用Microsoft Access建立一個(gè)資料表ClassCount,如下∶
或使用Microsoft SQL Server建立一個(gè)資料表ClassCount,如下∶
或使用Text檔案建立一個(gè)資料表ClassCount,如下∶
尚需要建立另一個(gè)資料表ClassReg,儲(chǔ)存報(bào)名的記錄,建立欄位ID、COUNT0、CLASS,分別代表一筆報(bào)名記錄的報(bào)名者身份證號(hào)碼、報(bào)名順序號(hào)碼、報(bào)名課程名稱。這個(gè)資料表系供報(bào)名、查詢報(bào)名、和取消報(bào)名時(shí),記錄所報(bào)名課程、和報(bào)名順序號(hào)碼之用。建立資料表時(shí)不必輸入資料。
使用Microsoft Access建立一個(gè)資料表ClassReg,如下∶
或使用Microsoft SQL Server建立一個(gè)資料表ClassReg,如下∶
或使用Text檔案建立一個(gè)資料表ClassReg,如下∶
設(shè)計(jì)輸入的表單
接著,設(shè)計(jì)輸入的表單form,當(dāng)學(xué)生選擇研討會(huì)課程CLASS1,輸入報(bào)名者身份證號(hào)碼ID1,按下「報(bào)名」等按鈕submit時(shí),即使用POST的方式將輸入資料傳送到網(wǎng)站伺服器,并執(zhí)行於「form action=...」所設(shè)定的data16.asp檔案(與form為同一個(gè)ASP檔案),
程式碼如下∶
報(bào)名研討會(huì), 請(qǐng)輸入以下資料:<br>
<form action="data16.asp" method="post">
<FONT COLOR="#FF8080">■ </FONT>參加研討會(huì)課程:
<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>報(bào)名者身份證號(hào)碼:
<INPUT TYPE=TEXT VALUE="A123456789" NAME="ID1" SIZE=10><BR>
<INPUT TYPE=submit VALUE="報(bào)名" name="Action">
<INPUT TYPE=submit VALUE="取消報(bào)名" name="Action"><br>
<INPUT TYPE=submit VALUE="查詢報(bào)名" name="Action"> 僅須填入身份證號(hào)碼<br>
</form>
網(wǎng)站伺服器執(zhí)行data16.asp檔案,首先經(jīng)由Request.Form("Action")取得所按submit按鈕上的顯示文字VALUE,Left(Request.Form("Action"),2)系只取前兩個(gè)中文字,若Request.Form("Action")非空白時(shí),表示為表單輸入所呼叫執(zhí)行。
由「SELECT CASE Left(Request.Form("Action"),2) 」判斷是按了那個(gè)按鈕。若按鈕上前兩個(gè)字為「報(bào)名」時(shí),則執(zhí)行AddReg() 副程式;若為「取消」時(shí),則執(zhí)行DeleteReg() 副程式;若為「查詢」時(shí),則執(zhí)行CheckReg() 副程式。
<%
SELECT CASE Left(Request.Form("Action"),2)
CASE "報(bào)名"
AddReg()
CASE "取消"
DeleteReg()
CASE "查詢"
CheckReg()
END SELECT
%>
報(bào)名
按了「報(bào)名」按鈕時(shí),將執(zhí)行AddReg() 副程式。
首先,使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫BookSamp。
再尋找所待新增的報(bào)名記錄,以檢查是否已經(jīng)報(bào)過名,使用SELECT的SQL指令查詢資料庫的資料,於ClassReg資料表,設(shè)定SQL指令,查詢身份證號(hào)碼欄位ID符合所輸入Request.Form("ID1"),和課程欄位CLASS符合所選擇Request.Form("CLASS1")的資料,下個(gè)「Execute」指令,即可開始執(zhí)行存取查詢資料庫的動(dòng)作,并將查詢結(jié)果儲(chǔ)存到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)
接著,要顯示執(zhí)行的結(jié)果了。
首先於ClassReg資料表,尋找報(bào)名的記錄,由「IF RS.EOF THEN ...」判斷是否找到身份證號(hào)碼欄位ID符合所輸入Request.Form("ID1"),和課程欄位CLASS符合所選擇Request.Form("CLASS1")的資料。
若RS.EOF為TRUE,表示此課程尚未報(bào)名,再尋找所待報(bào)名的課程是否已經(jīng)有人報(bào)過名。於ClassCount資料表,設(shè)定SQL指令,查詢課程欄位CLASS符合所選擇Request.Form("CLASS1")的資料。若RS.EOF為TRUE,表示此課程尚未有人報(bào)名,則於ClassCount資料表,使用「INSERT
INTO...」指令新增一筆資料。此筆新增資料的報(bào)名人數(shù)欄位TOTAL、和最後報(bào)名順序號(hào)碼欄位COUNT0都設(shè)定為1,課程名稱欄位CLASS設(shè)定為Request.Form("CLASS1")。
然後再於ClassReg資料表,使用「INSERT INTO...」指令新增一筆資料。此筆新增資料的身份證號(hào)碼欄位ID為Request.Form("ID1") ,報(bào)名順序號(hào)碼欄位COUNT0為1,課程名稱欄位CLASS為Request.Form("CLASS1")。顯示執(zhí)行的結(jié)果時(shí),配合<TABLE>表格的HTML語法,將結(jié)果填入表格的各欄位當(dāng)中。
程式碼,如下∶
<FONT COLOR="#0000FF">線上報(bào)名結(jié)果:</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
'此課程尚未有人報(bào)名 ! 於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">報(bào)名 OK ! 報(bào)名順序?yàn)榈?nbsp;1 號(hào)</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>身份證號(hào)碼</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>研討會(huì)課程</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>報(bào)名順序</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符合所輸入身份證號(hào)碼ID1,和CLASS符合所選擇課程CLASS1的資料,即RS.EOF為FALSE,表示此課程已有人報(bào)名。
由「IF RS(0) < 50 THEN...」判斷RS(0) 報(bào)名人數(shù)TOTAL是否超過50個(gè)名額。
若未超過,則於ClassCount資料表,使用「UPDATE...」指令,將此筆資料的報(bào)名人數(shù)TOTAL、和最後報(bào)名順序號(hào)碼COUNT0都加一。
然後,再於ClassReg資料表,使用「INSERT INTO...」指令新增一筆資料。此筆新增資料的身份證號(hào)碼ID為Request.Form("ID1"),報(bào)名順序號(hào)碼COUNT0為ClassCount?