You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Visual Basic 學習檔案集<br />
1<br />
學生:<strong>張維哲</strong><br />
指導老師:劉玉敏
目錄<br />
第一冊:<br />
P.4 : 圓面積計算<br />
P.5 : 三角形面積計算<br />
P.6 : 使用者登入<br />
P.7 : Back Color 屬性<br />
P.8 : FontSize 縮放<br />
P.9 : 身份確認<br />
P.11 : 腦筋急轉彎<br />
P.12 : 聊天室<br />
P.13 : 成績判斷<br />
P.14 : 判斷是否為學生票價<br />
P.15 : 視力檢測<br />
P.16 : 年齡判斷<br />
P.17 : 觀看及別<br />
P.18 : 身體質量指數計算<br />
P.19 : 棒球吉祥物<br />
P.21 : 生日星座<br />
P.23 : 占卜<br />
P.24 : 三角形圖案<br />
P.25 : 成績統計<br />
P.27 : 記憶大考驗<br />
P.28 : 手機費用<br />
P.29 : 電腦術語大考驗<br />
P.30 : 雨量資料<br />
P.31 : 通訊資料建檔<br />
P.32 : 由小到大重新排序數列<br />
P.33 : 循序搜尋法搜尋資料<br />
P.34 : 二分搜尋法搜尋資料<br />
延伸練習:<br />
2
P.35 : 1+2-3+4+5-6…-99<br />
P.36 : 300 內可被 3 整除的數及總和<br />
4/2 上機考:<br />
P.37 : 兩數間隔 5 的和<br />
P.38 : 計算總和<br />
P.39 : 計算 N 階<br />
P.40 : 產生連續學號<br />
P.41 : 隨機產生一組密碼<br />
P.42 : 重新組合<br />
5/7 程式比賽:<br />
P.43 : 數字轉絕對值<br />
P.44 : 數字轉為千分位<br />
P.45 : 找最大與最小<br />
P.46 : 把 1變成0,把0變成1<br />
第二冊:<br />
P.47 : 計算標準體重<br />
P.48 : 簡易售票系統<br />
P.49 : 計算圓面積<br />
P.50 : 計算可加油公升數<br />
P.51 : 將資料顯示在文字方塊內<br />
P.52 : 讀取循序檔<br />
P.53 : 資料的寫入<br />
P.54 : 文字瀏覽器<br />
3
圓面積計算<br />
( 讓使用者輸入圓的半徑,以計算出圓的面積 )<br />
4<br />
(程式碼)<br />
<strong>08</strong>\I\ch1\P.30
三角形面積計算<br />
(讓使用者輸入三角形的底和高來寄算他的面積)<br />
(程式碼)<br />
5<br />
<strong>08</strong>\I\ch2\P.75
使用者登入<br />
(利用 InputBox 函數讓使用者在交談窗中輸入名<br />
字,在用 MsgBox 來顯示)<br />
(程式碼)<br />
6<br />
<strong>08</strong>\I\ch2\P.76
Back Color 屬性<br />
(當使用者用左鍵點一下的時候底色會從原本的<br />
粉紅轉變成黃色)<br />
(程式碼)<br />
7<br />
<strong>08</strong>\I\ch3\p.91
FontSize 縮放<br />
(讓使用者在按下放大時可將字體變大,按縮小<br />
時可以變小)<br />
(程式碼)<br />
8<br />
<strong>08</strong>\I\ch3\P.98
身份確認<br />
(在兩個 LostFocus 事件中,分別寫入帳號及密碼<br />
的程式,若者用者輸入錯誤會傳來錯誤的訊息)<br />
9
(程式碼)<br />
10<br />
<strong>08</strong>\I\ch3\P.106
腦筋急轉彎<br />
(使用一個標籤來顯示題目,當按下揭曉時,在<br />
另一個標籤下顯示解答)<br />
(程式碼)<br />
11<br />
<strong>08</strong>\I\ch3\P.109
聊天室<br />
(利用 VB 做出一個單人單聊的聊天室)<br />
(程式碼)<br />
12<br />
<strong>08</strong>\I\ch3\P.111
成績判斷<br />
(判斷 (Score)是否大於 60,如果事就顯示及格,<br />
否則就顯示不及格)<br />
(程式碼)<br />
13<br />
<strong>08</strong>\I\ch5\P.135
學生票<br />
(判斷是否為學生,如果是,就以 7 折來計算電<br />
影的票價)<br />
(程式碼)<br />
14<br />
<strong>08</strong>\I\ch5\P.136
視力檢測<br />
(判斷視力是否介於 0.8~1.2 之間,是的話就顯示<br />
正常,否則就顯示需要矯正)<br />
(程式碼)<br />
15<br />
<strong>08</strong>\I\ch5\P.139
年齡判斷<br />
(依照出生年次來判斷,你目前的年齡是屬於哪<br />
一階層的)<br />
(程式碼)<br />
16<br />
<strong>08</strong>\I\ch5\P.143
觀看及別<br />
(依照你現在的年齡,去區分你所能觀看的節目)<br />
(程式碼)<br />
17<br />
<strong>08</strong>\I\ch5\P.144
BMI 計算<br />
(讓使用者輸入身高與體重,來計算使用者的<br />
BMI 值為多少)<br />
(程式碼)<br />
18<br />
<strong>08</strong>\I\ch5\P.148
棒球吉祥物<br />
(依使用者輸入的職棒隊名,顯示球隊的吉祥<br />
物,如果球隊名輸入錯誤則會跳出錯誤顯示)<br />
19
(程式碼)<br />
20<br />
<strong>08</strong>\I\ch5\P.159
星座生日<br />
(利用 Select Case 來判斷所輸入月份,在利用<br />
If-Then-Else 判斷日期,並顯示所屬的星座)<br />
21
(程式碼)<br />
22<br />
<strong>08</strong>\I\ch5\P.167
占卜<br />
(利用 Rnd 來產生一個隨機的籤,並顯示結果)<br />
(程式碼)<br />
23<br />
<strong>08</strong>\I\ch5\P.168
三角形圖形<br />
(利用 For-Next,執行 10 次回圈內的程式)<br />
(程式碼)<br />
24<br />
<strong>08</strong>\I\ch6\P.171
成績統計<br />
(使用者利用 For-Next 輸入 5 個成績,勾選其選<br />
項,,其質將顯示在下方文字方塊中)<br />
25
(程式碼)<br />
26<br />
<strong>08</strong>\I\ch6\P.178
記憶大考驗<br />
(在 While-wend 敘述在表單產生 5 個隨機數字,<br />
並利用 Timer 讓數字在 3 秒後消失)<br />
27<br />
(程式碼)<br />
<strong>08</strong>\I\ch6\P.189
手機費用<br />
(利用一維陣列來儲存 1~12 月的手機費用)<br />
(程式碼)<br />
28<br />
<strong>08</strong>\I\ch7\P.222
電腦術語大考驗<br />
(使用 5 個常見的電腦術語,隨機產生,讓使用<br />
者在清單中點選相對應的英文術語)<br />
29<br />
(程式碼)<br />
<strong>08</strong>\I\ch7\P.226
雨量資料<br />
(利用一維陣列設計一個可以用來輸入及查詢成<br />
績的程式)<br />
(程式碼) <strong>08</strong>\I\ch7\P.232<br />
30
通訊資料建檔<br />
(設計一個可供使用者將個人好友通訊資料建檔<br />
的程式)<br />
(程式碼)<br />
31<br />
<strong>08</strong>\I\ch7\P.238
由小到大重新排序數列<br />
(程式碼)<br />
Private Sub Command1_Click()<br />
Dim a(4)<br />
a(0) = 20: a(1) = 5: a(2) = 30: a(3) = 40: a(4) = 15<br />
Print "排序前的資料為"<br />
For i = 0 To 4<br />
Print a(i) & Space(3);<br />
Next<br />
For i = 1 To (5 - 1)<br />
For j = 0 To (4 - i)<br />
If a(j) > a(j + 1) Then<br />
temp = a(j)<br />
a(j) = a(j + 1)<br />
a(j + 1) = temp<br />
End If<br />
Next j<br />
Next i<br />
Print: Print: Print "排序後的資料為"<br />
For i = 0 To 4<br />
Print a(i) & Space(3);<br />
Next<br />
End Sub<br />
<strong>08</strong>\I\ch8\P255<br />
32
利用循序搜尋法搜尋資料「15」<br />
(程式碼)<br />
Private Sub Form_Activate()<br />
Dim a(1 To 5) As Integer<br />
a(1) = 5: a(2) = 30: a(3) = 40: a(4) = 15: a(5) = 10<br />
i = 1<br />
Target = 15<br />
Do<br />
If Target = a(i) Then<br />
Print "找到數值 15"<br />
Exit Do<br />
End If<br />
i = i + 1<br />
If i > 5 Then<br />
Print "找不到數值 15"<br />
Exit Do<br />
End If<br />
Loop<br />
End Sub<br />
33<br />
<strong>08</strong>\I\ch8\P264
利用二分搜尋法搜尋資料「30」<br />
(程式碼)<br />
Private Sub Form_Activate()<br />
Dim A(1 To 6) As Integer<br />
A(1) = 5: A(2) = 10: A(3) = 15: A(4) = 20: A(5) = 30:<br />
A(6) = 40<br />
Target = 30<br />
L = 1: r = 6: result = "找不到"<br />
While L Target Then<br />
r = M - 1<br />
Else<br />
L = M + 1<br />
End If<br />
End If<br />
Wend<br />
MsgBox result & Target<br />
End Sub<br />
34<br />
<strong>08</strong>\I\ch8\P267
1+2+3-4+5+6….-99=??<br />
(利用 For-Next,再以 If-Then-Else 判斷其是否為<br />
3 的倍數,若是則減掉)<br />
(程式碼)<br />
35<br />
<strong>08</strong>\I\延伸\01
300 內可被 3 整除的數及總和<br />
(找出為三的倍數並把數放在 List1.AddItem 裡,<br />
並且加其總和)<br />
(程式碼)<br />
36<br />
<strong>08</strong>\I\延伸\02
兩數間隔 5 的和<br />
(讓使用者輸入兩個數,並計算其兩數值之間間<br />
隔為5的和)<br />
(程式碼)<br />
37<br />
<strong>08</strong>\I\exam\01
試計算 1 連續加至 91,增量值為 2,但若為<br />
7 的倍數則不加反減,最後將和輸出<br />
(程式碼)<br />
Private Sub Form_Activate()<br />
Dim i As Integer, s As Long<br />
For i = 1 To 91 Step 2<br />
If i Mod 7 = 0 Then<br />
s = s - i<br />
Else<br />
s = s + i<br />
End If<br />
Next i<br />
MsgBox<br />
"1+3+5-7+9+11+13+15+17+19-21+...-91=" & s, ,<br />
"計算總和"<br />
End Sub<br />
38<br />
<strong>08</strong>\I\exam\02
計算 N 階<br />
(利用 Do-loop 敘述計算 N 階層)<br />
(程式碼)<br />
39<br />
<strong>08</strong>\I\exam\03
撰寫一個能於 ListBox 中產生連續學<br />
號之程式<br />
(程式碼)<br />
Private Sub Form_Activate()<br />
For i = 65 To 90<br />
For j = 0 To 9<br />
List1.AddItem Chr(i) & "8912" & j<br />
Next j<br />
Next i<br />
End Sub<br />
40<br />
<strong>08</strong>\I\exam\04
撰寫能隨機產生一組長度為 6,並為數字、大寫<br />
英文字母、小寫英文字母三者隨機混雜的密碼<br />
(程式碼)<br />
Private Sub Command1_Click()<br />
Dim str1 As String, x, i, n As Integer<br />
Randomize: str1 = ""<br />
For i = 1 To 6<br />
n = Int(Rnd() * 3) + 1<br />
Select Case n<br />
Case 1: x = Int(Rnd() * 10): str1 = str1 & x<br />
Case 2: x = Int(Rnd() * 26) + 65: str1 = str1 & Chr(x)<br />
Case 3: x = Int(Rnd() * 26) + 97: str1 = str1 & Chr(x)<br />
End Select<br />
Next i<br />
Text1 = str1<br />
End Sub<br />
41<br />
<strong>08</strong>\I\exam\05
撰寫一個能將使用者輸入的字串,採先取出<br />
偶數字位元,再取出奇數位字元之順序,將<br />
之重新組合的程式<br />
(程式碼)<br />
Private Sub Form_Activate()<br />
Dim x As String, i As Integer, s As String<br />
x = InputBox("請輸入字串", "重新組合字串")<br />
For i = 2 To Len(x) Step 2<br />
s = s + Mid(x, i, 1)<br />
Next i<br />
For i = 1 To Len(x) Step 2<br />
s = s + Mid(x, i, 1)<br />
Next i<br />
MsgBox x & "重新組合為:" & s, , "重新組合字串"<br />
End Sub<br />
42<br />
<strong>08</strong>\I\exam\06
數字轉絕對值<br />
(程式碼)<br />
Private Sub Command1_Click()<br />
x = InputBox("請輸入一值", "絕對值")<br />
If Mid(x, 1, 1) = "-" Then x = Right(x, Len(x) - 1)<br />
MsgBox x, , "Result"<br />
End Sub<br />
43<br />
<strong>08</strong>\I\程式比賽\02
數字轉為千分位<br />
(程式碼)<br />
Private Sub Command1_Click()<br />
x = InputBox("輸入一數字", "三位一撇輸出")<br />
str1 = "": y = 0<br />
For i = Len(x) To 1 Step -1<br />
str1 = Mid(x, i, 1) + str1<br />
y = y + 1<br />
If i > 1 And y Mod 3 = 0 Then str1 = "," +<br />
str1<br />
Next i<br />
MsgBox str1, , "The Result"<br />
End Sub<br />
44<br />
<strong>08</strong>\I\程式比賽\03
找最大和最小<br />
(讓使用者輸入 3 個任意數,讓程式判斷其最大<br />
質與最小值,並將結果輸出)<br />
45<br />
(程式碼)<br />
<strong>08</strong>\I\程式比賽\04
把1變成0,把0變成1<br />
(程式碼)<br />
Private Sub Command1_Click()<br />
n = Val(InputBox("請輸入 0 或 1", "輸入"))<br />
n = n - 1<br />
MsgBox Abs(n), , "The Result"<br />
End Sub<br />
Private Sub Command2_Click()<br />
n = Val(InputBox("請輸入 0 或 1", "輸入"))<br />
x = 3 Mod (n + 2)<br />
MsgBox x, , "The Result"<br />
End Sub<br />
Private Sub Command3_Click()<br />
n = Val(InputBox("請輸入 0 或 1", "輸入"))<br />
If n = 1 Then<br />
n = 0<br />
ElseIf n = 0 Then<br />
n = 1<br />
End If<br />
MsgBox n, , "The Result"<br />
End Sub<br />
<strong>08</strong>\I\程式比賽\06<br />
46
計算標準體重<br />
Sub Cal_sw(S_sex As String, S_ht As Single)<br />
Dim sw As Single, swt As Single<br />
If S_sex = "M" Then<br />
sw = (S_ht - 80) * 0.7<br />
Else<br />
sw = (S_ht - 70) * 0.6<br />
End If<br />
MsgBox "您的標準體重為" & sw, , "計算標準體重"<br />
swt = InputBox("請輸入體重(kg)", "判斷是否過重")<br />
If swt > sw Then<br />
MsgBox "您的體重超出標準體重", , "判斷是否過重"<br />
Else<br />
MsgBox "您的體重未超出標準體重", , "判斷是否過重<br />
End If<br />
End Sub<br />
Private Sub Form_Activate()<br />
Dim ht As Single, sex As String * 1<br />
sex = InputBox("請輸入性別,男生輸入 M,女生輸<br />
入 F", "計算標準體重")<br />
ht = InputBox("請輸入身高(cm):", "計算標準體重")<br />
Call Cal_sw(sex, ht)<br />
End Sub<br />
<strong>08</strong>\II\ch9\P12<br />
47
Sub cal_price(i As<br />
Integer, j As Integer)<br />
Dim price As Integer,<br />
sum As Integer<br />
Dim area As String<br />
price = 600<br />
Select Case i<br />
Case 0, 2<br />
area = "搖滾 A/C 區"<br />
price = price * 2.5<br />
Case 1<br />
area = "搖滾 B 區"<br />
price = price * 3<br />
Case 3, 5<br />
area = "看台 A/C 區"<br />
price = price * 1.5<br />
Case 4<br />
area = "看台 B 區"<br />
price = price * 2<br />
End Select<br />
簡易售票系統<br />
(程式碼)<br />
48<br />
If j >= 10 Then<br />
sum = j * price * 0.9<br />
Else<br />
sum = j * price<br />
End If<br />
Label3.Caption = j & "張<br />
" & area & "票,總計" &<br />
sum & "元"<br />
End Sub<br />
Private Sub<br />
Command1_Click(Index<br />
As Integer)<br />
Dim count As Integer<br />
count = InputBox("<br />
請輸入所要購買的票數<br />
", "購買票數")<br />
Call cal_price(Index,<br />
count)<br />
End Sub<br />
<strong>08</strong>\II\ch9\P15
計算圓面積<br />
(程式碼)<br />
Function cal_circle(r As Single) As Single<br />
Const pi = 3.14159<br />
cal_circle = r ^ 2 * pi<br />
End Function<br />
Private Sub Form_Activate()<br />
Dim x As Single<br />
Dim area As Single<br />
x = InputBox("請輸入圓的半徑:", "計算圓面積<br />
")<br />
area = cal_circle(x)<br />
MsgBox "半徑為" & x & "的圓面積 = " & area, ,<br />
"計算圓面積"<br />
End Sub<br />
49<br />
<strong>08</strong>\II\ch9\P25
計算可加油公升數<br />
Private Sub<br />
Command1_Click()<br />
Dim F_oil As<br />
Integer, F_c As Integer<br />
Dim ml As String<br />
Foil = Combo1.ListIndex<br />
F_c = Int(Text1.Text)<br />
ml = bml(F_oil, F_c)<br />
End Sub<br />
Private Sub Form_Load()<br />
Combo1.AddItem "柴油<br />
"<br />
Combo1.AddItem "92 無<br />
鉛汽油"<br />
Combo1.AddItem "95 無<br />
鉛汽油"<br />
Combo1.AddItem "98 無<br />
鉛汽油"<br />
End Sub<br />
Function bml(F_oil As<br />
(程式碼)<br />
50<br />
Integer, F_c As Integer)<br />
As Integer<br />
Dim money As<br />
Single<br />
Dim tatle As Single<br />
Select Case F_oil<br />
Case 0<br />
money = 18.5<br />
Case 1<br />
money = 23.2<br />
Case 2<br />
money = 23.9<br />
Case 3<br />
money = 25.4<br />
End Select<br />
total = F_c / money<br />
Label4.Caption = "可加"<br />
& Format(total, " #0.## ")<br />
& "公升"<br />
End Function<br />
<strong>08</strong>\II\ch9\P 35
設計一循序檔並將資料顯示在文字方塊內<br />
(程式碼)<br />
Private Sub Command1_Click()<br />
Dim x As String<br />
Open App.Path & "\data1.txt" For Input As #1<br />
Do While Not EOF(1)<br />
Line Input #1, x<br />
Text1.Text = Text1.Text & x & vbCrLf<br />
Loop<br />
Close<br />
End Sub<br />
Private Sub Command2_Click()<br />
End<br />
End Sub<br />
51<br />
<strong>08</strong>\II\ch12\P156-1
設計讀取循序檔並將資料顯示在<br />
各欄位文字方塊內<br />
Private Sub<br />
Command1_Click()<br />
Open App.Path &<br />
"\data2.txt" For Input As #1<br />
Command1.Enabled = False<br />
Command2.Enabled = True<br />
If Not EOF(1) Then<br />
Input #1, nam, price, q<br />
Text1.Text = nam<br />
Text2.Text = price<br />
Text3.Text = q<br />
total = price * q<br />
Text4.Text = total<br />
End If<br />
End Sub<br />
Private Sub<br />
Command2_Click()<br />
If Not EOF(1) Then<br />
Input #1, nam, price, q<br />
(程式碼)<br />
52<br />
Text1.Text = nam<br />
Text2.Text = price<br />
Text3.Text = q<br />
total = price * q<br />
Text4.Text = total<br />
Else<br />
Close #1<br />
Command1.Enabled =<br />
True<br />
Command2.Enabled =<br />
False<br />
End If<br />
End Sub<br />
Private Sub<br />
Command3_Click()<br />
Close #1<br />
End<br />
End Sub<br />
<strong>08</strong>\II\ch12\P156-2
資料的寫入(Put # 敘述)<br />
Private Sub<br />
Command1_Click()<br />
Static i As Integer<br />
i = LOF(file_no) /<br />
Len(student)<br />
i = i + 1<br />
student.no = Text1(0).Text<br />
student.name =<br />
Text1(1).Text<br />
student.score =<br />
Val(Text1(2).Text)<br />
Put file_no, i, student<br />
Text1(0).Text = ""<br />
Text1(1).Text = ""<br />
Text1(2).Text = ""<br />
Text1(0).SetFocus<br />
End Sub<br />
Private Sub<br />
Command2_Click()<br />
Dim j As Integer<br />
(程式碼)<br />
53<br />
Do While j LOF(file_no)<br />
/ Len(student)<br />
j = j + 1<br />
Text1(0).Text = student.no<br />
Text1(1).Text =<br />
student.name<br />
Text1(2).Text =<br />
student.score<br />
MsgBox "第" & j & "筆資<br />
料", , "檢視紀錄內容"<br />
Loop<br />
End Sub<br />
Private Sub<br />
Form_Activate()<br />
file_no = FreeFile<br />
Open App.Path & "\ran" For<br />
Random As #file_no Len =<br />
Len(student)<br />
End Sub<br />
<strong>08</strong>\II\ch12\P164
Private Sub<br />
Dir1_Change()<br />
File1.path = Dir1.path<br />
End Sub<br />
Private Sub<br />
Drive1_Change()<br />
Dir1.path = drivel.Drive<br />
End Sub<br />
Private Sub File1_Click()<br />
Dim path As String<br />
Dim aline As String<br />
Dim alldata As String<br />
Dim file_no As Integer<br />
If Right(File1.path, 1) <br />
"\" Then<br />
path = File1.path & "\" &<br />
File1.FileName<br />
文字瀏覽器<br />
(程式碼)<br />
54<br />
Else<br />
path = File1.path &<br />
File1.FileName<br />
End If<br />
file_no = FreeFile<br />
Open path For Input As<br />
#file_no<br />
Do While Not EOF(1)<br />
Line Input #file_no,<br />
aline<br />
alldata = alldata &<br />
aline & vbCrLf<br />
Loop<br />
Text1.Text = alldata<br />
Close #file_no<br />
End Sub<br />
<strong>08</strong>\II\ch12\P183