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

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

[VB.NET] แจกฟรีโค้ดโปรแกรมการขายอาหาร/เครื่องดื่ม พร้อมกับบันทึกข้อมูลการขายได้

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

252

กระทู้

370

โพสต์

3094

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3094




โปรเจคนี้ก็เหมือนกับการขายสินค้าทั่วๆไปนั่นเองแหละครับ เพียงแต่การออกแบบหน้าจอ GUI (Graphic User Interface)ะใช้กราฟิคหรือในลักษณะของหน้าจอแบบทัชสกรีนมาแสดงผลแทน สำหรับในตอนนี้ (ตอนที่แล้วๆมาก็ต้องไปไล่เรียงกันเอาเองครับ) แอดมินภูมิใจนำเสนอ การสร้าง Control ต่างๆในลักษณะของไดนามิค หรือที่เรียกว่า Run Time ด้วยการสร้าง TabPage (สำหรับ TabControl) เพื่อทำการจัดกลุ่มรายการอาหาร การสร้าง Panel ในแบบ Array เพื่อตีกรอบจำนวนของปุ่มคำสั่ง (Button) ซึ่งปุ่มคำสั่งก็จะแสดงผลภาพรายการอาหาร/เครื่องดิ่ม เพื่อให้ Users กดเลือกทำการขายสินค้าได้นั่นเอง และสุดท้ายคือ การบันทึกรายการขายอาหาร/เครื่องดื่ม เพื่อจัดเก็บเข้าสู่ระบบฐานข้อมูล ... โดยแอดมินจะทิ้งท้ายไว้เพียงแค่นี้ก่อน เพราะอยากให้มิตรรักแฟนคลับภาษาเบสิคทุกๆท่านไปคิดศึกษาและทำการเพิ่มเติมเอง โดยจะต้องสามารถแสดงผลรายการขายรวม เพื่อเลือกเพิ่มข้อมูลการขายใหม่ หรือนำข้อมูลเดิมมาแก้ไขได้ พร้อมกับลบข้อมูลออกได้ด้วย ส่วนการเก็บข้อมูลรายการอาหาร/เครื่องดิืม ไม่ใช่เรื่องยากเย็นอะไรเลย เพราะแอดมินแจกโค้ดในการเก็บข้อมูลแบบ One To One เอาไว้ให้ก่อนล่วงหน้าแล้ว มาถึงขั้นนี้แล้วแอดมินคิดว่าไม่น่าจะยากจนเกินไปนัก ...

หน้าจอแบบ Full Version แต่อยากให้ทุกๆท่านได้ทำการเพิ่มเติมเองไปก่อน หากติดขัดปัญหาสามารถสอบถามเข้ามาได้เลยครับ





หน้าจอการออกแบบ ... จาก TabControl1 จะว่างเปล่าไม่มีอะไร นี่คือโค้ดในการสร้างคอนโทรลในแบบไดนามิค โดยคำนวณหากลุ่มอาหารเพื่อสร้างจำนวน TabPage (มันมี Index ในตัว) และ Panel (ใช้ Array แทน) มาก่อน ...
  1.     ' / ---------------------------------------------------------------
  2.     ' / สร้างกลุ่ม Control ประกอบด้วย TabPage โดยนำเอา Panel แสดงในบน TabPage
  3.     ' / และในแต่ละ Panel ให้แสดงผลปุ่มคำสั่ง
  4.     Private Sub CreateMyControls()
  5.         ' / ---------------------------------------------------------------
  6.         ' / ค้นหาจำนวนของกลุ่มสินค้าเข้ามาก่อน
  7.         ' / เพื่อกำหนดจำนวน TabControl ได้
  8.         ' / ---------------------------------------------------------------
  9.         Dim CategoryCount As Byte = 0
  10.         strSQL = _
  11.             "SELECT Category.CategoryPK, Category.CategoryName " & _
  12.             " FROM(Category) " & _
  13.             " WHERE CategoryName <> '' " & _
  14.             " ORDER BY Category.CategoryPK "
  15.         If Conn.State = ConnectionState.Closed Then Conn.Open()
  16.         Cmd = New OleDb.OleDbCommand(strSQL, Conn)
  17.         DR = Cmd.ExecuteReader
  18.         '// เก็บค่า CategoryName
  19.         Dim ListCat As List(Of String) = New List(Of String)()
  20.         If DR.HasRows Then
  21.             While DR.Read()
  22.                 '// เก็บค่าเพื่อแสดงชื่อบน TabPage
  23.                 ListCat.Add(DR.Item("CategoryName").ToString)
  24.                 CategoryCount += 1
  25.             End While
  26.         End If
  27.         DR.Close()
  28.         Cmd.Dispose()
  29.         ' / ใส่จำนวน Panel ลงบนฟอร์ม
  30.         Dim pn(CategoryCount) As Panel
  31.         For i = 0 To CategoryCount - 1
  32.             ' / Create a tabpage
  33.             Dim tabPageRef As New TabPage
  34.             ' / Set the tabpage to be your desired tab
  35.             tabPageRef.Name = "Tab" & CStr(i)
  36.             '// แสดงชื่อกลุ่ม Category
  37.             tabPageRef.Text = ListCat(i).ToString
  38.             '// เพิ่ม TabPage ลงใน TabControl1
  39.             Me.TabControl1.Controls.Add(tabPageRef)
  40.             tabPageRef = TabControl1.TabPages(i)
  41.             '//
  42.             pn(i) = New Panel
  43.             pn(i).Name = "pn" & i
  44.             '// Create Panel
  45.             With pn(i)
  46.                 .Location = New System.Drawing.Point(1, 1)
  47.                 .Size = New System.Drawing.Size(TabControl1.Width - 10, TabControl1.Height - 30)
  48.                 .BackColor = Color.Moccasin
  49.                 .AutoScroll = True
  50.                 .Anchor = AnchorStyles.Bottom + AnchorStyles.Top
  51.             End With
  52.             'Add the panel into the TabControl
  53.             tabPageRef.Controls.Add(pn(i))
  54.             strSQL = _
  55.                 " SELECT Food.FoodPK, Food.FoodID, Food.FoodName, Food.PriceCash, Food.PictureFood, Food.CategoryFK" & _
  56.                 " FROM(Food) " & _
  57.                 " WHERE Food.CategoryFK = " & i + 2 & _
  58.                 " ORDER BY FoodPK "
  59.             '// สร้างปุ่ม (Button) ลงใน Panel (จำนวนหลัก, รายการ, Panel)
  60.             Call AddButtonsToForm(3, strSQL, pn(i))
  61.         Next

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


โค้ดในส่วนของการสร้างปุ่มคำสั่ง ตามจำนวนรายการอาหาร/เครื่องดื่ม ...
  1.     ' / ---------------------------------------------------------------
  2.     '// เพิ่มปุ่มคำสั่ง (Button Control) แบบ Run Time
  3.     Private Sub AddButtonsToForm(ByVal ColCount As Byte, ByVal sql As String, pn As Panel)
  4.         Dim Buttons As New Dictionary(Of String, Button)
  5.         Dim img As String
  6.         Dim Rec As Integer = 0
  7.         Try
  8.             If Conn.State = ConnectionState.Closed Then Conn.Open()
  9.             Cmd = New OleDbCommand(sql, Conn)
  10.             DR = Cmd.ExecuteReader
  11.             ' / Make sure Primary Key only one and not duplicate
  12.             While DR.Read()
  13.                 If DR.HasRows Then
  14.                     Dim B As New Button
  15.                     pn.Controls.Add(B)
  16.                     With B
  17.                         .Height = 140
  18.                         .Width = 140
  19.                         .Left = (Rec Mod ColCount) * B.Width
  20.                         .Top = (Rec \ ColCount) * B.Height
  21.                         .Text = DR.Item("FoodName") & vbCrLf & Format(CDbl(DR.Item("PriceCash")), "#,##0.00") & "B."
  22.                         Buttons.Add(B.Text, B)
  23.                         '// นำค่า Primary Key ไปเก็บไว้ที่คุณสมบัติ Tag เมื่อกดปุ่มคำสั่งจะใช้ค่านี้ไปค้นหาจากฐานข้อมูล
  24.                         .Tag = DR.Item("FoodPK")
  25.                         '// อ่านค่ารูปภาพ และตรวจสอบการมีอยู่จริงของภาพด้วยฟังค์ชั่น GetImages
  26.                         img = GetImages(DR.Item("PictureFood"))
  27.                         '// ใส่ภาพลงไปในปุ่มคำสั่ง Button
  28.                         .BackgroundImage = New System.Drawing.Bitmap(img)
  29.                         '//
  30.                         .Cursor = Cursors.Hand
  31.                         .BackgroundImageLayout = ImageLayout.Stretch
  32.                         .Font = New Font("Century Gothic", 14, FontStyle.Bold)
  33.                         .ForeColor = Color.Black
  34.                         .TextImageRelation = TextImageRelation.ImageAboveText
  35.                         .TextAlign = ContentAlignment.BottomCenter
  36.                         .UseVisualStyleBackColor = True
  37.                     End With
  38.                     Rec += 1
  39.                     '// Force events handler.
  40.                     AddHandler B.Click, AddressOf ClickButton
  41.                 End If
  42.             End While
  43.             DR.Close()
  44.         Catch ex As Exception
  45.             MessageBox.Show(ex.Message)
  46.         End Try

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


หน้าจอการออกแบบตารางข้อมูล และการเชื่อมความสัมพันธ์แบบ One To Many ...


โค้ดในการบันทึกรายการขาย ... ขอให้ทำการศึกษาแบบ Step by Step ด้วยการกด F8 เพื่อทำการ Debugger แล้วท่านจะเข้าใจ
  1.     ' / ---------------------------------------------------------------
  2.     ' / SAVE DATA
  3.     Private Sub SaveData()
  4.         Try
  5.             '// บันทึกข้อมูลลงตารางหลัก Invoice ก่อน
  6.             '// NewData = True, It's Add New Mode
  7.             If NewData Then
  8.                 '// สร้างค่า Primary Key ตัวใหม่
  9.                 '// *** ขอให้สังเกตว่าจะหาค่า PK ตอนที่จะบันทึกข้อมูลจริงๆ กรณีที่เราใช้งานแบบเครือข่าย จะได้ไม่มีปัญหาการซ้ำกัน ***
  10.                 '// SetupNewPK --> modDataBase.vb
  11.                 '// GenNewID(PK) --> modDataBase.vb
  12.                 PK = SetupNewPK("SELECT MAX(Invoice.InvoicePK) AS MaxPK FROM Invoice ")
  13.                 '/ ******************** ตัวอย่างการออกแบบเผื่อเอาไว้  ********************
  14.                 '/ CustomerFK = 1 (เก็บเผื่อเอาไว้หากวันหน้าต้องมีระบบสมาชิก ตอนนี้ใช้ CustomerFK = 1)
  15.                 '/ AddedByFK และ LastUserFK = 1 คือ Administrator (เก็บเผื่อเอาไว้สำหรับระบบการ Login ในภายหลัง)
  16.                 strSQL = _
  17.                     " INSERT INTO Invoice(" & _
  18.                     " InvoicePK, InvoiceID, CustomerFK, DateInvoice, " & _
  19.                     " TotalAmount, " & _
  20.                     " DateAdded, DateModified, AddedByFK, LastUserFK) " & _
  21.                     " VALUES(" & _
  22.                     "'" & PK & "', " & _
  23.                     "'" & GenNewID(PK) & "', " & _
  24.                     "'1', " & _
  25.                     "'" & Format(Now(), "dd/MM/yyyy hh:mm") & "', " & _
  26.                     "'" & CDbl(Amount) & "', " & _
  27.                     "'" & Now.ToString("dd/MM/yyyy") & "'," & _
  28.                     "'" & Now.ToString("dd/MM/yyyy") & "', " & _
  29.                     "'1'," & _
  30.                     "'1'" & _
  31.                     ")"

  32.                 '// การแก้ไข
  33.             Else
  34.                 '// START UPDATE
  35.                 '// DateModified เก็บไว้เพื่อระบุวัน-เวลาที่ทำการแก้ไข
  36.                 strSQL = _
  37.                     " UPDATE Invoice SET " & _
  38.                     " [TotalAmount]='" & CDbl(Amount) & "', " & _
  39.                     " [DateModified]='" & Now.ToString("dd/MM/yyyy  hh:mm") & "'," & _
  40.                     " [LastUserFK]='1'" & _
  41.                     " WHERE InvoicePK = " & PK
  42.             End If
  43.             '// Execute from modDataBase.vb
  44.             Call DoSQL(strSQL)

  45.             '/ -----------------------------------------------------------------
  46.             '// **** กรณีที่มีการนับสต็อก ก่อนลบข้อมูลออกจะต้องทำการคืนจำนวนสินค้ากลับเข้าไปก่อนการลบข้อมูล ****
  47.             '// **** แต่สำหรับงานนี้ไม่มี จึงไม่ต้องทำการปรับข้อมูลก่อน ****
  48.             '/ -----------------------------------------------------------------
  49.             '// กรณีที่ EDIT (แก้ไข) ต้องลบข้อมูลเดิมในตาราง InvoiceDetail ออกให้หมด แล้วค่อยวนลูปเก็บค่าใหม่
  50.             If Not NewData Then
  51.                 strSQL = " DELETE FROM InvoiceDetail WHERE InvoicePK = " & PK
  52.                 Call DoSQL(strSQL)
  53.             End If

  54.             '/ -----------------------------------------------------------------
  55.             '// START INSERT DETAIL DATA
  56.             '// INSERT ข้อมูลปัจจุบันลงไปใหม่ ด้วยการ Loop ข้อมูลจากตาราง โดยการอ้างอิงจาก InvoicePK ทุกรายการสินค้า
  57.             For iRow = 0 To dgvData.RowCount - 1
  58.                 '// อ่านค่าจากตารางกริด
  59.                 strSQL = _
  60.                         " INSERT INTO InvoiceDetail(" & _
  61.                         " InvoicePK, FoodFK, PriceCash, Quantity) " & _
  62.                         " VALUES(" & _
  63.                         "'" & PK & "'," & _
  64.                         "'" & dgvData.Rows(iRow).Cells(0).Value & "', " & _
  65.                         "'" & dgvData.Rows(iRow).Cells(2).Value & "', " & _
  66.                         "'" & dgvData.Rows(iRow).Cells(3).Value & "'" & _
  67.                         ")"
  68.                 '// UPDATE
  69.                 Call DoSQL(strSQL)
  70.             Next
  71.             '// เอาไว้แจ้งระบบว่ามีการ Update
  72.             FormUpDate = True
  73.             '/ เริ่มต้นการเพิ่มข้อมูลใหม่
  74.             NewData = True
  75.             '//
  76.             MessageBox.Show("ทำรายการเสร็จสิ้นเรียบร้อย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  77.             '// สั่งเคลียร์รายการ
  78.             Amount = 0
  79.             lblAmount.Text = "Total: 0.00"
  80.             lblLastPrice.Text = "Last Price: 0.00"
  81.             dgvData.Rows.Clear()

  82.         Catch ex As Exception
  83.             MessageBox.Show(ex.Message, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  84.         End Try
  85.     End Sub
คัดลอกไปที่คลิปบอร์ด


ดาวน์โหลดโค้ดต้นฉบับแบบเต็ม VB.NET (2010) ได้ที่นี่ ...




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

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

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

0

กระทู้

52

โพสต์

233

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
233
โพสต์ 2019-5-26 17:36:26 | ดูโพสต์ทั้งหมด

ขอบคุณครับผม

0

กระทู้

6

โพสต์

32

เครดิต

Newbie

Rank: 1

เครดิต
32
โพสต์ 2020-2-18 14:59:42 | ดูโพสต์ทั้งหมด

ขอบคุณครับ

3

กระทู้

15

โพสต์

63

เครดิต

Member

Rank: 2

เครดิต
63
โพสต์ 2020-2-20 10:30:10 | ดูโพสต์ทั้งหมด

ขอบคุณครับ

0

กระทู้

3

โพสต์

12

เครดิต

Newbie

Rank: 1

เครดิต
12
โพสต์ 2020-3-29 07:43:00 | ดูโพสต์ทั้งหมด

ขอบคุณครับ

0

กระทู้

14

โพสต์

42

เครดิต

Newbie

Rank: 1

เครดิต
42
โพสต์ 2020-4-20 16:12:24 | ดูโพสต์ทั้งหมด

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

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

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

GMT+7, 2020-10-1 12:18 , Processed in 0.763724 second(s), 4 queries , File On.

Powered by Discuz! X3.3 R20170401, Rev.54

© 2001-2017 Comsenz Inc.

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