Sistema de Estacionamiento en C# con Windows Forms: Código Completo Explicado
Sistema de Estacionamiento en C# con Windows Forms
A continuación se presenta el código de un formulario en C# para gestionar un control de estacionamiento, que permite registrar el ingreso de vehículos, buscar patentes, calcular el cobro por estadía y liberar espacios.
Declaración de la clase y variables
La clase frmEstacionamiento hereda de Form y utiliza dos arreglos de 100 posiciones para almacenar las patentes y las horas de entrada de los vehículos.
public partial class frmEstacionamiento : Form
{
private string[] vPatente = new string[100];
private int[] vHoraEntrada = new int[100];
private int posicionActual = -1;
public frmEstacionamiento()
{
InitializeComponent();
InicializarDatos();
}
Eventos del formulario
Buscar un vehículo
El evento btnBuscar_Click valida que se haya ingresado una patente, la busca en el arreglo y, si la encuentra, carga sus datos en los campos del formulario.
private void btnBuscar_Click(object sender, EventArgs e)
{
if (txtPatente.Text == "")
{
MessageBox.Show("Debe ingresar la patente");
return;
}
posicionActual = BuscarDatos(txtPatente.Text);
if (posicionActual != -1)
{
CargarDatos(posicionActual);
}
else
{
MessageBox.Show("Registro no encontrado");
}
}
Ingresar un vehículo
El evento btnIngresar_Click valida la patente y la hora de entrada, busca una posición libre y guarda el registro.
private void btnIngresar_Click(object sender, EventArgs e)
{
if (txtPatente.Text == "")
{
MessageBox.Show("Debe ingresar la patente");
return;
}
if (txtHoraEntrada.Text == "")
{
MessageBox.Show("Debe ingresar la hora de entrada");
return;
}
posicionActual = BuscarDatos("");
if (posicionActual != -1)
{
IngresarDatos(posicionActual);
LimpiarDatos();
posicionActual = -1;
MessageBox.Show("Registro guardado correctamente");
}
else
{
MessageBox.Show("No hay lugar");
}
}
Cobrar la estadía
El evento btnCobrar_Click calcula el tiempo de permanencia como la diferencia entre la hora de salida y la hora de entrada, y multiplica dicho tiempo por una tarifa de 50 por hora.
private void btnCobrar_Click(object sender, EventArgs e)
{
if (posicionActual == -1)
{
MessageBox.Show("Debe buscar una patente primero");
return;
}
if (txtHoraSalida.Text == "")
{
MessageBox.Show("Debe ingresar la hora de salida");
return;
}
int horaEntrada = Int32.Parse(txtHoraEntrada.Text);
int horaSalida = Int32.Parse(txtHoraSalida.Text);
int horaEstadia = (horaSalida - horaEntrada);
int importe = horaEstadia * 50;
BorrarDatos(posicionActual);
LimpiarDatos();
posicionActual = -1;
MessageBox.Show("El valor de la estadía es: " + importe.ToString());
}
Cancelar un registro
El evento btnCancelar_Click elimina el registro seleccionado sin realizar cobro alguno.
private void btnCancelar_Click(object sender, EventArgs e)
{
if (posicionActual == -1)
{
MessageBox.Show("Debe buscar una patente primero");
return;
}
BorrarDatos(posicionActual);
LimpiarDatos();
posicionActual = -1;
MessageBox.Show("El registro fue borrado correctamente");
}
Funciones auxiliares
Inicialización de datos
El método InicializarDatos deja todas las posiciones del arreglo libres, asignando cadenas vacías a las patentes y -1 a las horas de entrada.
private void InicializarDatos()
{
posicionActual = -1;
for (int i = 0; i < 100; i++)
{
vPatente[i] = "";
vHoraEntrada[i] = -1;
}
}
Búsqueda, carga, almacenamiento y borrado
Los siguientes métodos gestionan los datos dentro de los arreglos: BuscarDatos devuelve la posición de una patente, IngresarDatos guarda un nuevo registro, CargarDatos muestra la información en pantalla, BorrarDatos libera una posición y LimpiarDatos vacía los campos del formulario.
private int BuscarDatos(string patente)
{
int posicionEncontrada = -1;
for (int i = 0; i < 100; i++)
{
if (patente == vPatente[i])
{
posicionEncontrada = i;
break;
}
}
return posicionEncontrada;
}
private void IngresarDatos(int posicion)
{
vPatente[posicion] = txtPatente.Text;
vHoraEntrada[posicion] = int.Parse(txtHoraEntrada.Text);
}
private void CargarDatos(int posicion)
{
txtPatente.Text = vPatente[posicion];
txtHoraEntrada.Text = vHoraEntrada[posicion].ToString();
}
private void BorrarDatos(int posicion)
{
vPatente[posicion] = "";
vHoraEntrada[posicion] = 0;
}
private void LimpiarDatos()
{
txtPatente.Text = "";
txtHoraEntrada.Text = "";
txtHoraSalida.Text = "";
}
Evento Load del formulario
El evento frmEstacionamiento_Load se ejecuta al cargar el formulario y puede utilizarse para inicializar controles adicionales.
private void frmEstacionamiento_Load(object sender, EventArgs e)
{
}