การบ้าน
    เขียนโปรแกรม หาจำนวนธนบัตร จากจำนวนเงินที่ป้อน

วิธีการทำงานของโปรแกรม

a

เมื่อเปิดโปรแกรม จะแสดงหน้าจอดังรูป เราจะป้อนจำนวนเงินเข้าไปใน textbox เสร็จแล้วกดปุ่มแลกธนบัตร จากนั้น โปรแกรมจะเริ่มคำนวณจำนวนธนบัตรที่ได้และแสดงผลดังนี้

a

ถ้าเราต้องการคำนวณอีกครั้ง ก็กดปุ่มแลกอีกครั้ง โปรแกรมจะกลับสู่หน้าจอเริ่มต้น ถ้ากดปิดโปรแกรม โปรแกรมจะปิดตัวเอง

แนวคิด / วิธีการทำงาน

สมมติถ้าเราลองหาจำนวนแบงค์ที่ได้จากจำนวนเงิน 9,999 บาทเองในกระดาษ เราจะใช้วิธีหารเอาแต่จำนวนเต็ม (\) เพื่อหาจำนวนแบงค์ แล้วหารเอาแต่เศษ (mod) เพื่อเอาเศษที่ได้ไปคำนวณหาจำนวนแบงค์ในมูลค่าถัดไป ลองสังเกตวิธีทำให้ดีๆ

วิธีทำเมื่อรู้ค่าแน่นอน
ลองถอดเป็นวิธีการคำนวนเงิน

จำนวนเงินที่จะคำนวณ 9,999 บาท

แบงค์1000      9,999 หาร 1000 ได้ 9 ใบ
หาเศษ           9,999 mod 1000 เหลือ 999
แบงค์500        999 หาร 500 ได้ 1 ใบ
หาเศษ           999 mod 500 เหลือ 499
แบงค์100        499 หาร 100 ได้ 4 ใบ
หาเศษ           499 mod 100 เหลือ 99
แบงค์50          99 หาร 50 ได้ 1 ใบ
หาเศษ           99 mod 50 เหลือ 49
แบงค์20          49 หาร 20 ได้ 2 ใบ
หาเงินทอน      49 mod 20 เหลือ 9 บาท

กำหนดให้ x แทนจำนวนเงินจะคำนวณ

แบงค์1000  = x \ 1000
เศษเหลือ1  = x mod 1000
แบงค์500    = เศษเหลือ1 \ 500
เศษเหลือ2  = เศษเหลือ1 mod 500
แบงค์100    = เศษเหลือ2 \ 100
เศษเหลือ3  = เศษเหลือ2 mod 100
แบงค์50     = เศษเหลือ3 \ 50
เศษเหลือ4  = เศษเหลือ3 mod 50
แบงค์20     = เศษเหลือ4 \ 20
เงินทอน     = เศษเหลือ4 mod 20

ในโปรแกรมนี้ มีปุ่ม 3 ปุ่ม ทำหน้าที่ดังนี้

  1. ปุ่มแลกธนบัตร - ใช้เริ่มคำนวณจำนวนแบงค์
  2. ปุ่มปิดโปรแกรม - ใช้ปิดโปรแกรม
  3. ปุ่มแลกอีกครั้ง - ใช้ล้างหน้าจอให้กลับไปรอรับจำนวนเงินอีกครั้ง

 

ออกแบบหน้าจอโปรแกรม

คอนโทรลสำคัญที่ใช้ในโปรแกรมและค่า Properties
(ค่าที่เห็นเป็นเฉพาะค่าที่ได้แก้ไข นอกจากนี้ไม่ได้แก้ไขค่าใดๆ ส่วนที่เปิน Label ไม่พูดถึงนะ)

  1. Textbox
    (Name) - ช่องรับเงิน
    Font>>Size - 25
    MaxLength - 9
    Size - 304,45
    TabIndex - 0

  2. Button
    (Name) - ปุ่มเริ่มทำงาน
    Font>>Size - 18
    Size - 177,48
    TabIndex - 1
    Text - แลกธนบัตร

  3. Groupbox
    (Name) - กล่องแสดงผล
    Font>>Size - 20
    ForeColor - 128,64,0
    Size - 480,386
    Text - ธนบัตรที่ได้มีดังนี้
    Visible - False            <<ในตอนต้นเราจะซ่อนคอนโทรลนี้ไว้ก่อน จึงกำหนดค่านี้
    คอนโทรลนี้สร้างขึ้นมาเพื่อรวบกลุ่มส่วนแสดงผลลัพธ์ทั้งหมด เพราะส่วนนี้จะปรากฏหลังจากกดปุ่มแลก จึงเอาคอนโทรลแสดงผลอื่นๆ มารวมกลุ่ม เพื่อจะได้เรียกให้แสดงผล แค่ทีเดียว เพราะค่า Visible เหมือนกำหนดที่ Groupbox อย่างไร ค่า Visible ของคอนโทรลที่อยู่ใน Groupbox นั้นจะเปลี่ยนตามไปด้วย

  4. Textbox
    (Name) - แบงค์พัน
    BackColor - ButtonFace
    BorderStyle - None
    Font>>Size - 20.25
    ForeColor - 128,64,64
    ReadOnly - True        <<กำหนดค่านี้ เพื่อให้ส่วนนี้แสดงผลลัพธ์ออกมาเท่านั้น โดยไม่สามารถแก้ไขได้อีก
    Size - 128,31
    TextAlign - Center

  5. Textbox
    (Name) - แบงค์ห้าร้อย
    BackColor - ButtonFace
    BorderStyle - None
    Font>>Size - 20.25
    ForeColor - Purple
    ReadOnly - True
    Size - 128,31
    TextAlign - Center

  6. Textbox
    (Name) - แบงค์ร้อย
    BackColor - ButtonFace
    BorderStyle - None
    Font>>Size - 20.25
    ForeColor - Red
    ReadOnly - True
    Size - 128,31
    TextAlign - Center

  7. Textbox
    (Name) - แบงค์ห้าสิบ
    BackColor - ButtonFace
    BorderStyle - None
    Font>>Size - 20.25
    ForeColor - Navy
    ReadOnly - True
    Size - 128,31
    TextAlign - Center

  8. Textbox
    (Name) - แบงค์ยี่สิบ
    BackColor - ButtonFace
    BorderStyle - None
    Font>>Size - 20.25
    ForeColor - Green
    ReadOnly - True
    Size - 128,31
    TextAlign - Center

  9. Textbox
    (Name) - เงินทอน
    BackColor - ButtonFace
    BorderStyle - None
    Font>>Size - 20.25
    ForeColor - 128,64,0
    ReadOnly - True
    Size - 128,31
    TextAlign - Center

  10. Button
    (Name) - ปุ่มแลกอีกครั้ง
    Font>>Size - 25
    Size - 151,39
    Text - แลกอีกครั้ง

  11. Button
    (Name) - ปุ่มปิดโปรแกรม
    Font>>Size - 25
    Size - 173,39
    Text - ปิดโปรแกรม
    เห็นชื่อคอนโทรลที่ตั้งเป็นภาษาไทยนั้น เพื่อจะให้ง่ายกะท่านยังไม่เข้าใจวิธีการเขียนโปรแกรมแบบอ้างอิงวัตถุ ซึ่งในการเขียนโปรแกรมจริงๆ ไม่แนะนำให้ตั้งชื่อเป็นภาษาไทย เพราะอาจจะเกิดปัญหาวุ่นวายที่หลังในการคอมไพล์ เมื่ออยู่บนระบบอื่นๆ ที่ไม่รองรับอักขระภาษาไทย เพราะฉะนั้นจึงควรตั้งชื่อคอนโทรลตามความถนัด และให้จำคอนโทรลที่สร้างนั้นๆ ที่หลังได้ด้วย เพื่อจะได้เขียนโปรแกรมเรียกวัตถุนั้นได้ถูกต้อง

เขียนคำสั่งกำหนดการทำงานของโปรแกรม

จากที่เห็นหน้าจอของโปรแกรม เราเห็นปุ่ม 3 ปุ่ม เมื่อคลิกแล้วโปรแกรมจะทำงานต่อ ดังนั้นเราจึงเขียนคำสั่งในเหตุการณ์เมื่อแต่ละปุ่มถูกคลิก (OnClick) ซึ่งจะแบ่งออกเป็นสามส่วนตามปุ่มและหน้าที่ตามนี้

  1. ปุ่มแลกธนบัตร - ใช้เริ่มคำนวณจำนวนแบงค์ [Private Sub ปุ่มเริ่มทำงาน_Click() Handles ปุ่มเริ่มทำงาน.Click]
    ส่วนนี้จะเป็นส่วนหลักของโปรแกรม การคำนวณแบงค์จะเขียนในเหตุการณ์นี้

    ก่อนหน้าเรารู้แนวทางการคำนวณแล้ว ดังนั้นเราจะเขียนคำสั่งตามวิธีคำนวณ
    อย่างแรกเราจะต้องประกาศตัวแปร "จำนวนเงิน" เป็น Integer เพื่อเก็๋บค่าเงินที่กรอกลงไป ซึ่งเราจะประกาศอย่างนี้

         Dim จำนวนเงิน As Integer

    แต่เราจะประกาศหลัง Public Class บรรทัดแรกทันที
    หลังจากนั้น เราจึงเขียนคำสั่งคำนวณ ภายในเหตุการณ์นี้ ดังนี้

    a


    หลังจากที่ปุ่มนี้ถูกคลิก กล่องแสดงผลจะแสดงขึ้นมาทันที จึงใช้ "กล่องแสดงผล.Visible" เพื่อเรียกให้ส่วนแสดงผลโผล่ขึ้นมา
    แล้วกำหนดตัวแปร "จำนวนเงิน" ให้เท่ากับ ค่าตัวเลขที่กรอกใน Textbox ช่องรับเงิน
    จากนั้นเราจึงเขียนคำสั่ง ตามแนวที่คิดไว้แต่ต้น โดยให้เอาจำนวนแบงค์ที่ได้ในแต่ละมูลค่า ไปแสดงผลใน textbox แต่ละตัว
    หลังแสดงจำนวนแบงค์แล้ว
    จึงเอาตัวแปร "จำนวนเงิน" ไปหารเอาแต่เศษกับมูลค่านั้น แล้วเอาเศษที่ได้ไปเก็บในตัวแปร "จำนวนเงิน" อีกครั้ง
    ทำแบบนี้ไปจนถึง เงินทอน

  2. ปุ่มปิดโปรแกรม - ใช้ปิดโปรแกรม [Private Sub ปุ่มปิดโปรแกรม_Click() Handles ปุ่มปิดโปรแกรม.Click]
    เราจะสั่งให้โปรแกรมปิดตัวลง เมื่อคลิกปุ่มนี้ เราจะใช้แค่ Me.Close() เพื่อสั่งปิดโปรแกรม

    a

  3. ปุ่มแลกอีกครั้ง - ใช้ล้างหน้าจอให้กลับไปรอรับจำนวนเงินอีกครั้ง
    [Private Sub ปุ่มปิดโปรแกรม_Click() Handles ปุ่มปิดโปรแกรม.Click]
    เราจะสั่งให้ซ่อนส่วนแสดงผล แล้วล้างค่าในช่องรับเงินทิ้ง แล้วเอา cursor กลับไปที่ช่องรับเงิน

    a

    focus() เป็นฟังก์ชันให้ส่ง focus ให้วัตถุนั้นๆ ให้รับเหตุการณ์จากผู้ใช้ต่อทันที

 

เท่านี้เราก็จะได้โปรแกรมแลกธนบัตรอย่างง่าย (สุดๆ) ขึ้นมา แต่ในโปรแกรมนี้จะเกิด bug ตอนที่เราใส่ค่าประหลาดๆ ลงในช่องกรอกจำนวนเงิน ซึ่งเราจะต้อง debug ที่จุดนี้เพื่อไม่ให้เกิด RunTime Error ส่วนวิธีแก้ จะกลับมาเล่าให้ฟังต่อไป ตอนนี้ปล่อยให้ท่านทั้งหลายนอนคิดหาวิธีกันไปก่อน อิอิ ตอนนี้ตีสองหกสิบ ผมง่วงซะแล้ว ( =..=) z Z ต้องขอตัวไปนอนก่อนแล้วคับผม

 
Users viewed : Mississippi Jones Act Injuries