旅游網站應用設計
發表時間:2023-08-19 來源:明輝站整理相關軟件相關文章人氣:
[摘要]這篇文章介紹運輸旅游網站應用設計,包括時刻表線上查詢系統、線上機票車票訂位系統、旅行社線上查詢報名系統、旅館線上查詢預約系統、郵件運送線上查詢預約系統、等應用的點子、設計實例、以及詳細解說,讓您快速...
這篇文章介紹運輸旅游網站應用設計,包括時刻表線上查詢系統、線上機票車票訂位系統、旅行社線上查詢報名系統、旅館線上查詢預約系統、郵件運送線上查詢預約系統、等應用的點子、設計實例、以及詳細解說,讓您快速地設計出各種運輸旅游的網站應用。
運輸網站資料庫應用
運輸旅游方面,使用網站資料庫,可以透過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 驅動程式」。詳見附錄 范例磁片。
1
時刻表線上查詢系統
「時刻表線上查詢系統」,可以透過Internet,提供查詢時刻表的功能。
旅客透過Internet,連線上航空公司(鐵路局、公路局)的「時刻表線上查詢系統」,可以線上查詢航空班機(火車票、公路局車票)時刻表。
「時刻表線上查詢系統」也可以提供旅游促銷活動、班次起飛到達誤點,或旅游地點的住宿旅館、飲食餐廳、天氣預告、娛樂地點等資訊。
設計實例
讓我們執行一個實例。
( 范例 data8.asp 飛機班機時刻表線上查詢
若要查詢資料,於用戶端使用瀏覽器,瀏覽本書所附安裝於網站伺服器的data8.asp,即可顯示查詢的飛機班機時刻表如下,包括班次、離/到時刻、機型∶
設計實例詳細解說
建立資料表
首先使用Microsoft Access、Microsoft SQL Server 、Text檔案、或任何一種支援ODBC的資料庫,建立一個資料表AirTimeTable。
於欄名FLIGHT、TIME、AIRCRAFT分別輸入班次、離/到時刻、機型的資料。
使用Microsoft Access建立一個資料表AirTimeTable,如下∶
或使用Microsoft SQL Server建立一個資料表AirTimeTable,如下∶
或使用Text檔案建立一個資料表AirTimeTable,如下∶
查詢資料庫
接著,網站伺服器執行data8.asp檔案,使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫BookSamp。
再使用SELECT的SQL指令查詢資料庫的資料,設定SQL指令,下個「Execute」指令,即可開始執行存取查詢資料庫的動作,并將查詢結果儲存到RecordSets物件RS。
程式碼如下∶
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT FLIGHT,TIME,AIRCRAFT FROM AirTimeTable"
Set RS = Conn.Execute(SQL)
%>
接著,要顯示查詢的結果了。
首先,由「 IF RS.EOF THEN ...」判斷是否找到飛機班機時刻表的資料,若RS.EOF為TRUE,則顯示「本月無航空班機」。
若找到飛機班機時刻表的資料,則顯示考上的結果,包括班次、離/到時刻、機型,分別由RecordSets物件的RS(0)、RS(1) 、RS(2) 取得。
RS.Fields.Count表示RecordSets物件的欄位數,由「For i = 0 to RS.Fields.Count - 1」取得RS(i) 各欄位的資料。配合<TABLE>表格的HTML語法,將結果填入表格的各欄位當中。
由「If INT(j/2)*2 <> j Then... 」判斷顯示奇偶筆的班機時刻資料,奇偶列顯示不同的顏色。
若還有下一筆資料,使用RS.MoveNext移到下一筆的位置。
程式碼,如下∶
<% 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="#000080"><FONT>班次</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#000080"><FONT>離/到 時刻</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#000080"><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
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>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT FLIGHT,TIME,AIRCRAFT FROM AirTimeTable"
Set RS = Conn.Execute(SQL)
%>
<HR>
<% 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="#000080"><FONT>班次</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#000080"><FONT>離/到 時刻</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#000080"><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
RS.Close
Conn.Close
%>
</TABLE>
<% END IF %>
<HR>
</CENTER>
</BODY>
</HTML>
2
線上機票車票訂位系統
「線上機票車票訂位系統」,可以透過Internet,提供機票、火車票、公路局車票預約訂位的功能。
旅客透過Internet,連線上航空公司(鐵路局、公路局)的「線上機票車票訂位系統」,可以由電腦輸入班機、身分證號碼、日期,完成機票(火車票、公路局車票)訂位手續。
訂位系統將自動統計每一個班次的訂位人數,若超過名額,將自動告之,要求旅客訂位其他的班次。
訂位時,訂位系統提供可以增加、取消、查詢訂位的功能。
旅客可以線上查詢航空班機(火車票、公路局車票)時刻表。
費用可由信用卡、劃撥、或銀行轉帳來支付。
設計實例
讓我們執行一個實例。
( 范例 data11.asp 線上機票訂位
若要線上訂位機票,於用戶端使用瀏覽器,瀏覽本書所附安裝於網站伺服器的data11.asp,於「身分證字號」處輸入身分證字號如A123456789,於「搭機日期」處輸入搭機日期如870707,於「搭機班次」處輸入搭機班次如103後,按下「訂位」按鈕,即可顯示機票訂位的結果如下,包括身分證字號、搭機日期、搭機班次、定位順序∶
線上訂位機票時,若此班次已經訂位過,則重覆訂位相同的班次將顯示「已經訂過位」如下∶
線上訂位機票時,若超過訂位的300個名額時,則顯示「機位已滿」如下∶
取消訂位
線上訂位機票後,可以取消所訂位的記錄,於「身分證字號」處輸入身分證字號如A123456789,於「搭機日期」處輸入搭機日期如870707,於「搭機班次」處輸入搭機班次如103後,按下「取消訂位」按鈕,即可顯示取消訂位的結果如下∶
若待取消的班次尚未訂位過,則取消訂位時顯示「尚未訂位」如下∶
查詢訂位
線上訂位機票後,可以查詢所有訂位的記錄,僅須於「身分證字號」處輸入身分證字號如A123456789後,按下「查詢」按鈕,即可顯示查詢的結果如下∶
查詢訂位時,若尚未訂位,則查詢訂位將顯示「尚未訂位」如下∶
班機時刻表
按下「班機時刻表」按鈕,即可顯示查詢班機時刻表的結果如下∶
設計實例詳細解說
建立資料表
首先使用Microsoft Access、Microsoft SQL Server 、Text檔案、或任何一種支援ODBC的資料庫,建立一個資料表AirCount,儲存一個班次的預約訂位人數、和最後訂位順序號碼。
這個資料表系供訂位和取消訂位時,記錄一個班次的預約訂位人數、和最後訂位順序號碼之用。
建立欄位TOTAL、COUNT0、DATE0、FLIGHT,分別代表一個班次的預約訂位人數、最後訂位順序號碼、日期、班機。建立資料表時不必輸入資料。
使用Microsoft Access建立一個資料表AirCount,如下∶
或使用Microsoft SQL Server建立一個資料表AirCount,如下∶
或使用Text檔案建立一個資料表AirCount,如下∶
尚需要建立另一個資料表AirTicket,儲存預約訂位的記錄,建立欄位ID、COUNT0、DATE0、FLIGHT,分別代表一筆預約訂位記錄的身分證號碼、訂位順序號碼、日期、班機。
這個資料表系供訂位、查詢訂位、和取消訂位時,記錄一筆預約訂位記錄之用。建立資料表時不必輸入資料。
使用Microsoft Access建立一個資料表AirTicket,如下∶
或使用Microsoft SQL Server建立一個資料表AirTicket,如下∶
或使用Text檔案建立一個資料表AirTicket,如下∶
設計輸入的表單
接著,設計輸入的表單form,當客戶輸入身分證字號ID1、搭機日期DATE1、搭機班次FLIGHT1,按下「訂位」等的按鈕submit時,即使用POST的方式將輸入資料傳送到網站伺服器,并執行於「form action=...」所設定的data11.asp檔案(與form為同一個ASP檔案),程式碼如下∶
機票訂位, 請輸入:<br>
<form action="data11.asp" method="post">
<FONT COLOR="#FF8080">■ </FONT>身分證字號 (如A123456789):
<INPUT TYPE=TEXT VALUE="A123456789" NAME="ID1" SIZE=10><BR>
<FONT COLOR="#FF8080">■ </FONT>搭機日期 (如87年7月1日請輸入870701):
<INPUT TYPE=TEXT VALUE="870701" NAME="DATE1" SIZE=6><BR>
<FONT COLOR="#FF8080">■ </FONT></FONT>搭機班次 (如103):
<INPUT TYPE=TEXT VALUE="103" NAME="FLIGHT1" SIZE=3><BR>
<INPUT TYPE=submit VALUE="訂位" name="Action">
<INPUT TYPE=submit VALUE="取消訂位" name="Action"><br>
<INPUT TYPE=submit VALUE="查詢" name="Action"> 僅須填入身分證字號<br>
</form>
<form>
<INPUT TYPE=button VALUE="班機時刻表" OnClick="location.href='data8.asp'">
</form>
若按下「班機時刻表」的按鈕時,執行data8.asp,以查詢班機時刻表。
網站伺服器執行data11.asp檔案,首先經由Request.Form("Action")取得所按submit按鈕上的顯示文字VALUE,Left(Request.Form("Action"),2)系只取前兩個中文字,若Request.Form("Action")非空白時,表示為表單輸入所呼叫執行。
由「SELECT CASE Left(Request.Form("Action"),2) 」判斷是按了那個按鈕。若按鈕上前兩個字為「訂位」時,則執行AddTicket() 副程式;若為「取消」時,則執行DeleteTicket() 副程式;若為「查詢」時,則執行CheckTicket() 副程式。
<%
SELECT CASE Left(Request.Form("Action"),2)
CASE "訂位"
AddTicket()
CASE "取消"
DeleteTicket()
CASE "查詢"
CheckTicket()
END SELECT
%>
訂位
按了「訂位」按鈕時,將執行AddTicket() 副程式。
首先,使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫BookSamp。
再尋找所待新增的訂位記錄,以檢查是否已經訂過位,使用SELECT的SQL指令查詢資料庫的資料,於AirTicket資料表,設定SQL指令,查詢身分證字號欄位ID符合所輸入Request.Form("ID1"),和欄位DATE0符合所輸入搭機日期Request.Form("DATE1"),及欄位FLIGHT符合所輸入搭機日期Request.Form("FLIGHT1")的資料,下個「Execute」指令,即可開始執行存取查詢資料庫的動作,并將查詢結果儲存到RecordSets物件RS。
程式碼如下∶
Sub AddTicket()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM AirTicket WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
接著,要顯示執行的結果了。
首先於AirTicket資料表,檢查是否已經訂過位,由「IF RS.EOF THEN ...」判斷。若RS.EOF為TRUE,表示此客戶對於此班次尚未訂過位,再尋找是否所待訂位的班次已經有人訂過位。於AirCount資料表,設定SQL指令,查詢欄位DATE0符合所輸入搭機日期Request.Form("DATE1"),及欄位FLIGHT符合所輸入搭機日期Request.Form("FLIGHT1")的資料。若RS.EOF為TRUE,表示此班次尚未有人訂位,則於AirCount資料表,使用「INSERT INTO...」指令新增一筆資料。此筆新增資料的訂位人數欄位TOTAL、和最後訂位順序號碼欄位COUNT0都設定為1,搭機日期欄位DATE0設定為Request.Form("DATE1"),及搭機日期欄位FLIGHT設定為Request.Form("FLIGHT1")。
然後再於AirTicket資料表,使用「INSERT INTO...」指令新增一筆資料。此筆新增資料的訂位順序號碼欄位COUNT0設定為1,身分證字號欄位ID設定為Request.Form("ID1"),搭機日期欄位DATE0設定為Request.Form("DATE1"),及搭機日期欄位FLIGHT設定為Request.Form("FLIGHT1")。
顯示執行的結果時,配合<TABLE>表格的HTML語法,將結果填入表格的各欄位當中。
程式碼,如下∶
<FONT COLOR="#0000FF">訂位結果:</FONT><br>
<%
IF RS.EOF THEN
RS.Close
SQL = "SELECT * FROM AirCount WHERE DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
IF RS.EOF THEN
'此班次尚未有人訂位 ! 於AirCount新增一筆
SQL = "INSERT INTO AirCount(COUNT, TOTAL, DATE0, FLIGHT) VALUES(1,1,'" & Request.Form("DATE1") & "','" & Request.Form("FLIGHT1") & "')"
Set RS = Conn.Execute(SQL)
'AirTicket新增一筆
SQL = "INSERT INTO AirTicket(COUNT0, ID, DATE0, FLIGHT) VALUES(1,'" & Request.Form("ID1") & "','" & Request.Form("DATE1") & "','" & Request.Form("FLIGHT1") & "')"
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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000">1</FONT></TD>
</TR>
</TABLE>
若此班次已有人訂位,即RS.EOF為FALSE。由「IF RS(0) < 300 THEN...」判斷RS(0) 訂位人數TOTAL是否超過300個名額。
若未超過,則於AirCount資料表,使用「UPDATE...」指令,將此筆資料的訂位人數TOTAL、和最後訂位順序號碼COUNT0都加一。
然後,再於AirTicket資料表,使用「INSERT INTO...」指令新增一筆資料。此筆新增資料的訂位順序號碼欄位COUNT0為AirCount資料表的加一後之COUNT0新值,身分證字號欄位ID設定為Request.Form("ID1"),搭機日期欄位DATE0設定為Request.Form("DATE1"),及搭機日期欄位FLIGHT設定為Request.Form("FLIGHT1")。
接著,顯示執行的結果時,配合<TABLE>表格的HTML語法,將於AirTicket資料表新增的資料,填入表格的各欄位當中顯示出來。
程式碼,如下∶
<% ELSE
IF RS(0) < 300 THEN
'此班次已有人訂位 ! AirCount的COUNT0,TOTAL增一
TotalNo = RS(0)+1
CountNo = RS(1)+1
SQL = "UPDATE AirCount SET TOTAL = " & TotalNo & ",COUNT0 = " & CountNo & " WHERE DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
'AirTicket新增一筆
SQL = "INSERT INTO AirTicket(COUNT0, ID, DATE0, FLIGHT) VALUES(" & CountNo & ",'" & Request.Form("ID1") & "','" & Request.Form("DATE1") & "','" & Request.Form("FLIGHT1") & "')"
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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =CountNo %></FONT></TD>
</TR>
</TABLE>
若此班次的訂位人數TOTAL超過300個名額時,則顯示「機位已滿 ! 請定其他班次 !」。
接著,顯示執行的結果,配合<TABLE>表格的HTML語法,將身分證字號和搭機日期等輸入資料,填入表格的各欄位當中顯示出來。
程式碼,如下∶
<% ELSE %>
<% '300機位已滿 %>
<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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
</TR>
</TABLE>
<% END IF %>
<% END IF %>
當於AirTicket資料表,由「IF RS.EOF THEN ...」判斷檢查是否已經訂過位,。若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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =RS(1) %></FONT></TD>
</TR>
</TABLE>
<% END IF
Conn.Close
End Sub %>
最後,使用Conn.Close關閉資料庫。
取消訂位
按了「取消訂位」按鈕時,將執行DeleteTicket() 副程式。
首先,先尋找到所待取消的訂位記錄,使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫BookSamp。
再使用SELECT的SQL指令查詢資料庫的資料,於AirTicket資料表,設定SQL指令,查詢身分證字號欄位ID符合所輸入Request.Form("ID1"),和欄位DATE0符合所輸入搭機日期Request.Form("DATE1"),及欄位FLIGHT符合所輸入搭機日期Request.Form("FLIGHT1")的資料,下個「Execute」指令,即可開始執行存取查詢資料庫的動作,并將查詢結果儲存到RecordSets物件RS。
由「IF RS.EOF THEN ...」判斷是否找到所待取消的訂位記錄,若RS.EOF為TRUE,表示此客戶對於此班次尚未訂位,則顯示「找不到 ! 尚未訂位 !」。
程式碼如下∶
<%
Sub DeleteTicket()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM AirTicket WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
%>
<HR>
<FONT COLOR="#0000FF">取消訂位結果:</FONT><br>
<%
IF RS.EOF THEN
'找不到 ! 尚未訂位 !
%>
<FONT COLOR="#FF0000">找不到 ! 尚未訂位 !</FONT>
若找到所待取消的訂位記錄,則於AirTicket資料表,使用「DELETE FROM...」指令刪除此筆資料。
然後,再於AirCount資料表,使用「UPDATE...」指令,將此筆課程的選課人數TOTAL減一。
接著,顯示執行的結果,配合<TABLE>表格的HTML語法,將於AirTicket資料表刪除的資料,填入表格的各欄位當中,以顯示出來。
程式碼,如下∶
<% ELSE
'取消已經訂過位 !
'AirTicket刪除一筆
SQL = "DELETE FROM AirTicket WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
'AirCount的TOTAL減一
SQL = "SELECT * FROM AirCount WHERE DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
IF RS.EOF THEN
%>
<FONT COLOR="#FF0000">找不到訂位資料 !</FONT>
<%
ELSE
TotalNo = RS(0)-1
SQL = "UPDATE AirCount SET TOTAL = " & TotalNo & " WHERE DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
</TR>
</TABLE>
<% END IF
END IF
Conn.Close
End Sub %>
最後,使用Conn.Close關閉資料庫。
查詢訂位
按了「查詢訂位」按鈕時,執行CheckTicket() 副程式。
首先,先尋找到所待查詢的選課記錄,使用「Server.CreateObject」建立連線的物件,并使用「Open」開啟待存取查詢資料庫BookSamp。
再使用SELECT的SQL指令查詢資料庫的資料,於AirTicket資料表,設定SQL指令,查詢身分證字號欄位ID符合所輸入Request.Form("ID1")的資料,下個「Execute」指令,即可開始執行存取查詢資料庫的動作,并將查詢結果儲存到RecordSets物件RS。
由「IF RS.EOF THEN ...」判斷是否找到所待查詢身分證字號的所有訂位記錄,若RS.EOF為TRUE,表示此客戶尚未訂位,則顯示「找不到 ! 尚未訂位 !」。
程式碼如下∶
<%
Sub CheckTicket()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT ID,DATE0,FLIGHT,COUNT0 FROM AirTicket 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>
<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 "訂位"
AddTicket()
CASE "取消"
DeleteTicket()
CASE "查詢"
CheckTicket()
END SELECT
Sub AddTicket()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM AirTicket WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
%>
<HR>
<FONT COLOR="#0000FF">訂位結果:</FONT><br>
<%
IF RS.EOF THEN
RS.Close
SQL = "SELECT * FROM AirCount WHERE DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
IF RS.EOF THEN
'此班次尚未有人訂位 ! 於AirCount新增一筆
SQL = "INSERT INTO AirCount(COUNT0, TOTAL, DATE0, FLIGHT) VALUES(1,1,'" & Request.Form("DATE1") & "','" & Request.Form("FLIGHT1") & "')"
Set RS = Conn.Execute(SQL)
'AirTicket新增一筆
SQL = "INSERT INTO AirTicket(COUNT0, ID, DATE0, FLIGHT) VALUES(1,'" & Request.Form("ID1") & "','" & Request.Form("DATE1") & "','" & Request.Form("FLIGHT1") & "')"
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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000">1</FONT></TD>
</TR>
</TABLE>
<% ELSE
IF RS(0) < 300 THEN
'此班次已有人訂位 ! AirCount的COUNT0,TOTAL增一
TotalNo = RS(0)+1
CountNo = RS(1)+1
SQL = "UPDATE AirCount SET TOTAL = " & TotalNo & ",COUNT0 = " & CountNo & " WHERE DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
'AirTicket新增一筆
SQL = "INSERT INTO AirTicket(COUNT0, ID, DATE0, FLIGHT) VALUES(" & CountNo & ",'" & Request.Form("ID1") & "','" & Request.Form("DATE1") & "','" & Request.Form("FLIGHT1") & "')"
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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =CountNo %></FONT></TD>
</TR>
</TABLE>
<% ELSE %>
<% '300機位已滿 %>
<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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =RS(1) %></FONT></TD>
</TR>
</TABLE>
<% END IF
Conn.Close
End Sub %>
<%
Sub DeleteTicket()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM AirTicket WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
%>
<HR>
<FONT COLOR="#0000FF">取消訂位結果:</FONT><br>
<%
IF RS.EOF THEN
'找不到 ! 尚未訂位 !
%>
<FONT COLOR="#FF0000">找不到 ! 尚未訂位 !</FONT>
<% ELSE '取消已經訂過位 ! AirTicket刪除一筆
SQL = "DELETE FROM AirTicket WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
'AirCount的TOTAL減一
'RS.Close
SQL = "SELECT * FROM AirCount WHERE DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
Set RS = Conn.Execute(SQL)
IF RS.EOF THEN
%>
<FONT COLOR="#FF0000">找不到訂位資料 !</FONT>
<%
ELSE
TotalNo = RS(0)-1
SQL = "UPDATE AirCount SET TOTAL = " & TotalNo & " WHERE DATE0 = '" & Request.Form("DATE1") & "' AND FLIGHT = '" & Request.Form("FLIGHT1") & "'"
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>
<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("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("FLIGHT1") %></FONT></TD>
</TR>
</TABLE>
<% END IF
END IF
Conn.Close
End Sub %>
<%
Sub CheckTicket()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT ID,DATE0,FLIGHT,COUNT0 FROM AirTicket 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>
<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="data11.asp" method="post">
<FONT COLOR="#FF8080">■ </FONT>身分證字號 (如A123456789):
<INPUT TYPE=TEXT VALUE="A123456789" NAME="ID1" SIZE=10><BR>
<FONT COLOR="#FF8080">■ </FONT>搭機日期 (如87年7月1日請輸入870701):
<INPUT TYPE=TEXT VALUE="870701" NAME="DATE1" SIZE=6><BR>
<FONT COLOR="#FF8080">■ </FONT></FONT>搭機班次 (如103):
<INPUT TYPE=TEXT VALUE="103" NAME="FLIGHT1" SIZE=3><BR>
<INPUT TYPE=submit VALUE="訂位" name="Action">
<INPUT TYPE=submit VALUE="取消訂位" name="Action"><br>
<INPUT TYPE=submit VALUE="查詢" name="Action"> 僅須填入身分證字號<br>
</form>
<form>
<INPUT TYPE=button VALUE="班機時刻表" OnClick="location.href='data8.asp'">
</form>
<HR>
</BODY></HTML>
3
其他運輸旅游網站應用
其他的運輸旅游網站應用,如下∶
旅行社線上查詢報名系統
「旅行社線上查詢報名系統」,可以透過Internet,提供旅游資訊、旅行團報名的功能。
想旅游的人,透過Internet,連線上旅行社的「旅行社線上查詢報名系統」,可以查詢旅游促銷活動、旅游行程日期安排,或旅游地點的住宿旅館、飲食餐廳、天氣預告、娛樂地點圖文簡介等資訊。
可以由電腦輸入身分證號碼、參考旅行團次,完成旅行團報名手續。
已經報名參加的人,可以查詢申請簽證的處里結果、旅游注意事項、天氣預告等資訊。
旅館線上查詢預約系統
「旅館線上查詢預約系統」,可以透過Internet,提供旅館住宿資訊、預約房間的功能。
想旅游住宿的人,透過Internet,連線上旅館的「旅館線上查詢預約系統」,可以查詢旅館住宿房間種類、房間圖片、住宿費、促銷活動、旅館地址、交通工具、附近旅游地點的圖文簡介、飲食餐廳、天氣預告等資訊。
預約系統,并提供透過Internet預約房間的服務。在電腦輸入身分證號碼、預約日期、房間種類,即可完成旅館房間預約的手續。
預約時,預約系統提供可以增加、取消、查詢預約的功能。
住宿費用可由信用卡、劃撥、或銀行轉帳來支付。
郵件運送線上查詢預約系統
「郵件運送線上查詢預約系統」,可以透過Internet,提供查詢運送狀況、預約快遞的功能。
想查詢郵件運送狀況的人,透過Internet,連線上郵局、快遞公司的「郵件運送線上查詢預約系統」,在電腦輸入要查詢的郵件運送號碼,即可查詢郵件運送的狀況,是否已經到達。
送達時將自動傳送E-Mail通知客戶。
「郵件運送線上查詢預約系統」也可提供快遞預約的功能,客戶透過Internet,輸入要預約的取貨地點、運送種類、取貨日期、寄送地點等,即可完成快遞預約的手續,通知來取貨。
預約時,預約系統提供可以增加、取消、查詢預約的功能。
送貨人員取貨、送達時,透過Internet,更新運送的狀況。