Sie sind auf Seite 1von 8

Base para un sistema C# - (Parte 1)

a mayora de los sistemas tienen la siguiente lgica: 1. 2. 3. Inicio de Sesin Pantalla Principal Men/Opcin 1 Men/Opcin 2 Men/Opcin 3 Salir y/o Cerrar sesin

Cada una de las opciones que ofrecen la mayora de los sistemas est (o deber estar) habilitada siempre y cuando el usuario que inicia sesin tenga el permiso correspondiente. Para este ejemplo, vamos a suponer que nuestro sistema tendr las siguientes opciones disponibles:

Ventas. Permiso para registrar ventas Almacn. Permiso para registrar movimientos en el almacn

Catlogos. Permiso para hacer movimientos en los catlogos, p.e. cambiar precios de ventas, agregar unidades de medidas, etc. Reportes. Consultar los reportes disponibles. Administrar. Realizar tareas administrativas, p.e. administracin de los usuarios del sistema, hacer respaldos de la base de datos, cancelar movimientos, etc. Diseo De acuerdo a lo anterior, podemos ver la necesidad de crear un motor de seguridad que nos permita validar las credenciales del usuario que ingrese a nuestro sistema. Lo primero que haremos ser crear los archivos necesarios en nuestro proyecto de Visual Studio, para este caso, he agregado dos formularios y una clase. Un formulario ser para la pantalla "login" y el otro lo usaremos como "pantalla principal", la clase la utilizar para controlar el flujo del programa. A continuacin una imagen:

Luego, le dar un poco de diseo a mi pantalla principal:

Tambin un poco de creatividad a la pantalla de login:

Respecto de la apariencia, ha sido todo, ahora ser necesario crear una base de datos en Microsoft Access 2007-2010 llamada "BaseSistema" a la cual se agregaremos una tabla llamada "usuarios", a continuacin una imagen de muestra:

Ser necesario agregar algunos usuarios a la tabla, procuremos que tengan diferentes permisos para que cuando hagamos las pruebas podamos ver el comportamiento de nuestro programa.

Programacin Es el momento de escribir lneas de cdigo, para este ejemplo utilizaremos algunos conceptos de programacin orientada a objetos (POO). Bsicamente lo que vamos a hacer es definir las caractersticas que tiene nuestro usuario, los comportamientos y luego los pasaremos a cdigo C#. Esto con la finalidad de aprender como poner en prctica los conceptos tericos aprendidos en la escuela. Clase "clsUsuarios" Esta clase contiene la definicin bsica del usuario. Contendr principalmente las siguientes propiedades:

Como podemos ver, tiene las mismas propiedades que la tabla "usuarios" adems que tiene un mtodo llamado "IniciarSesin" el cual nos servir al momento de validar la autenticidad del usuario. Este es el cdigo de la clase:

using using using using using using

System; System.Data; System.Data.OleDb; System.Collections.Generic; System.Linq; System.Text;

namespace BaseSistemaCS.Clases { public class clsUsuario { string user_login = ""; public string USER_LOGIN { get { return user_login; } set { user_login = value; } } string user_password = ""; public string USER_PASSWORD { get { return user_password; } set { user_password = value; } }

DateTime fecha_registro = DateTime.Now; public DateTime FECHA_REGISTRO { get { return fecha_registro; } set { fecha_registro = value; } } string nombre = ""; public string NOMBRE { get { return nombre; } set { nombre = value; } } string apellidos = ""; public string APELLIDOS { get { return apellidos; } set { apellidos = value; } } public string NOMBRE_USUARIO { get { return (String.Format("{0} {1}", nombre.Trim(), apellidos.Trim())); } } bool activo = false; public bool ACTIVO { get { return activo; } set { activo = value; } } bool venta = false; public bool VENTA { get { return venta; } set { venta = value; } } bool almacen = false; public bool ALMACEN { get { return almacen; } set { almacen = value; } } bool catalogos = false; public bool CATALOGOS { get { return catalogos; } set { catalogos = value; } } bool reportes = false; public bool REPORTES { get { return reportes; } set { reportes = value; } } bool administrar = false; public bool ADMINISTRAR { get { return administrar; } set { administrar = value; } } bool success = false; public bool SUCCESS { get { return success; } } public void IniciarSesion(string userLogin, string userPassword) { success = false; OleDbConnection cnnLogin = new OleDbConnection(""); try { cnnLogin.Open(); OleDbCommand cmdLogin = new OleDbCommand(); cmdLogin.Connection = cnnLogin; cmdLogin.CommandText = "select * from usuarios " + " where user_login = @user_login " + " and user_password = @user_password " +

" and activo = True"; //PARAMS cmdLogin.Parameters.Add("@user_login", OleDbType.VarChar,50).Value = userLogin; cmdLogin.Parameters.Add("@user_password", OleDbType.VarChar, 250).Value = userPassword; OleDbDataReader drLogin = cmdLogin.ExecuteReader(); if (drLogin.Read()) { user_login = drLogin["user_login"].ToString(); user_password = userPassword; fecha_registro = Convert.ToDateTime(drLogin["fecha_registro"]); nombre = drLogin["nombre"].ToString(); apellidos = drLogin["apellidos"].ToString(); activo = Convert.ToBoolean(drLogin["activo"]); venta = Convert.ToBoolean(drLogin["ventas"]); almacen = Convert.ToBoolean(drLogin["almacen"]); catalogos = Convert.ToBoolean(drLogin["catalogos"]); reportes = Convert.ToBoolean(drLogin["reportes"]); administrar = Convert.ToBoolean(drLogin["administrar"]); } else { throw (new Exception ( "Usuario o contrasea incorrectos") ); } drLogin.Close(); success = true; } catch (Exception ex) { throw (ex); } finally { cnnLogin.Close(); } } } }

Base para un sistema C# - (Parte 2)


En el ejercicio anterior nos quedamos en el diseo de la clase "clsUsuario" y escribimos el cdigo correspondiente. Ahora, lo que haremos ser modificar la clase "clsPrincipal", le agregaremos las siguientes lneas:

public static string CnnStr { get { string fileName = String.Format("{0}\\BaseSistema.accdb", Application.StartupPath); if (File.Exists(fileName)) {

return (String.Format("Provider=Microsoft.ACE.OLEDB.12.0; " + " Data Source={0}; Jet OLEDB:Database Password=;" + " Persist Security Info=False;", fileName)); } else { throw (new Exception(String.Format("No se encontr\n{0}", fileName))); } } } static bool exit = false; public static Boolean Exit { get { return exit; } set { exit = value; } }

Con stas lneas, lo que vamos a lograr es, primero, que nuestro sistema sea capaz de ubicar la base de datos en el mismo directorio en el que se encuentra el ejecutable, segundo, le daremos la posibilidad de conocer si es el momento de salir o no. Una vez hecho esto, procedemos a escribir el cdigo de nuestro formulario de login, agregamos las siguientes lneas:
int Intentos = 0; public static Clases.clsUsuario usuario = new Clases.clsUsuario();

Luego, ponemos el cdigo del botn "Aceptar":

try { if (Intentos >= 3) { MessageBox.Show("Limite de intentos excedidos", "Informacin del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close(); } else { Intentos += 1; usuario.IniciarSesion (txtUserLogin.Text, txtUserPassword.Text); if (usuario.SUCCESS) { this.Close(); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Informacin del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error); }

Este sera el cdigo del "Form_Load":


Clases.clsPrincipal.Exit = true;

Y ste el cdigo del botn "Cancelar":


Clases.clsPrincipal.Exit = true; this.Close();

Luego de haber hecho esto, solo debemos modificar la clase "clsPrincipal", para que controle el flujo del programa, agregamos el siguiente cdigo:

[STAThread] static void Main() { while (!exit) { //Remover cuando el sistema est pagado Application.EnableVisualStyles(); Formularios.frmLogin loginForm = new Formularios.frmLogin(); loginForm.StartPosition = FormStartPosition.CenterScreen; Application.Run(loginForm); if (Formularios.frmLogin.usuario.SUCCESS == true) { Formularios.frmPrincipal mainForm = new Formularios.frmPrincipal(); Application.Run(mainForm); } else { Application.Exit(); } } }

Ahora, debemos poner mucha atencin de modicar la clase "clsUsuario", para especificar la cadena de conexin, ubiquemos el mtodo "Iniciar Sesin", la siguiente lnea:
OleDbConnection cnnLogin = new OleDbConnection("");

Deber quedar as:


OleDbConnection cnnLogin = new OleDbConnection(Clases.clsPrincipal.CnnStr);

Copiar ahora la base de datos al directorio del ejecutable.

Si hicimos todo bien, el sistema debera funcionar bien al ejecutarlo, solo nos faltara agregar las siguientes lneas al "Form_Load" del formulario "frmPrincipal":

//Ventas btnVentas.Visible = frmLogin.usuario.VENTA; //Almacn separadorAlmacen.Visible = frmLogin.usuario.ALMACEN; btnEntradas.Visible = frmLogin.usuario.ALMACEN; btnSalidas.Visible = frmLogin.usuario.ALMACEN; //Reportes mnuReportes.Visible = frmLogin.usuario.REPORTES; //Catalogos mnuCatalogos.Visible = frmLogin.usuario.CATALOGOS; //Administrar

mnuAdministrar.Visible = frmLogin.usuario.ADMINISTRAR;

Listo, hemos terminado. Ejemplo de ejecucin:

Das könnte Ihnen auch gefallen