Sistema de Estacionamiento en C# con Windows Forms: Código Completo Explicado

Informática5,56 KB

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)
{

}

Descargar

PDF Word HTML