1 / 107

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

ASP.NET 網頁製作教本 – 從基本語法學起. 第4章 VB.NET 程式與 網頁製作的應用. 4-1 陣列 ( Array). 陣列 ( Array). 陣列的宣告與使用(1). 陣列必須先宣告才能使用,其宣告格式與變數的宣告很像 最簡單的陣列宣告格式是:. Dim 陣列名稱 ( N). 陣列的宣告與使用(2). 其中 N 代表陣列中最後一項資料的順序,例如:. 陣列的宣告與使用(3). 一旦宣告了陣列,我們就可以存取陣列中各單項的資料,存取的方法是在陣列名稱之後加上 " (資料順序) " ,例如:.

zorina
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 4-1 陣列(Array)

  3. 陣列(Array)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  18. 重新設定陣列的大小 (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

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

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

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

  22. 陣列與排序 (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 }

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

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

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

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

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

  28. 應用實例(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

  29. 應用實例(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

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

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

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

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

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

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

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

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

  38. 二維陣列資料的輸出(1) • 如果要對整個二維陣列的資料進行輸出,通常要使用 For-Next 巢狀迴圈,例如: Dim I, JDim 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

  39. 二維陣列資料的輸出 (2) • 程式以「列」為外迴圈,所以外迴圈每執行一次,便輸出一橫列的資料。如果以「行」為外迴圈,則外迴圈每執行一次,便輸出一直行,程式如下: Dim I, JDim 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

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

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

  42. 4-2 副程式與函數

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

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

  45. 從「敘述區塊」到「副程式」(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>

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

  47. 練習 • 將「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>

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

  49. 帶有參數的副程式(2) <% Dim Name As String Dim score As Integer 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>

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

More Related