หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 5 9 1 7 2 7

7 ธันวาคม พ.ศ.2549
83 Users On-Line.
Visitors - Page views
 8 9 4 6 7 7 7
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

แจกฟรีโค้ดโปรแกรมเครื่องคิดเลข ด้วย MS Visual Basic 6

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 7/6/2553   เวลา: 14:38
(อ่าน : 99620) 
จะเรียกว่าเป็นบทความ หรือ เฉลยการบ้านของใครหลายต่อหลายคนดีเนี่ยครับ แต่ผมรับรองว่าแนวทางการเขียนของผมไม่ไปซ้ำรอยใครเขาหรอก แถมยังเสริมการล็อคคีย์ กรณีของผู้ใช้กดเครื่องหมายจุดทศนิยมซ้ำๆกันได้อีก ... น้องๆนักศึกษาที่ลอกโค้ดของผมไปส่งครู ก็โปรดระวังโดนสวนกลับมาล่ะ ว่าไปลอก หรือ ไปจ้างใคร จากที่ไหนมา โค้ดแบบนี้อิฉันบ่เคยเห็นเด้อ ... เอิ๊กๆๆๆๆ (ไม่เป็นไรครับ จากโค้ดผมได้หาทางออกเอาไว้ให้แล้วล่ะ 55555+)
    กระบวนการคิด และ ออกแบบ
  • TextBox จะทำการรับค่าตัวเลขชุดแรกเข้ามา รับมาเท่าไรก็ให้นำไปเก็บไว้ในตัวแปร CurrentValue ด้วย (หรือบางคนอาจจะซ่อน TextBox หรือ Label เอาไว้ก็ได้น่ะครับ ... ตอนส่งครูจะได้ไม่ไปซ้ำกับเพื่อนๆ 55555+)
  • พอมีการคลิ๊กเลือก Operator คือ + - * และ / ให้นำค่าจากตัวแปร CurrentValue ไปเก็บไว้ที่ตัวแปร FirstValue ซึ่งเราจะถือว่าค่านี้เป็นตัวตั้ง และทำการเคลีย์ค่า TextBox เพื่อรับค่าชุดตัวเลขถัดไป
  • พอป้อนตัวเลขชุดที่สอง ค่านี้ก็จะไปเก็บไว้ที่ตัวแปร CurrentValue เหมือนเดิมกับข้อแรก (ทำซ้ำแล้วครับ)
  • เมื่อคลิ๊กเลือกเครื่องหมาย = เพื่อหาคำตอบ ก็ตรวจสอบว่าเกิดการกระทำอะไรก่อน เช่นเป็นการบวก ก็จะเข้าสูตร TextBox = FirstValue + CurrentValue นั่นเองครับพี่น้อง
  • จากค่าที่คำนวณได้ นอกจากจะแสดงผลใน TextBox แล้ว ยังต้องส่งไปเก็บไว้ที่ตัวแปร CurrentValue เพื่อให้สามารถเลือก Operator ตัวต่อไปได้เลย
  • จบ ... กิ้วๆ
ดาวน์โหลด Source Code สำหรับผู้ใช้งาน Visual Basic 6
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6

Design Time


โปรแกรมเครื่องคิดเลข - Calculator VB6

เริ่มต้นกระบวนการทำงาน

Option Explicit
' รับค่าตัวเลขชุดแรก หรือ ตัวตั้ง
Dim FirstValue As Double
' รับค่าตัวเลขปัจจุบัน
Dim CurrentValue As Double
' เพื่อเลือกเครื่องหมาย + - * / แล้วนำไปประมวลผล
Dim Operator As String

Private Sub Form_Load()
    ' ตั้งฟอร์มอยู่กึ่งกลาง
    Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
    ' เคลียร์ค่า TextBox
    txtValue.Text = ""
End Sub

Private Sub cmdExit_Click()
    Set frmCalculator = Nothing
    End
End Sub

' ###############################################
' รับค่าตัวเลข โดยกำหนด Index ให้กับ CommandButton เพราะมันเป็นการกระทำที่ซ้ำๆกันตลอด
' เมื่อคลิ๊กเลือกปุ่มแต่ละตัว จะใช้คุณสมบัติ Caption ในการดึงค่า หรือ ตัวเลขที่อยู่บนปุ่มมาใช้งาน
' เพราะค่า Input ที่รับเข้ามา คือ 0 - 9 และเครื่องหมายจุดทศนิยมเท่านั้น
' เป็นการลดโค้ดลงไปได้อย่างมากครับ ... พี่น้อง
Private Sub cmdValue_Click(Index As Integer)
' ###############################################
    
    Dim i As Integer, CountDot As Integer
    
    ' รับค่าจากการคลิ๊กเลือกปุ่มเข้ามาต่อท้าย โดยอ่านค่า Caption ของปุ่มคำสั่ง
    txtValue.Text = txtValue.Text & cmdValue(Index).Caption
    
    ' ดักเหตุการณ์การกดเครื่องหมายจุดทศนิยมมากกว่า 1 ตัวครับ ... พี่น้อง
    ' แนวคิดก็ง่ายมาก ... ให้นับเครื่องหมายจุดทศนิยมที่คลิ๊กเข้ามาเอาไว้ก่อน
    For i = 1 To Len(Trim$(txtValue.Text))
        If Mid$(Trim$(txtValue.Text), i, 1) = "." Then CountDot = CountDot + 1
    Next
    
    ' หากนับแล้วมีการกดเครื่องหมายจุดทศนิยมเท่ากับ 2 ตัว ก็ให้ลบความยาวของค่าที่รับมาออกไป 1 ตัว
    ' เช่น รับมา 12.. นั่นคือ นับความยาวของ txtValue ได้เท่ากับ 4 แล้วลบออก 1 ก็จะเหลือ 12.
    ' หรือ 12.5. ก็ทำเหมือนกัน นับความยาว txtValue ได้เท่ากับ 5 ลบออกไป 1 ก็จะเหลือ 12.5 อิอิอิอิอิ ... หมูน้อยเลย
    ' ให้หาทางคิดด้วยวิธีอื่นลองดูด้วยน่ะครับ ... เป็นการฝึกฝนวิทยายุทธให้ล้ำเลิศ พัฒนาได้ก้าวไกลต่อไป
    If CountDot = 2 Then txtValue.Text = Mid$(Trim$(txtValue.Text), 1, Len(Trim$(txtValue.Text)) - 1)
    
    ' ของแถมการใช้เงื่อนไขการทำซ้ำของ Do While
    'i = 1
    'CountDot = 0
    ' กรณีใช้เงื่อนไขด้วยอการอ่านค่าความยาวของชุดตัวเลข
    'Do While i <= Len(Trim$(txtValue.Text))
    '    If Mid$(Trim$(txtValue.Text), i, 1) = "." Then
    '        CountDot = CountDot + 1
    '        If CountDot = 2 Then
    '            txtValue.Text = Mid$(Trim$(txtValue.Text), 1, Len(Trim$(txtValue.Text)) - 1)
    '            Exit Do
    '        End If
    '    End If
    '    i = i + 1
    'Loop

    ' เก็บค่าปัจจุบันเอาไว้
    CurrentValue = Val(txtValue.Text)
    
End Sub

Private Sub cmdClear_Click()
    ' เคลียร์ค่าใหม่ให้เป็น 0
    FirstValue = 0
    CurrentValue = 0
    
    txtValue.Text = ""
End Sub

' ###############################################
' ส่วนของ Operator ต่างๆ + - * /
' ###############################################
Private Sub cmdPlus_Click()
    ' รับค่าตัวตั้งเข้ามา แล้วเลือกเครื่องหมาย + ต่อไปให้เคลียร์ค่า TextBox เพื่อเตรียมรับเลขชุดต่อไป
    txtValue.Text = ""
    
    ' ส่งค่าตัวตั้งไปเก็บไว้ในตัวแปร FirstValue เอาไว้ก่อน
    FirstValue = CurrentValue
    
    ' เคลียร์ค่าปัจจุบันเป็น 0 เพื่อรับตัวเลขชุดต่อไป
    CurrentValue = 0
    
    ' กำหนดการกระทำ คือ การบวก
    Operator = "+"
End Sub

' ส่วนที่เหลือ - * / ก็ทำเหมือนกัน แต่เปลี่ยน Operator ก็เท่านั้นเองครับ
Private Sub cmdMinus_Click()
    txtValue.Text = ""
    FirstValue = CurrentValue
    CurrentValue = 0
    Operator = "-"
End Sub

Private Sub cmdMultiply_Click()
    txtValue.Text = ""
    FirstValue = CurrentValue
    CurrentValue = 0
    Operator = "*"
End Sub

Private Sub cmdDevide_Click()
    txtValue.Text = ""
    FirstValue = CurrentValue
    CurrentValue = 0
    Operator = "/"
End Sub
' ###############################################

' ###############################################
' การสลับเครื่องหมาย
Private Sub cmdNegative_Click()
' ###############################################
    ' สลับเครื่องหมาย จากบวกเป็นลบ และ จากลบเป็นบวก
    ' คณิตศาสตร์ฉบับอนุบาลแมวเหมียว ... เมื่อลบเจอบวก ก็กลายเป็นลบ ... เมื่อลบเจอลบ ก็กลายเป็นบวก
    CurrentValue = -CurrentValue
    
    ' แสดงผลใน TextBox ด้วย
    txtValue.Text = CurrentValue
End Sub

' ###############################################
' หาคำตอบโดยเลือกจาก Operator ที่กำหนดเอาไว้ล่วงหน้า
' การที่ผมเลือกใช้ Select Case เพราะมันอ่านง่ายกว่า If Then ElseIf ครับ ...
Private Sub cmdAnswer_Click()
' ###############################################

    ' คำแนะนำ หากนำไปส่งอาจารย์ ... ก็ลองแก้ไข เช่น
    ' ใช้ตัวเลขแทน เช่น Case 1 = +, 2 = -, 3 = *, 4 = / (อย่าลืมเปลี่ยนตัวแปร Operator เป็นแบบตัวเลขด้วยน่ะครับ)
    ' ใช้คำแทน เช่น Case "Plus", "Minus", "Multiply", "Devide"
    ' หรือ ใช้ If Then ElseIf ไปเลยก็ได้ ... เพื่อความกิ๊บเก๋ ไม่ซ้ำเพื่อน 55555+
    Select Case Operator
        Case "+"
            txtValue.Text = FirstValue + CurrentValue
        Case "-"
            txtValue.Text = FirstValue - CurrentValue
        Case "*"
            txtValue.Text = FirstValue * CurrentValue
        Case "/"
            ' ดัก Error เพื่อไม่สามารถหารด้วย 0 ได้ครับ ... หรือ อาจจะให้มีการแจ้งเตือนกับผู้ใช้ด้วยก็ดี
            If CurrentValue = 0 Then Exit Sub
            txtValue.Text = FirstValue / CurrentValue
    End Select
    
    ' เก็บค่าเอาไว้ เพื่อให้สามารถทำการคำนวณต่อได้เลย เช่น
    ' 25 + 3 = 28 (ค่านี้ก็เก็บไว้ใน CurrentValue)
    ' พอต่อไปก็อาจจะ + 5 เข้าไปอีก ก็จะทำการบวกต่อไปได้เลย (คำตอบ คือ 33)
    CurrentValue = Val(txtValue.Text)
    
End Sub
Conclusion:
จะเห็นได้อย่างชัดเจนเลยว่า แนวทางการคิด และ การออกแบบนั้น มันไม่ได้มีขั้นตอนสลับซับซ้อนมากมายแต่อย่างใดเลยครับ วิธีการมันก็ค่อนข้างจะออกทื่อๆด้วยซ้ำไป แต่ส่วนใหญ่ที่บอกมาว่าเขียนไม่ได้ ทำไม่ได้ นั่นก็เพราะขาดการออกแบบโปรแกรม (ที่ดี) มาก่อน เจอะหน้าจอก็พิมพ์ก็คีย์เข้าไปสถานเดียว มันก็ต้องติดโน่น ติดนี่อยู่ร่ำไปนั่นแหละครับ ... และอย่าเพียงแต่มานั่งท่องว่ามี Input เข้ามาน่ะ ต่อไปทำการโปรเซส เพื่อหา Output ออกมา ... ต้องพยายามหาโจทย์มาคิด มาทำ ด้วยน่ะครับผม

จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560