Programando en C Sharp – VI

Para concluir con el bloque de programación básica en C#, les he compartido un “mini proyecto” hecho en Visual Studio 2010; se emplea un objeto Persona con 3 atributos: dni, nombre y edad, los cuales están validados respectivamente, se emplea una lista “List personas = new List ();” para almacenar los datos, se cuenta con un menú de presentación de opciones para que el usuario seleccione, métodos Set y Get, y los métodos de agregar, modificar, buscar, eliminar, reportar [los clásicos de toda la vida]; traté en lo posible comentar el código, espero puedan entenderlo, y sin más rodeos, veamos el código:

using System;
using System.Collections.Generic;

namespace Listas
{
 public class Persona
 {
 //Atributos privados de la clase
 //Nótese como están escritos [minúsculas]
 private int dni;
 private string nombre;
 private int edad;

 //Lista donde se almacenarán los datos
 public static List<Persona> personas = new List<Persona>();

 /* Emplearemos el uso de #region
 * para tener un poco más de orden
 * en nuestro entorno de programación
 */
 #region Metodos Get y Set

 //get: Obtenemos el valor del atributo
 //set: Establecemos el valor del atributo

 public int Dni
 {
 get { return dni; }
 set { dni = value; }
 }

 public string Nombre
 {
 get { return nombre; }
 set { nombre = value; }
 }

 public int Edad
 {
 get { return edad; }
 set { edad = value; }
 }

 #endregion

 #region Constructores

 //Constructor sin parámetros [por default]
 public Persona()
 {
 }

 //Constructor con parámetros
 public Persona(int d, string n, int e)
 {
 // this.dni refierido a:
 // la variable privada declarada al inicio
 this.dni = d;
 this.nombre = n;
 this.edad = e;
 }

 #endregion

 #region Validaciones de numeros y letras

 //validaciones
 public static int ValidarNumeros(string tipoNumero)
 {
 int valor = -1;
 string texto;
 bool validar = true;
 do
 {
 //try catch: Manejo de excepciones
 try
 {
 //En este bloque se coloca
 //lo que podría darnos error
 texto = Console.ReadLine();
 if (texto.Equals(""))
 {
 //Salimos del bucle
 //motivo: ingreso de un vacio
 break;
 }
 //Parseamos a un Integer32 el texto ingresado
 valor = Int32.Parse(texto);
 validar = false;
 }
 catch (Exception ex)
 {
 Console.Write("Ingrese " + tipoNumero + ": ");
 }
 } while (validar || valor < 0);
 /* Para entender este do while, recordemos
 * tablas de verdad [clases de lógica]
 * A V B  | Resulta | Comentario
 * 0   0  |  0      | Necesitamos que esto suceda.
 * 0   1  |  1      |
 * 1   0  |  1      |
 * 1   1  |  1      |
 */

 return valor;
 }

 public static string ValidarLetras(string tipoLetra)
 {
 //Valida solamente que no se ingresen valores vacios
 string texto = null;
 do
 {
 if (texto != null)
 {
 Console.Write("Ingrese " + tipoLetra + ":");
 }
 texto = Console.ReadLine();
 } while (texto.Equals(""));
 return texto;
 }

 #endregion

 #region Metodos de la clase Persona

 /* El BuscarV2:
 * Recorre la lista hasta que encuentre
 * el elemento buscado; donde obtiene toda
 * la cantidad de elementos mediante la propiedad
 * Count", compara con el código ingresado
 * Devuelve la posición del elemento encontrado.
 */
 public static int BuscarV2(int dniAux)
 {
 int pos = -1;
 for (int i = 0; i < personas.Count; i++)
 {
 if (personas[i].Dni.Equals(dniAux) == true)
 {
 pos = i;
 break;
 }
 }
 return pos;
 }

 public static void RegistrarPersona()
 {
 //Instanciamos la variable para hacer
 //uso de los métodos definidos en ella.
 Persona p = new Persona();
 Console.WriteLine("\nNuevo Registro");
 Console.WriteLine("--------------");
 //Asignamos los datos
 do{
 Console.Write("\nDni: ");
 p.Dni = ValidarNumeros("Dni");
 Console.Write("Nombre: ");
 p.Nombre = ValidarLetras("Nombre");
 Console.Write("Edad: ");
 p.Edad = ValidarNumeros("Edad");
 if (p.Dni == -1 || p.Edad == -1)
 {
 Console.WriteLine("Corregir valores vacios");
 }
 }while(p.Dni== -1 || p.Edad== -1);

 //Ahora procedemos a registrar
 personas.Add(p);
 Console.WriteLine("\nElemento agregado!");
 }

 public static void ModificarPersona()
 {
 Console.WriteLine("\nModificando registros");
 Console.WriteLine("----------------------");
 int dniaux;
 int mod;
 Console.Write("Dni: ");
 dniaux = ValidarNumeros("Dni");
 mod = BuscarV2(dniaux);
 if (mod != -1)
 {
 Console.Write("Nombre: ");
 personas[mod].Nombre = ValidarLetras("Nombre");
 Console.Write("Edad: ");
 personas[mod].Edad = ValidarNumeros("Edad");
 Console.WriteLine("\nElemento modificado!");
 }
 else
 {
 Console.WriteLine("\nNo se encontró Dni solicitado");
 }
 }

 public static void EliminarPersona()
 {
 int dniaux;
 int mod;
 Console.Write("Dni: ");
 dniaux = ValidarNumeros("Dni");
 mod = BuscarV2(dniaux);
 if (mod != -1)
 {
 personas.RemoveAt(mod);
 Console.WriteLine("\nElemento deleteado!");
 }
 else
 {
 Console.WriteLine("\nNo se encontró Dni solicitado");
 }
 }

 public static void ReportarPersona()
 {
 Console.WriteLine("\n");
 Console.WriteLine("\nReportando datos ingresados");
 Console.WriteLine("---------------------------");
 Console.WriteLine("Edad\tNombres\tDni");
 for (int i = 0; i < personas.Count; i++)
 {
 Console.WriteLine(personas[i].Edad + "\t" + personas[i].Nombre + "\t" + personas[i].Dni);
 }
 Console.WriteLine("\n");
 }

 #endregion

 //Finalmente implementamos el MAIN:
 static void Main(string[] args)
 {
 Console.WriteLine(Console.WindowHeight.ToString());
 Console.Title = "Powered by IFXPERU - IFX Informatrix";
 int opcion = new int();
 do
 {
 Console.WriteLine("\nTrabajando con List<Persona>");
 Console.WriteLine("--------------------------");
 Console.WriteLine("");
 Console.WriteLine("1.-Registrar");
 Console.WriteLine("2.-Modificar");
 Console.WriteLine("3.-Eliminar");
 Console.WriteLine("4.-Listar");
 Console.WriteLine("0.-Salir");
 Console.Write("\nIngrese opción: ");
 opcion = ValidarNumeros("opción");
 switch (opcion)
 {
 case 1:
 RegistrarPersona();
 break;
 case 2:
 ModificarPersona();
 break;
 case 3:
 EliminarPersona();
 break;
 case 4:
 ReportarPersona();
 break;
 }
 } while (opcion!=0);
 Console.WriteLine("\nDesconectando...");
 Console.Write("Ahora puede apagar del sistema");
 Console.ReadLine();
 }
 }
}