Tutorial: Sistema de login y registro de usuarios (Parte 3 - Final)

En la Entrada anterior desarrollamos gran parte del sistema, pueden ver la entrada aquí:
Parte 2

En la parte 3 desarrollaremos lo restante del sistema. Recuerda que el código fuente descargable se encuentra al final del tutorial.

Capa de Interfaz de Usuario

Se debe realizar referencias de la capa Business e Info.

Crear 4 windows forms como en la imagen:

Winform estructura

FrmLogin.vb

Ventana de login para acceso al sistema. Crear el diseño como en la imagen o a su preferencia:

loginform design

Tenemos:
  • 2 SplitContainer, uno horizontal y otro vertical.
  • 1 PictureBox con una imagen cualquier.
  • 2 TextBox, uno para ingresar nombre de usuario y el otro para la contraseña.
  • 2 Labels.
  • 2 Buttons, Aceptar y Salir


Propiedades:

userBus as UsuarioBus: Al realizar una instancia de esta propiedad, sirve para acceder a los métodos en la clase UsuarioBus.

Constructor:

Se llama al método InitializeComponent y se instancia la propiedad userBus.

Eventos:


  • btnAceptar_Click: Invoca al método IsValidCredential proporcionandole los datos ingresados en los textboxes. Si las credenciales son válidas, se guarda el usuario logoneado en los parámetros del sistema (Business.SystemParameters.Instance.UserLogedIn). Finalmente se muestra un mensaje de bienvenida.
  • btnSalir_Click: Cierra la ventana con un DialogResult de No, (esto le servirá al MDI para saber cuando mostrarse).


Código de la clase FrmLogin.


Imports RestorantSystem.Seguridad.Business
Imports RestorantSystem.Seguridad.Info

Public Class FrmLogin
    Private userBus As UsuarioBus

    Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        userBus = New UsuarioBus()
    End Sub

    Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
        Dim isValidLogin As Boolean = userBus.IsValidCredential(txtUserName.Text, txtPassword.Text)
        If isValidLogin Then
            Me.DialogResult = Windows.Forms.DialogResult.Yes
            Business.SystemParameters.Instance.UserLogedIn = New UsuarioInfo() With {.UserName = txtUserName.Text}
            MessageBox.Show("Bienvenido al Sistema!", "Ingreso Correcto", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.Close()
        Else
            MessageBox.Show("Usuario o Contraseña incorrectos!, por favor verifique.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If

    End Sub

    Private Sub btnSalir_Click(sender As Object, e As EventArgs) Handles btnSalir.Click
        Me.DialogResult = Windows.Forms.DialogResult.No
        Me.Close()
    End Sub

    Protected Overrides Sub OnShown(e As EventArgs)
        MyBase.OnShown(e)
        txtUserName.Focus()
    End Sub
End Class



FrmCambiarPwd.vb

Ventana para cambiar o reestablecer la contraseña del usuario logoneado. Crear el diseño como en la imagen.

changePasswordForm design


Tenemos:
4 Labels.
3 TextBox: usuario(Enabled = False), contraseña, confirmar contraseña.
2 Buttons: Guardar y Salir.
1 PictureBox con una imagen cualquiera

Propiedades

usrBus As UsuarioBus: Sirve para acceder a los métodos de la capa business.
usrInf As UsuarioInfo: Sirve para manipular un objeto info.
message As String: Sirve para almacenar texto de mensajes importantes a mostrar.

Funciones

isValidInput: Función booleana para validar que todos los textboxes están llenos y que el texto en el campo "contraseña" sea igual al texto en el campo "confimar contraseña".

Eventos


  • btnGuardar_Click: Realiza 3 pasos; validar campos obligatorios, mapear textboxes a objeto info y guadar el registro en la base de datos.
  • FrmCambiarPwd_Load: Escribe por default el nombre de usuario actualmente logoneado en el textbox correspondiente, usando los parametros generales del sistema (txtUserName.Text = Business.SystemParameters.Instance.UserLogedIn.UserName).
  • btnSalir_Click: Cierra la ventana.

Código de la clase FrmCambiaPwd.


Imports RestorantSystem.Seguridad.Business
Imports RestorantSystem.Seguridad.Info

Public Class FrmCambiarPwd
    Private usrBus As UsuarioBus
    Private usrInf As UsuarioInfo
    Private message As String

    Private Function isValidInput()
        If txtUserName.Text.Equals(String.Empty) Then
            MessageBox.Show("Por favor ingrese nombre de usuario.", "Error",
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtUserName.Focus()
            Return False
        End If

        If txtPassword.Text.Equals(String.Empty) Then
            MessageBox.Show("Por favor ingrese la contraseña.", "Error",
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtPassword.Focus()
            Return False
        End If

        If txtPasswordConf.Text.Equals(String.Empty) Then
            MessageBox.Show("Por favor ingrese confirmación de la contraseña.", "Error",
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtPasswordConf.Focus()
            Return False
        End If

        If Not txtPasswordConf.Text.Equals(txtPassword.Text) Then
            MessageBox.Show("Contraseñas no coinciden.", "Error",
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtPasswordConf.Focus()
            Return False
        End If
        Return True
    End Function

    Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
        'validar campos obligatorios
        If Not isValidInput() Then Return

        'mapear textboxes a objeto info
        usrInf = New UsuarioInfo
        usrInf.UserName = txtUserName.Text
        usrInf.Contrasenia = txtPassword.Text

        'Guadar en la DB
        usrBus = New UsuarioBus
        usrBus.ChangePassword(usrInf)
        MessageBox.Show("Contraseña cambiada con éxito.", "Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub

    Private Sub FrmCambiarPwd_Load(sender As Object, e As EventArgs) Handles Me.Load
        txtUserName.Text = Business.SystemParameters.Instance.UserLogedIn.UserName
    End Sub

    Private Sub btnSalir_Click(sender As Object, e As EventArgs) Handles btnSalir.Click
        Me.Close()
    End Sub
End Class



FrmUsuarioMnt.vb

Ventana para creación de nuevos usuarios. Crear el diseño como en la imagen.

UsersForm design

Tenemos:
3 Labels.
2 TextBox: usuario, contraseña.
2 Buttons: Guardar y Salir.
1 PictureBox con una imagen cualquiera

Propiedades

usrBus As UsuarioBus: Sirve para acceder a los métodos de la capa business.
usrInf As UsuarioInfo: Sirve para manipular un objeto info.
message As String: Sirve para almacenar texto de mensajes importantes a mostrar.

Funciones

isValidInput: Función booleana para validar que todos los textboxes están llenos.

Eventos

  • btnGuardar_Click: Realiza 3 pasos; validar campos obligatorios, mapear textboxes a objeto info y guadar el registro en la base de datos.
  • btnSalir_Click: Cierra la ventana.

Código de la clase FrmUsuarioMnt.


Imports RestorantSystem.Seguridad.Business
Imports RestorantSystem.Seguridad.Info

Public Class FrmUsuarioMnt
    Private usrBus As UsuarioBus
    Private usrInf As UsuarioInfo
    Private message As String

    Private Sub btnSalir_Click(sender As Object, e As EventArgs) Handles btnSalir.Click
        Me.Close()
    End Sub

    Private Function isValidInput()
        If txtUserName.Text.Equals(String.Empty) Then
            MessageBox.Show("Por favor ingrese nombre de usuario.", "Error",
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtUserName.Focus()
            Return False
        End If

        If txtPassword.Text.Equals(String.Empty) Then
            MessageBox.Show("Por favor ingrese la contraseña.", "Error",
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtPassword.Focus()
            Return False
        End If

        Return True
    End Function

    Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
        'validar campos obligatorios
        If Not isValidInput() Then Return

        'mapear textboxes a objeto info
        usrInf = New UsuarioInfo
        usrInf.UserName = txtUserName.Text
        usrInf.Contrasenia = txtPassword.Text
        usrInf.Estado = "A"

        'Guadar en la DB
        usrBus = New UsuarioBus
        usrBus.Insert(usrInf, message)
        MessageBox.Show(message, "Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub
End Class


MDIRestorantSystem.vb

Formulario contenedor padre del sistema. Crear el diseño como en la imagen.
MDI form design

Tenemos:
1 StatusStrip: Con un Label dentro para indicar el nombre del usuario en sesión.
1 MenuStrip: Dockeado en sentido vertical a la izquierda, para el diseño seguir la siguiente imagen:

menustrip design

Dentro del Menú "Sistema", tenemos 3 submenues; Usuarios, Cambiar Contraseña y Salir, con imagenes.

PD: Cambiar el valor de la propiedad del formulado isMdiContainer en True.

Eventos

  • SalirToolStripMenuItem_Click: Cierra el formulario Mdi, y todos sus formularios hijos si los tuviere (es decir también cierra las otras ventanas si estuvieren abiertas).
  • CambiarContraseñaToolStripMenuItem_Click: Abre la ventana de cambiar contraseñas.
  • UsuariosToolStripMenuItem_Click: Abre la ventana de creación de cuentas de usuarios.
  • MDIRestorantSystem_Load: Abre la ventana de logoneo como una ventana de dialogo, si al cerrar esta ventana, el resultado del dialogo fue "Yes" entonces se escribe en el StatusStrip el nombre del usuario logoneado. Si el resultado del dialogo fue diferente de "Yes", se cierra el sistema.

Código de la clase MDIRestorantSystem.


Public Class MDIRestorantSystem

    Private Sub SalirToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SalirToolStripMenuItem.Click
        Me.Close()
    End Sub

    Private Sub CambiarContraseñaToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CambiarContraseñaToolStripMenuItem.Click
        Dim frm As New FrmCambiarPwd
        frm.MdiParent = Me
        frm.Show()
    End Sub
    Private Sub UsuariosToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UsuariosToolStripMenuItem.Click
        Dim frm As New FrmUsuarioMnt
        frm.MdiParent = Me
        frm.Show()
    End Sub

    Private Sub MDIRestorantSystem_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim frmLog As New FrmLogin
        If frmLog.ShowDialog() <> Windows.Forms.DialogResult.Yes Then
            Me.Close()
        Else
            Me.tsslUserLogedIn.Text = "User: " + Business.SystemParameters.Instance.UserLogedIn.UserName
        End If
    End Sub
End Class

Configuración del proyecto WinformUI

Se debe configurar las propiedades del proyecto para que el formulario de inicio sea "MDIRestorantSystem". En esta sección también se puede configurar un ícono. Ver la siguiente imagen:

project config

Compilar toda la solución y ejecutar.

Pruebas

Caso credenciales incorrectas:

test login wrong


Caso credenciales correctas


test login ok


Caso creación de usuario, "Usuario ya existe en la base de datos".

test user wrong


 Caso creación de usuario, "Guardado con éxito".

test user recorded


Caso cambio de contraseña, "Contraseñas no coinciden".

test password missmatch


 Caso cambio de contraseña, "Cambiada con éxito".

test password changed 

Descargar código fuente

Front-End: Download

Back-End: Download

Comentarios