推薦:ASP 3.0高級編程(四十一) 9.2.3 存儲過程存儲過程的使用是Command對象得到應用的一個領域。存儲過程(有時也稱存儲查詢)是存儲在數據庫中預先定義的SQL查詢語句。為什麼應該創建和使用存儲過程而不是在代碼中直接使用
這是個關於詞語搭配的遊戲,是用ASP、VBScript和JavaScript寫的。
在本機Win98 OEM2、PWS、IE5下測試下沒發現大問題。
使用方法:
方法一:比方說你的3W服務的目錄是C:/Inetpub/wwwroot,在下面建一個目錄,如wordAsb;將游戲文件(wordAsb.asp)拷入目錄中;在IE的地址欄中鍵入http:// 你的機器名/wordAsb/wordAsb.asp或http://127.0.0.1/wordAsb/wordAsb.asp,回車,就可以開始遊戲了
方法二:將游戲文件(wordAsb.asp)隨便拷入一新建的目錄。鼠標右鍵點擊該目錄,菜單中選屬性,點Web Sharing屬性頁,點選Share this folder項,點OK就可以了。在IE的地址欄中鍵入http:// 你的機器名/新建目錄的名稱/wordAsb.asp或http://127.0.0.1/ 新建目錄的名稱/wordAsb.asp,回車,就可以開始遊戲了。
注:您的機子OS應該是NT或Win2000 Server或其他OS但是裝有PWS
遊戲方法:
單擊遊戲中的遊戲說明就知道了;如果有時頁面一片空白,請按F5刷新一遍(這也是目前最大的bug吧)。
代碼如下:
| 以下為引用的內容: <%@ Language = VBScript%> <% Option Explicit 'Last Updated By Recon On 03/16/2001 Dim m_iPartCnt Dim m_strPrompt Dim m_astrSenPart(), m_astrFileName() Dim m_astrWords(), m_aiOpStatus() '------------------------------------------ '常變量說明 'm_iPartCnt :詞彙分類的數目。整型 'm_strPrompt :對文件操作完畢後的提示。字符串型 'm_astrSenPart :詞彙分類的名稱。字符型數組 'm_astrFileName :記錄各類詞彙文件的文件名。字符型數組 'm_astrWords :紀錄各類詞彙。二維字符型數組 'm_aiOpStatus :紀錄對各個文件操作後的狀態。整型數組 '------------------------------------------ 'ShowMethod m_iPartCnt = 4 m_strPrompt = ReDim m_astrSenPart(m_iPartCnt) ReDim m_astrFileName(m_iPartCnt) ReDim m_astrWords(m_iPartCnt) ReDim m_aiOpStatus(m_iPartCnt) '定義各種詞彙分類的名稱 m_astrSenPart(0) = 主語 m_astrSenPart(1) = 程度狀語 m_astrSenPart(2) = 地點狀語 m_astrSenPart(3) = 謂語 '定義記載各類詞彙文件的名稱 m_astrFileName(0) = Who.txt m_astrFileName(1) = How.txt m_astrFileName(2) = Where.txt m_astrFileName(3) = What.txt If Request.ServerVariables(REQUEST_METHOD) = POST Then '如果頁面的請求方式是POST '************************ '獲得客戶端的信息 '************************ Dim m_iSenPart Dim m_strOpWay Dim m_bRptedData '------------------------------------------ '常變量說明 'm_iSenPart :表示詞彙分類的數字。整型 ' 詞彙的分類來自數組m_astrSenPart ' 可能的值有: ' 0:主語 ' 1:程度狀語 ' 2:地點狀語 ' 3:謂語 'm_strOpWay :文件操作方式。字符串型 ' 可能的值有: ' 1、SAVE :將某類詞彙存入文件 ' 2、SAVEALL :將所有類別的詞彙存入文件 ' 3、LOAD :從文件中載入某類詞彙 ' 4、LOADALL :從文件中載入所有類別的詞彙 'm_bRptedData :表示本次提交的表單數據和上次是否相同。布爾型 ' 可能的值有: ' 1、False :表單數據不重複 ' 2、True :表單數據重複(即重複提交表單) '------------------------------------------ 'ShowForm '獲得用戶請求的操作方式 m_strOpWay = Request.Form(txtOpWay) 'Show(m_strOpWay) '獲得各個類別的單詞 For m_iCount = 0 To (m_iPartCnt - 1) If Request.Form(txtWords & m_iCount) <> Then m_astrWords(m_iCount) = Split(Request.Form(txtWords & m_iCount), ,) End If 'Response.Write UBound(m_astrWords(m_iCount)) & <br> Next '檢測是否重複提交表單 'If Session(FormInf) = Request.Form Then ' '表單是重複提交 ' m_bRptedData = True 'Else ' '表單是非重複提交 ' Session(FormInf) = Request.Form ' m_bRptedData = False 'End If 'Show(m_bRptedData) '************************ '對單詞文件進行操作 '************************ 'If m_bRptedData = False Then Dim m_iCount, m_iErrCnt Dim m_strFilePath '------------------------------------------ '常變量說明 'm_iCount :計數器。整型 'm_iErrCnt :發生操作失敗的次數。整型 'm_strFilePath :記錄各類詞彙文件的路徑。字符串型 '------------------------------------------ '獲得放置詞彙文件的路徑 m_strFilePath = Request.ServerVariables(PATH_TRANSLATED) m_strFilePath = Left(m_strFilePath, InStrRev(m_strFilePath, /)) 'm_strFilePath = m_strFilePath & Words/ 'Show(m_strFilePath) '開始操作文件 'Response.Write Begin to Operate Word Files<br> Select Case m_strOpWay Case SAVE '保存單詞到文件中 m_iSenPart = CInt(Request.Form(txtSenPart)) m_aiOpStatus(m_iSenPart) = SaveFile(m_iSenPart) '根據操作狀態,得到提示信息 Select Case m_aiOpStatus(m_iSenPart) Case 0 m_strPrompt = [ & m_astrSenPart(m_iSenPart) & ]部分單詞已成功地被保存到文件中 Case 1 m_strPrompt = [ & m_astrSenPart(m_iSenPart) & ]部分文件保存失敗 End Select Case SAVEALL '保存所有類別的單詞到文件中 m_iErrCnt = 0 For m_iCount = 0 To (m_iPartCnt - 1) m_aiOpStatus(m_iCount) = SaveFile(m_iCount) If m_aiOpStatus(m_iCount) = 1 Then m_iErrCnt = m_iErrCnt 1 End If Next '根據操作狀態,得到提示信息 Select Case m_iErrCnt Case 0 m_strPrompt = 所有類別的單詞都已成功地被保存到文件中 Case m_iPartCnt m_strPrompt = 所有類別的單詞文件都保存失敗 Case Else m_strPrompt = 其中, For m_iCount = 0 To (m_iPartCnt - 1) If m_aiOpStatus(m_iCount) = 1 Then m_strPrompt = m_strPrompt & [ & m_astrSenPart(m_iCount) & ]、 End If Next m_strPrompt = Left(m_strPrompt, Len(m_strPrompt) - 1) m_strPrompt = m_strPrompt & 部分文件保存失敗 End Select Case LOAD '從文件中載入單詞 m_iSenPart = CInt(Request.Form(txtSenPart)) m_aiOpStatus(m_iSenPart) = LoadFile(m_iSenPart) '根據操作狀態,得到提示信息 Select Case m_aiOpStatus(m_iSenPart) Case 0 m_strPrompt = [ & m_astrSenPart(m_iSenPart) & ]部分單詞已成功地被載入 Case 1 m_strPrompt = [ & m_astrSenPart(m_iSenPart) & ]部分文件不存在,載入失敗 End Select Case LOADALL '從各個文件中載入單詞 m_iErrCnt = 0 For m_iCount = 0 To (m_iPartCnt - 1) m_aiOpStatus(m_iCount) = LoadFile(m_iCount) If m_aiOpStatus(m_iCount) = 1 Then m_iErrCnt = m_iErrCnt 1 End If Next '根據操作狀態,得到提示信息 Select Case m_iErrCnt Case 0 m_strPrompt = 所有類別的單詞都已成功地被載入 Case m_iPartCnt m_strPrompt = 所有類別的單詞文件都不存在,載入完全失敗 Case Else m_strPrompt = 其中, For m_iCount = 0 To (m_iPartCnt - 1) If m_aiOpStatus(m_iCount) = 1 Then m_strPrompt = m_strPrompt & [ & m_astrSenPart(m_iCount) & ]、 End If Next m_strPrompt = Left(m_strPrompt, Len(m_strPrompt) - 1) m_strPrompt = m_strPrompt & 部分文件不存在,載入部分失敗 End Select End Select 'End If End If 'Response.Write End to Operate Word Files<br> 'Response.Write Begin to Write Client Page<br> %> <html> <head> <title> 詞語搭配遊戲</title> <meta name=Generator content=EditPlus> <meta name=Author content=> <meta name=Keywords content=> <meta name=Description content=> <!--風格表--> <style> <!-- /*英文字體1*/ .fontEng1 { font-family: TIMES NEW ROMAN; font-style: ; } /*英文字體2*/ .fontEng2 { font-family: TIMES NEW ROMAN; font-style: ITALIC; } /*強調字體*/ .fontEmp { color: RED; } /*鏈接*/ .link { font-family: TIMES NEW ROMAN; font-style: ITALIC; text-decoration: NONE; } /*被顯示的單詞列表*/ .listShown { position: ABSOLUTE; width: 140px; height: 200px; display: INLINE; border: LIGHTCORAL 1px SOLID; background-color: GAINSBORO; } /*被隱藏的單詞列表*/ .listHidden { position: ABSOLUTE; width: 140px; height: 200px; display: NONE; border: LIGHTCORAL 1px SOLID; background-color: GAINSBORO; } /*被固定的單詞列表*/ .listFixed { position: ABSOLUTE; width: 140px; height: 200px; display: INLINE; border: RED 1px SOLID; background-color: GAINSBORO; } /*被顯示的幫助列表*/ .helpShown { position: ABSOLUTE; width: ; height: ; display: block; border: LIGHTCORAL 1px SOLID; background-color: GAINSBORO; } /*被隱藏的幫助列表*/ .helpHidden { position: ABSOLUTE; width: ; height: ; display: NONE; border: LIGHTCORAL 1px SOLID; background-color: GAINSBORO; } /*被固定的幫助列表*/ .helpFixed { position: ABSOLUTE; width: ; height: ; display: block; border: RED 1px SOLID; background-color: GAINSBORO; } /*被強調顯示的標籤*/ .lblMOver { text-decoration: NONE; color: LIGHTCORAL; background-color: ; } /*正常顯示的標籤*/ .lblMOut { text-decoration: NONE; color: ; background-color: ; } /*被點擊過的標籤*/ .lblClicked { text-decoration: UNDERLINE; color: RED; background-color: ; } /*高亮顯示的按鈕*/ .btnLighted { width: 105px; color: BLUE; background-color: ; } /*正常顯示的按鈕*/ .btnDelighted { width: 105px; color: ; background-color: ; } /*高亮顯示的單詞列表項*/ .optLighted { text-decoration: UNDERLINE; color: BLUE; background-color: ; cursor: HAND; } /*正常顯示的單詞列表項*/ .optDelighted { text-decoration: NONE; color: ; background-color: ; cursor: ; } --> </style> <!--客戶端腳本--> <script language=JavaScript> <!-- //客戶端公用及測試函數 //************************ //函數名:lTrim //功能:去掉字串左邊的空格 //輸入:1、strTemp :要規整的字串。字符串型 //輸出:規整後的字串。字符串型 //************************ function lTrim(strTemp) { var iCount, iLength; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //iLength :字串的長度。整型 //------------------------------------------ iLength = strTemp.length; for (iCount = 0; iCount < iLength; iCount ) if (strTemp.charAt(iCount) != ) return strTemp.substring(iCount, iLength); return ; } //************************ //函數名:rTrim //功能:去掉字串右邊的空格 //輸入:1、strTemp :要規整的字串。字符串型 //輸出:規整後的字串。字符串型 //************************ function rTrim(strTemp) { var iCount, iLength; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //iLength :字串的長度。整型 //------------------------------------------ iLength = strTemp.length; for(iCount = iLength - 1; iCount >= 0; iCount --) if (strTemp.charAt(iCount) != ) return strTemp.substring(0, iCount 1); return ; } //************************ //函數名:trim //功能:去掉字串兩邊的空格 //輸入:1、strTemp :要規整的字串。字符串型 //輸出:規整後的字串。字符串型 //************************ function trim(strTemp) { return rTrim(lTrim(strTemp)); } //將2位數字轉換成2位數字字串 //************************ //函數名:get2bNumStr //功能:轉換2位的數字成2位的數字字串 //輸入:1、iNumber :要轉換的數字。整型 //輸出:轉換後得到的數字字串。整型 //************************ function get2bNumStr(iNumber) { var str2bNum; //------------------------------------------ //常變量說明 //str2bNum :數字字串。字符串型 //------------------------------------------ if (parseInt(iNumber) < 10) str2bNum = 0 iNumber; else str2bNum = iNumber; return str2bNum; } //************************ //函數名:assignFunc //功能:指定元素的事件處理函數 //輸入:1、ele :要指定事件處理函數的元素。對象型 // 2、func :事件處理函數。函數型 // 3、event :事件類型。字符串型 //輸出:無 //************************ function assignFunc(ele, func, event) { var iCount, iEleCount; var strEvent; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //iEleCount :同名元素集合中元素的個數。整型 //strEvent :事件類型。字符串型 //------------------------------------------ if (event == null) strEvent = onclick; else strEvent = event; iEleCount = ele.length; if (iEleCount == undefined) eval(ele. strEvent = func); else for (iCount = 0; iCount < iEleCount; iCount ) eval(ele[iCount]. strEvent = func); } //************************ //函數名:getEleIndex //功能:得到發生事件的元素在同名集合中的索引 //輸入:1、eleSrc :發生事件的元素。對象型 //輸出:發生事件的元素在同名集合中的索引 //************************ function getEleIndex(eleSrc) { var colSrc; var iCount, iEleCount; //------------------------------------------ //常變量說明 //colSrc :同名元素集合。對象型數組 //iCount :計數器。整型 //iEleCount :同名元素集合中元素的個數。整型 //------------------------------------------ colSrc = eval(eleSrc.id); iEleCount = colSrc.length; for (iCount = 0; iCount < iEleCount; iCount ) { if (colSrc[iCount] == eleSrc) return iCount; } return -1; } //顯示常變量的值(調試用) //!準備刪去 function show(strDef1, strDef2, strDef3, strDef4) { var iCount, iDefCnt; var strShow, strTemp; iDefCnt = 4; strShow = [常變量值]; for (iCount = 1; iCount <= iDefCnt; iCount ) { strTemp = eval(strDef iCount); if (strTemp != undefined && strTemp != null) strShow = /n strTemp : eval(strTemp); } alert(strShow); } //************************ //函數名:showArray //功能:顯示一維數組的元素(調試用) //輸入:1、array :要顯示的一維數組。數組 //輸出:無 //************************ function showArray(array) { var iCount, iEleCount; var strShow; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //iEleCount :數組元素的個數。整型 //strShow :數組元素值構成的字串。字符串型 //------------------------------------------ iEleCount = array.length; strShow = Array Length: iEleCount; strShow = /n---------------------------------/n; for (iCount = 0; iCount < iEleCount; iCount ) { if (typeof(array[iCount]) == object) strShow = array[iCount].id ; else strShow = array[iCount] ; } alert(strShow); } //************************ //函數名:show2DArray //功能:顯示二維數組的元素(調試用) //輸入:1、array :要顯示的二維數組。數組 //輸出:無 //************************ function show2DArray(array) { var iX, iY, iLen1, iLen2; var strShow; //------------------------------------------ //常變量說明 //iX :計數器。整型 //iY :計數器。整型 //iLen1 :數組一維的數目。整型 //iLen2 :數組二維的數目。整型 //strShow :數組元素值構成的字串。字符串型 //------------------------------------------ iLen1 = array.length; strShow = Array 1D Length: iLen1; strShow = /n---------------------------------; for (iX = 0; iX < iLen1; iX ) { strShow = /n; iLen2 = array[iX].length; for (iY = 0; iY < iLen2; iY ) strShow = array[iX][iY] ; } alert(strShow); } //--> </script> <script language=JavaScript> <!-- //--------------------函數列表-------------------------- //window_onload // //getWord //reset //save //load // //showList //hideList //fixList //valueList // //showHelp //hideHelp //fixHelp // //resetAll //saveAll //loadAll //assemble // //lightBtn //delightBtn //lightOpt //delightOpt // //makeOpt //removeOpt //----------------------------------------------------------- var m_iPartCnt; var m_astrSenPart, m_astrWords; var m_strPrompt; var m_iListFixed, m_iHelpFixed; //------------------------------------------ //常變量說明 //m_iPartCnt :詞彙分類的數目。整型 //m_astrSenPart :詞彙分類的名稱。字符型數組 //m_astrWords :紀錄各類詞彙。二維字符型數組 //m_strPrompt :文件操作完畢後的提示信息。字符串型 //m_iListFixed :代表被固定單詞列表的數字。整型 // -1表示沒有單詞列表被固定 //m_iHelpFixed :表示幫助列表固定狀態的數字。整型 // -1表示幫助列表沒有被固定 //------------------------------------------ window.onload = window_onload; //----------------------------------------------------------- //初始化頁面 function window_onload() { var iCount, iEleCnt; var colButton; var strHelp; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //iEleCnt :集合中元素的個數。整型 //colButton :BUTTON元素的集合。對象型數組 //strHelp :幫助文件內容。字符串型 //------------------------------------------ m_iPartCnt = <%= m_iPartCnt%>; m_strPrompt = <%= m_strPrompt%>; m_iListFixed = -1; m_iHelpFixed = -1; m_astrSenPart = new Array(); m_astrWords = new Array(); //alert(m_iPartCnt: m_iPartCnt /nm_strPrompt: m_strPrompt); //得到詞彙分類的名稱和已載入的各類詞彙 <%For m_iCount = 0 To (m_iPartCnt - 1)%> //得到已載入的各類詞彙 <%If IsEmpty(m_astrWords(m_iCount)) = True Then%> m_astrWords[<%= m_iCount%>] = new Array(); <%Else%> m_astrWords[<%= m_iCount%>] = <%= Join(m_astrWords(m_iCount), ,)%>.split(,); <%End If%> //得到詞彙分類的名稱 m_astrSenPart[<%= m_iCount%>] = <%= m_astrSenPart(m_iCount)%>; <%Next%> //show2DArray(m_astrWords); //showArray(m_astrSenPart); //將已載入的各類詞彙寫入到頁面中 for (iCount = 0; iCount < m_iPartCnt; iCount ) valueList(m_astrWords[iCount], iCount); //載入幫助文件 //strHelp = tblHelp.outerHTML; //strHelp = divHelp1.innerHTML; //tblHelp.outerHTML = ; //divHelp.innerHTML = strHelp; //tblHelp.style.display = ; //divHelp.style.display = NONE; //divHelp.style.left = divHelp1.style.left; //alert(left: divHelp.style.left /nleft: divHelp1.style.left); //alert(pixelleft: divHelp.style.pixelLeft /npixelleft: divHelp1.style.pixelLeft); //alert(posLeft: divHelp.style.posLeft /nposLeft: divHelp1.style.posLeft); //alert(offsetLeft : divHelp.offsetLeft /noffsetLeft : divHelp1.offsetLeft ); //alert(clientLeft : divHelp.clientLeft /nclientLeft : divHelp1.clientLeft ); //指定頁面元素的事件處理函數 assignFunc(txtWord, getWord, onkeypress); assignFunc(btnGetWord, getWord); assignFunc(btnReset, reset); assignFunc(btnSave, save); assignFunc(btnLoad, load); assignFunc(lblWordList, showList, onmouseover); assignFunc(lblWordList, hideList, onmouseout); assignFunc(lblWordList, fixList); assignFunc(lblHelp, showHelp, onmouseover); assignFunc(lblHelp, hideHelp, onmouseout); assignFunc(lblHelp, fixHelp); assignFunc(btnResetAll, resetAll); assignFunc(btnSaveAll, saveAll); assignFunc(btnLoadAll, loadAll); assignFunc(btnAsb, assemble); colButton = document.all.tags(BUTTON); iEleCnt = colButton.length; //showArray(colButton); //alert(iEleCnt: iEleCnt); for (iCount = 0; iCount < iEleCnt; iCount ) { assignFunc(colButton[iCount], lightBtn, onmouseover); assignFunc(colButton[iCount], delightBtn, onmouseout); } //設置頁面初始狀態 if (m_strPrompt != ) alert(m_strPrompt); txtWord[0].focus(); } //----------------------------------------------------------- //得到用戶輸入的單詞 function getWord() { //只有當在單詞輸入框中按回車或 //按保存按鈕時才繼續做下去 if (window.event.type != keypress && window.event.type != click) return; else if (window.event.type == keypress && window.event.keyCode != 13) return; var eleSrc; var iIndex, iNxtWrdIdx; var strWord; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //iIndex :表示詞彙分類的數字。整型 //iNxtWrdIdx :新單詞在單詞數組中的索引。整型 //strWord :用戶輸入的單詞。字符串型 //------------------------------------------ eleSrc = window.event.srcElement; iIndex = getEleIndex(eleSrc); //獲得索引 strWord = trim(txtWord[iIndex].value); //獲得用戶輸入的單詞 //檢測輸入的單詞是否合法 //若是非法的單詞則退出 if (strWord == ) { //若輸入的單詞為空或空格字符串 alert(單詞不能為空或空格字符串); txtWord[iIndex].select(); return; } if (strWord.indexOf(,) != -1 || strWord.indexOf( ) != -1) { //若輸入的單詞包含逗號或空格 alert(單詞不能包含逗號或空格); txtWord[iIndex].select(); return; } //將單詞保存到詞彙數組中 iNxtWrdIdx = m_astrWords[iIndex].length; m_astrWords[iIndex][iNxtWrdIdx] = strWord; //showArray(m_astrWords[iIndex]); //將單詞寫入到頁面中 valueList(m_astrWords[iIndex], iIndex); txtWord[iIndex].value = ; txtWord[iIndex].focus(); } //----------------------------------------------------------- //將當前類別所有的單詞從內存中刪去 function reset() { var eleSrc; var iIndex, iCount; var strPrompt; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //iIndex :表示詞彙分類的數字。整型 //iCount :計數器。整型 //strPrompt :操作提示。字符串型 //------------------------------------------ eleSrc = window.event.srcElement; iIndex = getEleIndex(eleSrc); strPrompt = 您確定要從內存中清除[ m_astrSenPart[iIndex] ]部分所有的單詞嗎? ; if (window.confirm(strPrompt) == false) return; m_astrWords[iIndex] = new Array(); valueList(m_astrWords[iIndex], iIndex); //showArray(m_astrWords[iIndex]); strPrompt = 單詞清除完畢; alert(strPrompt); txtWord[iIndex].select(); } //----------------------------------------------------------- //將所選類別的當前詞彙保存進文件中 function save() { var eleSrc; var iIndex, iCount; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //iIndex :表示詞彙分類的數字。整型 //iCount :計數器。整型 //------------------------------------------ eleSrc = window.event.srcElement; iIndex = getEleIndex(eleSrc); if (m_astrWords[iIndex].length == 0) { //如果所選類別的當前單詞個數為零 var strPrompt; strPrompt = [ m_astrSenPart[iIndex] ]部分現在一個可選單詞也沒有,您確定要保存嗎? ; strPrompt = /n(這樣將生成一個空的新文件); if (window.confirm(strPrompt) == false) return; } //保存當前內存中所有的單詞 for (iCount = 0; iCount < m_iPartCnt; iCount ) eval(frmWords.txtWords iCount).value = m_astrWords[iCount].join(,); frmWords.txtSenPart.value = iIndex; frmWords.txtOpWay.value = SAVE; frmWords.submit(); } //----------------------------------------------------------- //從文件中讀取所選類別的單詞紀錄 function load() { var eleSrc; var iIndex, iCount; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //iIndex :表示詞彙分類的數字。整型 //iCount :計數器。整型 //------------------------------------------ eleSrc = window.event.srcElement; iIndex = getEleIndex(eleSrc); //保存當前內存中所有的單詞 for (iCount = 0; iCount < m_iPartCnt; iCount ) eval(frmWords.txtWords iCount).value = m_astrWords[iCount].join(,) frmWords.txtSenPart.value = iIndex; frmWords.txtOpWay.value = LOAD; frmWords.submit(); } //----------------------------------------------------------- //顯示詞彙列表 function showList(iIndex) { //如果未給定參數iIndex //獲得iIndex if (iIndex == undefined) { //如果已有單詞列表被固定,退出函數 if (m_iListFixed != -1) return; var eleSrc; var iIndex; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //iIndex :表示詞彙分類的數字。整型 //------------------------------------------ eleSrc = window.event.srcElement; iIndex = getEleIndex(eleSrc); } //alert(iIndex: iIndex); //顯示詞彙列表 //lblWordList[iIndex].innerText = [ lblWordList[iIndex].innerText ]; //lblWordList[iIndex].innerText = lblWordList[iIndex].innerText >; lblWordList[iIndex].className = lblMOver; divWordList[iIndex].className= listShown; } //----------------------------------------------------------- //隱藏詞彙列表 function hideList(iIndex) { //如果未給定參數iIndex //獲得iIndex if (iIndex == undefined) { //如果已有單詞列表被固定,退出函數 if (m_iListFixed != -1) return; var eleSrc; var iIndex; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //iIndex :表示詞彙分類的數字。整型 //------------------------------------------ eleSrc = window.event.srcElement; iIndex = getEleIndex(eleSrc); } //alert(iIndex: iIndex); //隱藏詞彙列表 //lblWordList[iIndex].innerText = lblWordList[iIndex].innerText.slice(0, -1); lblWordList[iIndex].className = lblMOut; divWordList[iIndex].className= listHidden; } //----------------------------------------------------------- //固定詞彙列表 function fixList() { var eleSrc; var iIndex; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //iIndex :表示詞彙分類的數字。整型 //------------------------------------------ eleSrc = window.event.srcElement; iIndex = getEleIndex(eleSrc); switch (m_iListFixed) { case -1: //如果還沒有單詞列表被固定 //固定當前列表 m_iListFixed = iIndex; lblWordList[iIndex].className = lblClicked; divWordList[iIndex].className= listFixed; break; case iIndex: //如果被固定單詞列表是當前列表 //解固當前列表 m_iListFixed = -1; lblWordList[iIndex].className = lblMOver; divWordList[iIndex].className= listShown; break; default: //如果被固定單詞列表不是當前列表 //解固被固定列表 hideList(m_iListFixed); m_iListFixed = -1; lblWordList[iIndex].className = lblMOver; showList(iIndex); break; } //alert(m_iListFixed: m_iListFixed /niIndex: iIndex); } //----------------------------------------------------------- //寫入某類詞彙已載入的單詞 function valueList(aWords, iSenPart) { var iCount, iWrdCnt; var strListPpt; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //iWrdCnt :某類詞彙單詞的數目。整型 //strListPpt :單詞列表中的提示。字符串型 //------------------------------------------ //數據準備 iWrdCnt = aWords.length; lblWordCount[iSenPart].innerText = iWrdCnt; strListPpt = <div><span style='color: RED; font-style: Italic; font-size: 10.5pt;'>; strListPpt = 雙擊單詞將其刪除</span></div>; //將單詞寫入列表 if (iWrdCnt != 0) { divWordList[iSenPart].innerHTML = strListPpt; for (iCount = 0; iCount < iWrdCnt; iCount ) divWordList[iSenPart].innerHTML = makeOpt(aWords[iCount], iCount); } else divWordList[iSenPart].innerHTML = strListPpt; } //----------------------------------------------------------- //顯示幫助列表 function showHelp() { //如果幫助列表已被固定,退出函數 if (m_iHelpFixed == 0) return; //顯示幫助 lblHelp.className = lblMOver; divHelp.className = helpShown; } //----------------------------------------------------------- //隱藏幫助列表 function hideHelp() { //如果幫助列表已被固定,退出函數 if (m_iHelpFixed == 0) return; //隱藏幫助 lblHelp.className = lblMOut; divHelp.className = helpHidden; } //----------------------------------------------------------- //固定幫助列表 function fixHelp() { if (m_iHelpFixed == -1) { //如果幫助列表還未被固定 //固定它 m_iHelpFixed = 0; lblHelp.className = lblClicked; divHelp.className = helpFixed; } else { //如果幫助列表已被固定 //解固它 m_iHelpFixed = -1; lblHelp.className = lblMOver; divHelp.className = helpShown; } } //----------------------------------------------------------- //重置頁面至初始狀態 function resetAll() { var iCount; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //------------------------------------------ for (iCount = 0; iCount < m_iPartCnt; iCount ) { txtWord[iCount].value= ; m_astrWords[iCount] = new Array(); //將單詞數組清空 valueList(m_astrWords[iCount], iCount); } txtSentence.value = ; txtWord[0].focus(); } //----------------------------------------------------------- //把所有類別的單詞都存入文件 function saveAll() { var iCount, iEmptyCnt; var strPrompt; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //iEmptyCnt :單詞數目為0的類別個數。整型 //strPrompt :操作提示。字符串型 //------------------------------------------ iEmptyCnt = 0; for (iCount = 0; iCount < m_iPartCnt; iCount ) { //保存當前內存中所有的單詞 eval(frmWords.txtWords iCount).value = m_astrWords[iCount].join(,); if (m_astrWords[iCount].length == 0) iEmptyCnt ; } //alert(iEmptyCnt: iEmptyCnt); if (iEmptyCnt > 0) { switch (iEmptyCnt) { case m_iPartCnt: strPrompt = 所有類別的詞彙單詞個數都為0,操作將會產生m_iPartCnt 個空文件; strPrompt = /n您確定要這樣做嗎? ; break; default: strPrompt = 其中,; for (iCount = 0; iCount < m_iPartCnt; iCount ) if (m_astrWords[iCount].length == 0) strPrompt = [ m_astrSenPart[iCount] ]、; strPrompt = strPrompt.slice(0, -1); strPrompt = 部分單詞個數為0; strPrompt = /n操作將會產生iEmptyCnt 個空文件; strPrompt = ,您確定要這樣做嗎? ; } if (window.confirm(strPrompt) == false) return; } frmWords.txtOpWay.value = SAVEALL; frmWords.submit(); } //----------------------------------------------------------- //從文件中載入所有類別的單詞 function loadAll() { var iCount; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //------------------------------------------ //保存當前內存中所有的單詞 for (iCount = 0; iCount < m_iPartCnt; iCount ) eval(frmWords.txtWords iCount).value = m_astrWords[iCount].join(,) frmWords.txtOpWay.value = LOADALL; frmWords.submit(); } //----------------------------------------------------------- //進行詞彙搭配,得到一個句子 function assemble() { var iCount, iWrdCnt, iRndIndex; var strSentence; //------------------------------------------ //常變量說明 //iCount :計數器。整型 //iWrdCnt :某類詞彙單詞的個數。整型 //iRndIndex :隨機產生的單詞索引。整型 //strSentence :由各個類別詞彙中的隨機單詞組成的句子。字符串型 //------------------------------------------ strSentence = ; for (iCount = 0; iCount < m_iPartCnt; iCount ) { //如果當前類別詞彙的個數為0 //給出提示,併中止搭配 iWrdCnt = m_astrWords[iCount].length; if (iWrdCnt == 0) { var strPrompt; //------------------------------------------ //常變量說明 //strPrompt :操作提示。字符串型 //------------------------------------------ strPrompt = [ m_astrSenPart[iCount] ]部分一個可選單詞也沒有; strPrompt = /n請至少輸入一個單詞; alert(strPrompt); txtWord[iCount].select(); return; } //隨機抽取當前類別詞彙中的一個單詞 //加入到句子中 iRndIndex = Math.floor(Math.random()*iWrdCnt); strSentence = m_astrWords[iCount][iRndIndex]; //alert(iWrdCnt: iWrdCnt /niRndIndex: iRndIndex); } strSentence = 。 ; txtSentence.value = strSentence; } //使鼠標移到之處的按鈕 //產生點亮的效果 function lightBtn() { var eleSrc; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //------------------------------------------ eleSrc = window.event.srcElement; while (eleSrc.tagName.toUpperCase() != BUTTON) eleSrc = eleSrc.parentElement; eleSrc.className = btnLighted; } //使鼠標離開的按鈕 //還原為初始狀態 function delightBtn() { var eleSrc; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //------------------------------------------ eleSrc = window.event.srcElement; while (eleSrc.tagName.toUpperCase() != BUTTON) eleSrc = eleSrc.parentElement; eleSrc.className = btnDelighted; } //在列表中,使鼠標移到之處的單詞 //產生點亮的效果 function lightOpt(ele) { var eleSrc; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //------------------------------------------ eleSrc = ele; eleSrc.className = optLighted; } //在列表中,使鼠標離開的單詞 //還原為初始狀態 function delightOpt(ele) { var eleSrc; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //------------------------------------------ eleSrc = ele; eleSrc.className = optDelighted; } //得到定義過的將加入列表的單詞 function makeOpt(strWord, iWrdIdx) { var strOptHead, strOptFoot; var strOptWord; //------------------------------------------ //常變量說明 //strOptHead :重定義單詞頭。字符串型 //strOptFoot :重定義單詞尾。字符串型 //strOptWord :重定義單詞。字符串型 //------------------------------------------ strOptHead = <div class='optDelighted' onmouseover='lightOpt(this);' onmouseout='delightOpt(this);' ondblclick='removeOpt(this);' wrdIdx=' iWrdIdx '>; strOptFoot = </div>; strOptWord = strOptHead strWord strOptFoot; //alert(strOptWord); return strOptWord; } //刪除列表中的單詞 function removeOpt(ele) { var eleSrc; var iIndex, iWrdIdx; var astrWords, astrHead, astrFoot; //------------------------------------------ //常變量說明 //eleSrc :發生事件的元素 //iIndex :表示詞彙分類的數字。整型 //iWrdIdx :單詞在單詞數組中的索引。整型 //astrWords :某類詞彙單詞數組。字符串型數組 //astrHead :某類詞彙單詞數組頭部分。字符串型數組 //astrFoot :某類詞彙單詞數組尾部分。字符串型數組 //------------------------------------------ eleSrc = ele; iIndex = getEleIndex(eleSrc.parentElement); iWrdIdx = parseInt(eleSrc.wrdIdx); //將單詞從詞彙數組中刪去 //showArray(m_astrWords[iIndex]); astrWords = m_astrWords[iIndex].concat(); astrHead = astrWords.slice(0, iWrdIdx); astrFoot = astrWords.slice(iWrdIdx 1); m_astrWords[iIndex] = astrHead.concat(astrFoot); //showArray(astrHead); //showArray(astrFoot); //showArray(m_astrWords[iIndex]); //將剩餘的單詞重新寫入到頁面中 valueList(m_astrWords[iIndex], iIndex); txtWord[iIndex].select(); } //--> </script> </head> <body> <!--標題--> <div align=CENTER> <span style=font-size: 20pt; font-weight: BOLD>詞語搭配遊戲</span> <span class=fontEng2>v1.0</span> </div> <hr style=visibility: HIDDEN> <!--主表格1--> <table border=0 align=CENTER width=80%> <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup> <colgroup align=CENTER></colgroup> <colgroup></colgroup> <%For m_iCount = 0 To (m_iPartCnt - 1)%> <tr> <td><%= m_astrSenPart(m_iCount)%></td> <td width=20%><input type=text id=txtWord style=width: 100%></td> <td><button id=btnGetWord style=width: 75px title=將單詞保存到內存中>保存</button></td> <td><button id=btnReset style=width: 75px title=從內存中刪去當前類別所有的單詞>重置</button></td> <td><button id=btnSave style=width: 75px title=將單詞保存到文件中>存入</button></td> <td><button id=btnLoad style=width: 75px title=從文件中載入單詞>載入</button></td> <td width=15%><label id=lblWordList title=單擊固定我>單詞列表</label></td> <td> <div id=divWordList class=listHidden></div> 個數:<label id=lblWordCount class=fontEng1><%= 0%></label> </td> </tr> <%Next%> </table> <hr style=visibility: HIDDEN> <hr style=color: BLUE> <!--主表格2--> <table border=0 align=CENTER width=80%> <colgroup width=16%></colgroup> <colgroup width=16%></colgroup> <colgroup width=16%></colgroup> <colgroup></colgroup> <tr> <td><button id=btnResetAll accesskey=r title=從內存中刪去所有類別的單詞class=btnDelighted>全部重置<u>R</u></button></td> <td><button id=btnSaveAll accesskey=s title=將所有類別的單詞保存到文件中class=btnDelighted>全部存入<u>S</u></button></td> <td><button id=btnLoadAll accesskey=l title=從文件中載入所有類別的單詞class=btnDelighted>全部載入<u>L</u></button></td> <td> <span style=font-size: 9pt; color: RED;>請單擊</span> <label id=lblHelp title=單擊固定我>遊戲說明</label> <!--幫助說明表格--> <div id=divHelp class=helpHidden> <table id=tblHelp border=0 align=CENTER width=300px style=font-size: 9pt;> <colgroup width=75px></colgroup> <colgroup></colgroup> <tr><td colspan=2> <a href=#1 style=color: BLUE;>遊戲步驟</a> <a href=#2 style=color: BLUE;>操作說明</a> <a href=#3 style=color: BLUE;>遊戲起源</a> <a href=#4 style=color: BLUE;>製作原因</a> <a href=#5 style=color: BLUE;>遊戲功效</a> <a name=0 style=display: NONE;>TOP</a> </td></tr> <!--遊戲步驟--> <tr><td colspan=2></td></tr> <tr><td colspan=2> [<a name=1 style=color: BLUE;>遊戲步驟</a>] <a href=#0 class=link>TOP</a> </td></tr> <tr><td colspan=2> <span class=fontEng1><1></span>在每個部分的<span class=fontEmp>輸入框</span>中輸入單詞, 按<span class=fontEmp>回車</span>或<span class=fontEmp>保存</span>按鈕存入內存中; 或按<span class=fontEmp>載入</span>按鈕調出以前保存的某類別單詞紀錄; 或按<span class=fontEmp>全部載入</span>按鈕調出以前保存的所有類別單詞紀錄<br> <span class=fontEng1><2></span>按<span class=fontEmp>開始搭配</span>按鈕,系統將從各類單詞中隨機抽取一個,組成一個句子 </td></tr> <!--操作說明--> <tr><td colspan=2></td></tr> <tr><td colspan=2> [<a name=2 style=color: BLUE;>操作說明</a>] <a href=#0 class=link>TOP</a> </td></tr> <tr> <td>保存</td> <td>得到用戶輸入的單詞</td> </tr> <tr> <td>重置</td> <td>將當前類別所有的單詞從內存中刪去</td> </tr> <tr> <td>存入</td> <td>將所選類別的當前詞彙保存進文件中</td> </tr> <tr> <td>載入</td> <td>從文件中讀取所選類別的單詞紀錄</td> </tr> <tr> <td>全部重置</td> <td>重置頁面至初始狀態</td> </tr> <tr> <td>全部保存</td> <td>把所有類別的單詞都存入文件</td> </tr> <tr> <td>全部載入</td> <td>從文件中載入所有類別的單詞</td> </tr> <tr> <td>開始搭配</td> <td>進行詞彙搭配,得到一個句子</td> </tr> <tr><td></td></tr> <tr><td colspan=2> <span class=fontEng1><1></span> <span class=fontEmp>將鼠標移至單詞列表處</span>,會彈出該類詞彙的單詞列表; <span class=fontEmp>將鼠標移開</span>,列表會自動隱藏; <span class=fontEmp>點擊單詞列表</span>,會固定單詞列表; <span class=fontEmp>再次點擊</span>,會取消固定<br> <span class=fontEng1><2></span> 在<span class=fontEmp>固定住一個單詞列表</span>後, <span class=fontEmp>雙擊</span>該列表中的某個單詞,可以將該單詞從內存中刪去<br> <span class=fontEng1><3></span> 輸完一個單詞後,<span class=fontEmp>直接按回車</span>就可以保存了,這樣比按保存保存單詞更方便 </td></tr> <!--遊戲起源--> <tr><td colspan=2></td></tr> <tr><td colspan=2> [<a name=3 style=color: BLUE;>遊戲起源</a>] <a href=#0 class=link>TOP</a> </td></tr> <tr><td colspan=2> 這個遊戲想法來自於小時候玩的紙團遊戲。那時和姐姐在家裡閒得無聊,就玩這個,哈哈。 玩法很簡單,做一些紙片,分成四堆,分別寫上<span class=fontEmp>親朋好友的名字</span>、<span class=fontEmp>形容程度的詞語</span>、<span class=fontEmp>關於地點的詞語</span>和<span class=fontEmp>所做的事情</span>。 然後,將紙片捏成紙團,<span class=fontEng1>OK, Let's Start!</span> 現在從每堆中抽出一個紙團,就有四個詞語,將它們組成一句話,因為是隨便抽的,有時能組成很搞笑的句子。 如:陳楠興奮地在大街上跳夏威夷草裙舞;萬民悠閒地在公園裡洗澡。 ^_ </td></tr> <!--製作原因--> <tr><td colspan=2></td></tr> <tr><td colspan=2> [<a name=4 style=color: BLUE;>製作原因</a>] <a href=#0 class=link>TOP</a> </td></tr> <tr><td colspan=2> 主要是無聊,想做個遊戲娛樂一下自己,當然也希望大家能從中得到笑聲。 其次也想鍛煉一下自己的技術,以前用<span class=fontEng1>VB</span>做過一個,不是很好,這次用的是<span class=fontEng1>ASP</span>,不知有沒有進步,呵呵 這個版本我大概地測試了一下,沒發現大的<span class=fontEng1>bug</span>。如果您在遊戲中發現了問題或有什麼建議,請一定告訴我,在此先謝謝了! 我的信箱是<a href=mailto: [email protected] class=link>[email protected]</a>。不好你就說嗎!不可能你說好我又說不好,你不說好我又說好的,^_ </td></tr> <!--遊戲功效--> <tr><td colspan=2></td></tr> <tr><td colspan=2> [<a name=5 style=color: BLUE;>遊戲功效</a>] <a href=#0 class=link>TOP</a> </td></tr> <tr><td colspan=2> 因為是搞笑遊戲,所以能使你心情愉快、青春煥發,間接增加找對象的成功率; 因為不用做紙團了,減少了浪費和污染,從而美化了世界環境; 相信還有很多功效,請大家幫我找。哈哈。 </td></tr> </table> </div> </td> </tr> <tr> <td><button id=btnAsb accesskey=a title=從每個類別詞彙中隨機抽取一個單詞,組成一個句子class=btnDelighted>開始搭配<u>A</u></button></td> <td colspan=3><input type=text id=txtSentence style=width: 100%></td> </tr> </table> <hr style=color: BLUE> <!--提交表單--> <form id=frmWords method=POST action= style=display: NONE;> <%For m_iCount = 0 To (m_iPartCnt - 1)%> <input type=text name=txtWords<%= m_iCount%>> <%Next%> <input type=text name=txtSenPart> <input type=text name=txtOpWay> </form> <!--版權--> <div align=CENTER> <div> © <span class=fontEng2>2001 China Sentin Sci. & Tech. Co., Ltd.</span> <span class=fontEng2>All Rights Reserved.</span> </div> <div> <span class=fontEng2>Authored by</span> <a href=mailto: [email protected] class=link>Recon</a></span> <a href=http://recon.top263.net/ class=link>http://recon.top263.net/</a> </div> </div> </body> </html> <% '以下是服務器端腳本 '用到的函數和過程 '************************ '函數名:SaveFile '功能:將某類詞彙保存到文件中 '輸入:1、iSenPart :表示詞彙分類的數字。整型 ' 可能的值有: ' 0:主語 ' 1:程度狀語 ' 2:地點狀語 ' 3:謂語 '輸出:對文件操作後的狀態值。整型 ' 可能的值有: ' 0:操作成功 ' 1:操作失敗 '************************ Function SaveFile(iSenPart) Dim fsoMain, tsfWords Dim iCount, iWrdCnt Dim iOpStatus '------------------------------------------ '常變量說明 'fsoMain :FSO對象 'tsfWords :TEXTSTREAM對象 'iCount :計數器。整型 'iWrdCnt :某類詞彙單詞的數目。整型 'iOpStatus :文件操作完畢後的狀態。整型 '------------------------------------------ Set fsoMain = Server.CreateObject(SCRIPTING.FILESYSTEMOBJECT) Set tsfWords= fsoMain.CreateTextFile(m_strFilePath & m_astrFileName(iSenPart), True) tsfWords.WriteLine([ & m_astrSenPart(iSenPart) & 部分]) '如果該類別至少有一個單詞 If IsEmpty(m_astrWords(iSenPart)) = False Then iWrdCnt = UBound(m_astrWords(iSenPart)) 1 For iCount = 0 To (iWrdCnt - 1) tsfWords.WriteLine(m_astrWords(iSenPart)(iCount)) Next End If tsfWords.Close iOpStatus = 0 SaveFile = iOpStatus End Function '************************ '函數名:LoadFile '功能:從文件中載入某類詞彙 '輸入:1、iSenPart :表示詞彙分類的數字。整型 ' 可能的值有: ' 0:主語 ' 1:程度狀語 ' 2:地點狀語 ' 3:謂語 '輸出:對文件操作後的狀態值。整型 ' 可能的值有: ' 0:操作成功 ' 1:操作失敗 '************************ Function LoadFile(iSenPart) Dim fsoMain, tsfWords Dim strLoaded Dim iOpStatus '------------------------------------------ '常變量說明 'fsoMain :FSO對象 'tsfWords :TEXTSTREAM對象 'strLoaded :某類詞彙所有單詞構成的字符串。字符串型 'iOpStatus :文件操作完畢後的狀態。整型 '------------------------------------------ Set fsoMain = Server.CreateObject(SCRIPTING.FILESYSTEMOBJECT) If fsoMain.FileExists(m_strFilePath & m_astrFileName(iSenPart)) = True Then '如果存在紀錄文件 strLoaded = Set tsfWords= fsoMain.OpenTextFile(m_strFilePath & m_astrFileName(iSenPart), 1) tsfWords.SkipLine Do While tsfWords.AtEndOfStream = False strLoaded = strLoaded & tsfWords.ReadLine & , Loop If strLoaded <> Then strLoaded = Left(strLoaded, Len(strLoaded) - 1) m_astrWords(iSenPart) = Split(strLoaded, ,) Else m_astrWords(iSenPart) = Empty End If tsfWords.Close iOpStatus = 0 Else '如果不存在紀錄文件 iOpStatus = 1 End If LoadFile = iOpStatus End Function %> <% '以下是服務器端腳本 '用於測試的函數和過程 Sub Show(strDef) Response.Write strDef & : & Eval(strDef) & <br> End Sub Sub ShowMethod() Response.Write Request Method: & Request.ServerVariables(REQUEST_METHOD) & <br> End Sub Sub ShowForm() Dim iCount Dim strProp iCount = 0 Response.Write *********Form Information******<br> For Each strProp In Request.Form iCount = iCount 1 Response.Write iCount & . & strProp & : & Request.Form(strProp) & <br> Next Response.Write *********Form End**************<br> End Sub %> |
分享:ASP 3.0高級編程(十二) 4.2.3 服務器端包含指令的例子本節提供了一些示例頁面,可以用來對各種服務器端包含語句進行實驗。打開示例網頁的子目錄Chapter04,顯示SSI Directives and the ASP Server Object&rdqu