Vb.net Billing Software Source Code Extra Quality [2027]

TextBox ( txtProdCode ) for barcode scans or manual code entries. ComboBox/TextBox ( txtProdName ) for product discovery. TextBox ( txtPrice ) for displaying the base item cost. TextBox ( txtQty ) for entering the purchase quantity. Button ( btnAddToCart ) to push line items into the grid.

: Apply a percentage for tax and add it to the subtotal to get the final amount. 2. Source Code: Generate Text Invoice

The database is the backbone of any billing system, responsible for storing all transactional and master data. VB.NET billing systems typically integrate with one of two primary database systems.

This implementation uses . The interface requires the following controls: vb.net billing software source code

Public Class frmProducts Private Sub frmProducts_Load(sender As Object, e As EventArgs) Handles MyBase.Load LoadProducts() End Sub Private Sub LoadProducts() Try Dim dt As DataTable = Product.GetAllProducts() dgvProducts.DataSource = dt dgvProducts.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill Catch ex As Exception MessageBox.Show("Error loading products: " & ex.Message) End Try End Sub

yPos += 10 e.Graphics.DrawLine(Pens.Black, leftMargin, yPos, 500, yPos) yPos += 10 e.Graphics.DrawString("Grand Total: " & lblGrandTotal.Text, titleFont, Brushes.Black, xPos, yPos) End Sub

Most VB.NET billing systems use or MS Access for data storage. Use the following logic to connect your application to a SQL database: TextBox ( txtProdCode ) for barcode scans or

Imports System.Data.OleDb Public Class frmBilling ' Global variables for calculations Dim taxRate As Double = 0.18 ' 18% Tax Example Dim invoiceSubTotal As Double = 0.0 Private Sub frmBilling_Load(sender As Object, e As EventArgs) Handles MyBase.Load InitializeCartGrid() ClearForm() End Sub ' Initialize DataGridView columns programmatically Private Sub InitializeCartGrid() dgvCart.Columns.Clear() dgvCart.Columns.Add("id", "Product ID") dgvCart.Columns.Add("code", "Code") dgvCart.Columns.Add("name", "Product Name") dgvCart.Columns.Add("price", "Price") dgvCart.Columns.Add("qty", "Qty") dgvCart.Columns.Add("total", "Total") dgvCart.AllowUserToAddRows = False End Sub ' Auto-fetch product details when a barcode or code is entered Private Sub txtProductCode_KeyDown(sender As Object, e As KeyEventArgs) Handles txtProductCode.KeyDown If e.KeyCode = Keys.Enter AndAlso txtProductCode.Text.Trim() <> "" Then Try OpenConnection() Dim cmd As New OleDbCommand("SELECT ProductID, ProductName, Price FROM Products WHERE ProductCode = ?", conn) cmd.Parameters.AddWithValue("?", txtProductCode.Text.Trim()) Dim dr As OleDbDataReader = cmd.ExecuteReader() If dr.Read() Then txtProductID.Text = dr("ProductID").ToString() txtProductName.Text = dr("ProductName").ToString() txtPrice.Text = dr("Price").ToString() txtQty.Text = "1" txtQty.Focus() Else MessageBox.Show("Product not found!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) txtProductCode.Clear() End If dr.Close() Catch ex As Exception MessageBox.Show(ex.Message) Finally CloseConnection() End Try End If End Sub ' Add Selected Item to the DataGridView Cart Private Sub btnAddToCart_Click(sender As Object, e As EventArgs) Handles btnAddToCart.Click If txtProductID.Text = "" OrElse Val(txtQty.Text) <= 0 Then MessageBox.Show("Please select a valid product and enter quantity.", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub End If Dim itemId As String = txtProductID.Text Dim price As Double = Convert.ToDouble(txtPrice.Text) Dim qty As Integer = Convert.ToInt32(txtQty.Text) Dim itemTotal As Double = price * qty ' Check if product already exists in the cart grid Dim itemExists As Boolean = False For Each row As DataGridViewRow In dgvCart.Rows If row.Cells("id").Value.ToString() = itemId Then Dim currentQty As Integer = Convert.ToInt32(row.Cells("qty").Value) Dim newQty As Integer = currentQty + qty row.Cells("qty").Value = newQty row.Cells("total").Value = (price * newQty).ToString("F2") itemExists = True Exit For End If Next ' If item is new, add it as a new row If Not itemExists Then dgvCart.Rows.Add(itemId, txtProductCode.Text, txtProductName.Text, price.ToString("F2"), qty, itemTotal.ToString("F2")) End If CalculateInvoiceTotals() ClearProductInputs() txtProductCode.Focus() End Sub ' Calculate Subtotal, Tax, and Grand Total Private Sub CalculateInvoiceTotals() invoiceSubTotal = 0.0 For Each row As DataGridViewRow In dgvCart.Rows invoiceSubTotal += Convert.ToDouble(row.Cells("total").Value) Next Dim taxAmount As Double = invoiceSubTotal * taxRate Dim grandTotal As Double = invoiceSubTotal + taxAmount lblSubTotal.Text = invoiceSubTotal.ToString("F2") lblTax.Text = taxAmount.ToString("F2") lblGrandTotal.Text = grandTotal.ToString("F2") End Sub ' Save Bill Details to Database and Update Inventory Stocks Private Sub btnSavePrint_Click(sender As Object, e As EventArgs) Handles btnSavePrint.Click If dgvCart.Rows.Count = 0 Then MessageBox.Show("Cart is empty!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Exit Sub End If Try OpenConnection() ' 1. Insert Customer Record (Or lookup existing ID) Dim cmdCust As New OleDbCommand("INSERT INTO Customers (CustomerName, ContactNumber) VALUES (?, ?)", conn) cmdCust.Parameters.AddWithValue("?", If(txtCustName.Text = "", "Walking Customer", txtCustName.Text.Trim())) cmdCust.Parameters.AddWithValue("?", txtCustContact.Text.Trim()) cmdCust.ExecuteNonQuery() ' Fetch last generated Customer ID Dim cmdGetCustID As New OleDbCommand("SELECT @@IDENTITY", conn) Dim customerId As Integer = Convert.ToInt32(cmdGetCustID.ExecuteScalar()) ' 2. Insert Parent Invoice Record Dim cmdInv As New OleDbCommand("INSERT INTO Invoices (InvoiceDate, CustomerID, SubTotal, TaxAmount, GrandTotal, PaymentMode) VALUES (?, ?, ?, ?, ?, ?)", conn) cmdInv.Parameters.AddWithValue("?", DateTime.Now) cmdInv.Parameters.AddWithValue("?", customerId) cmdInv.Parameters.AddWithValue("?", Convert.ToDouble(lblSubTotal.Text)) cmdInv.Parameters.AddWithValue("?", Convert.ToDouble(lblTax.Text)) cmdInv.Parameters.AddWithValue("?", Convert.ToDouble(lblGrandTotal.Text)) cmdInv.Parameters.AddWithValue("?", cbPaymentMode.SelectedItem.ToString()) cmdInv.ExecuteNonQuery() ' Fetch last generated Invoice Number Dim cmdGetInvNo As New OleDbCommand("SELECT @@IDENTITY", conn) Dim newInvoiceNo As Integer = Convert.ToInt32(cmdGetInvNo.ExecuteScalar()) ' 3. Insert Line Items into Details Table & Update Inventory Stocks For Each row As DataGridViewRow In dgvCart.Rows Dim pId As Integer = Convert.ToInt32(row.Cells("id").Value) Dim qty As Integer = Convert.ToInt32(row.Cells("qty").Value) Dim price As Double = Convert.ToDouble(row.Cells("price").Value) Dim total As Double = Convert.ToDouble(row.Cells("total").Value) ' Insert details Dim cmdDetails As New OleDbCommand("INSERT INTO InvoiceDetails (InvoiceNo, ProductID, Qty, UnitPrice, Total) VALUES (?, ?, ?, ?, ?)", conn) cmdDetails.Parameters.AddWithValue("?", newInvoiceNo) cmdDetails.Parameters.AddWithValue("?", pId) cmdDetails.Parameters.AddWithValue("?", qty) cmdDetails.Parameters.AddWithValue("?", price) cmdDetails.Parameters.AddWithValue("?", total) cmdDetails.ExecuteNonQuery() ' Deduct from Product Inventory Stock Dim cmdStock As New OleDbCommand("UPDATE Products SET Stocks = Stocks - ? WHERE ProductID = ?", conn) cmdStock.Parameters.AddWithValue("?", qty) cmdStock.Parameters.AddWithValue("?", pId) cmdStock.ExecuteNonQuery() Next MessageBox.Show("Transaction saved successfully! Invoice No: " & newInvoiceNo, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information) ClearForm() Catch ex As Exception MessageBox.Show("Error occurred while saving transaction: " & ex.Message, "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally CloseConnection() End Try End Sub ' Reset Helper Procedures Private Sub ClearProductInputs() txtProductID.Clear() txtProductCode.Clear() txtProductName.Clear() txtPrice.Clear() txtQty.Clear() End Sub Private Sub ClearForm() ClearProductInputs() txtCustName.Clear() txtCustContact.Clear() dgvCart.Rows.Clear() lblSubTotal.Text = "0.00" lblTax.Text = "0.00" lblGrandTotal.Text = "0.00" cbPaymentMode.SelectedIndex = 0 End Sub End Class Use code with caution. 4. Scalable Features to Implement Next

Some of the key components of the source code include:

Below is a comprehensive guide and structured source code blueprint for a retail billing application using VB.NET. 🏗️ System Architecture & Database Design TextBox ( txtQty ) for entering the purchase quantity

Public Class BillingSoftware Private Sub btnAddItem_Click(sender As Object, e As EventArgs) Handles btnAddItem.Click If txtItemName.Text <> "" AndAlso txtQuantity.Text <> "" AndAlso txtPrice.Text <> "" Then ListView1.Items.Add(txtItemName.Text) Dim lvItem As ListViewItem = ListView1.Items(ListView1.Items.Count - 1) lvItem.SubItems.Add(txtQuantity.Text) lvItem.SubItems.Add(txtPrice.Text) CalculateTotal() txtItemName.Clear() txtQuantity.Clear() txtPrice.Clear() txtItemName.Focus() Else MessageBox.Show("Please fill in all fields.") End If End Sub

Designing a clean UI is essential for fast data entry in a billing environment:

A professional-grade billing system should include several core functionalities to be truly useful for a business:

Next steps you can take right now