예제 #1
0
        /// <summary>
        /// Función para grabar los valores de configuración en un archivo BINARIO Codificación UTF-8!!!
        /// <paramref name="ruta">La ruta del archivo donde vamos a guardar los datos</paramref>
        /// <paramref name="pass">La constraseña de acceso al archivo y modulo de configuracion</paramref>
        /// <paramref name="horasbase">Las horas consideradas salario normal. El resto sería horas extra</paramref>
        /// <paramref name="maxeurxhora">El máximo que euros por hora que se puede ganar</paramref>
        /// <paramref name="maxhoras">El máximo de horas que puede tener la nómina. Horas mensuales...</paramref>
        /// <paramref name="preciojornada">El precio al que se cobra la hora de jornada</paramref>
        /// <paramref name="incrementoextra">El incremento que llevan las horas extra</paramref>
        /// <paramref name="impuestos">El porcentaje de impuestos a aplicar</paramref>
        /// </summary>
        public static bool grabarValoresBinary(string ruta, string pass, int maxhoras, int horasbase, float maxeurxhora, float preciojornada, float incrementoextra, float impuestos)
        {
            bool grabado = false;

            try
            {
                FileStream   fs;
                BinaryWriter bw;

                fs = File.Open(ruta, FileMode.OpenOrCreate, FileAccess.Write);
                bw = new BinaryWriter(fs);

                bw.Write(pass.PadRight(30)); // ESCRIBIMOS UN STRING > LEER STRING:ReadString
                bw.Write(maxhoras);          // ESCRIBIMOS UN ENTERO > LEER ENTERO:ReadInt32
                bw.Write(horasbase);         // ESCRIBIMOS UN ENTERO > LEER ENTERO:ReadInt32
                bw.Write(maxeurxhora);       // ESCBIRIMOS UN ENTERO > LEER ENTERO:ReadInt32
                bw.Write(preciojornada);     // ESCBIRIMOS UN ENTERO > LEER ENTERO:ReadInt32
                bw.Write(incrementoextra);   // ESCRIBIMOS UN FLOAT > LEER UN FLOAT:ReadSingle
                bw.Write(impuestos);         // ESCRIBIMOS UN FLOAT > LEER UN FLOAT:ReadSingle

                bw.Flush();                  // TIRAMOS DE LA CADENA
                //bw.Close();
                bw.Dispose();                // CERRAMOS LA TAPA DEL W.C.
                grabado = true;

                CH.lcdColor("\ni> LOS VALORES BINARIOS HAN SIDO GRABADOS EN EL FICHERO DE CONFIGURACIÓN 'config.data'", ConsoleColor.Green);
                CH.pausa();
            }
            catch (IOException ex)
            {
                CH.lcdColor("!> ERR: " + ex.Message + ". -> Contacte con el Administrador", ConsoleColor.Red);
                CH.pausa();
            }
            return(grabado);
        }
예제 #2
0
        /// <summary>
        /// Función para leer el nombre de una empresa. Comprueva que no sea vacío si sólo números.
        /// </summary>
        public static string leerEmpresa()
        {
            string salida;
            string aux;
            int    numero;
            bool   salir;

            salir  = false;
            numero = 0;
            aux    = "";
            salida = "";
            do
            {
                Console.Write("?> NOMBRE DE LA EMPRESA: ");
                aux = Console.ReadLine();
                if ((String.IsNullOrEmpty(aux)) || (Int32.TryParse(aux, out numero)))
                {
                    CH.lcdColor("!> INTRODUCE UN NOMBRE COMPUESTO POR LETRAS!!", ConsoleColor.Red);
                }
                else
                {
                    salida = aux;
                    salir  = true;
                }
            } while (!salir);

            return(salida);
        }   // END LEER EMPRESA
예제 #3
0
        /// <summary>
        /// Función para grabar los valores de configuración en un archivo de TEXTO
        /// <paramref name="ruta">La ruta del archivo donde vamos a guardar los datos</paramref>
        /// <paramref name="pass">La constraseña de acceso al archivo y modulo de configuracion</paramref>
        /// <paramref name="horasbase">Las horas consideradas salario normal. El resto sería horas extra</paramref>
        /// <paramref name="maxeurxhora">El máximo que euros por hora que se puede ganar</paramref>
        /// <paramref name="maxhoras">El máximo de horas que puede tener la nómina. Horas mensuales...</paramref>
        /// <paramref name="preciojornada">El precio al que se cobra la hora de jornada</paramref>
        /// <paramref name="incrementoextra">El incremento que llevan las horas extra</paramref>
        /// <paramref name="impuestos">El porcentaje de impuestos a aplicar</paramref>
        /// <return>True or False</return>
        /// </summary>
        public static bool grabarValores(string ruta, string pass, int maxhoras, int horasbase, float maxeurxhora, float preciojornada, float incrementoextra, float impuestos)
        {
            bool grabado = false;

            try
            {
                StreamWriter sw = File.CreateText(ruta);
                sw.WriteLine("pass:"******"max_horas:" + maxhoras);
                sw.WriteLine("horas_base:" + horasbase);
                sw.WriteLine("max_euros_hora:" + maxeurxhora);
                sw.WriteLine("precio_jornada:" + preciojornada);
                sw.WriteLine("incremento_extra:" + incrementoextra);
                sw.WriteLine("impuestos:" + impuestos);
                CH.lcdColor("\ni> LOS NUEVOS VALORES HAN SIDO GRABADOS EN EL FICHERO DE CONFIGURACIÓN", ConsoleColor.Green);
                CH.pausa();
                sw.Flush();
                sw.Dispose();
                grabado = true;
            }
            catch (IOException ex)
            {
                CH.lcdColor(ex.Message + ". -> Contacte con el Administrador", ConsoleColor.Red);
                CH.pausa();
            }
            return(grabado);
        }
예제 #4
0
파일: CH.cs 프로젝트: bitelyus/Gestoria
        // MÉTODO QUE DEVUELVE UNA OPCIÓN DENTRO DEL TOPE INDICADO
        // @param - tope: la opción máxima posible en byte (no más de 255 opciones)
        // @return - byte: la opción elegida
        public static byte leerOpcion(byte tope)
        {
            byte   opcion = 0;
            bool   salir  = false;
            string aux    = null;

            do
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("?> OK... ¿QUÉ DESEAS HACER?: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                aux = Console.ReadLine();
                if (byte.TryParse(aux, out opcion))
                {
                    if (opcion >= 0 && opcion <= tope)
                    {
                        salir = true;
                    }
                    else
                    {
                        Console.WriteLine("!> OPCIÓN FUERA DE RANGO [0-" + tope + "]");
                    }
                }
                else
                {
                    CH.lcdColor("!> ¿¡Perdona!?... ?@#!!", ConsoleColor.Red);
                }
            } while (!salir);
            return(opcion);
        }
예제 #5
0
파일: CH.cs 프로젝트: bitelyus/Gestoria
        // FUNCIÓN PARA LEER UN FLOTANTE O DECIMAL POR PANTALLA
        // @param - string: el mensaje a mostrar por pantalla
        // @return - float: el número introducido
        public static float leerFloat(string msg)
        {
            float  cantidad = 0.0F;
            bool   salir    = false;
            string aux      = null;

            do
            {
                Console.Write("?> " + msg + ": ");
                aux = Console.ReadLine();
                if (!(String.IsNullOrEmpty(aux)) && (Single.TryParse(aux, out cantidad)))
                {
                    if (cantidad <= 100 && cantidad >= 0)
                    {
                        salir = true;
                    }
                    else
                    {
                        CH.lcdColor("!> NO MAS DE 100% O MENOS QUE 0%!! ... @#!", ConsoleColor.Red);
                    }
                }
                else
                {
                    CH.lcdColor("!> Valor NO valido!! ... @#!", ConsoleColor.Red);
                }
            } while (!salir);
            return(cantidad);
        }
예제 #6
0
파일: CH.cs 프로젝트: bitelyus/Gestoria
        public static string leerPass(string msg)
        {
            string passw = "";

            Console.Write("?> " + msg + " : ");
            while (true)
            {
                var key = Console.ReadKey(true);
                if (key.Key == ConsoleKey.Enter)
                {
                    if (passw.Length < 8)
                    {
                        CH.lcdColor("!> LA PASS DEBE TENER MÁS DE 8 LETRAS", ConsoleColor.Red);
                        passw = "";
                        Console.Write("?> " + msg + " : ");
                    }
                    else
                    {
                        break;
                    }
                }
                passw += key.KeyChar;
            }
            return(passw.Trim());
        }
예제 #7
0
파일: CH.cs 프로젝트: bitelyus/Gestoria
        // FUNCION PARA LEER UN DNI POR PANTALLA, CON VALIDACON POR REGEXP
        // @return - string: el documento a comprobar
        public static string leerDni()
        {
            bool    salir = false;
            string  aux   = null;
            decimal dec   = 0;

            do
            {
                Console.Write("?> INTRODUCE UN DNI: ");
                aux = Console.ReadLine();
                if ((String.IsNullOrEmpty(aux)) || (decimal.TryParse(aux, out dec)))
                {
                    CH.lcdColor("!> ¿¡Perdona!?... ?@#!!", ConsoleColor.Red);
                }
                else
                {
                    if (esValidoCifNifNIE(aux))
                    {
                        salir = true;
                    }
                    else
                    {
                        CH.lcdColor("!> FORMATO DNI/NIF/CIF ERRONEO!!", ConsoleColor.Red);
                    }
                }
            } while (!salir);
            return(aux);
        }
예제 #8
0
        /// <summary>
        /// Procedimiento para listar todos los trabajadore de una empresa. Recibe la Gestoría al completo y el indice de la empresa
        /// que queremos para mostrar los trabajadores. Podría hacerse solo con la lista de trabajadores...
        /// </summary>
        public static void listaTrabajadores(Gestora migestoria, byte empresa)
        {
            string cadena;

            CH.cls();
            cadena  = "";
            cadena += "\nLISTADO DE TRABAJADORES EMPRESA: " + migestoria.empresas[empresa - 1].nombre + "\n";
            cadena += "=================================";
            for (int i = 0; i < migestoria.empresas[empresa - 1].nombre.Length; i++)
            {
                cadena += "=";
            }
            cadena += "\n";
            Console.WriteLine(cadena);
            cadena = "";
            if (migestoria.empresas[empresa - 1].plantilla == null)
            {
                CH.lcdColor("i> LA EMPRESA ACTIVA TODAVÍA NO TIENE TRABAJADORES\n", ConsoleColor.Red);
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine("{0} {1}{2} ", "APELLIDOS".PadRight(10), " NOMBRE".PadLeft(11), "D.N.I.  ".PadLeft(13));
                Console.ForegroundColor = ConsoleColor.White;



                foreach (Trabajador trabajador in migestoria.empresas[empresa - 1].plantilla)
                {
                    Console.WriteLine("{0} {1} {2}", trabajador.apellidos.PadRight(15), trabajador.nombre.PadRight(10), trabajador.dni.PadRight(10));
                }
                //Console.WriteLine(cadena);
            }
            ConsoleHelper.pausa();
        }
예제 #9
0
        public static byte leerOpcionTrabajadorOp(byte tope, string tipo)
        {
            byte   opcion = 0;
            bool   salir  = false;
            string aux    = null;

            do
            {
                Console.Write("\n?> ¿Y QUÉ TRABAJADOR QUIERES " + tipo + "?: ");
                aux = Console.ReadLine();
                if (byte.TryParse(aux, out opcion))
                {
                    if (opcion >= 0 && opcion <= tope)
                    {
                        salir = true;
                    }
                    else
                    {
                        CH.lcdColor("!> OPCIÓN FUERA DE RANGO [1-" + tope + "]", ConsoleColor.DarkYellow);
                    }
                }
                else
                {
                    CH.lcdColor("!> ¿¡Perdona!?... ?@#!!", ConsoleColor.Red);
                }
            } while (!salir);
            return(opcion);
        }
예제 #10
0
        /// <summary>
        /// Procedimiento para listar las empresas de la gestoria, con o sin indices
        /// <paramref name="indices">True o False para indicar si queremos indices o no</paramref>
        /// <paramref name="migestoria">La Gestoria</paramref>
        /// </summary>
        public static void listadoEmpresas(Gestora migestoria, bool indices)
        {
            int    indice;
            int    trabajadores;
            string salida;

            indice       = 1;
            trabajadores = 0;
            salida       = "\nLISTADO DE EMPRESAS\n===================\n";
            CH.lcd(salida);
            Console.ForegroundColor = ConsoleColor.Blue;
            if (indices)
            {
                Console.WriteLine("{0}{1}{2}", "ID".PadRight(5), "NOMBRE".PadRight(15), "TRABAJADORES");
            }
            else
            {
                Console.WriteLine("{0}{1}", "NOMBRE".PadRight(15), "TRABAJADORES");
            }
            Console.ForegroundColor = ConsoleColor.White;
            salida = "";

            if (migestoria.empresas != null)
            {
                if (migestoria.empresas.Length > 0)
                {
                    for (int i = 0; i < migestoria.empresas.Length; i++)
                    {
                        if (migestoria.empresas[i].plantilla != null)
                        {
                            trabajadores = migestoria.empresas[i].plantilla.Length;
                        }
                        if (indices)
                        {
                            Console.WriteLine("{0}{1}{2}", indice.ToString().PadRight(5), migestoria.empresas[i].nombre.PadRight(15), trabajadores);
                        }
                        else
                        {
                            Console.WriteLine("{0}{1}", migestoria.empresas[i].nombre.PadRight(15), trabajadores);
                        }
                        indice++;
                        trabajadores = 0;
                    }
                }
            }
            else
            {
                salida += "\n!> NO HAY NINGUNA EMPRESA REGISTRADA, MELÓN!!";
            }
            CH.lcdColor(salida, ConsoleColor.Red);
            //ConsoleHelper.pausa();
        }
예제 #11
0
 public static void modificarTrabajador(ref Trabajador trabajador)
 {
     Console.WriteLine(">> DATOS DEL TRABAJADOR:\n" + trabajador.ToString());
     Console.WriteLine(">> AHORA DAME LOS NUEVOS DATOS...");
     try
     {
         trabajador.nombre    = ConsoleHelper.leerNombre();
         trabajador.apellidos = ConsoleHelper.leerApellidos();
         trabajador.dni       = ConsoleHelper.leerDni();
         CH.lcdColor("\n>> DATOS DEL TRABAJADOR ACTUALIZADOS!", ConsoleColor.Green);
     }
     catch (Exception ex) {
         Console.WriteLine(">> ERROR: " + ex.Message);
     }
 }
예제 #12
0
        public static void listarDatosBin(int maxhoras, int horasbase, float maxeurxhora, float preciojornada, float factorextra, float impuestos)
        {
            string cadena;

            cadena  = "\nLISTADO DE VALORES CONFIGURACION !!BINARY!!!\n";
            cadena += "============================================\n";
            CH.lcdColor(cadena, ConsoleColor.Cyan);
            cadena  = "1. MAXIMO HORAS.....: " + maxhoras + "\n";
            cadena += "2. HORAS SAL. NORMAL: " + horasbase + "\n";
            cadena += "3. EUR MAX. X HORA..: " + maxeurxhora + "\n";
            cadena += "4. PRECIO JORNADA...: " + preciojornada + "\n";
            cadena += "5. FACTOR INC. EXTRA: " + factorextra + "\n";
            cadena += "6. % IMPUESTOS......: " + impuestos + "\n";
            CH.lcd(cadena);
        }
예제 #13
0
        // METODO PARA LISTAR LAS NOMINAS POR INDICE DEL TRABJADOR. RECIBE EL TIPOTRABAJADOR

        public static void listarTrabajadores(Empresa empresa)
        {
            if (empresa.plantilla != null)
            {
                Console.WriteLine("\nLISTADO DE TRABAJADORES");
                Console.WriteLine("=======================");
                for (int i = 0; i < empresa.plantilla.Length; i++)
                {
                    Console.WriteLine((i + 1) + ". " + empresa.plantilla[i].nombre + " " + empresa.plantilla[i].apellidos);
                }
            }
            else
            {
                CH.lcdColor("\n!> LA EMPRESA NO TIENE TRABAJADORES CONTRATADOS!", ConsoleColor.Red);
            }
        }
예제 #14
0
        public static void menu_empresa()
        {
            string salida;

            salida = "\n";
            ConsoleHelper.cls();
            salida += "+----------------------+\n";
            salida += "|   MENU DE EMPRESAS   |\n";
            salida += "+----------------------+\n";
            CH.lcdColor(salida, ConsoleColor.Cyan);
            salida  = "1. NUEVA EMPRESA\n";
            salida += "2. CONSULTAR EMPRESA\n";
            salida += "3. MODIFICAR EMPRESA\n";
            salida += "4. BORRAR EMPRESA\n\n";
            salida += "5. LISTAR EMPRESAS\n\n";
            salida += "0. VOLER AL MENÚ PRINCIPAL\n\n";
            Console.Write(salida);
        }
예제 #15
0
        public static void menuTrabajador(byte empresa, Gestora migestoria)
        {
            ConsoleHelper.cls();
            string cadena = null;

            cadena += "\n+======================+\n";
            cadena += "| MENU DE TRABAJADORES |\n";
            cadena += "+======================+\n\n";
            cadena += "*> EMPRESA: " + empresa + ". " + migestoria.empresas[empresa - 1].nombre + " <*\n";
            CH.lcdColor(cadena, ConsoleColor.Cyan);
            cadena  = "1. REGISTRAR TRABAJADOR\n";
            cadena += "2. CONSULTAR TRABAJADOR\n";
            cadena += "3. MODIFICAR TRABAJADOR\n";
            cadena += "4. DESPEDIR TRABAJADOR\n\n";
            cadena += "5. LISTAR TRABAJADORES\n\n";
            cadena += "0. << GORVER <<\n";
            Console.WriteLine(cadena);
        }
예제 #16
0
파일: CH.cs 프로젝트: bitelyus/Gestoria
        // FUNCIÓN QUE DEVUELVE UN STRING (CUALQUIER COSA) QUE NO ESTE VACIO PEDIDO POR TECLADO
        // MOSTRANDO UN MENSAJE PERSONALIZADO POR PANTALLA
        // @param - string: un mensaje para mostrar por pantalla
        public static string leerCadena(string msg)
        {
            bool   salir = false;
            string aux   = null;

            do
            {
                Console.Write("?> " + msg + ": ");
                aux = Console.ReadLine();
                if ((String.IsNullOrEmpty(aux)))
                {
                    CH.lcdColor("!> ¿¡Perdona!?... ?@#!!", ConsoleColor.Red);
                }
                else
                {
                    salir = true;
                }
            } while (!salir);
            return(aux);
        }
예제 #17
0
        public static void menu_principal(string nombre)
        {
            CH.cls();

            string salida = "\n";

            salida += "+===============================+\n";
            salida += "|   MENU DE OPCIONES GESTORIA   |\n";
            salida += "|     - - - - - - - - - - -     |\n";
            salida += "|      " + nombre + "      |\n";
            salida += "+===============================+\n";
            CH.lcdColor(salida, ConsoleColor.Cyan);
            salida  = "1. GESTIÓN DE EMPRESAS\n";
            salida += "2. GESTIÓN DE TRABAJADORES\n";
            salida += "3. GESTIÓN DE NOMINAS\n\n";
            salida += "4. MÓDULO DE ADMINISTRACIÓN\n\n";
            salida += "5. CARGA DATOS [MODO DEBUG]\n\n";
            salida += "0. SALIR\n\n";
            CH.lcd(salida);
        }
예제 #18
0
파일: CH.cs 프로젝트: bitelyus/Gestoria
        // FUNCIÓN DE DEVUELVE UN STRING (NO NUMERO REAL) PEDIDO POR TECLADO
        // @param - string: el mensaje a mostrar
        // @return - string: el string introducido
        public static string leerString(string msg)
        {
            bool   salir  = false;
            string aux    = null;
            int    numero = 0;

            do
            {
                Console.Write("?> " + msg + ": ");
                aux = Console.ReadLine();
                if ((String.IsNullOrEmpty(aux)) || (Int32.TryParse(aux, out numero)))
                {
                    CH.lcdColor("!> ¿¡Perdona!?... ?@#!!", ConsoleColor.Red);
                }
                else
                {
                    salir = true;
                }
            } while (!salir);
            return(aux);
        }
예제 #19
0
        /// <summary>
        /// Procedimiento para mostar el menu principal para la gestión de nóminas, previa seleccion
        /// de empresa y trabajador
        /// <paramref name="empresa">La empresa activa con los trabajadores</paramref>
        /// <paramref name="trabajador">El trabajador Activo...</paramref>
        /// <paramref name="migestoria">La getoria entera ... ?!?!</paramref>
        /// </summary>
        public static void menuNomina(byte empresa, byte trabajador, Gestora migestoria)
        {
            string salida;

            CH.cls();
            salida  = "\n";
            salida += "+---------------------+\n";
            salida += "|   MENU DE NÓMINAS   |\n";
            salida += "+---------------------+\n\n";
            salida += "*> EMPRESA.: " + empresa + ". " + migestoria.empresas[empresa - 1].nombre + " <*\n";
            salida += "*> EMPLEADO: " + trabajador + ". " + migestoria.empresas[empresa - 1].plantilla[trabajador - 1].nombre
                      + " " + migestoria.empresas[empresa - 1].plantilla[trabajador - 1].apellidos + " <*\n";
            CH.lcdColor(salida, ConsoleColor.Cyan);
            salida  = "1. AÑADIR UNA NOMINA\n";
            salida += "2. CONSULTAR NOMINA\n";
            salida += "3. MODIFICAR NOMINA\n";
            salida += "4. ELIMINAR NOMINA\n\n";
            salida += "5. LISTAR NOMINAS\n\n";
            salida += "0. << GORVER <<\n";
            CH.lcd(salida);
        }
예제 #20
0
파일: CH.cs 프로젝트: bitelyus/Gestoria
        public static int leerNumero(string msg)
        {
            bool   salir  = false;
            string aux    = "";
            int    numero = 0;

            do
            {
                Console.Write("?> " + msg + ": ");
                aux = Console.ReadLine();
                if ((!String.IsNullOrWhiteSpace(aux) && Int32.TryParse(aux, out numero)))
                {
                    salir = true;
                }
                else
                {
                    CH.lcdColor("!> Valor NO VÁLIDO!", ConsoleColor.Red);
                }
            } while (!salir);
            return(numero);
        }
예제 #21
0
        /// <summary>
        /// METODO PARA CAMBIAR UNA NÓMINA POR OTRA
        /// RECIBE EL TRABAJADOR POR REFERENCIA Y LA NOMINA A CAMBIAR.
        /// CREA UNA NUEVA Y LA CAMBIA
        /// <paramref name="nomina">La nomina a sustituir</paramref>
        /// <paramref name="trabajador">El trabajador de la nómina en cuestion</paramref>
        /// </summary>
        public static void pedirNuevaNomina(ref Trabajador trabajador, Nomina nomina)
        {
            Nomina    nueva_nomina = new Nomina();
            bool      salir        = false;
            DatosBase datos;

            datos = ControlerAdministracion.cargarDatos();
            do
            {
                try
                {
                    nueva_nomina.nombre    = trabajador.nombre;
                    nueva_nomina.apellidos = trabajador.apellidos;
                    Console.WriteLine("i> OK, AMO... VAMOS A CREAR UNA NUEVA NÓMINA PARA SUSTITUIRLA");
                    pedirDatosNomina(ref nueva_nomina);
                    nueva_nomina.eurosHoras = datos.preciojoranda;                      // ESTA CONSTANTE ESTA EN CONTROLER GESTORIA, PERO ¿COMO SE LLEGA DE AQUI ALLI?
                    nueva_nomina.calcularBruto(datos.horasbase, datos.incrementoextra); // HAY QUE PASARLE EL MAX. DE HORAS NORMALES (EL RESTO SON EXTRAS) Y EL FACTOR DE INCREMENTO
                    nueva_nomina.calcularImpuestos(datos.impuestos);                    // EL PORCENTAJE DE LA TASA DE IMPUESTOS
                    Console.WriteLine("\n" + nueva_nomina.ToString());

                    if (trabajador.modificarNomina(nomina, nueva_nomina))
                    {
                        CH.lcdColor("i> NÓMINA MODIFICADA CORRECTAMENTE", ConsoleColor.Green);
                        salir = true;
                        //ConsoleHelper.pausa();
                    }
                    else
                    {
                        CH.lcdColor("\n!> ERROR MODIFICANDO LA NÓMINA", ConsoleColor.Red);
                    };
                }
                catch (Exception ex)
                {
                    CH.lcdColor("!> ERR: " + ex.Message.ToUpper(), ConsoleColor.Red);
                }
            } while (!salir);
        }