BLANK overview
Visual Basic 2005 程式設計
Visual Basic 2005語言特色 簡單易學 功能強大 可開發Windows應用程式、Web應用程式、行動應用、Web Services、Windows Services、資料庫應用… 具有.NET Framework 2.0強大支持 完整支援物件導向程式設計架構
Demo-dataSource與DropDownList CH01 Demo-dataSource與DropDownList
程式該作的事情 輸入 處理 輸出 原始 資料 報表 (或其他) 資料庫 程式的核心部份在這裡
簡單的範例程式 0000: '定義兩個變數 0001: Dim a, b As Integer EX:CH1-1\CH1-1\Module1.vb 0000: '定義兩個變數 0001: Dim a, b As Integer 0002: '輸入:要求使用者在鍵盤上輸入一個數字,並且放到變數『a』當中 0003: a = InputBox("請輸入一個數字:") 0004: '運算:透過電腦計算出a 的平方值,並且放到變數『b』當中 0005: b = a * a 0006: '輸出:將變數中的值,顯示在螢幕上 0007: MsgBox(a & " 的平方為" & b)
現在,只要透過單一一個IDE環境即可完成 開發程式的步驟? 撰寫程式 進行編譯 進行連結 測試執行 除錯與修改 產生執行檔(.exe) 建立原始程式碼 (.vb) 轉換成.obj 現在,只要透過單一一個IDE環境即可完成
Visual Studio 2005 微軟提供的全方位開發環境 開發程式所需工具 整合式的開發環境(IDE) Visual Studio 2005 微軟提供的全方位開發環境 功能強大、支援各種運用、支援各種語言(C#、VB)、支援行動式裝置開發、支援各種資料庫、支援報表開發… Visual Basic 2005 書附光碟中的個人版開發工具 可完成絕大部分的程式設計需求、支援SQL Server 2005 Express資料庫 免費下載(http://www.microsoft.com/taiwan/vstudio/express/vb/download )
Visual Studio 2005的主要畫面 首頁 主選單(Alt + …) 線上資源 最近使用的專案
程式以專案為單位(檔案→新增專案) 有各種不同類型的專案可供選擇
專案類型 Windows應用程式:在Windows環境中執行的應用程式,可以使用所有.NET Framework中提供的使用者操作介面(GUI),這也是本書所專注討論的程式類型。(教材第5章之後的程式將採取此方式設計) 類別庫:類別庫是類別(Class)的集合,內含一個以上的類別。所謂的類別可視為共用的程式碼,程式設計師可以引用他人建立的類別以完成某種功能,而不需要自己撰寫程式碼,主要目的是希望程式碼可以重用(reuse)。 主控台應用程式:建立一個在『提示列模式』(Command-Line)執行的應用程式。某些程式不需要複雜的操作介面,只需要以文字模式的方式進行輸入和顯示,即可建立此種模式的應用程式,此模式中無法使用『使用者操作介面(GUI)』,因此畫面單調,但開發過程簡單,執行效率較高。( 教材1-4章中的程式將採取此方式設計)
專案類型 Windows控制項程式庫:『使用者操作介面(GUI)』中的每一個元件,稱之為控制項(例如按鈕、文字輸入方塊、月曆…等)。您可以利用這種類型的專案,來建立自己的控制項,建立好的控制項可讓其他開發人員用在『Windows應用程式』類型的專案中。 Web控制項程式庫:此類型的專案可以用來建立Web應用程式(ASP.NET)開發環境當中使用的Web控制項。 Windows服務:建立 Windows 服務的專案。 空專案:建立本機應用程式的空專案。 Crystal Report應用程式:Crystal Report是VS2005當中的報表開發工具,而Crystal Report應用程式專案則可用來開發以需要呈現出報表的應用程式。
以Visual Studio 2005開發程式的步驟? 在Visual Studio 2005中撰寫程式(VB或C#) 透過Visual Studio 2005進行測試與除錯 利用Visual Studio 2005編譯執行檔 部署(安裝)到其他機器上,供他人執行 使用者提出修改程式的需求
Demo-dataSource與DropDownList 建立主控台應用程式
建立主控台應用程式(在選單中選取『檔案→新增專案』)
建立主控台應用程式 程式碼其實是儲存在這個檔案裡 您可以將程式碼從這邊開始填入
主控台應用程式,只有黑底白字的樣式,沒有炫麗的Windows按鈕和視窗,但一樣可以運作 簡單的範例程式 EX: CH1-2\CH1-2\Module1.vb 0000: Sub Main() 0001: Dim a As Integer 0002: '顯示一段文字 0003: Console.Write("請輸入一個數字:") 0004: '要求使用者輸入,並儲存到變數a 0005: a = Console.ReadLine 0006: '換行 0007: Console.WriteLine() 0008: '計算並輸出 0009: Console.WriteLine(a & "的平方值為:" & a * a) 0010: '這一行是為了讓程式碼暫停不動,不要立刻結束 0011: Console.ReadKey() 0012: End Sub 主控台應用程式,只有黑底白字的樣式,沒有炫麗的Windows按鈕和視窗,但一樣可以運作
偵錯→開始偵錯
Demo-dataSource與DropDownList 建立Windows應用程式
建立主控台應用程式(在選單中選取『檔案→新增專案』)
建立主控台應用程式 這是一個表單(也就是視窗) 從工具箱中拖曳控制項到表單上 在表單上『 Double-Click』以切換到程式設計模式
建立主控台應用程式 整個表單和程式碼都儲存在這個位置 程式可以撰寫在其中
簡單的範例程式 當按鈕被按下時… EX: CH1-3\CH1-3\Form1.vb Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("哈囉~您好啊!!!") End Sub 跳出一個訊時視窗之意。 按下按鈕之後,就會執行我們上面撰寫的程式!!! 此即為:『事件驅動程式設計』
Demo-dataSource與DropDownList 專案儲存 Demo-dataSource與DropDownList
專案的儲存
方案總管 幾個主要的項目如下: 檢視屬性:點選該按鈕可以檢視目前表單的屬性(跳出屬性視窗) 。 顯示所有檔案 重新整理 切換至程式碼 切換至表單 類別圖表檢視 表單檔案 幾個主要的項目如下: 檢視屬性:點選該按鈕可以檢視目前表單的屬性(跳出屬性視窗) 。 顯示所有檔案:可以切換方案總管中是否要顯示所有檔案。 表單檔案:專案中的表單檔案以.vb作為附檔名。 重新整理:點選此按鈕可以在方案總管中重新整理所有檔案。 切換至程式碼:點選此按鈕可以切換至程式碼設計模式。 切換至表單:點選此按鈕可以切換至表單設計模式。 類別圖表檢視:以圖形化的方式檢視類別物件。
Demo-dataSource與DropDownList 習題 何謂IDE?在程式設計的過程當中,擔當何種角色? 主控台應用程式和Windows應用程式有何差異? 如何建立主控台應用程式和Windows應用程式? 怎麼執行程式? 程式的原始碼檔案是何種副檔名?可執行檔又是何種副檔名? Demo-dataSource與DropDownList
Demo-dataSource與DropDownList CH02 Demo-dataSource與DropDownList
使用者在程式(.exe)檔案上Double-Click 電腦怎麼執行我們撰寫出來的程式? 使用者在程式(.exe)檔案上Double-Click 從硬碟將程式(.exe)載入到記憶體 開始將電腦(的部分)主控權交給該程式 電腦開始依照程式的指令運作 程式依照需要,存取資料庫或是其他資源 資料庫 將運算結果顯示(列印)或保留在檔案中 結束,釋放記憶體等資源 Windows環境中,電腦如何執行我們撰寫的程式碼?
變數的功能與意義 電腦主要的功能就是運算,因此需要將外界的資訊輸入電腦,透過程式來進行運算。外界的資訊一進入電腦,首先會暫時儲存在記憶體中,而在程式碼裡面,我們所定義的『變數』,就擔當這樣的一個角色。 『變數』:可以在記憶體中暫時儲存資料,透過運算達成我們需要的結果。 程式中的每一個變數名稱,都指向一個相對應的記憶體位置,我們透過輸入設備(鍵盤、滑鼠、或其他裝置)將資料傳入電腦,程式碼接著就會將資料放入某個變數所指向的記憶體空間內。 此時如果電腦斷電,記憶體中的變數也跟著煙消雲散了,因此,需要長時間保存的資訊(或運算的結果),我們還會將其輸出到外界的儲存裝備中,例如:硬碟、USB隨身碟…等。
語法: 範例: 變數的定義 Dim + (使用者自訂的變數名稱) + As + 變數的型別 Dim number1 As Integer 宣告變數並且初始化 Dim number1 As Integer Dim number2 As Integer = 100
簡單的範例程式 0001: Dim A As Integer 0002: Dim B As Integer 定義三個整數變數 EX:CH2-4\CH2-4\Module1.vb 0001: Dim A As Integer 0002: Dim B As Integer 0003: Dim C As Integer 0004: '額外建立兩個變數 0005: Dim sum As Integer 0006: Dim avg As Single '請注意這個變數型別不同 0007: 0008: '輸入三個人的身高 0009: A = InputBox("請輸入A的身高:") 0010: B = InputBox("請輸入B的身高:") 0011: C = InputBox("請輸入C的身高:") 0012: '利用變數來作運算 0013: sum = A + B + C 0014: avg = sum / 3 定義三個整數變數 定義一個單精度浮點數 跳出視窗要求使用者輸入三個人身高 進行計算
簡單的範例程式 0015: '顯示 0016: Console.Write("身高總計:") EX:CH2-4\CH2-4\Module1.vb 0015: '顯示 0016: Console.Write("身高總計:") 0017: Console.WriteLine(sum) 0018: Console.Write("平均身高:") 0019: Console.WriteLine(avg) 0020: Console.ReadKey() Console.Write和WriteLine可以輸出一段文字在畫面上 等候使用者按鍵(讓程式稍微停一下)
變數在程式碼中的運算方式 將A+B+C運算後的結果,存放到sum變數當中。 sum = A + B + C (運算後的結果)
變數的型別: 變數型別 Visual Basic 型別 記憶體儲存空間 可儲存的數值範圍 續下頁… Boolean 視實作平台而定 True 或 False(Yes或No / 1 或 0) Byte 1 個位元組 0 至 255 (不帶正負號) Char (單一字元) 2 個位元組 0 至 65535 (不帶正負號) Date 8 個位元組 1 年 1 月 1 日 0:00:00 (午夜) 至 9999 年 12 月 31 日 11:59:59 PM Decimal 16個位元組 0 到 +/-79,228,162,514,264,337,593,543,950,335(無小數點) 0 到 +/-7.9228162514264337593543950335 (小數點右邊有 28 位數) Double (雙精度浮點數) -1.79769313486231570E+308 到 -4.94065645841246544E-324 † (負值), 4.94065645841246544E-324 到 1.79769313486231570E+308 † (正值) Integer 4 個位元組 -2,147,483,648 至 2,147,483,647 (帶正負號) 續下頁…
變數的型別: 變數型別 Visual Basic 型別 記憶體儲存空間 可儲存的數值範圍 Long (長整數) 8 個位元組 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 Object 32 位元平台上 4 個位元組 可以用 Object 型別之變數加以儲存的任何型別 64 位元平台上 8 個位元組 Sbyte 1 個位元組 -128 至 127 (帶正負號) Short (短整數) 2 個位元組 -32,768 至 32,767 (帶正負號) Single(單精度浮點數) 4 個位元組 -3.4028235E+38 到 -1.401298E-45 † (負值), 1.401298E-45 到 3.4028235E+38 † (正值) String (可變長度) 視實作平台而定 0 至大約二十億個 Unicode 字元 UInteger 0 至 4,294,967,295 (不帶正負號) ULong 0 到 18,446,744,073,709,551,615 (1.8...E+19 †) (不帶正負號) UShort 0 至 65,535 (不帶正負號)
每一種變數型態所使用到的記憶體空間有所不同,變數型別具有幾種意義: 變數型別的意義 每一種變數型態所使用到的記憶體空間有所不同,變數型別具有幾種意義: 讓電腦為不同的型別配置適當大小的記憶體,不要不敷使用,但也不要太浪費空間。 避免不同型別之間進行運算發生錯誤。
簡單的範例程式 0000: Dim str1 As String 0001: Dim str2 As String EX:CH2-4\CH2-4\Module1.vb 0000: Dim str1 As String 0001: Dim str2 As String 0002: Dim str3 As String 0003: 0004: str1 = "ABC" 0005: str2 = "DEF" 0006: str3 = str1 + str2 0007: 0008: Console.Write(str3) 請注意,在VB程式碼當中,以雙引號括住的,被視為文字 字串變數允許相加
簡單的範例程式 0000: Dim str1 As String 0001: Dim str2 As String EX:CH2-4\CH2-4\Module1.vb 0000: Dim str1 As String 0001: Dim str2 As String 0002: Dim str3 As String 0003: 0004: str1 = "ABC" 0005: str2 = "DEF" 0006: str3 = str1 / str2 0007: 0008: Console.Write(str3) 但是不允許相除
變數與運算子 運算元(變數) 運算子 變數 運算元(常數) C = A + 13
則表示把變數B的值取出,加上13之後放入A當中 那如果看到 A=A+100 則表示??? 變數與運算子 在程式碼中,我們看到 A=B 表示把變數B的值放入變數A當中,看到 A=B+13 則表示把變數B的值取出,加上13之後放入A當中 那如果看到 A=A+100 則表示??? 數學運算式的等號左右兩邊一定要相等,但是程式碼中的等號左右兩邊則不需相等,因為『等號』乃是設定的意思,表示把變數A設定成…
算術運算子 + 加 1 + 1 = 2 - 減 2 - 1 = 1 * 乘 2 * 3 = 6 / 除 13 / 8 = 1.625 \ 說明(作用) 範例 + 加 1 + 1 = 2 - 減 2 - 1 = 1 * 乘 2 * 3 = 6 / 除 13 / 8 = 1.625 \ 除 (只取整數部分) 13 \ 8 = 1 Mod 取餘數 13 Mod 8 = 5 、 26 Mod 13 = 0 ^ 次方 2 ^ 3 = 8
設定運算子 說明(作用) 範例(number = 10) = 等於(設值) number = 10 += 加之後設定 number += 2 (相當於number = number + 2) -= 減之後設定 number -= 2 (相當於number = number - 2) *= 乘之後設定 number *= 2 (相當於number = number * 2) /= 除之後設定 number /= 2 (相當於number = number / 2) \= 除之後設定(只取整數部分) number \= 2 (相當於number = number \2) ^= 次方之後設定 number ^= 2 (相當於number = number ^ 2) &= 字串相加之後設定 number &= 2 (相當於number = number &2)
比較運算子 運算子 說明 (作用) 範例 (假設score = 100、age = 20) 回傳結果 = 等於 score = age False >= 大於等於 score >= age True <= 小於等於 score <= age <> 不等於 score <> age > 大於 score > age < 小於 score < age 比較運算子會回傳「True或False」值(表示成立、或是不成立;正確、或是不正確;真或是假),通常會與「判斷條件」或「迴圈」伴隨著出現。(判斷條件:If…End If。迴圈:For…Next、Do…Loop等,後面有詳細介紹。)
範例: 串聯運算子 Dim a As String a = 10 + “20“ a的結果是??? Dim b as String 說明(作用) + "+"這個符號不只可以用在數值的加法上,也可以用在字串相加的地方。在字串的相加方面,相加的變數必須宣告為「字串」的型態;如果沒有宣告為字串,"+"本身的預設就是「數值相加」。 & 不管變數的型別是什麼,"&"會把變數的型別通通轉換成「字串」來操作。 範例: 結果為1020 『&』會把符號左右的常數或變數,一律先轉換成字串再進行結合。 結果為30 『+』預設為數字,除非符號左右的資料都是文字,否則會將資料轉為數字相加 Dim a As String a = 10 + “20“ a的結果是??? Dim b as String b = 10 & 20 b的結果是???
邏輯運算子 運算子 說明(作用) Not 後面所敘述條件為「True」,則回傳「False」; Not Not 後面所敘述條件為「False」,則回傳「True」。 And And運算子會同時判斷前後兩者的敘述條件,如果前後所敘述的條件皆為「True」,則回傳「True」; 有任何一段條件為「False」,則回傳「False」。 Or Or 前後所敘述的兩段條件只要有一段為「True」,則回傳「True」; 當兩段條件皆為「False」,則回傳「False」。 Xor 當Xor 前後所敘述的兩段條件一段為「True」,一段為「False」, 則Xor的回傳值為「True」; 若兩段條件皆為「False」或皆為「True」,則回傳「False」。 AndAlso 用來判斷回傳值的條件與And相同,不過AndAlso不會同時針對前後兩個敘述條件做判斷,AndAlso會先判斷前面的敘述條件,如果前面的敘述條件為「False」,則不會判斷後面的敘述條件,直接回傳「False」。 OrElse 用來判斷回傳值的條件與Or相同,不過OrElse不會同時針對前後兩個敘述條件做判斷,OrElse會先判斷前面的敘述條件,如果前面的敘述條件為「True」,則不會判斷後面的敘述條件,直接回傳「True」。
邏輯運算子 運算子 範例 (假設score = 100、age = 20) 回傳結果 Not Not score = 100 And score = 100 And age = 20 Or score = 100 Or age = 20 Xor score = 100 Xor age = 20 AndAlso score > age AndAlso age > 50 OrElse score > age OrElse age > 50 False True
運算子的優先順序 別忘了由左到右,括號『(』、『)』優先 ^(次方) –(負號) 算術/串連運算子 *, / (乘法及除法) \ (只取整數部分的除法) Mod (取餘數) +, –(加法及減法)、 +(字串串連) &(字串串連) 比較運算子 =(等於)、<>(不等於)、<,>(大於或小於)、>=(大於等於)、 <=(小於等於)、Like 邏輯/位元運算子 Not And、AndAlso Or、OrElse、Xor
變數的型別轉換 隱含型別轉換 0000: Dim c As String 0001: c = "2431" + 3 0002: Console.Write(c) 0003: Console.ReadKey() 第一個運算元是字串,但是為了與數字3相加,系統會先試圖將字串2431轉成數字的2431,接著加上3,變成2434,這是運算的結果。 但是,為了放到字串變數C當中,系統又會作一次型別轉換,將數字的2431轉成字串的2431,放入變數C。 所有的這類型別轉換過程,是由電腦系統自動進行的,這個部分我們稱之為型別的『隱含轉換』。隱含轉換在程式碼中不需要任何特殊語法,由系統自動進行。
CDate(…)為轉換函式,明確的把字串型別的變數A和B,轉換成日期格式 變數的型別轉換 EX: CH2-6\CH2-6\Module1.vb 0000: Dim A, B As String 0001: Dim n As Integer 0002: 0003: Console.Write("請輸入A的生日:") 0004: A = Console.ReadLine 0005: Console.Write("請輸入B的生日:") 0006: B = Console.ReadLine 0007: n = DateDiff(DateInterval.Day, CDate(A), CDate(B)) 0008: 0009: Console.Write("這兩個人生日相差" & n & "天...") 0010: Console.ReadKey() CDate(…)為轉換函式,明確的把字串型別的變數A和B,轉換成日期格式 *DateDiff 函式可以計算出兩個日期之間的差
變數的命名規則 以英文字母開頭 僅能由字母、數字或底線組成 變數名長度不能超過255字元 變數名稱的大小寫在VB中並無不同,名稱最好能夠看出其意義,您可以用底下這樣的方式來命名: Dim LocalTime as Date 用來儲存時間 Dim UserName as String 用來使用者名稱 透過大小寫可以讓變數的命名更有規則性和閱讀性,在微軟的.NET Framework中,命名的方式均符合底下這兩種慣例(之一): Pascal 命名法的大小寫慣例 名稱的第一個字母和每個隨後單字的第一個字母都是大寫的。 例如:BackColor Camel 命名法的大小寫慣例 名稱的第一個字母是小寫的,而每個隨後單字的第一個字母是大寫的。 例如:backColor
Demo-dataSource與DropDownList 習題 運算式 10 Mod 3 * 2 ^ 4 + 4 / 2 的結果為? C=“123”+4 D=123 & 4 運算執行後,C 和 D的結果分別為? Demo-dataSource與DropDownList
Demo-dataSource與DropDownList 習題 請轉為電腦運算式 Demo-dataSource與DropDownList 1. (2+A)(16-A) 2. 3.
Demo-dataSource與DropDownList 習題 請判斷底下的變數名稱何者正確: !Eric _Account User_Name User@Address @cc ?Acc A* Z #AC C( ) ~A Demo-dataSource與DropDownList
Demo-dataSource與DropDownList 習題 計算出BMI 請撰寫一個程式,要求使用者輸入身高體重,並且計算BMI值。 BMI指的是『身高體重指數』(又稱身體質量指數,英文為Body Mass Index,簡稱BMI)是一個計算值,主要用於統計用途。 其公式如下: h = 身高,單位:米; w = 體重,單位:公斤; Demo-dataSource與DropDownList
Demo-dataSource與DropDownList CH03 Demo-dataSource與DropDownList
流程控制 為何需要流程控制? 流程控制指令的介紹 條件判斷 迴圈 陣列
流程控制 為何需要流程控制 在程式設計當中,有一個很重要的概念。我們撰寫的程式需要利用電腦強大的運算能力,來重複且大量的進行資訊處理或計算等功能。因為要重複處理,且需要進行判斷,因此『流程控制』相關的指令碼就出現了。 任何一種程式設計語言,都提供豐富的流程控制功能,而且每一種語言的流程控制指令碼的長相都差不多,這也是因為程式設計經過了長時間的演進與改良,現在幾乎每一種程式設計語言(C#、Java、C、C++),都會具備底下我們將介紹的幾種流程控制方式。
Demo-dataSource與DropDownList CH03 If, Select, try… Demo-dataSource與DropDownList
條件判斷敘述 If…Then 流程控制 If condition [ Then ] [ statements] [ ElseIf elseifcondition [ Then ] [ else if statements ] ] [ Else [ else statements ] ] End If condition通常是一個布林(Boolean)運算式,但它也可以是任何計算結果為數字的運算式。 Visual Basic 2005將會把這個數值解譯為 True 或 False;一個為零的數值會被視為False,而任何非零數值都被看作 True。若 condition 為 True,則 Visual Basic 會執行 Then 關鍵字後面的所有指令碼(statements);反之,則執行Else後面的指令碼(statements)。
流程控制 EX: CH03-01 0000: Sub Main() 0001: Dim score As Integer = 100 0002: Dim result As String 0003: 0004: Console.Write("分數:" & score) 0005: '判斷score 有沒有大於 0006: If score >= 60 Then 0007: result = " 及格!" 0008: Else 0009: result = " 不及格!" 0010: End If 0011: Console.WriteLine(result) 0012: Console.ReadKey() 0013: End Sub
流程控制 EX: CH03-02(巢狀迴圈) 0003: '要求使用者輸入 0004: Console.Write("請輸入一個數字:") 0003: '要求使用者輸入 0004: Console.Write("請輸入一個數字:") 0005: number = Console.ReadLine 0006: '判斷 0007: If number < 10 Then 0008: digits = 1 0009: ElseIf number < 100 Then 0010: digits = 2 0011: ElseIf number < 1000 Then 0012: digits = 3 0013: ElseIf number < 10000 Then 0014: digits = 4 0015: Else 0016: digits = 5 0017: End If
流程控制 EX: CH03-02(巢狀迴圈) 0018: '判斷位數 0018: '判斷位數 0019: If digits = 1 Then Result = "1位數" 0020: If digits = 2 Then Result = "2位數" 0021: If digits = 3 Then Result = "3位數" 0022: If digits = 4 Then Result = "4位數" 0023: If digits = 5 Then Result = "大於位數" 0024: '顯示 0025: Console.Write("數字:" & number & " --> " & Result)
條件判斷敘述 Select…Case 流程控制 Select [ Case ] test expression [ Case expression [ statements ] ] [ Case Else [ else statements ] ] End Select 如果 test expression 符合任何 Case expression 子句,即會執行接在該 Case後的陳述式(statements),直到下一個Case關鍵字或是End Select陳述式。如果 test expression 符合一個以上的 Case 子句,則程式只會執行接在第一個符合條件者之後的陳述式,然後就跳離Select Case。如果在每一個Case 陳述式之間找不到符合條件者,則Case Else陳述式後面的程式碼會被執行。
條件判斷敘述 Select…Case 流程控制 『Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber』 『Case "apples", "nuts" To "soup", TestItem』
流程控制 IF Then 寫法… '宣告變數score ,並初始化score的值為 Dim score As Integer = 100 Dim result As String '用If 來判斷四個等級的分數 If score <= 100 And score >= 80 Then result = "分數介於100-80之間" ElseIf score < 80 And score >= 60 Then result = "分數介在79-60之間" ElseIf score < 60 And score >= 40 Then result = "分數介在59-40之間" ElseIf score < 40 Or score >= 0 Then result = "分數介在39-0之間" End If Select Case 寫法… Console.Write("請輸入分數:") score = Console.ReadLine '用Select Case 來判斷不同等級的分數 Select Case score Case 80 To 100 result = "分數介在-80之間" Case 60 To 79 result = "分數介在-60之間" Case 40 To 59 result = "分數介在-40之間" Case Is <= 39 result = "分數小於等於" Case Else result = "其他的狀況" End Select 利用Select Case的寫法,在條件的陳述方面看起來簡潔多了,不會像If…Then…Else一樣,必須在「大於、小於、等於」或「And、Or…」等符號之間游走,也很容易忘記自己寫到哪裡去…。
讓使用者輸入月份,透過Select Case判斷屬於哪一種季節 流程控制 EX: CH03-05 0000: Sub Main() 0001: Dim MM As Integer 0002: Dim result As String = "" 0003: Console.Write("請輸入月份:") 0004: MM = Console.ReadLine 0005: Select Case MM 0006: Case 12, 1, 2 0007: result = "您輸入的這個月份是冬天" 0008: Case 3, 4, 5 0009: result = "您輸入的這個月份是春天" 0010: Case 6, 7, 8 0011: result = "您輸入的這個月份是夏天" 0012: Case 9, 10, 11 0013: result = "您輸入的這個月份是秋天" 0014: Case Else 0015: result = "沒有這種月份" 0016: End Select 0017: 0018: Console.Write(result) 0019: Console.ReadKey() 0020: End Sub 讓使用者輸入月份,透過Select Case判斷屬於哪一種季節
流程控制 Select Case 中幾種錯誤的寫法 必須由小而大 執行後跳離 Select Case '正確寫法 Case 80 To 100 Result = "真厲害!" '錯誤寫法 Case 100 To 80 必須由小而大 Dim score As Integer = 90 Dim Result As String = "" Select Case score Case 80 To 100 Result = "真厲害!" Case 85 To 100 Result = "很棒! " ‘不會執行到 End Select 執行後跳離 Select Case
Select Case 與 If … Then之差異 流程控制 Select Case 與 If … Then之差異 IF…Then Select Case 語法 較為簡單直覺。 較具有結構化。 適用於 適用於運算式結果只會是True或False兩者之一的判斷式。 適用於同一個變數或運算式需要『重複且多次』被拿來判斷時候。多半用於判斷結果會有多種不同的可能時(也就是結果不會只是Ture或False兩種狀態)。 例外條件 要自行撰寫例外條件的處理方式。 可以透過Case Else來處理例外條件。
Select Case 與 If … Then之差異 流程控制 Select Case 與 If … Then之差異 If…Then Select Case
流程控制 巢狀式的判斷敘述 If…Then Dim A As Integer Dim B As String If A > 10 Then If B = "abc" Then (…略…) Else End If Select Case Select Case A Case 1 (…略…) Case 2 Select Case B Case "abc" Case "def" End Select Case 3 If B = "zzz" Then End If
流程控制 Try…Catch錯誤處理 Try…Catch Try 可能發生錯誤的程式碼位置 Catch 發生錯誤時,要執行的指令 [ Exit Try ]若下了Exit Try 指令,則跳出Try…End Try結構 Finally 只要一進入Try敘述中 不管有沒有錯誤或從Try敘述中的哪一部份離開都執行的程式 End Try Try…Catch是用來在程式中進行防止錯誤的處理,每一個程式在執行階段,都可能發生無法預期的錯誤,如果在程式發生錯誤時,能夠進行最後的狀態記錄,或是在程式終止(當掉)之前,將尚未儲存的資料進行儲存,對程式的使用者將更有保障。
流程控制 如果程式發生錯誤,才會執行到這段 Try…Catch錯誤處理 '訊息 Console.Write("請輸入月份:") '開始捕捉錯誤 Try '可能發生錯誤的程式 MM = Console.ReadLine Select Case MM Case 12, 1, 2 result = "您輸入的這個月份是冬天" Case 3, 4, 5 result = "您輸入的這個月份是春天" Case 6, 7, 8 result = "您輸入的這個月份是夏天" Case 9, 10, 11 result = "您輸入的這個月份是秋天" Case Else result = "沒有這種月份" End Select Catch ex As Exception '錯誤處理區段 Console.WriteLine("您的程式發生問題,請與我們聯繫...") Console.WriteLine("(" & ex.Message & ")") Console.ReadKey() Exit Sub End Try 如果程式發生錯誤,才會執行到這段
Demo-dataSource與DropDownList CH03 for迴圈 Demo-dataSource與DropDownList
For …Next迴圈 流程控制 For counter [ As 型別] = start To end [ Step step ] [ statements ] [ Exit For ] Next [ counter ] 在For和Next兩個關鍵字中的程式碼,會被重複的執行,但執行的次數會依照變數counter來決定。而變數將會從start開始到end,每次遞增step。 在重複執行For…Next迴圈中的程式碼時,變數『counter』將會每此被替換成不同的值。
流程控制 Sub Main() For i As Integer = 1 To 12 Console.WriteLine(i) Next EX: CH03-07 Sub Main() For i As Integer = 1 To 12 Console.WriteLine(i) Next Console.ReadKey() End Sub 被重複執行12次,每次變數i的值都有所不同 在這個迴圈當中,我們設定了一個I變數,型別為整數,數值會從1開始持續累積到12。(也就是超過12時,就會跳出迴圈)
流程控制 巢狀迴圈 0001: Dim ret As String = "" 0002: EX: CH03-09 0001: Dim ret As String = "" 0002: 0003: For I As Integer = 1 To 10 0004: For k As Integer = 1 To I 0005: ret = ret & "*" 0006: Next k 0007: ret = ret & vbCrLf 0008: Next I 0009: 0010: Console.Write(ret) 0011: Console.ReadKey() 巢狀迴圈 在這個迴圈當中,我們設定了一個I變數,型別為整數,數值會從1開始持續累積到12。(也就是超過12時,就會跳出迴圈)
利用Exit For允許中途離席 (請注意,Exit For一定會出現在判斷式之後) 流程控制 EX: CH03-15 '宣告 Dim Start, Finish As Integer '要求使用者輸入開始數字 Console.Write("請輸入開始數字:") Start = Console.ReadLine '要求使用者輸入結束數字 Console.Write("請輸入結束數字:") Finish = Console.ReadLine '在開始數字和結束數字當中找出第一個16 的倍數 For i As Integer = Start To Finish '如果除以餘數為則為的倍數 If i Mod 16 = 0 Then Console.Write("第一個16 的倍數為:" & i) Console.ReadKey() Exit For End If Next 利用Exit For允許中途離席 (請注意,Exit For一定會出現在判斷式之後)
Demo-dataSource與DropDownList CH03 陣列 Demo-dataSource與DropDownList
陣列機制 陣列,是一組在記憶體中連續存放的邏輯相關值,您可以將其視為一連串同樣名稱的變數。 例如,底下這個陣列,可以用來存放某個班級當中,每位學生的身高: 您可能會覺得奇怪,既然已經有變數可以運用,為何還需要陣列呢? 陣列的第一個使用時機在於:『當您為了一個工作而需要重複定義多個變數時』。
可以用For Each迴圈,列舉出所有陣列的值 陣列機制 EX: CH03-09 '宣告Temperature為整數陣列,並且初始化Temperature的值 '在這裡我們填入了12個值,代表每個月份的平均溫度 Dim Temperature() As Integer = {15, 17, 20, 23, 26, 30, 35, 35, 33, 32, 28, 25} '宣告變數sum,用來計算12個月份的平均溫度 Dim sum As Double '利用ForEach迴圈來加總每個月份的平均溫度 For Each con As Integer In Temperature sum += con Next sum /= 12 TextBox1.Text = sum 建立了一個陣列 可以用For Each迴圈,列舉出所有陣列的值 sum=sum/12
陣列機制 Dim names() As String Dim scores() As Integer 陣列的建立與使用 在Visual Basic 2005中,陣列可以宣告成任何型別,宣告的方式只需要在自訂的陣列名稱後面加上小括弧即可: 宣告不固定大小的陣列 Dim names() As String Dim scores() As Integer 宣告固定大小的陣列 宣告names為字串陣列 從0~1共兩個元素 Dim names(1) As String 宣告scores為整數陣列 從0~3共四個元素 Dim scores(3) As Integer
陣列機制 '利用迴圈幫names()陣列設值 For i As Integer = 0 To 1 names(i) = "VB" EX: CH03-09 '利用迴圈幫names()陣列設值 For i As Integer = 0 To 1 names(i) = "VB" Next i '利用迴圈幫scores()陣列設值 For c As Integer = 0 To 3 scores(c) = c Next c names陣列裡兩個元素的值都設成「VB」 scores陣列裡的四個元素,則依順序設成「0,1,2,3」
陣列機制 陣列的維度 在Visual Basic 2005當中,您可以透過底下的語法,定義一個二維陣列: Dim A(2,10) As Integer 透過上面這樣的宣告,可以定義出如同底下的陣列結構: 二維陣列表示該陣列可以有兩個索引,例如A(0,0)表示第一個學生的身高,而A(1,0)則表示第一個學生的體重。以這個方式類推,A(1,8)則表示第9個學生的體重。
陣列機制 這迴圈,要求使用者輸入資料,我們透過Console.ReadLine,讀取使用者輸入的資料並存放到陣列中。 EX: CH02-12 Dim A(10, 2) As Single '先讓使用者輸入資料(為了方便,我們僅輸入5位同學) For i As Integer = 0 To 4 Console.WriteLine("請輸入第" & i + 1 & "個學生的資料:") Console.Write(" -->身高(cm):") A(i, 0) = Console.ReadLine Console.Write(" -->體重(kg):") A(i, 1) = Console.ReadLine Next Console.ReadKey() 您會發現,剛才我們定義的陣列當中,A(n,2)這個元素都完全沒有被使用到 !
陣列機制 接著,我們再透過另一個迴圈,將每位同學的資料顯示出來。 '將身高體重計算出BMI,並儲存到陣列中 EX: CH02-12 '將身高體重計算出BMI,並儲存到陣列中 For i As Integer = 0 To 4 A(i, 2) = A(i, 1) / ((A(i, 0) / 100) ^ 2) Next '顯示每一位同學的資料 Console.WriteLine ("第" & i + 1 & "位同學的身高:” & A(i, 0) & " 體重:" & A(i, 1) & " BMI:" & A(i, 2) ) 我們透過一個迴圈,將每位同學的BMI計算出來,並且儲存到A(n,2)這個陣列的元素當中 接著,我們再透過另一個迴圈,將每位同學的資料顯示出來。 BMI指的是『身高體重指數』(又稱身體質量指數,英文為Body Mass Index,簡稱BMI)是一個計算值,主要用於統計用途。 其公式為: h = 身高,單位:米; w = 體重,單位:公斤;
陣列機制 執行結果如下:
陣列機制 陣列相關函式 動態變更陣列長度 函式 功能 用法 Ubound 取得陣列最大索引值 Ubound(陣列名稱) Lbound 取得陣列最小索引值 Lbound(陣列名稱) 動態變更陣列長度 ReDim names(2) 使用『ReDim』有幾個注意事項: ReDim時,就必須要給定陣列的長度。 ReDim後,陣列不需要(也不可以)再宣告一次陣列型別。 ReDim後,陣列裡面所有的元素會通通消失,除非加上Preserve關鍵字。
Demo-dataSource與DropDownList CH03 Do while迴圈 Demo-dataSource與DropDownList
Do…While迴圈機制 Do…Loop與For…Next類似,都是運用在處理重複運算的迴圈,只是迴圈結束條件的方式略有不同。 condition是判斷條件,當程式碼進入Do…Loop迴圈之後,會一直執行,每次執行時都會判斷condition條件是否成立,但是依照語法的不同,有幾種不同的可能… Do { While | Until } condition [ statements ] [ Exit Do ] Loop -或- Do Loop { While | Until } condition
Do…While迴圈機制 四種語法分別如下: 先執行一次,然後判斷條件,當條件成立時,重複執行一次迴圈中的內容: 先執行一次,然後判斷條件,當條件不成立時持續在迴圈中重複執行,直到條件成立時,則跳出迴圈: Do … Loop While 條件運算式 Loop Until條件運算式 先判斷條件,當條件成立時持續在迴圈中重複執行,直到條件不成立時,則跳出迴圈: 先判斷條件,當條件不成立時持續在迴圈中重複執行,直到條件成立時,則跳出迴圈: Do While條件運算式 Loop Do Until條件運算式
Do…While迴圈機制 Do While的應用: EX:CH03-20 0001: Dim n As Integer 0002: Dim k As Integer 0003: 0004: Console.Write("請輸入一個數字:") 0005: n = Console.ReadLine 0006: 0007: Do 0008: k = k + n 0009: Loop Until k + n > 10000 0010: 0011: Console.Write("最接近的n的倍數為:" & k) 0012: Console.ReadKey() 程式會讓使用者輸入一個數字並找到這個數字最接近10000的倍數(最接近10000,但不能超過)
Demo-dataSource與DropDownList 習題 假設家用電費每一度是2.1元,而商業用電每一度是2.7元,請設計一個程式,讓使用者輸入電表上的度數,以及用電身分(是家用還是商業用),並依照使用者輸入的資料,計算出應繳交之電費。 提示:利用If指令 Demo-dataSource與DropDownList
Demo-dataSource與DropDownList 習題 從今年開始,由於夏天用電量吃緊,因此電力公司將採用累進制度的電費計價方式,計價方式如下表,請設計一個程式,利用 Select Case 或 If 判斷指令,讓使用者輸入電表上的用電度數、用電的月份,並以一般住家用電的計費方式,計算出應繳的電費: Demo-dataSource與DropDownList 分 類 (每月使用累計) 夏月(6/1~9/30) 夏月以外的時間 一般住家用電 110度以下部分 2.100元 111~330度部分 2.730元 2.415元 331~500度部分 3.360元 501度以上部分 3.465元 營 業 用 電
Demo-dataSource與DropDownList 習題 請利用巢狀迴圈,設計出一個如下圖的九九乘法表: Demo-dataSource與DropDownList
Demo-dataSource與DropDownList 習題 建立一個程式,讓使用者輸入開始和結束數字,並且找出其中的質數(除了1和自己之外無法整除的數) 提示:利用for與if Demo-dataSource與DropDownList
Demo-dataSource與DropDownList 習題 建立一個程式,讓使用者輸入班上所有學員的考試成績(0-100),並且計算出平均分數,最後列出考試成績優於平均分數的學生。 提示:利用陣列機制 Demo-dataSource與DropDownList
Demo-dataSource與DropDownList 習題 請建立一段密碼判斷的程式,利用Console.ReadLine要求使用者輸入密碼(密碼可事先以字串定義好,例如Dim Pwd As String=”12345”),以Do…Loop迴圈判斷使用者輸入的密碼是否正確,若密碼錯誤,則要求使用者重新輸入,直到使用者輸入正確的密碼為止。 若密碼正確,則跳離Do…Loop迴圈,顯示出『歡迎進入系統』。 Demo-dataSource與DropDownList