Thursday, October 25, 2018

Diario de Aprendizaje #11

Proyecto Ejemplo Parte 2
Diario de Aprendizaje #11 – Semana del 22 de Octubre 2018

En esta semana dimos continuación a lo que es nuestro Proyecto Ejemplo de uso y manejo de archivos de texto.

A lo largo de su creación, el programa ha aumentado un número considerable de líneas de código. Esto implica que un ingeniero de software o programador debe de tener mucho orden y claridad al plasmar sus ideas y codificarlas, de otra forma sería muy complicado entender qué está sucediendo o poder encontrar un error si este fuera el caso.

Hasta ahorita se llevan aproximadamente unas 400 líneas, pero en un proyecto de software ya laboral se pueden llegar a codificar miles de líneas de código.


En esta semana logramos implementar un sistema para dar de altas y bajas a un usuario.
Un alta consistía en poder agregar un nuevo usuario a un archivo de texto y una baja consistía en poder eliminar datos o usuarios de un archivo de texto.

Nuevamente concluyo que me gusta mucho como estamos desarrollando y progresando este proyecto, así como los conocimientos, aprendizajes y experiencias que adquirimos a lo largo de este.  

Aquí se presenta el avance del código del proyecto hasta esta semana:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Proyecto_Usuarios
{
    class Program
    {
        static void Main(string[] args)
        {
            // Ejemplo de proyecto
            int opcion = 0;
            do
            {
                // Inicio de menú
                Console.WriteLine("Ingresa la opción que deseas realizar");
                Console.WriteLine("Opción 1: Inicio de Sesión");
                Console.WriteLine("Opción 2: Registro");
                opcion = int.Parse(Console.ReadLine());
                // Fin de menú
                switch (opcion)
                {
                    case 1: // Opción de inicio de sesión
                        {
                            // Llevar archivo a RAM
                            StreamReader lectura = File.OpenText(@"usuarios.txt");
                            string contenido = lectura.ReadToEnd();
                            lectura.Close();
                            string[] elementos = contenido.Split('\n');
                            // Fin de creación de copia de archivo

                            Console.WriteLine("Bienvenido al inicio de sesión");
                            Console.WriteLine("Ingresa tu nombre de usuario");
                            string temporal = Console.ReadLine();
                            bool validacion = false;
                            for(int x=0; x<elementos.Length; x=x+2)
                            {
                                if(elementos[x].Trim().Equals(temporal))
                                {
                                    Console.WriteLine("Ingresa tu contraseña");
                                    temporal = Console.ReadLine();
                                    if(elementos[x+1].Trim().Equals(temporal))
                                    {
                                        validacion = true;
                                        break;
                                    } else
                                    {
                                        validacion = false;
                                        break;
                                    }
                                } else
                                {
                                    validacion = false;
                                }
                            }
                           
                            if(validacion == true) // if(validacion)
                            {
                                Console.Clear();
                                Console.WriteLine("Bienvenido");
                                // Inicio del menú de la aplicación
                                int opcionMenu = 0;
                                Console.WriteLine("Ingresa la opción que deseas realizar");
                                Console.WriteLine("Opción 1: Menú usuarios");
                                Console.WriteLine("Opción 2: Menú productos");
                                Console.WriteLine("Opción 3: Reportes");
                                opcionMenu = int.Parse(Console.ReadLine());
                                // Fin del menú
                                switch(opcionMenu)
                                {
                                    case 1: // Menú usuarios
                                        {
                                            byte opcionUsuarios = 0;
                                            Console.WriteLine("Bienvenido a opciones de usuario");
                                            Console.WriteLine("Para dar de alta un usuario presione 1");
                                            Console.WriteLine("Para dar de baja un usuario presione 2");
                                            Console.WriteLine("Para realizar cambios en la información de un usuario presione 3");
                                            opcionUsuarios = byte.Parse(Console.ReadLine());

                                            switch(opcionUsuarios)
                                            {
                                                case 1: // Altas
                                                    {
                                                        Console.WriteLine("Bienvenido a altas");

                                                        StreamReader lecture = File.OpenText(@"usuarios.txt");
                                                        string content = lectura.ReadToEnd();
                                                        lectura.Close();
                                                        string[] datos = contenido.Split('\n');
                                                        bool validation = true;
                                                        do
                                                        {
                                                            Console.WriteLine("Ingresa el nombre de usuario a dar de alta");
                                                            temporal = Console.ReadLine();
                                                            // Inicio de validación de usuario único
                                                            for (int x = 0; x < datos.Length; x = x + 2)
                                                            {
                                                                if (datos[x].Trim().Equals(temporal)) // Trim: borrar el formato a una cadena de texto.
                                                                {
                                                                    Console.WriteLine("El usuario ya existe...");
                                                                    validation = false;
                                                                }
                                                                else
                                                                {
                                                                    StreamWriter creacion = File.AppendText(@"");
                                                                    creacion.WriteLine(temporal);
                                                                    Console.WriteLine("Ingresa la contraseña");
                                                                    temporal = Console.ReadLine();
                                                                    creacion.WriteLine(temporal);
                                                                    creacion.Close();
                                                                    validation = true;
                                                                }
                                                            }
                                                            // Fin de validación de usuario único
                                                        }
                                                        while (validation != true);

                                                        Console.Clear();
                                                        Console.WriteLine("Usuario y Contraseña dados de alta correctamente");

                                                        break;
                                                    }
                                                case 2: // Bajas
                                                    {
                                                        Console.WriteLine("Bienvenido a bajas");
                                                        Console.WriteLine("Ingresa el nombre de usuario a dar de baja");
                                                        string usuario = Console.ReadLine();
                                                        //------------ Lectura del archivo ----------------------------
                                                        StreamReader lecturaBajas = File.OpenText(@"usuarios.txt");
                                                        string contenidosUsuarios = lecturaBajas.ReadToEnd();
                                                        lecturaBajas.Close();
                                                        string[] elementosUsuarios = contenidosUsuarios.Split('\n');

                                                        //------------ Fin lectura archivo ----------------------------

                                                        //------------ Lectura archivo DETALLE ------------------------

                                                        StreamReader detalleUsuarios = File.OpenText(@"u_detalle.txt");
                                                        string contenidoDetalleUsuarios = detalleUsuarios.ReadToEnd();
                                                        detalleUsuarios.Close();
                                                        string[] elementosDetalleUsuarios = contenidoDetalleUsuarios.Split('\n');

                                                        //------------ Fin lectura archivo DETALLE --------------------
                                                       
                                                        for (int x=0; x<elementosUsuarios.Length; x=x+2)
                                                        {
                                                            if(elementosUsuarios[x].Trim().Equals(usuario))
                                                            {
                                                                Console.WriteLine("Ingresa la contraseña");
                                                                string contraseña = Console.ReadLine();
                                                                if(elementosUsuarios[x+1].Trim().Equals(contraseña))
                                                                {
                                                                    // Procedemos a la baja del usuario
                                                                    elementosUsuarios[x] = "";
                                                                    elementosUsuarios[x + 1] = "";
                                                                    Console.WriteLine("Se eliminó correctamente...");

                                                                    //-----------------Eliminación en archivo detalle usuario-------------

                                                                    for(int y=0; y<elementosDetalleUsuarios.Length; y=y+8)
                                                                    {
                                                                        if(elementosDetalleUsuarios[y+1].Trim().Equals(usuario))
                                                                        {
                                                                            elementosDetalleUsuarios[y] = "";
                                                                            elementosDetalleUsuarios[y + 1] = "";
                                                                            elementosDetalleUsuarios[y + 2] = "";
                                                                            elementosDetalleUsuarios[y + 3] = "";
                                                                            elementosDetalleUsuarios[y + 4] = "";
                                                                            elementosDetalleUsuarios[y + 5] = "";
                                                                            elementosDetalleUsuarios[y + 6] = "";
                                                                            elementosDetalleUsuarios[y + 7] = "";
                                                                            elementosDetalleUsuarios[y + 8] = "";

                                                                            Console.WriteLine("Se eliminó correctamente...");
                                                                        }
                                                                    }
                                                                   
                                                                    //-----------------Fin de eliminación detalle usuario-------------

                                                                }
                                                                else
                                                                {
                                                                    Console.WriteLine("Contraseña incorrecta");
                                                                }
                                                            }
                                                        }

                                                        //-----------------Guardado de cambios USUARIOS -------------------------

                                                        StreamWriter escrituraUsuarios = File.CreateText(@"usuarios.txt");
                                                        for(int x=0; x<elementosUsuarios.Length; x++)
                                                        {
                                                            if(elementosUsuarios[x]!="")
                                                            {
                                                                escrituraUsuarios.WriteLine();
                                                            }
                                                        }
                                                        escrituraUsuarios.Close();

                                                        //-----------------Fin de guardado de cambios---------------------------

                                                        //-----------------Guardado de cambios DETALLE USUARIOS-----------------

                                                        StreamWriter escrituraDetalle = File.CreateText(@"u_detalle.txt");
                                                        for (int x = 0; x < elementosDetalleUsuarios.Length; x++)
                                                        {
                                                            if (elementosDetalleUsuarios[x] != "")
                                                            {
                                                                escrituraDetalle.WriteLine();
                                                            }
                                                        }
                                                        escrituraDetalle.Close();

                                                        //-----------------Fin de guardado de cambios---------------------------

                                                        break;
                                                    }
                                                case 3: // Cambios
                                                    {
                                                        break;
                                                    }
                                                default:
                                                    {
                                                        Console.WriteLine("La opción no es válida...");
                                                        break;
                                                    }
                                            }
                                                                                       
                                            break;
                                        }

                                    case 2: // Menú productos
                                        {
                                            byte opcionProductos = 0;
                                            Console.WriteLine("Bienvenido a opciones de productos");
                                            Console.WriteLine("Para dar de alta un producto presione 1");
                                            Console.WriteLine("Para dar de baja un producto presione 2");
                                            Console.WriteLine("Para realizar cambios en la información de un producto presione 3");

                                            opcionProductos = byte.Parse(Console.ReadLine());

                                            switch (opcionProductos)
                                            {
                                                case 1: // Altas
                                                    {
                                                        break;
                                                    }
                                                case 2: // Bajas
                                                    {
                                                        break;
                                                    }
                                                case 3: // Cambios
                                                    {
                                                        break;
                                                    }
                                                default:
                                                    {
                                                        Console.WriteLine("La opción no es válida...");
                                                        break;
                                                    }
                                            }
                                            break;
                                        }
                                    case 3: // Reportes
                                        {
                                            break;
                                        }
                                    default:
                                        {
                                            Console.WriteLine("Opción no válida");
                                            break;
                                        }
                                }
                            } else
                            {
                                Console.WriteLine("El usuario o contraseña no son correctos");
                            }

                            break;
                        }
                    case 2: // Registro
                        {
                            // Creación de archivo de texto
                            StreamWriter escritura = File.AppendText(@"u_detalle.txt");
                            string temporal = null;
                            Console.WriteLine("Registro de usuarios");

                            Console.WriteLine("Ingresa el nombre de usuario");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            Console.WriteLine("Ingresa el nombre/nombres");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            Console.WriteLine("Ingresa el apellido paterno");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            Console.WriteLine("Ingresa el apellido materno");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            Console.WriteLine("Fecha de Nacimiento: DD/MM/AAAA");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            Console.WriteLine("Dirección");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            Console.WriteLine("Teléfono");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            Console.WriteLine("Sexo: H/M");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            Console.WriteLine("Entidad de Nacimiento");
                            temporal = Console.ReadLine();
                            escritura.WriteLine(temporal);

                            escritura.Close();
                            Console.Clear();
                            Console.WriteLine("Los datos se almacenaron");
                            // Creación de usuario y contraseña en txt
                            Console.WriteLine("Elige un nombre de usuario");
                            temporal = Console.ReadLine();
                            if (File.Exists(@"usuarios.txt")) // Validación si el archivo existe
                            {
                                // Cuando el archivo sí existe
                                StreamReader lectura = File.OpenText(@"");
                                string contenido = lectura.ReadToEnd();
                                lectura.Close();
                                string[] datos = contenido.Split('\n');
                                bool validacion = true;
                                do
                                {
                                    Console.WriteLine("Ingresa el nombre de usuario");
                                    temporal = Console.ReadLine();
                                    // Inicio de validación de usuario único
                                    for(int x=0; x < datos.Length; x=x+2)
                                    {
                                        if(datos[x].Trim().Equals(temporal)) // Trim: borrar el formato a una cadena de texto.
                                        {
                                            Console.WriteLine("El usuario ya existe...");
                                            validacion = false;
                                        } else
                                        {
                                            StreamWriter creacion = File.AppendText(@"");
                                            creacion.WriteLine(temporal);
                                            Console.WriteLine("Ingresa la contraseña");
                                            temporal = Console.ReadLine();
                                            creacion.WriteLine(temporal);
                                            creacion.Close();
                                            validacion = true;
                                        }
                                    }
                                    // Fin de validación de usuario único
                                }
                                while (validacion != true);
                            } else
                            {
                                // Cuando el archivo no existe
                                StreamWriter creacion = File.CreateText(@"");
                                Console.WriteLine("Ingresa tu nombre de usuario");
                                temporal = Console.ReadLine();
                                creacion.WriteLine(temporal);

                                Console.WriteLine("Ingresa tu contraseña");
                                temporal = Console.ReadLine();
                                creacion.WriteLine(temporal);
                                                              
                                creacion.Close();
                                Console.WriteLine("Usuario y Contraseña creados correctamente");
                            }
                            // Fin de creación de usuario y contraseña
                            break;
                        } // Fin de registro
                    default: // Cualquier otra opción
                        {
                            Console.WriteLine("La opción que elegiste no es válida");
                            break;
                        }
                }
                Console.WriteLine("¿Deseas continuar en el programa? Ingresa 1 para SI, cualquier otro número para NO");
                opcion = int.Parse(Console.ReadLine());
            }
            while (opcion == 1);
        }
    }
}

Te invito a probarlo en un editor de textos y compilarlo. Cualquier duda u opinión, no dudes en escribirme en los comentarios.
¡Hasta la próxima!

Referencias:

  • Ejercicios y teoría vista en las clases de “Introducción a la Programación” impartidas por el M.S.I. José Alejandro Vargas Díaz en la Facultad de Informática de la Universidad Autónoma de Querétaro.