41
Yuan-Yu Tsai 蔡蔡蔡 [email protected] 蔡蔡蔡HB61

Windows programming 視窗程式設計

  • Upload
    indra

  • View
    73

  • Download
    0

Embed Size (px)

DESCRIPTION

Windows programming 視窗程式設計. Yuan-Yu Tsai 蔡淵裕 [email protected] 辦公室: HB61. CHAPTER 2 從 Visual Basic 進入程式設計領域. 結束,釋放記憶體等資源. 程式執行的方式. 使用者在程式 (.exe) 檔案上 Double-Click. 程式依照需要,存取資料庫或是其他資源. 從硬碟將程式 (.exe) 載入到記憶體. 電腦開始依照程式的指令 運作. 將運算結果顯示 ( 列印 ) 或保留在檔案中. 開始將電腦 ( 的部分 ) 主控權交給該程式. 資料庫. - PowerPoint PPT Presentation

Citation preview

Page 1: Windows programming 視窗程式設計

Yuan-Yu Tsai蔡淵裕

[email protected]辦公室:HB61

Page 2: Windows programming 視窗程式設計

2

CHAPTER 2從 Visual Basic 進入程式設計

領域

Page 3: Windows programming 視窗程式設計

程式執行的方式程式執行的方式

3

資料庫

Page 4: Windows programming 視窗程式設計

變數的功能與意義變數的功能與意義 電腦主要的功能就是運算,因此需要將

外界的資訊輸入電腦,透過程式來進行運算 程式中的每一個變數名稱,都指向一個相對

應的記憶體位置,我們透過輸入設備 ( 鍵盤、滑鼠、或其他裝置 ) 將資料傳入電腦,程式碼接著就會將資料放入某個變數所指向的記憶體空間內

『變數』:可以在記憶體中暫時儲存資料,透過運算達成我們需要的結果

4

Page 5: Windows programming 視窗程式設計

變數的定義變數的定義

5

語法Dim+( 使用者自訂的變數名稱 )+ As + 變數的型別

範例Dim number1 As Integer ( 宣告整數變數 )Dim number2 As Integer = 100 ( 宣告整數變數且初始化 )範例Dim avg As Single ( 宣告單精度浮點數變數 )Dim temp As String ( 宣告字串變數 )

Page 6: Windows programming 視窗程式設計

6

EX : CH2-4\CH2-4\Module1.vb

0001: Dim A As Integer0002: Dim B As Integer0003: Dim C As Integer0004: ' 額外建立兩個變數0005: Dim sum As Integer0006: Dim avg As Single0007:0008: ' 輸入三個人的身高0009: A = InputBox(" 請輸入 A 的身高: ")0010: B = InputBox(" 請輸入 B 的身高: ")0011: C = InputBox(" 請輸入 C 的身高: ")0012: ' 利用變數來作運算0013: sum = A + B + C0014: avg = sum / 30015: ' 顯示0016: Console.Write(" 身高總計: ")0017: Console.WriteLine(sum)0018: Console.Write(" 平均身高: ")0019: Console.WriteLine(avg)0020: Console.ReadKey( )

宣告三個整數變數

宣告一個單精準度浮點數

跳出視窗要求輸入身高

計算三人身高總合計算平均值 ( 數值含有小數 )

輸出一段文字在畫面上

等候使用者按鍵

Page 7: Windows programming 視窗程式設計

執行結果執行結果

7

Page 8: Windows programming 視窗程式設計

變數型別變數型別

8

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( 雙精度浮點數 )

8 個位元組 -1.79769313486231570E+308 到 -4.94065645841246544E-324 † ( 負值 ) ,4.94065645841246544E-324 到 1.79769313486231570E+308 † ( 正值 )

Integer 4 個位元組 -2,147,483,648 至 2,147,483,647 ( 帶正負號 )

Page 9: Windows programming 視窗程式設計

變數型別變數型別

9

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 4 個位元組 0 至 4,294,967,295 ( 不帶正負號 )

ULong 8 個位元組 0 到 18,446,744,073,709,551,615 (1.8...E+19†) ( 不帶正負號 )

UShort 2 個位元組 0 至 65,535 ( 不帶正負號 )

Page 10: Windows programming 視窗程式設計

變數型別的意義變數型別的意義

每一種變數型態所使用到的記憶體空間有所不同,變數型別具有幾種意義 讓電腦為不同的型別配置適當大小的記憶體,

不要不敷使用,但也不要太浪費空間。 避免不同型別之間進行運算發生錯誤

10

Page 11: Windows programming 視窗程式設計

11

EX : CH02\CH2-5\Module1.vb

0000: Dim str1 As String0001: Dim str2 As String0002: Dim str3 As String0003:0004: str1 = "ABC"0005: str2 = "DEF"0006: str3 = str1 + str20007:0008: Console.Write(str3)

在 VB 程式碼當中,以雙引號括住的,被視為文字

字串變數允許相加

EX : CH02\CH2-5\Module1.vb

0000: Dim str1 As String0001: Dim str2 As String0002: Dim str3 As String0003:0004: str1 = "ABC"0005: str2 = "DEF"0006: str3 = str1/ str20007:0008: Console.Write(str3)

但不允許相除

Page 12: Windows programming 視窗程式設計

變數、運算元與運算子變數、運算元與運算子

12

運算元 運算元運算子

運算元( 變數 )

運算子 運算元( 變數 )

運算子 運算元( 常數 )

Page 13: Windows programming 視窗程式設計

變數、運算元與運算子變數、運算元與運算子

13

代表將變數 B 的值存到變數 A 中

代表將變數 B 的值取出,加上 13 後,存到變數 A

代表將變數 A 的值取出,加上 96 後,存到變數 A

等號代表「設定」的意思

Page 14: Windows programming 視窗程式設計

算數運算子算數運算子

14

運算子 說明(作用) 範例+ 加 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

Page 15: Windows programming 視窗程式設計

設定運算子設定運算子

15

運算子 說明(作用) 範例= 等於(設值) number = 10

+= 加之後設定number += 2(相當於 number = number + 2 )

-= 減之後設定 number -= 2

*= 乘之後設定 number *= 2

/= 除之後設定 number /= 2

\=除之後設定

(只取整數部分) number \= 2

^= 次方之後設定 number ^= 2

&= 字串相加之後設定 number &= 2

Page 16: Windows programming 視窗程式設計

比較運算子比較運算子

16

運算子 說明(作用)

範例(假設 score=100,

age=20)

回傳結果

= 等於 score = age

>= 大於等於 score >= age

<= 小於等於 score <= age

<> 不等於 score <> age

> 大於 score > age

< 小於 score < age

比較運算子會回傳「 True 或 False 」值 ( 表示成立、或是不成立;正確、或是不正確;真或是假 ) ,通常會與「判斷條件」或「迴圈」伴隨著出現

Page 17: Windows programming 視窗程式設計

比較運算子比較運算子

17

運算子 說明 範例 回傳結果

Like比較兩字串是否相同 "Rabbit" Like "*rabbit" True/False

Is比較兩個物件

的參考變數 A Is BTrue/False

TypeOf…Is

檢查變數的型別是否與指定

型別相同TypeOf V Is String

TypeOf C Is IntegerTrue/False

樣式中的字元 字串中的對應字元? 任何單一個字元* 零或多個字元# 任何單一個數字

[charlist] -> [AFGH]

AFGH 中的任何單一字元

[!charlist] -> [AFGH]

不在 AFGH 中的任何單一字元

Page 18: Windows programming 視窗程式設計

LikeLike 比較運算子 比較運算子 Dim Result As Dim Result As BooleanBoolean

18

範例 Result 之結果

Result="abc" Like "ab*"

Result="abfghi" Like "ab*"

Result="ade" Like "ab*"

Result="Rabbit" Like "rabbit"

Result="Rabbit" Like "R????t"

Result="Rabbit" Like "R#t"

Result="Ra" Like "[Q-S][a-c]"

Result="R" Like [!A-Z]

Page 19: Windows programming 視窗程式設計

串聯運算子串聯運算子

19

運算子 說明(作用)

+

"+"這個符號不只可以用在數值的加法上,也可以用在字串相加的地方。在字串的相加方面,相加的變數必須宣告為「字串」的型態;如果沒有宣告為字串, "+"本身的預設就是「數值相加」。

& 不管變數的型別是什麼, "&" 會把變數的型別通通轉換成「字串」來操作。

範例Dim a As Stringa = 10 + "20" a 的結果為何?Dim b as Stringb = 10 & 20 b 的結果為何?

Page 20: Windows programming 視窗程式設計

20

EX : CH02-01

Sub Main( ) ' 宣告變數 Computation ,幫我們做運算 Dim Computation As Double '測試運算子 "+" ( 加 ) Computation = 1 + 1 Console.WriteLine("1 + 1 = " & Computation) '測試運算子 "-" ( 減 ) Computation = 2 - 1 Console.WriteLine("2 - 1 = " & Computation) '測試運算子 "*" ( 乘 ) Computation = 2 * 3 Console.WriteLine("2 * 3 = " & Computation) '測試運算子 "/" ( 除 ) Computation = 13 / 8 Console.WriteLine("13 / 8 = " & Computation) '測試運算子 "\" ( 除,只有取整數部分 ) Computation = 13 \ 8 Console.WriteLine("13 \ 8 = " & Computation) '測試運算子 "Mod" ( 取餘數 ) Computation = 13 Mod 8 Console.WriteLine("13 Mod 8 = " & Computation) '測試運算子 "^" ( 次方 ) Computation = 2 ^ 3 Console.WriteLine("2 ^ 3 = " & Computation) Console.ReadKey( )End Sub

算數運算子

& 之意義係將 & 符號左右兩邊的資料都轉成文字再相加

Page 21: Windows programming 視窗程式設計

21

EX : CH02-02

Sub Main( ) ' 宣告變數 number 為 Integer Dim number As Integer ' 幫 number 設值 number = 10 Console.WriteLine("number = " & number) 'number += 2 與 number = number + 2 一樣, ' 所以 Textbox2.Text = 12 number += 2 Console.WriteLine("number += 2 --> " & number) 'number = number - 2 number = 10 number -= 2 Console.WriteLine("number -= 2 --> " & number) 'number = number * 2 number = 10 number *= 2 Console.WriteLine("number *= 2 --> " & number) 'number = number / 2 number = 10 number /= 2 Console.WriteLine("number /= 2 --> " & number) 'number = number \ 2 number = 10 number \= 2 Console.WriteLine("number \= 2 --> " & number) 'number = number ^ 2 number = 10 number ^= 2 Console.WriteLine("number ^= 2 --> " & number) 'number = number & 2 '& 把 number 與數字當作字串,串接在一起了 number = 10 number &= 2 Console.WriteLine("number &= 2 --> " & number) console.ReadKey( )End Sub

設定運算子

Page 22: Windows programming 視窗程式設計

22

EX : CH02-03

Sub Main( ) Dim score As Integer = 100 Dim age As Integer = 20 If score = age Then Console.WriteLine("score = age") End If If score >= age Then Console.WriteLine("score >= age") End If If score <= age Then Console.WriteLine("score <= age") End If If score <> age Then Console.WriteLine("score <> age") End If If score > age Then Console.WriteLine("score > age") End If If score < age Then Console.WriteLine("score < age") End If Console.ReadKey( )End Sub

比較運算子

比較運算子通常伴隨著判斷條件或迴圈一起出現

Page 23: Windows programming 視窗程式設計

23

EX : CH02-04

Sub Main( ) Dim ret As Boolean

ret = "abc" Like "ab*" Console.WriteLine("比較 ""abc"" Like ""ab*"" -->" & ret) ret = "abfghi" Like "ab*" Console.WriteLine("比較 ""abfghi"" Like ""ab*"" -->" & ret)

ret = "ade" Like "ab*" Console.WriteLine("比較 ""ade"" Like ""ab*"" -->" & ret)

Console.ReadKey( )End Sub

比較運算子Like

Page 24: Windows programming 視窗程式設計

24

EX : CH02-05

Sub Main( ) Dim Result As Boolean Result = "Rabbit" Like "rabbit" Console.WriteLine(Result)

Result = "Rabbit" Like "R*t" Console.WriteLine(Result)

Result = "Rabbit" Like "R#t" Console.WriteLine(Result)

Result = "Rabbit" Like "R?t" Console.WriteLine(Result)

Result = "Rabbit" Like "[Q-S][a-c][a-c][a-c][h-j][s-u]" Console.WriteLine(Result)

Result = "R" Like "[!A-Z]" Console.WriteLine(Result)

Console.ReadKey( )End Sub

比較運算子Like

Page 25: Windows programming 視窗程式設計

25

EX : CH02-08

Sub Main( ) ' 宣告 front 與 back 都是整數變數,並且宣告初始值 Dim front As Integer = 50 Dim back As Integer = 30

'測試 "+" Console.WriteLine(front + back) Console.WriteLine(front - back)

' 測試 "&" Console.WriteLine(front & back)

' 宣告 LastName 與 FirstName 都是 String 變數,並且宣告初始值。 Dim LastName As String = "Microsoft" Dim FirstName As String = "VB"

' 變數宣告為『 String 』,所以可以直接相加。 Console.WriteLine(LastName + FirstName) '& 的作用,就是把在 & 前後的變數用字串相加。 Console.WriteLine(LastName & FirstName)

Console.ReadKey()End Sub

串聯運算子

Page 26: Windows programming 視窗程式設計

邏輯運算子邏輯運算子

26

運算子 說明(作用)Not

Not 後面所敘述條件為「 True 」,則回傳「 False 」; Not 後面所敘述條件為「 False 」,則回傳「 True 」。

AndAnd 運算子會同時判斷前後兩者的敘述條件,如果前後所敘述的條件皆為「 True 」,則回傳「 True 」;有任何一段條件為「 False 」,則回傳「 False 」。

OrOr 前後所敘述的兩段條件只要有一段為「 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 」。

Page 27: Windows programming 視窗程式設計

邏輯運算子邏輯運算子

27

Or True

False

True True

True

False

True

False

And True False

True True False

False

False

False

Xor True False

True False

True

False

True False運算子 範例

(假設 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

Page 28: Windows programming 視窗程式設計

28

EX : CH02-09

Sub Main( ) Dim score As Integer = 100 Dim age As Integer = 20

If Not age = 20 Then Console.WriteLine("Not (age = 20)") End If

If score = 100 And age = 20 Then Console.WriteLine("score = 100 And age = 20") End If

If score = 100 Or age = 20 Then Console.WriteLine("score = 100 Or age = 20") End If

If score = 100 Xor age = 20 Then Console.WriteLine(" score = 100 Xor age = 20 ") End If

Console.ReadKey( )End Sub

邏輯運算子

Page 29: Windows programming 視窗程式設計

29

EX : CH02-09

Sub Main( ) ' 宣告兩個變數 score 與 age ,並且分別初始化這兩個變數的值。 Dim score As Integer = 100 Dim age As Integer = 20 '測試 AndAlso Dim test1 As Boolean test1 = score > age AndAlso score > 50 'test1 = True Console.WriteLine(test1) test1 = score > age AndAlso age > 50 'test1= False Console.WriteLine(test1) test1 = score > 101 AndAlso age > 50 'test1 = False Console.WriteLine(test1)

'測試 OrElse Dim test2 As Boolean test2 = score > age OrElse score > 50 'test2 = True Console.WriteLine(test1) test2 = score > age OrElse age > 50 'test2 = True Console.WriteLine(test1) test2 = score > 101 OrElse age > 50 'test2 = False Console.WriteLine(test1) Console.ReadKey( )End Sub

邏輯運算子

Page 30: Windows programming 視窗程式設計

運算子的優先順序運算子的優先順序

30

算術運算子串聯運算子

^ (次方)–(負號)*, / (乘法及除法)\ (只取整數部分的除法)Mod (取餘數)+, – (加法及減法)、+ (字串串連)& (字串串連)

比較運算子= (等於)、 <> (不等於)、 < , > (大於或小於)、 > =(大於等於)、 < =(小於等於)、 Like

邏輯運算子位元運算子

NotAnd 、 AndAlsoOr 、 OrElse 、 Xor

由左至右,括號優先

Page 31: Windows programming 視窗程式設計

範例範例 運算式 10 Mod 3 * 2 ^ 4 + 4 / 2 的結果

為何? 運算執行後, C 和 D 的結果分別為 ?

C="123"+4 D=123 & 4

請將下列數學式轉換成電腦運算式 ( 2 + A )( 16 – A ) ( A + B )2 / ( A – B )2

( 2 A C )+( 16 AB ) / A C3

31

Page 32: Windows programming 視窗程式設計

變數的型別轉換-隱含轉換

32

隱含型別轉換0000: Dim c As String0001: c = "2431" + 30002: Console.Write(c)0003: Console.ReadKey( )

c = "2431" + 3

1. "2431" 為字串,但為了與數字 3 相加,系統會先試圖將字 串 2431轉成數字的 2431 ,接著加上 3 ,變成 2434 ,這是運 算的結果2. 為了放到字串變數 c當中,系統又會作一次型別轉換,將數 字的 2434轉成字串的 2434 ,放入變數 c

在程式碼中不需要任何特殊語法,由系統自動進行

Page 33: Windows programming 視窗程式設計

變數的型別轉換-明確轉換

33

EX : CH2-6\CH2-6\Module1.vb0000: Dim A, B As String0001: Dim n As Integer0002:0003: Console.Write(" 請輸入 A 的生日: ")0004: A = Console.ReadLine0005: Console.Write(" 請輸入 B 的生日: ")0006: B = Console.ReadLine0007: n = DateDiff(DateInterval.Day, CDate(A),

CDate(B))0008: Console.Write("這兩個人生日相差 " & n & "天 ...")

0009: Console.ReadKey() CDate(…) 為轉換函式,明確的把字串型別的變數 A和 B轉換成日期格式

DateDiff 函式可以計算出兩個日期之間的差

Page 34: Windows programming 視窗程式設計

變數的命名規則變數的命名規則

以底線或英文字母開頭 僅能由字母、數字或底線組成,大小寫視

為相同 不允許保留字 (Reserve Word)拿來當變

數使用 http://msdn.microsoft.com/zh-tw/library/ksh7h19t.aspx

變數名長度不能超過 1023 字元 變數名稱最好能夠看出其意義

Dim LocalTime as Date 用來儲存時間 Dim UserName as String 用來使用者名稱

34

Page 35: Windows programming 視窗程式設計

請判斷底下的變數名稱何者正確請判斷底下的變數名稱何者正確 ??

35

Eric! _Account User_Name User@Address @cc ?Acc A* Z #AC C( ) ~A

Page 36: Windows programming 視窗程式設計

主控台應用程式中的輸出與輸入主控台應用程式中的輸出與輸入

可透過 Console 指令來要求使用者輸入文字或數字

Console.ReadKey 讓主控台應用程式稍微暫停,等待使用者在鍵

盤上按下任何一個按鍵,才繼續執行

36

範例Console.ReadKey( ) 等待使用者按下按鍵Dim k as Integer 等待使用者按下按鍵k=Console.ReadKey( ).Key 並將按鍵代碼傳回給變

數 k

Page 37: Windows programming 視窗程式設計

主控台應用程式中的輸出與輸入主控台應用程式中的輸出與輸入 Console.ReadLine

讓主控台應用程式等待使用者輸入一串文字,直到使用者按下 Enter 按鍵

Console.Write & Console.WriteLine 將文字顯示在畫面上,唯一差異在於 Console.

WriteLine 會在顯示完指定的文字後加上換行

37

範例Dim S as String 等待使用者輸入字串S=Console.ReadLine 並將輸入內容傳回給變

數 S

範例Console.WriteLine(" 請輸入您的名稱: ")Console.Write(" 請輸入您的名稱: ")

Page 38: Windows programming 視窗程式設計

範例範例

請設計一程式,並具有下列功能 讓使用者輸入圓的半徑 計算出圓的面積 將圓的面積顯示出來

38

Page 39: Windows programming 視窗程式設計

39

解答Sub Main( )

' 要求使用者輸入圓半徑

' 計算出圓的面積

' 將面積顯示出來

End Sub

Dim r As SingleDim area As Single

Console.Write(" 請輸入圓半徑 :")r = CSng(Console.ReadLine)

area = (r ^ 2) * 3.14159

Console.WriteLine("半徑 " & r & " 的圓面積為: " & area)Console.ReadKey( )

變數宣告

將輸入數值轉換成Single 型別

Page 40: Windows programming 視窗程式設計

ExerciseExercise

請撰寫一個程式,要求使用者輸入身高體重,並且計算 BMI 值 輸入身高之單位為公分

公式如下: BMI= w2/h h = 身高 ( 單位為公尺 ) w = 體重 ( 單位為公斤 )

40

Page 41: Windows programming 視窗程式設計

41