ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 5737|ตอบกลับ: 1

[VB.NET] แจกฟรีโค้ดต้นฉบับ โปรแกรมต้นแบบร้านทองก้อนเบอเกอร์แดนซ์

[คัดลอกลิงก์]

311

กระทู้

502

โพสต์

6072

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6072


มีคำถามขอคำปรึกษาหลากหลายมากมายจากน้องๆนักศึกษา ที่กำลังคิดหา โปรเจคจบที่เกี่ยวข้องกับระบบฐานข้อมูลทำ ส่วนใหญ่ก็วนๆเวียนๆแต่เรื่องซ้ำๆกันไปมา เช่น ขายสินค้าเงินสด เงินเชื่อ สหกรณ์ ร้านขายกาแฟ เบเกอรี่ ฯลฯ วันนี้ก็เลยแนะนำโปรเจคที่คล้ายๆกัน แต่เป็นการขายเบอเกอร์แทนล่ะกันครับ ...


สำหรับน้องๆมือใหม่คืออย่างนี้น่ะครับ ไม่ว่าเราคิดที่จะจับงานชิ้นไหนขึ้นมาทำก็ตาม อย่างแรกเมื่อเราตีกรอบ (Scope) ในงานนั้นๆแล้ว ต่อไปเราก็ควรจะต้องแบ่งแยกย่อยงานต่างๆออกเป็นส่วนๆ แล้วลองเขียนโค้ดขึ้นมาทดสอบก่อน (ก็พวกหลักการทางทฤษฎีที่ร่ำเรียนมานั่นแหละครับ) ...


ตัวอย่างงานนี้ แอดมินยังไม่มีความจำเป็นใดๆที่จะต้องไปแตะฐานข้อมูล แต่จำลองระบบการขายหน้าร้านขึ้นมาก่อน ด้วยการสร้างอินเทอร์เฟซที่ต้องติดต่อกับผู้ใช้งานในแบบคงที่ หรือ Static โดยพยายามเอาให้ใกล้เคียงกับงานจริงๆมากที่สุด และสังเกตด้วยว่า เราจะเอาข้อมูลตัวรายการสินค้าอะไรบ้างมาใส่ในตารางกริด จากตัวอย่างคือ Primary Key, Description และ UnitPrice พวกนี้แหละก็คือส่วนของการออกแบบตารางข้อมูล พอเราทำไปทำมา ก็จะมองเห็นบางอย่างเกิดขึ้น อ้าว!!! เกิดมีการสั่งสินค้ารายการเดียวกันแต่มากกว่า 1 ชิ้นล่ะ เอ้อ!!! นั่นแหละคือเราต้องเพิ่มฟิลด์ (Field) ขึ้นมาใหม่อีกตัวคือ จำนวน (Quantity) คือมันจะไล่ไปทีละสเต็ปเอง ... พอลองทดสอบเฉพาะส่วนนี้เสร็จเรียบร้อยแล้ว ก็คิดต่ออีกซิครับ เราจะโหลดภาพ โหลดปุ่มให้มาอยู่บนฟอร์ม ตามจำนวนรายการที่ต้องการได้อย่างไร ซึ่งนั่นก็คือการสร้าง Control เช่นปุ่มต่างๆในแบบ Dynamic ... นี่คือส่วนหนึ่งของการออกแบบ และแยกย่อยหั่นงานออกมา โดยที่ยังไม่ต้องไปว่าเรื่องของฐานข้อมูลเลย ...

โค้ดในส่วนของฟอร์มหลัก (frmMainOrder.vb)
  1. Public Class frmMainOrder

  2.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  3.         Me.Close()
  4.     End Sub

  5.     Private Sub frmMainOrder_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  6.         Me.Dispose()
  7.         Application.Exit()
  8.     End Sub

  9.     Private Sub frmMainOrder_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  10.         Select Case e.KeyCode
  11.             Case Keys.F8
  12.                 btnPayment_Click(sender, e)
  13.             Case Keys.F10
  14.                 Me.Close()
  15.         End Select
  16.     End Sub

  17.     ' / ---------------------------------------------------------------
  18.     Private Sub frmMainOrder_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  19.         txtPrice.Text = "0.00"
  20.         txtAmount.Text = "0.00"
  21.         Call InitGrid()
  22.     End Sub

  23.     ' / ---------------------------------------------------------------
  24.     '// Initialize DataGridView @Run Time
  25.     Private Sub InitGrid()
  26.         '// ตั้งค่าจำนวนหลัก (Columns)
  27.         With dgvData
  28.             .Columns.Add("PK", "PK")
  29.             .Columns.Add("Description", "รายการที่สั่ง")
  30.             .Columns.Add("Unit Price", "ราคา")
  31.             '//
  32.             .Columns(0).Visible = False
  33.             With .Columns(2)
  34.                 .ValueType = GetType(Decimal)
  35.                 .DefaultCellStyle.Format = "N2"
  36.                 .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
  37.             End With
  38.         End With
  39.         '//
  40.         With dgvData
  41.             .RowHeadersVisible = False
  42.             .AllowUserToAddRows = False
  43.             .AllowUserToDeleteRows = False
  44.             .AllowUserToResizeRows = False
  45.             .MultiSelect = False
  46.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  47.             .ReadOnly = True
  48.             .Font = New Font("Tahoma", 11)
  49.             .RowTemplate.Height = 40
  50.             .RowTemplate.MinimumHeight = 32
  51.             ' Autosize Column
  52.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  53.             .AutoResizeColumns()
  54.             '// Even-Odd Color
  55.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  56.             ' Adjust Header Styles
  57.             With .ColumnHeadersDefaultCellStyle
  58.                 .BackColor = Color.Navy
  59.                 .ForeColor = Color.Black
  60.                 .Font = New Font("Tahoma", 12, FontStyle.Bold)
  61.                 .WrapMode = DataGridViewTriState.False
  62.             End With
  63.         End With
  64.     End Sub

  65.     ' / ---------------------------------------------------------------
  66.     Private Sub btnRemove_Click(sender As System.Object, e As System.EventArgs) Handles btnRemove.Click
  67.         If dgvData.RowCount <= 0 Then Exit Sub
  68.         dgvData.Focus()
  69.         txtPrice.Text = "0.00"
  70.         '// หาจำนวนเงินรวมใหม่
  71.         Dim Amount As Double
  72.         For i = 0 To dgvData.RowCount - 1
  73.             Amount = Amount + CDbl(dgvData.Rows(i).Cells(2).Value)
  74.         Next
  75.         '// รวมจำนวนเงินทั้งหมด ลบออกจากแถวที่เลือก ด้วยราคาที่อยู่ในหลักที่ 3 (Index = 2)
  76.         txtAmount.Text = Format(Amount - CDbl(dgvData.Item(2, dgvData.CurrentRow.Index).Value), "#,##0.00")
  77.         '// แล้วค่อยลบแถวออกไป
  78.         dgvData.Rows.Remove(dgvData.CurrentRow)
  79.         dgvData.Refresh()
  80.     End Sub

  81.     ' / ---------------------------------------------------------------
  82.     ' / เพิ่มรายการแถวใหม่ (UnBound Data)
  83.     Private Sub AddRow(ByVal PK As Integer, ByVal Description As String, ByVal UnitPrice As Double)
  84.         '// มองไปข้างหน้า ... กรณีที่ใช้ฐานข้อมูล เราจะต้องนำค่า PK มาใช้อ้างอิง ซึ่งข้อมูลแถวนี้จะมาจากการทำ Query
  85.         Dim row As String() = New String() {PK, Description, Format(CDbl(UnitPrice), "#,##0.00")}
  86.         dgvData.Rows.Add(row)
  87.         '// โจทย์ให้นำไปคิดต่อคือ ...
  88.         '// ต้องเช็คก่อนว่าค่า PK มันมีอยู่ในแถวแล้วหรือไม่ หากมีให้ "เพิ่มจำนวนขึ้น 1" ... จะทำอย่างไร?

  89.         '// แสดงผลราคาสินค้าล่าสุด
  90.         txtPrice.Text = UnitPrice
  91.         '// หาจำนวนเงินรวมใหม่
  92.         Dim Amount As Double
  93.         For i = 0 To dgvData.RowCount - 1
  94.             Amount = Amount + CDbl(dgvData.Rows(i).Cells(2).Value)
  95.         Next
  96.         txtAmount.Text = Format(Amount, "#,##0.00")
  97.         '// โฟกัสไปที่ DataGridView แล้วย้ายไปแถวล่าสุด
  98.         dgvData.Focus()
  99.         SendKeys.Send("^{END}")
  100.     End Sub

  101.     Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles btnClear.Click
  102.         dgvData.Rows.Clear()
  103.         txtPrice.Text = "0.00"
  104.         txtAmount.Text = "0.00"
  105.     End Sub

  106.     Private Sub btnBurger1_Click(sender As System.Object, e As System.EventArgs) Handles btnBurger1.Click
  107.         '// หากนำไปใช้งานจริง ข้อมูลของตัวสินค้าจะถูกเรียกมาจากตารางข้อมูล
  108.         Call AddRow(1, btnBurger1.Text, "45.00")
  109.     End Sub

  110.     Private Sub btnBurger2_Click(sender As System.Object, e As System.EventArgs) Handles btnBurger2.Click
  111.         Call AddRow(2, btnBurger2.Text, "85.00")
  112.     End Sub

  113.     Private Sub btnBurger3_Click(sender As System.Object, e As System.EventArgs) Handles btnBurger3.Click
  114.         Call AddRow(3, btnBurger3.Text, "110.00")
  115.     End Sub

  116.     Private Sub btnBurger4_Click(sender As System.Object, e As System.EventArgs) Handles btnBurger4.Click
  117.         Call AddRow(4, btnBurger4.Text, "90.00")
  118.     End Sub

  119.     Private Sub btnBurger5_Click(sender As System.Object, e As System.EventArgs) Handles btnBurger5.Click
  120.         Call AddRow(5, btnBurger5.Text, "120.00")
  121.     End Sub

  122.     Private Sub btnBurger6_Click(sender As System.Object, e As System.EventArgs) Handles btnBurger6.Click
  123.         Call AddRow(6, btnBurger6.Text, "80.00")
  124.     End Sub

  125.     Private Sub btnBurger7_Click(sender As System.Object, e As System.EventArgs) Handles btnBurger7.Click
  126.         Call AddRow(7, btnBurger7.Text, "100.00")
  127.     End Sub

  128.     Private Sub btnSmall1_Click(sender As System.Object, e As System.EventArgs) Handles btnSmall1.Click
  129.         '// Parameters - PK, Description, UnitPrice
  130.         Call AddRow(101, btnSmall1.Text, "20.00")
  131.     End Sub

  132.     Private Sub btnSmall2_Click(sender As Object, e As System.EventArgs) Handles btnSmall2.Click
  133.         Call AddRow(102, btnSmall2.Text, "20.00")
  134.     End Sub

  135.     Private Sub btnSmall3_Click(sender As Object, e As System.EventArgs) Handles btnSmall3.Click
  136.         Call AddRow(103, btnSmall3.Text, "20.00")
  137.     End Sub

  138.     Private Sub btnMedium1_Click(sender As Object, e As System.EventArgs) Handles btnMedium1.Click
  139.         Call AddRow(104, btnMedium1.Text, "40.00")
  140.     End Sub

  141.     Private Sub btnMedium2_Click(sender As Object, e As System.EventArgs) Handles btnMedium2.Click
  142.         Call AddRow(105, btnMedium2.Text, "40.00")
  143.     End Sub

  144.     Private Sub btnMedium3_Click(sender As Object, e As System.EventArgs) Handles btnMedium3.Click
  145.         Call AddRow(106, btnMedium3.Text, "40.00")
  146.     End Sub

  147.     Private Sub btnLarge1_Click(sender As Object, e As System.EventArgs) Handles btnLarge1.Click
  148.         Call AddRow(107, btnLarge1.Text, "60.00")
  149.     End Sub

  150.     Private Sub btnLarge2_Click(sender As Object, e As System.EventArgs) Handles btnLarge2.Click
  151.         Call AddRow(108, btnLarge2.Text, "60.00")
  152.     End Sub

  153.     Private Sub btnLarge3_Click(sender As Object, e As System.EventArgs) Handles btnLarge3.Click
  154.         Call AddRow(109, btnLarge3.Text, "60.00")
  155.     End Sub

  156.     Private Sub txtAmount_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtAmount.KeyPress
  157.         '// ล็อคการกดคีย์
  158.         e.Handled = True
  159.     End Sub

  160.     Private Sub txtPrice_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrice.KeyPress
  161.         e.Handled = True
  162.     End Sub

  163.     Private Sub btnPayment_Click(sender As System.Object, e As System.EventArgs) Handles btnPayment.Click
  164.         If dgvData.RowCount <= 0 Then Exit Sub
  165.         frmPayment.ShowDialog()
  166.     End Sub

  167. End Class
คัดลอกไปที่คลิปบอร์ด

โค้ดในส่วนของการชำระเงินสด (frmPayment.vb)
  1. Public Class frmPayment

  2.     Private Sub frmPayment_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  3.         Select Case e.KeyCode
  4.             Case Keys.F8
  5.                 btnCash_Click(sender, e)
  6.             Case Keys.F10
  7.                 Me.Close()
  8.         End Select
  9.     End Sub

  10.     Private Sub frmPayment_Load(sender As Object, e As System.EventArgs) Handles Me.Load
  11.         txtAmount.Text = Format(CDbl(frmMainOrder.txtAmount.Text), "#,##0.00")
  12.         txtCash.Text = "0"
  13.         txtChange.Text = "0.00"
  14.         txtCash.Focus()
  15.     End Sub

  16.     ' / ---------------------------------------------------------------
  17.     ' / ฟังค์ชั่นในการป้อนเฉพาะค่าตัวเลขได้เท่านั้น (ควรนำไปเก็บไว้ใน Module)
  18.     Function CheckDigitOnly(ByVal index As Integer) As Boolean
  19.         Select Case index
  20.             Case 48 To 57 ' เลข 0 - 9
  21.                 CheckDigitOnly = False
  22.             Case 8, 13 ' Backspace = 8, Enter = 13
  23.                 CheckDigitOnly = False
  24.             Case Else
  25.                 CheckDigitOnly = True
  26.         End Select
  27.     End Function

  28.     ' / ---------------------------------------------------------------
  29.     Private Sub btnCash_Click(sender As System.Object, e As System.EventArgs) Handles btnCash.Click
  30.         If txtCash.Text = "" Or Len(txtCash.Text) = 0 Or Val(txtCash.Text) = 0 Then
  31.             txtCash.Text = 0
  32.             txtChange.Text = "0.00"
  33.             txtCash.Focus()
  34.             Exit Sub
  35.         End If
  36.         If CDbl(txtCash.Text) - CDbl(txtAmount.Text) < 0 Then
  37.             MessageBox.Show("จำนวนเงินยังไม่ครบ กรุณาแก้ไขข้อมูลใหม่ด้วย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  38.             txtCash.Focus()
  39.         Else
  40.             MessageBox.Show("ทำรายการเสร็จสิ้น.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  41.             '// สั่งเคลียร์รายการข้ามฟอร์มมาเลย
  42.             With frmMainOrder
  43.                 .txtPrice.Text = "0.00"
  44.                 .txtAmount.Text = "0.00"
  45.                 .dgvData.Rows.Clear()
  46.             End With
  47.             Me.Close()
  48.         End If
  49.     End Sub

  50.     Private Sub txtCash_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtCash.KeyPress
  51.         '// รับค่าเฉพาะตัวเลขเท่านั้น
  52.         e.Handled = CheckDigitOnly(Asc(e.KeyChar))
  53.         txtCash.Text = CDbl(txtCash.Text)
  54.     End Sub

  55.     Private Sub txtCash_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCash.TextChanged
  56.         Call CalSum()
  57.     End Sub

  58.     Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles btnClear.Click
  59.         txtCash.Text = "0"
  60.         txtChange.Text = "0.00"
  61.     End Sub

  62.     ' / ---------------------------------------------------------------
  63.     Private Sub CalSum()
  64.         '/ Trap Error
  65.         If Trim(txtCash.Text) = "" Or Len(Trim(txtCash.Text)) = 0 Then
  66.             txtCash.Text = 0
  67.             txtChange.Text = "0.00"
  68.             Exit Sub
  69.         End If
  70.         '//
  71.         Dim dChange As Double = CDbl(txtCash.Text) - CDbl(txtAmount.Text)
  72.         txtChange.Text = dChange
  73.         If CDbl(dChange) < 0 Then
  74.             txtChange.ForeColor = Color.Red
  75.         Else
  76.             txtChange.ForeColor = Color.Blue
  77.         End If
  78.     End Sub

  79.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  80.         txtCash.Text = CDbl(txtCash.Text + Button1.Text)
  81.         Call CalSum()
  82.     End Sub

  83.     Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
  84.         txtCash.Text = CDbl(txtCash.Text + Button2.Text)
  85.         Call CalSum()
  86.     End Sub

  87.     Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
  88.         txtCash.Text = CDbl(txtCash.Text + Button3.Text)
  89.         Call CalSum()
  90.     End Sub

  91.     Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
  92.         txtCash.Text = CDbl(txtCash.Text + Button4.Text)
  93.         Call CalSum()
  94.     End Sub

  95.     Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
  96.         txtCash.Text = CDbl(txtCash.Text + Button5.Text)
  97.         Call CalSum()
  98.     End Sub

  99.     Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
  100.         txtCash.Text = CDbl(txtCash.Text + Button6.Text)
  101.         Call CalSum()
  102.     End Sub

  103.     Private Sub Button7_Click(sender As System.Object, e As System.EventArgs) Handles Button7.Click
  104.         txtCash.Text = CDbl(txtCash.Text + Button7.Text)
  105.         Call CalSum()
  106.     End Sub

  107.     Private Sub Button8_Click(sender As System.Object, e As System.EventArgs) Handles Button8.Click
  108.         txtCash.Text = CDbl(txtCash.Text + Button8.Text)
  109.         Call CalSum()
  110.     End Sub

  111.     Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click
  112.         txtCash.Text = CDbl(txtCash.Text + Button9.Text)
  113.         Call CalSum()
  114.     End Sub

  115.     Private Sub Button10_Click(sender As System.Object, e As System.EventArgs) Handles Button10.Click
  116.         txtCash.Text = CDbl(txtCash.Text + Button10.Text)
  117.         Call CalSum()
  118.     End Sub

  119.     Private Sub Button11_Click(sender As System.Object, e As System.EventArgs) Handles Button11.Click
  120.         txtCash.Text = CDbl(txtCash.Text + Button11.Text)
  121.         Call CalSum()
  122.     End Sub

  123.     Private Sub txtAmount_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtAmount.KeyPress
  124.         e.Handled = True
  125.     End Sub

  126.     Private Sub txtChange_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtChange.KeyPress
  127.         e.Handled = True
  128.     End Sub

  129.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  130.         Me.Close()
  131.     End Sub
  132. End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่ลิ้งค์ด้านล่างนี้

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

51

โพสต์

233

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
233
โพสต์ 2017-12-15 14:45:23 | ดูโพสต์ทั้งหมด

ขอบคุณครับ ขอให้แข็งแรงแข็งแรง ครับผม.

1

กระทู้

15

โพสต์

83

เครดิต

Member

Rank: 2

เครดิต
83
โพสต์ 2018-9-24 16:32:13 | ดูโพสต์ทั้งหมด

ขอบคุณครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-5-5 22:10 , Processed in 0.217075 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้