windows programming 視窗程式設計

Post on 20-Jan-2016

76 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Yuan-Yu Tsai蔡淵裕

yytsai@asia.edu.tw辦公室:HB61

2

CHAPTER 2從 Visual Basic 進入程式設計

領域

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

3

資料庫

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

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

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

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

4

變數的定義變數的定義

5

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

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

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( )

宣告三個整數變數

宣告一個單精準度浮點數

跳出視窗要求輸入身高

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

輸出一段文字在畫面上

等候使用者按鍵

執行結果執行結果

7

變數型別變數型別

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 ( 帶正負號 )

變數型別變數型別

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 ( 不帶正負號 )

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

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

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

10

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)

但不允許相除

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

12

運算元 運算元運算子

運算元( 變數 )

運算子 運算元( 變數 )

運算子 運算元( 常數 )

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

13

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

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

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

等號代表「設定」的意思

算數運算子算數運算子

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

設定運算子設定運算子

15

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

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

-= 減之後設定 number -= 2

*= 乘之後設定 number *= 2

/= 除之後設定 number /= 2

\=除之後設定

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

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

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

比較運算子比較運算子

16

運算子 說明(作用)

範例(假設 score=100,

age=20)

回傳結果

= 等於 score = age

>= 大於等於 score >= age

<= 小於等於 score <= age

<> 不等於 score <> age

> 大於 score > age

< 小於 score < age

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

比較運算子比較運算子

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 中的任何單一字元

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]

串聯運算子串聯運算子

19

運算子 說明(作用)

+

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

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

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

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

算數運算子

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

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

設定運算子

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

比較運算子

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

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

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

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

串聯運算子

邏輯運算子邏輯運算子

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 」。

邏輯運算子邏輯運算子

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

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

邏輯運算子

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

邏輯運算子

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

30

算術運算子串聯運算子

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

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

邏輯運算子位元運算子

NotAnd 、 AndAlsoOr 、 OrElse 、 Xor

由左至右,括號優先

範例範例 運算式 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

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

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

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

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

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 函式可以計算出兩個日期之間的差

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

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

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

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

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

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

34

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

35

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

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

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

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

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

36

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

數 k

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

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

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

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

37

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

數 S

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

範例範例

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

38

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 型別

ExerciseExercise

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

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

40

41

top related