ASP.NET 網頁製作教本 – 從基本語法學起

Slides:



Advertisements
Similar presentations
變數與函數 大綱 : 對應關係 函數 函數值 顧震宇 台灣數位學習科技股份有限公司. 對應關係 蛋餅飯糰土司漢堡咖啡奶茶 25 元 30 元 25 元 35 元 25 元 20 元 顧震宇 老師 台灣數位學習科技股份有限公司 變數與函數 下表是早餐店價格表的一部分: 蛋餅 飯糰 土司 漢堡 咖啡 奶茶.
Advertisements

第一單元 建立java 程式.
第4章 VB.NET程式與 網頁製作的應用 主講人: 姚奉緒 M
ASP.NET 網頁製作教本 -- 從基本語法學起
Introduction to C Programming
計算機程式語言實習課.
第八章 DataGrid 與 DataTable 瀏覽器 DataTable DataGrid 存取 顯示表格 暑資碩三 房玄博 報告.
第五章:JDBC与数据库 第一讲.
第13章 FTP檔案上傳、 自動傳送 報告人 M9153314 李育旻.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
四 VBScript编程基础.
Ch03 VB.NET語法建立ASP.NET 網頁程式設計.
Chapter 5 迴圈.
ASP.NET 網頁製作教本 – 從基本語法學起
9/28號專題報告 Web網頁遊戲 曾建瑋.
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
1、数组的概念 2、静态数组 3、动态数组 4、数组的基本操作 5、控件数组
第八章 利用SELECT查詢資料.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Ch05 VB.NET的程序與函數 網頁程式設計.
Visual Basic 物件導向程式設計簡介.
App Inventor2呼叫PHP存取MySQL
Java 程式設計 講師:FrankLin.
網頁切換移轉 JS vs. ASP.NET.
Chap3 Linked List 鏈結串列.
程式設計實習課(四) ----C 函數運用----
Topic Introduction—RMI
第一單元 建立java 程式.
陣列(Array).
INDEX 資訊學科種子教師研習 課程說明 教學活動計畫.
第一章 直角坐標系 1-3 函數圖形.
第一個cordova project Cordova project建立與平台設定,均藉由cli(command line interface來完成 建立project請打開命令提示字元視窗應輸入下列命令 cordova create hello tw.edu.stust.mis.hello HelloWorld.
Ch04 VB.NET的流程控制 網頁程式設計.
輸入&輸出 函數 P20~P21.
ASP基礎— VBScript基本語法 張森.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
CH05. 選擇敘述.
期末考.
GUI Title and GUI Status
挑戰C++程式語言 ──第8章 進一步談字元與字串
GridView.
GridView操作 (II).
如何使用Gene Ontology 網址:
C qsort.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
從HTML表格到CSS 靜宜大學 資管系 楊子青.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
Quiz1 繳交期限: 9/28(四).
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
網路程式-ASP 授課:方順展.
網頁設計第十二課.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
SQLite資料庫 靜宜大學資管系 楊子青.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
科目:程式語言與設計 老師:蔣德威 本檔案可至以下網址下載: www1.chihlee.edu.tw/teachers/ctw/prog
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

ASP.NET 網頁製作教本 – 從基本語法學起 第4章 VB.NET 程式與 網頁製作的應用

4-1 陣列(Array)

陣列(Array)

陣列的宣告與使用(1) 陣列必須先宣告才能使用,其宣告格式 與變數的宣告很像 最簡單的陣列宣告格式是: Dim 陣列名稱(N)

陣列的宣告與使用(2) 其中 N 代表陣列中最後一項資料的順序,例如:

陣列的宣告與使用(3) 一旦宣告了陣列,我們就可以存取陣列中各單項的資料,存取的方法是在陣列名稱之後加上 "(資料順序)",例如: X(0) = 168 ‘ 將 168 存到陣列 X 的第 0 項資料中 X(1) = 350 ’ 將 350 存到陣列 X 的第 1 項資料中 X(2) = X(0) + X(1) ‘ 分別取出陣列 X 的第 0 項及第 1 項資料, ' 相加後,存到第 2 項資料中

陣列的宣告與使用(4) 在術語上,陣列中的每一項資料叫做一個元素(element),而用來指定某一個元素的 0、1、2、…順序叫做註標(subscript),如下:

陣列的初值設定 實例: 所有資料以逗號(,)分隔,然後撰寫在 { } 裡面, 不過請注意 ( ) 裡面不可以含有 N,例如以下 的宣告式是錯誤的: 含有初值設定的陣列,VB 會自動計算其元素 個數,以上面的 X 陣列為例,含有三個元素, 所以有效的註標範圍是 0~2。 Dim A = "我是變數" ' 變數的初值設定 Dim X() = { "Word", "Excel", "Access" } ' 陣列的初值設定 Dim X(2) = { "Word", "Excel", "Access" } ' 錯誤

設定陣列的資料型別 Dim 陣列名稱(N) As 資料型別 「As 資料型別」其作用是設定陣列元素的資料型別,例如: Dim Y(10) As Integer ‘ 宣告一個含有11個元素的陣列而每 ' 一個陣列元素的資料型別都是整數

陣列的優點 (1) 例如我們把 5 項資料放在 5 個變數裡面 : Dim A, B, C, D, E A = "Word" B = "Excel" C = "PowerPoint" D = "Access" E = "Outlook"

陣列的優點(2) 將它們逐行輸出,必須使用 5 個敘述: Response.Write( A & "<P>" ) Response.Write( B & "<P>") Response.Write( C & "<P>") Response.Write( D & "<P>" ) Response.Write( E & "<P>" )

陣列的優點 (3) 如果我們把這 5 項資料放在陣列裡面,則只需三行敘述就可以將它們全部輸出,如下: Dim I Dim X() = {"Word", "Excel", "PowerPoint", "Access", "Outlook"} ' 輸出X的5個元素,只需以下三行敘述 For I = 0 To 4 Response.Write( X(I) & "<P>" ) Next

陣列的優點 (4) 即使資料的項數多達 100項,也只要將上述程式 For 敘述中的 4 改成 99,就可以輸出全部資料,不像輸出 100個變數需要撰寫 100 個敘述。

Ubound 函數(1) Ubound 是 VB 所提供的函數,用途是讀 取陣列中最大的註標,使用時須傳入陣 列的名稱。 For I = 0 To UBound(X) Response.Write( X(I) & "<P>" ) Next

Ubound 函數(2) 例如 UBound(X) 表示讀取 X 陣列中最大 的註標,假設 X 陣列的元素包含 X(0)~ X(4),則 UBound(X) 等於 4,如果 X 陣 列的元素包含 X(0)~X(2),則 UBound(X) 等於 2,因為 Ubound 具有此一特性,所 以不管 X 陣列有何變動,以上的 For 迴 圈都不必跟著修改。

重新設定陣列的大小 (1) 用 Dim 宣告一個陣列之後,其大小 就確定下來了,例如: Dim X(5) As Integer ' X陣列的大小 = 6 Dim Y() = {1, 2, 3 } ' Y陣列的大小 = 3 Dim Z() ' Z陣列的大小 = 0, 空陣列

重新設定陣列的大小 (2) 動態改變陣列的大小,必須使用 ReDim敘述,假設原有一陣列 A, 而我們想將其大小改變成 11,則敘 述如下: ReDim A(10)' 將A陣列的大小改成11, 內容全部歸零 或 ReDim Preserve A(10)' 將A陣列的大小改成11, 但保留原內容

重新設定陣列的大小 (3) Preserve 保留字的使用: 程式一、 Dim A() = { "Word", "Excel", "Access" } ReDim A(5) Response.Write( A(0) ) ' 輸出: (無資料) 程式二、 Dim A() = { "Word", "Excel", "Access" } ReDim Preserve A(5) Response.Write( A(0) ) ' 輸出: Word

重新設定陣列的大小 (4) 程式一在執行 ReDim 敘述之後,原 本 A(0)、A(1)、A(2) 所含有的 "Word", "Excel", "Access" 資料都會 消失,而程式二則會保留A(0)、A(1)、 A(2) 原有的資料。

練習(1) 有三個陣列如下: Dim Book() = {"F8308", "F8315", "F8316", "F8317"} Dim Name() = {"VB6 與 Windows API 講座", "新觀念的 VB6 教本", _ "VB6 實戰講座", "VB6 資料庫程式設計"} Dim Title() = {"VB專業人員最不可或缺的一本書", _ "一本為完全初學者所寫的書", _ "一本實用的‧技術的‧資訊完整的書", _ "從實務經驗中整理出來的資料庫設計寶典"}

練習(2) 將它們輸出成為下圖:(提示:須使用 <DL>、<DT>、<DD>、及 <BR> 標示)

陣列與排序 (1) 排序(Sort)是指將一連串資料從小排到大,例如 { 3, 9, 15, 8, 4 }排序後就成為 { 3, 4, 8, 9, 15 },只要呼叫 Array.Sort 這個方法,就可以完成陣列資料的排序,請看以下例子: Dim X() As Integer = { 3, 9, 15, 8, 4 } Array.Sort( X ) ' 呼叫Array.Sort之後, X 變成{ 3, 4, 8, 9, 15 }

陣列與搜尋(1) 搜尋陣列中是否含有某一種資料,舉例 來說,有一「姓名」陣列如下: 如何找到 "Peter" 在「姓名」陣列中的註 標(位置)呢? Dim 姓名() = { "Adam", "Alan", "Peter", "Jhon", "Tom" }

陣列與搜尋 (2) 如果用 For 迴圈搜尋資料 : Dim I As Integer For I = 0 To UBound(姓名) If 姓名(I) = "Peter" Then ' 表示已經搜尋到資料 Response.Write( "Peter 的註標是 " & I ) Exit For ' 離開 For 迴圈 End If Next If I > UBound(姓名) Then Response.Write( "Peter 不存在於「姓名」陣列" ) End If

陣列與搜尋 (3) 呼叫 Array.IndexOf 方法才是更高明的方法,同樣是搜尋「姓名」陣列中是否含有 “Peter”,改用 Array.IndexOf 方法的程式如下: I = Array.IndexOf(姓名, "Peter") If I >= 0 Then Response.Write("Peter 的註標是 " & I) Else Response.Write("Peter 不存在於「姓名」陣列") End If

陣列與搜尋 (4) 有關 Array.IndexOf 的用法是: 傳回值表示搜尋的結果,當傳回值<0時,表 示沒有搜尋到資料;當傳回值≧0時,表示已 經搜尋到資料,而傳回值等於欲搜尋的資料在 陣列中的位置,以上面的例子為例,“Peter” 在「姓名」陣列的位置等於 2,所以傳回值等 於2。

應用實例(1) 陣列經常用在對照表的查詢,一個陣列存放著某些名詞,而第二個陣列存放著名詞的解釋,例如: Dim 名詞 () = {“HTML”, “ASP”, “ADO”, “RDS” } Dim 解釋 () = {“HyperText Markup Language, 超文字標示語言”, _ “Active Server Pages, 動態伺服端網頁”, _ “ActiveX Data Object, 資料存取物件”, _ “Remote Data Service, 遠端資料存取服務"}

應用實例(2) 那麼讓上網者輸入名詞,然後查詢該名詞的解釋,所撰寫的程式將如下: Dim data = Request("Name") ' 讀取上網者所輸入的名詞 Dim I = Array.IndexOf( 名詞, data )   If I >= 0 Then Response.Write( "<DL>" ) Response.Write( "<DT>" & 名詞(I) ) Response.Write( "<DD>" & 解釋(I) ) Response.Write( "</DL>" ) Else Response.Write( data & " 沒有對應的名詞解釋" ) End If

應用實例(3) 輸入以下網址,以檢驗程式執行的情況: (1)Name=VBScript:I 值 < 0,會顯示 「VBScript 沒有對應的名詞解釋」。 (2) Name=ASP:由於「名詞(1)」等於 “ASP”,所以 I 值將等於 1,而顯示: (1) http://localhost/kjaspx/ch04/NameExp.aspx?Name=VBScript (2) http://localhost/kjaspx/ch04/NameExp.aspx?Name=ASP

練習 河狸國小三年甲班有 20 位同學,老師想要將第一次期中考的 ASP 成績公布於score.aspx 網頁,讓同學自行上網查詢,查詢的方法是「score.aspx?Num=學號」,請幫這位老師完成此一網頁。(註:三年甲班 20 位同學的學號是 3101~3120,而分數就讓您來決定吧) (提示:將學號 "3101"~"3120" 存放在第一個陣列,而每一位學生的成績則存放在第二個陣列)

搜尋多筆資料(1) 有時陣列中會有一些相同的資料,例如我們想找出陣列中所有 100 分的同學,該怎麼找呢?假設資料存放成以下兩個陣列: Dim 同學() = {"陳桶一", "黃光權", "胡生妙", "王為全", _ "李日正", "劉德菖", "方正一", "劉康寶", _ "謝掬花", "王美蘭", "徐小噹", "葉小毛"} Dim 數學() = {90, 58, 41, 100, 59, 28, 100, 0, 100, 41, 91, 0}

搜尋多筆資料(2) 那麼所撰寫的搜尋程式將如下: Dim I = Array.IndexOf(數學, 100) While I >= 0 ' 表示搜尋到資料 Response.Write ( 同學(I) & "<P>" ) I = Array.IndexOf(數學, 100, I + 1) End While

搜尋多筆資料(3) 以上程式出現了兩個 Array.IndexOf,而第二個 Array.IndexOf 比第一個Array.IndexOf 多了一個參數:

二維陣列 (1) 陣列也可以存放表格式的資料,例如:

二維陣列 (2) 以這個表格為例,計有 5 列、4 行,所以共有 5×4 項資料,如果使用陣列來儲存,則陣列寫成:

二維陣列 (3) 像這樣含有兩個註標的陣列,稱為二維陣列,而存取二維陣列的資料也會使用到兩個註標,例如: X(1, 2) = 0.42 ' 將第 1 列、第 2 行的資料指定成 0.42 Response.Write(X(3, 2)) ' 輸出第 3 列、第 2 行的資料

二維陣列 (4) 如果我們將整個陣列的註標標示出來,則是:

二維陣列資料的輸出(1) 如果要對整個二維陣列的資料進行輸出,通常要使用 For-Next 巢狀迴圈,例如: Dim I, J Dim X(4,3) For I = 0 To 4 Response.Write( "<BR>輸出第 " & I & "列資料<BR>" ) For J = 0 To 3 Response.Write( "(" & I & "," & J & ") = " ) Response.Write( X(I, J) & "<BR>" ) Next Next

二維陣列資料的輸出 (2) 程式以「列」為外迴圈,所以外迴圈每執行一次,便輸出一橫列的資料。如果以「行」為外迴圈,則外迴圈每執行一次,便輸出一直行,程式如下: Dim I, J Dim X(4,3) For J = 0 To 3 Response.Write( "<BR>輸出第 " & J & " 行資料<BR>" ) For I = 0 To 4 Response.Write( "(" & I & "," & J & ") = " ) Response.Write( X(I, J) & "<BR>" ) Next Next

練習 修改剛才的 2D1.aspx,使其二維陣列輸出成:

多維陣列 除了一維跟二維陣列之外,我們也可以 建立一個多維陣列,如下: 例如: Dim Z(3, 4, 5, 6, 9) ‘ 宣告一個五維陣列, 可儲存的資料數 ' 共有 (3+1)(4+1)(5+1)(6+1)(9+1)=8400

4-2 副程式與函數

<script> 標示 副程式與函數必須放在 <script> 與 </script> 標 示之間,例如: 在 <script> 標示中,Language 參數設定成 “VB”,表示其中的程式語言為 VB,runat 參 數設定成 “server”,表示其中的程式將會在 server 端執行。 <script Language="VB" runat="server"> Sub 副程式X ‘ 在此撰寫副程式X的程式碼 End Sub </script>

從「敘述區塊」到「副程式」(1) 將敘述區塊轉換成副程式,先看以下程式: <% Dim Name As String Dim score As Integer Name = "張無忌" score = 51 Response.Write( Name & ", " ) If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If Response.Write( "<HR>" ) %>

從「敘述區塊」到「副程式」(2) <% Name = "張無忌" score = 51 Call IsScorePassed Response.Write( "<HR>" ) %>   <script Language="VB" runat="server"> Dim Name As String Dim score As Integer Sub IsScorePassed Response.Write( Name & ", " ) If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If End Sub </script>

副程式的呼叫與返回(1)

練習 將「If week = 1 Then」與「End If」之間的敘述改成名稱為 OutputWeekColor 的副程式: <HTML> <BODY> 今天是: <% Dim Week Week = DatePart( DateInterval.Weekday, Now() ) If Week = 1 Then ' 星期日 Response.Write( "<FONT COLOR=Red>" ) ElseIf Week = 7 Then ' 星期六 Response.Write( "<FONT COLOR=Green>" ) Else Response.Write( "<FONT COLOR=Blue>" ) End If Response.Write( WeekdayName(Week) ) Response.Write( "</FONT>" ) %> </BODY> </HTML>

帶有參數的副程式(1) 會決定副程式執行結果的變數,通常把它設定成副程式的參數,如下:

帶有參數的副程式(2) <% Dim Name As String Dim score As Integer Name = "張無忌"   Name = "張無忌" score = 51 IsScorePassed( Name, score ) Response.Write( "<HR>" ) %> <script Language="VB" runat="server"> Sub IsScorePassed( Name, score ) Response.Write(Name & ", ") If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If End Sub </script>

帶有參數的副程式(3) 修改的過程是: 1. 副程式的修改部分:將關鍵性的變數取出,將其放在 ( ) 裡面,然後擺在副程式名稱之後。 1. 副程式的修改部分:將關鍵性的變數取出,將其放在 ( ) 裡面,然後擺在副程式名稱之後。 2. 呼叫端的修改部分:將呼叫之前所需設定的變數(本例是 Name 及 score )串在副程式名稱之後。

帶有參數的副程式(4) <% IsScorePassed( "張無忌", 51 ) Response.Write( "<HR>" ) IsScorePassed( "王國榮", 80 ) %>   <script Language="VB" runat="server"> Sub IsScorePassed( Name, score ) Response.Write(Name & ", ") If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If End Sub </script>

實例 (1) 有兩個陣列如下: 分別記錄著三年甲班同學的姓名及 ASP.NET 的學期分數: Dim 姓名() = { “陳桶一”, “黃光權”, “胡生妙”, “王為全”, _ “李日正”, “劉德菖”, “方正一”, “劉康寶”, _ "謝掬花", "王美蘭", "徐小噹", "葉小毛"} Dim 分數() = {90, 58, 41, 95, 59, 28, 98, 0, 95, 41, 91, 0 }

實例 (2) 請逐一讀取每一位同學的姓名及分數,然後呼叫 IsScorePassed 副程式,顯示出以下網頁:

實例 (3) 所撰寫的程式如下: Dim I For I = 0 To UBound(姓名) IsScorePassed( 姓名(I), 分數(I) ) Response.Write( "<BR>" ) Next

練習(1) 三年甲班同學的「姓名、BCC 學期成績、ASP 學期成績、VB 學期成績」的陣列分別如下: Dim NameList() = { “陳桶一”, “黃光權”, “胡生妙”, “王為全”, _ “李日正”, “劉德菖”, “方正一”, “劉康寶”, _ "謝掬花", "王美蘭", "徐小噹", "葉小毛" } Dim BCCList() = { 90, 58, 41, 95, 59, 28, 98, 0, 95, 41, 91, 0 } Dim ASPList() = { 76, 77, 14, 97, 66, 11, 100, 0, 74, 46, 99, 10 } Dim VBList() = { 98, 75, 33, 87, 57, 33, 100, 10, 89, 49, 84, 0 }

練習(2) 寫一含有四個參數的 CalcScore 副程式,所傳入之參數分別為 Name(姓名)、 BCC(BCC 學期成績)、ASP (ASP 學期成績)及 VB(VB 學期成績),而副程式在接收到這四個參數之後,須輸出以下的 HTML 格式: <TR> <TD>Name</TD> <TD>BCC</TD> <TD>ASP</TD> <TD>VB</TD> <TD>總成績</TD> <TD>平均分數</TD> </TR>

練習(3) 最後再呼叫此一副程式,輸出以下表格:

函數(Function) 函數是另一種特殊形式的副程式,這種副程式有的存在於 VB 的語言系統裡,稱為內建函數,我們曾經使用過的 Now、DatePart、WeekdayName、Cint 都是 VB的內建函數,而另一種函數則可以像副程式一樣由我們自己定義,稱為自定函數。 低。

從副程式到函數 唯一的差別只是將 Sub 保留字改成Function 保留字,其他地方都沒有改變。 Function IsScorePassed(Name, score) Response.Write( Name & ", " ) If score >= 60 Then Response.Write( "你及格了!" ) ElseIf score >= 50 Then Response.Write( "你可以補考!" ) Else Response.Write( "你被當掉了!" ) End If End Function

傳回值 T = Now ' Now函數的傳回值為系統時間 ASP = Request("ASP") V = CInt(ASP) ' CInt函數的傳回值是一個整數 以上的 Now 及 Cint 都是 VB 的內建函數,其特色都是在被呼叫之後,會傳回某一份資料(例如 Now 函數傳回系統時間),這份被傳回的資料就稱傳回值。

設定傳回值的語法 如何讓函數真的能傳回值呢?方法是在函數結束執行之前,執行以下敘述: Return 欲傳回的值

實例一(1) 寫一 f(X) = X^2 + 2*X + 1 的函數 由於我們希望函數能夠傳回 X^2 + 2*X + 1 運算式的結果,所以便撰 寫 Return X^2 + 2*X + 1」將 X^2 + 2*X + 1 運算的結果指定成函數 f 的傳回值。 Function f(X) Return X^2 + 2*X + 1 End Function

實例一(2) 呼叫 f 函數的例子:(Fun1.aspx) Dim A = f(3) ' 呼叫f, 傳入3為參數, 結果傳回3^2 + 2*3 + 1 Response.Write( "A = " & A & "<P>" ) ' 輸出結果: 16 Dim V = 2 Dim B = f(V) ' 呼叫f, 傳入變數V為參數, 結果傳回V^2 + 2*V + 1 Response.Write( "B = " & B & "<P>" ) ' 輸出結果: 9

實例二(1) 寫一 Sum(N) = 1+2+…+N 的函數。

實例二(2) Fun2.aspx <% Dim N = Val( Request("N") ) Response.Write( "您輸入的 N=" & N & "<P>") Response.Write( "Sum(N)=" & Sum(N) ) %>   <script Language="VB" runat="server"> Function Sum(N) Dim I, Total For I = 1 To N Total = Total + I ' 逐一將 1, 2, … 加到 Total Next Return Total End Function </script>

練習 寫一函數傳入 1~12,然後傳回對應的中文月份,例如傳入 8 即傳回 "八月"。

4-3 VB 內建函數的實際應用

字串類型函數 用 UCase/LCase 函數避免大小寫問題。 用 Trim 函數除去不必要的空白字元。 用 Join 函數簡化陣列資料的輸出 Split 函數與重複性資料的輸入。 。 Replace 函數與字串的取代。

UCase/Lcase (1) 用 UCase/LCase 函數避免大小寫問題 。 將字串轉成大寫及小寫的函數分別是Ucase 及 Case,使用例如下: Name = Request("Name") ' 假設Name參數值等於 "Asp" Response.Write(UCase(Name)) ' 輸出: ASP Response.Write(LCase(Name)) ' 輸出: asp

UCase/Lcase (2) NameExp2.asp <% Dim 名詞() = {"HTML", "ASP", "ADO", "RDS" } Dim 解釋() = {"HyperText Markup Language, 超文字標示語言", _ "Active Server Pages, 動態伺服端網頁", _ "ActiveX Data Object, 資料存取物件", _ "Remote Data Service, 遠端資料存取服務"}   Dim data = Request("Name") ' 讀取上網者所輸入的名詞 Dim I = Array.IndexOf( 名詞, UCase(data) ) If I >= 0 Then Response.Write( "<DL>" ) Response.Write( "<DT>" & 名詞(I) ) Response.Write( "<DD>" & 解釋(I) ) Response.Write( "</DL>" ) Else Response.Write( data & " 沒有對應的名詞解釋" ) End If %>

Trim (1) 用 Trim 函數除去不必要的空白字元。 而 NameExp2.aspx 經修改之後成為: X = Trim(" ASP") ' 結果 X = "ASP" Dim data = Request("Name") data = Trim(data) ' 新增此一敘述 Dim I = Array.IndexOf( 名詞, UCase(data) )

Trim (2) NameExp3.aspx: <% Dim 名詞() = {"HTML", "ASP", "ADO", "RDS" } Dim 解釋() = {"HyperText Markup Language, 超文字標示語言", _ "Active Server Pages, 動態伺服端網頁", _ "ActiveX Data Object, 資料存取物件", _ "Remote Data Service, 遠端資料存取服務"}   Dim data = Request("Name") ' 讀取上網者所輸入的名詞 data = Trim(data) Dim I = Array.IndexOf( 名詞, UCase(data) ) If I >= 0 Then Response.Write( "<DL>" ) Response.Write( "<DT>" & 名詞(I) ) Response.Write( "<DD>" & 解釋(I) ) Response.Write( "</DL>" ) Else Response.Write( data & " 沒有對應的名詞解釋" ) End If %>

Join 用 Join 函數簡化陣列資料的輸出。 結果 X 等於 "F8308<P>F8315<P>F8316<P>F8317" 。 Dim Arr() = {"F8308", "F8315", "F8316", "F8317"} Dim X = Join(Arr, "<P>")

Join 實例 (1) 有一陣列如下: 希望將此一陣列輸出成: Dim Books() = { _ "F8308 VB6 與 Windows API 講座", "F8315 新觀念的 VB6 教本", _ "F8316 VB6 實戰講座", "F8317 VB6 資料庫程式設計" }

Join 實例 (2) 如果不使用 Join 函數,而使用 For 迴圈,則此一 ASP 程式如下:(Books01.aspx) <% Dim Books() = { _ "F8308 VB6 與 Windows API 講座", "F8315 新觀念的 VB6 教本", _ "F8316 VB6 實戰講座", "F8317 VB6 資料庫程式設計" }   Response.Write( "學 VB 找王國榮系列叢書<HR>" ) Response.Write( "<UL>" ) Dim I For I = 0 To UBound(Books) Response.Write( "<LI>" & Books(I) ) Next Response.Write( "</UL>" ) %>

Join 實例 (3) 如果使用 Join 函數,則程式將更簡單,以上粗體字的程式可修改成 : Response.Write( "<UL><LI>" & Join(Books, "<LI>") & "</UL>" )

Join 實例 (4) Books02.asp <% Dim Books() = { _ "F8308 VB6 與 Windows API 講座", "F8315 新觀念的 VB6 教本", _ "F8316 VB6 實戰講座", "F8317 VB6 資料庫程式設計" }   Response.Write( "學 VB 找王國榮系列叢書<HR>" ) Response.Write( "<UL><LI>" & Join(Books, "<LI>") & "</UL>" ) %>

Split (1) Split 函數與重複性資料的輸入 。 其意義是輸入兩份資料,而兩份資料都 是以 Book 為參數,另一方面讀取資料 的方法還是使用 Request物件。 資料之間以 “,” 分隔,使用 Split 函數最為簡便,例如: http://localhost/kjaspx/ch04/SplitEx.aspx?Book=F8308&Book=F8315 Dim Book = Request("Book") Dim BookList = Split(Book, ",") ' BookList 變成陣列, BookList(0) = "F8308", BookList(1) = "F8315"

Split (2) 假設我們想把網頁輸出成: SplitEx.aspx <% Dim Book = Request( "Book" ) Dim BookList = Split(Book, ",")   Response.Write( "您想購買的書有:" ) Response.Write( "<UL><LI>" & Join(BookList, "<LI>") & "</UL>" ) %>

Replace(1) Replace 函數與字串的取代 。 使用 Split 及 Join 兩個函數,其實使用 一個 Replace 函數就可以完成。 Dim BookList = Split(Book, ",") Response.Write( "<UL><LI>" & Join(BookList, "<LI>") & "</UL>" ) Response.Write( "<UL><LI>" & Replace(Book, ",", "<LI>") & "</UL>" )

Replace(2) Replace.aspx <% Dim Book = Request( "Book" ) Response.Write( "您想購買的書有:" ) Response.Write( "<UL><LI>" & Replace(Book, ",", "<LI>") & "</UL>" ) %>

數值類型函數 FormatNumber 函數與數值的輸出。 利用 Val 轉換數值資料。 Rnd 函數與亂數遊戲。

FormatNumber (1) FormatNumber 函數與數值的輸出 。 將下圖(左)改成下圖(右),「平均」欄位採四捨五入方式取小數點兩位,如何撰寫呢?

FormatNumber(2) 要採四捨五入方式取固定位數的小數須 使用 FormatNumber 函數,使用方法如下: 例如: X = FormatNumber(數值, 所取之小數點位數) Dim X = FormatNumber(60.6666666666667, 2) Response.Write( X ) ' 輸出: 60.67

FormatNumber(3) SubTab02.aspx Part I <% Dim NameList() = { "陳桶一", "黃光權", "胡生妙", "王為全", _ "李日正", "劉德菖", "方正一", "劉康寶", _ "謝掬花", "王美蘭", "徐小噹", "葉小毛" } Dim BCCList() = { 90, 58, 41, 95, 59, 28, 98, 0, 95, 41, 91, 0 } Dim ASPList() = { 76, 77, 14, 97, 66, 11, 100, 0, 74, 46, 99, 10 } Dim VBList() = { 98, 75, 33, 87, 57, 33, 100, 10, 89, 49, 84, 0 }   Response.Write( "<TABLE Border=1>" )

FormatNumber(4) SubTab02.aspx Part II ' 輸出第一列的標題 Response.Write( "<TR BgColor=Cyan><TD>姓名</TD>" ) Response.Write( "<TD>BCC</TD><TD>ASP</TD><TD>VB</TD>" ) Response.Write( "<TD>總分</TD><TD>平均</TD></TR>" )  ' 輸出陣列中的資料 Dim I For I = 0 To UBound(NameList) CalcScore( NameList(I), BCCList(I), ASPList(I), VBList(I) ) Next Response.Write( "</TABLE>" ) %> 

FormatNumber(5) SubTab02.aspx Part III <script Language="VB" runat="server"> Sub CalcScore( Name, BCC, ASP, VB ) Response.Write( "<TR>" ) Response.Write( "<TD>" & Name & "</TD>" ) Response.Write( "<TD>" & BCC & "</TD>" ) Response.Write( "<TD>" & ASP & "</TD>" ) Response.Write( "<TD>" & VB & "</TD>" ) Dim Total = CInt(BCC) + CInt(ASP) + CInt(VB) Response.Write( "<TD>" & Total & "</TD>" ) Response.Write( "<TD>" & FormatNumber((Total / 3), 2) & "</TD>" ) Response.Write( "</TR>" ) End Sub </script>

Val 利用 Val 轉換數值資料 。 試著輸入以下的參數:(BCC、ASP、及VB的成績都輸入為59.5) Total = Val(BCC) + Val(VB) + Val(ASP) Val 的用途是將資料轉換成「實數」,例如 "59.5" 經轉換之後,會變成 59.5,不會四捨五入。

Rnd(1) Rnd 函數與亂數遊戲。 利用 Rnd 產生亂數,只能產生 0≦且<1 的亂數,但可利用以下方法,讓它產生 0~N-1 之間的整數:

Rnd(2) 為什麼 Fix(Rnd*N) 可以產生 0~N-1 之間的整數呢? 假設 N 等於 3,則 0≦Rnd*3<3,而 Fix 函數的作用是去掉小數留下整數,所以: 若 0≦Rnd*3<1,則經 Fix 轉換後會變成 0。 若 1≦Rnd*3<2,則經 Fix 轉換後會變成 1。 若 2≦Rnd*3<3,則經 Fix 轉換後會變成 2。 Fix(Rnd*3) 可能產生的值為 0、1、或 2(等於3-1 = N-1)。依此推論,Fix(Rnd*N) 會產生 0、1…N-1 之中的一個亂數。

Rnd 實例 P.192 (1) 寫一個可以擲出三個骰子的網頁。

Rnd 實例 P.192 (2) dice.aspx <% Dim D1 = Fix(Rnd * 6) + 1   Response.Write( "<IMG SRC=dice" & D1 & ".gif>" ) Response.Write( "<IMG SRC=dice" & D2 & ".gif>" ) Response.Write( "<IMG SRC=dice" & D3 & ".gif><P>" ) Response.Write( "<HR>您所擲出的點數是: " & D1 + D2 + D3 ) %> <p><A HREF=dice.aspx>重擲骰子</A>

Rnd 實例 P.193 (1) 寫一個樂透彩的電腦選號網頁。

Rnd 實例 P.193 (2) lotto.aspx Part I #01 <H2>樂透彩 -- 電腦選號<HR></H2> #02 <% #03 Dim Num() = { "01", "02", "03", "04", "05", "06", "07", _ #04 "08", "09", "10", "11", "12", "13", "14", _ #05 "15", "16", "17", "18", "19", "20", "21", _ #06 "22", "23", "24", "25", "26", "27", "28", _ #07 "29", "30", "31", "32", "33", "34", "35", _ #08 "36", "37", "38", "39", "40", "41", "42" } #09 Dim Selected(5) #10 Dim I, K, D #11 #12

Rnd 實例 P.193 (3) lotto.aspx Part II For I = 0 To 5 #13 D = Fix(Rnd * (42-I)) #14 Selected(I) = Num(D) #15 Num(D) = "9999" #16 Array.Sort( Num ) #17 Next #18 Array.Sort( Selected ) #19 #20 Response.Write( "<UL><LI>" & Join(Selected, "<LI>") & "</UL>" ) #21 %> #22 <p><A HREF=lotto.aspx>重新選號</A>

日期時間類型函數 用 Year、Month 及 Day 函數自設日期格式。 用 Hour、Minute 及 Second 函數自設時間格式。 用 DateAdd 函數計算使用期限。 用 DateDiff 函數計算時間差。

用 Year、Month 及 Day 函數自設日期格式 (1)

用 Year、Month 及 Day 函數自設日期格式 (2) <% Dim D = Now() Response.Write( "現在是: " & ChineseDate(D) & "<HR>" ) %>   <script Language="VB" runat="server"> Function ChineseDate( D ) Dim ChineseYear Dim Y = Year(D) If Y > 1911 Then ChineseYear = "民國" & Y-1911 & "年" Else ChineseYear = "民國前" & (1911-Y+1) & "年" End If Return ChineseYear & Month(D) & "月" & Day(D) & "日" End Function  </script>

用 Hour、Minute 及 Second 函數自設時間格式 (1)

用 Hour、Minute 及 Second 函數自設時間格式 (2) <% Dim T = Now() Response.Write( "現在是: " & ChineseTime(T) & "<HR>" ) %>   <script Language="VB" runat="server"> Function ChineseTime( T ) Dim ChTime Dim H = Hour(T) If H < 12 Then ChTime = "上午" & H & "時" Else ChTime = "下午" & (H-12) & "時" End If Return ChTime & Minute(T) & "分" & Second(T) & "秒" End Function  </script>

用 DateAdd 函數計算使用期限(1) 如果您經營一個收費網站,而提供給試用者的試用期為 60 天,那麼如何在試用者申請時,告訴他可以使用到哪一天呢? 方法是讀取當時的系統日期(呼叫 Now 函數),然後利用 DateAdd 函數加上 60天: Dim D = DateAdd( "d", +60, Now ) Response.Write("謝謝您, 您可以試用到 " & ChineseDate(D))

用 DateAdd 函數計算使用期限(2)

用 DateAdd 函數計算使用期限(3) 如果您想改以 “月” 為使用的單位,則是將 DateAdd 函數的前兩個參數改成:"m" 及 +2,如下: Dim D = DateAdd( "m", +2, Date ) Response.Write("謝謝您, 您可以試用到 " & ChineseDate(D))

用 DateDiff 函數計算時間差 (1)

用 DateDiff 函數計算時間差 (2) 如果我們想製作含有「距離公元2010年還有 ?????? 秒」的網頁,大概非使用 DateDiff 函數不可,過程是讀取目前的系統日期時間,然後與 #01/01/2010 00:00:00# 進行秒數差的計算,所撰寫的程式如下: S = DateDiff( "s", Now, #01/01/2010 00:00:00# )

用 DateDiff 函數計算時間差 (3) 如果要計算 ‘天’ 數,則是將 DateDiff 的第一個參數由 "s" 改成 "d": S = DateDiff( "d", Now, #01/01/2010 00:00:00# )

用 DateDiff 函數計算時間差 (4) Y2010.aspx 完整範例如下: <% Response.Write( "距離公元2010年還有: <UL>" )   Dim S = DateDiff( "s", Now, #01/01/2010 00:00:00# ) Response.Write( "<LI>" & S & " 秒" ) S = DateDiff( "d", Now, #01/01/2010 00:00:00# ) Response.Write( "<LI>" & S & " 天" ) Response.Write( "</UL>" ) %>