sistema de ventas e inventario en visual basic
sistema de ventas e inventario en visual basic. El proyecto se basa en un concepto de gestión de herramientas y equipos agrícolas. Hablando del proyecto, antes de ingresar al menú principal, el usuario debe pasar por el sistema de inicio de sesión para obtener acceso. Después de iniciar sesión en el sistema, él / ella puede administrar el stock, volver, agregar un nuevo artículo, agregar clientes, administrar usuarios y muchos más.
🛒 Sistema de Ventas e Inventario en Visual Basic [Con Código Fuente]
✅ Objetivo
Crear un sistema básico que permita:
-
Registrar productos.
-
Consultar y modificar inventario.
-
Realizar ventas.
-
Controlar stock automáticamente.
🧱 Tecnologías Usadas
-
Visual Basic .NET (Windows Forms)
-
Base de datos: Microsoft Access (.accdb) o SQL Server (opcional)
-
ADO.NET para la conexión
🎯 Estructura de la Base de Datos (Access)
-- Tabla: Productos
CREATE TABLE Productos (
IDProducto AUTOINCREMENT PRIMARY KEY,
NombreProducto TEXT(100),
PrecioUnitario DOUBLE,
Stock INT
);
-- Tabla: Ventas
CREATE TABLE Ventas (
IDVenta AUTOINCREMENT PRIMARY KEY,
FechaVenta DATETIME,
Total DOUBLE
);
-- Tabla: DetalleVenta
CREATE TABLE DetalleVenta (
IDDetalle AUTOINCREMENT PRIMARY KEY,
IDVenta INT,
IDProducto INT,
Cantidad INT,
Subtotal DOUBLE
);
🖥️ Código Fuente Visual Basic
1. Conexión a la Base de Datos
Imports System.Data.OleDb
Public Class Conexion
Public Shared conexion As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ventas.accdb")
Public Shared Sub Abrir()
If conexion.State = ConnectionState.Closed Then
conexion.Open()
End If
End Sub
Public Shared Sub Cerrar()
If conexion.State = ConnectionState.Open Then
conexion.Close()
End If
End Sub
End Class
2. Registrar un Producto
Public Sub RegistrarProducto(nombre As String, precio As Double, stock As Integer)
Conexion.Abrir()
Dim cmd As New OleDbCommand("INSERT INTO Productos (NombreProducto, PrecioUnitario, Stock) VALUES (?, ?, ?)", Conexion.conexion)
cmd.Parameters.AddWithValue("?", nombre)
cmd.Parameters.AddWithValue("?", precio)
cmd.Parameters.AddWithValue("?", stock)
cmd.ExecuteNonQuery()
Conexion.Cerrar()
MessageBox.Show("Producto registrado con éxito.")
End Sub
3. Mostrar Productos en un DataGridView
Public Sub RegistrarVenta(productos As List(Of Tuple(Of Integer, Integer))) ' (IDProducto, Cantidad)
Conexion.Abrir()
Dim cmdVenta As New OleDbCommand("INSERT INTO Ventas (FechaVenta, Total) VALUES (?, ?)", Conexion.conexion)
Dim fecha = DateTime.Now
Dim total As Double = 0
' Calculamos total
For Each item In productos
Dim idProd = item.Item1
Dim cantidad = item.Item2
Dim cmdPrecio As New OleDbCommand("SELECT PrecioUnitario FROM Productos WHERE IDProducto = ?", Conexion.conexion)
cmdPrecio.Parameters.AddWithValue("?", idProd)
Dim precio As Double = cmdPrecio.ExecuteScalar()
total += cantidad * precio
Next
cmdVenta.Parameters.AddWithValue("?", fecha)
cmdVenta.Parameters.AddWithValue("?", total)
cmdVenta.ExecuteNonQuery()
' Obtener IDVenta
Dim cmdID As New OleDbCommand("SELECT MAX(IDVenta) FROM Ventas", Conexion.conexion)
Dim idVenta As Integer = cmdID.ExecuteScalar()
' Registrar Detalles
For Each item In productos
Dim idProd = item.Item1
Dim cantidad = item.Item2
Dim cmdPrecio As New OleDbCommand("SELECT PrecioUnitario FROM Productos WHERE IDProducto = ?", Conexion.conexion)
cmdPrecio.Parameters.AddWithValue("?", idProd)
Dim precio As Double = cmdPrecio.ExecuteScalar()
Dim subtotal = cantidad * precio
Dim cmdDetalle As New OleDbCommand("INSERT INTO DetalleVenta (IDVenta, IDProducto, Cantidad, Subtotal) VALUES (?, ?, ?, ?)", Conexion.conexion)
cmdDetalle.Parameters.AddWithValue("?", idVenta)
cmdDetalle.Parameters.AddWithValue("?", idProd)
cmdDetalle.Parameters.AddWithValue("?", cantidad)
cmdDetalle.Parameters.AddWithValue("?", subtotal)
cmdDetalle.ExecuteNonQuery()
' Actualizar stock
Dim cmdStock As New OleDbCommand("UPDATE Productos SET Stock = Stock - ? WHERE IDProducto = ?", Conexion.conexion)
cmdStock.Parameters.AddWithValue("?", cantidad)
cmdStock.Parameters.AddWithValue("?", idProd)
cmdStock.ExecuteNonQuery()
Next
Conexion.Cerrar()
MessageBox.Show("Venta registrada con éxito.")
End Sub
✅ Características Implementadas
Registro y visualización de productos.
Control automático de inventario.
Registro de ventas y detalle de productos vendidos.
Almacenamiento persistente con Access.