static void Main()
    {
        DatosPrograma[] programas     = new DatosPrograma[1000];
        int             cantidadDatos = 0;
        bool            terminar      = false;

        do
        {
            MostrarMenu();
            char menu = Convert.ToChar(PedirOpcion());

            switch (menu)
            {
            case '1': Anyadir(programas, ref cantidadDatos); break;

            case '2': MostrarTodos(programas, cantidadDatos); break;

            case '3': MostrarDetallePrograma(programas, cantidadDatos); break;

            case '4': Modificar(programas, cantidadDatos); break;

            case '5': Borrar(programas, ref cantidadDatos); break;

            case 'T': terminar = true; break;

            default: Console.WriteLine("Opción no válido."); break;
            }
            Console.WriteLine("");
        }while (!terminar);

        Console.WriteLine("Hasta luego!");
    }
    static void Main()
    {
        DatosPrograma[] programas     = new DatosPrograma[1000];
        int             cantidadDatos = 0;
        bool            terminar      = false;

        const char OPC_ANYADIR     = '1';
        const char OPC_VER_NOMBRES = '2';
        const char OPC_VER_DETALLE = '3';
        const char OPC_MODIFICAR   = '4';
        const char OPC_BORRAR      = '5';
        const char OPC_SALIR_MAY   = 'T';
        const char OPC_SALIR_MIN   = 't';

        char menu;

        do
        {
            Console.WriteLine(OPC_ANYADIR + ". Añadir datos de un programa.");
            Console.WriteLine(OPC_VER_NOMBRES + ". Mostrar los nombres de todos los " +
                              "programas almacenados.");
            Console.WriteLine(OPC_VER_DETALLE + ". Ver todos los datos de un " +
                              "cierto programa.");
            Console.WriteLine(OPC_MODIFICAR + ". Modificar una ficha.");
            Console.WriteLine(OPC_BORRAR + ". Borrar un programa.");
            Console.WriteLine(OPC_SALIR_MAY + ". Terminar.");

            menu = Convert.ToChar(Console.ReadLine());
            Console.WriteLine();

            switch (menu)
            {
            case OPC_ANYADIR:
                try
                {
                    Console.Write("Introduce el nombre: ");
                    programas[cantidadDatos].nombre =
                        Console.ReadLine();

                    Console.Write("Introduce la descipción: ");
                    programas[cantidadDatos].descripcion =
                        Console.ReadLine();

                    Console.Write("Introduce el mes de lanzamiento: ");
                    programas[cantidadDatos].version.mes =
                        Convert.ToByte(Console.ReadLine());

                    Console.Write("Introduce el año de lanzamiento: ");
                    programas[cantidadDatos].version.anyo =
                        Convert.ToUInt16(Console.ReadLine());

                    cantidadDatos++;
                }
                catch (Exception)
                {
                    Console.WriteLine("Valor no válido, el programa " +
                                      "no se ha guardado.");
                }
                break;

            case OPC_VER_NOMBRES:
                if (cantidadDatos < 1)
                {
                    Console.WriteLine("No hay datos.");
                }
                else
                {
                    int filaActual = 0;
                    for (int i = 0; i < cantidadDatos; i++)
                    {
                        Console.WriteLine((i + 1) + ". " + programas[i].nombre);
                        filaActual++;
                        if (filaActual == 22)
                        {
                            Console.WriteLine("Pulse Intro para seguir");
                            Console.ReadLine();
                            filaActual = 0;
                        }
                    }
                }
                break;

            case OPC_VER_DETALLE:
                Console.Write("Introduce un número de programa: ");
                int programaVer = Convert.ToInt32(Console.ReadLine());

                if ((programaVer > cantidadDatos) || (programaVer < 1))
                {
                    Console.WriteLine("Número no válido.");
                }
                else
                {
                    Console.WriteLine(programaVer +
                                      ". {0} {1} V.{2}.{3}",
                                      programas[programaVer - 1].nombre,
                                      programas[programaVer - 1].descripcion,
                                      programas[programaVer - 1].version.mes,
                                      programas[programaVer - 1].version.anyo);
                }
                break;

            case OPC_MODIFICAR:
                Console.Write("Introduce el número de programa que " +
                              "quieres modificar: ");
                int programaModif = Convert.ToInt32(Console.ReadLine());

                if ((programaModif > cantidadDatos) ||
                    (programaModif < 1))
                {
                    Console.WriteLine("Número no válido.");
                }
                else
                {
                    try
                    {
                        Console.Write("Introduce el nombre: ");
                        programas[programaModif - 1].nombre = Console.ReadLine();

                        Console.Write("Introduce la descipción: ");
                        programas[programaModif - 1].descripcion = Console.ReadLine();

                        Console.Write("Introduce el mes de lanzamiento: ");
                        programas[programaModif].version.mes =
                            Convert.ToByte(Console.ReadLine());

                        Console.Write("Introduce el año de lanzamiento: ");
                        programas[programaModif].version.anyo =
                            Convert.ToUInt16(Console.ReadLine());
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Valor no válido, el " +
                                          "programa no se ha guardado.");
                    }
                }
                break;

            case OPC_BORRAR:
                Console.Write("Introduce el número de programa que " +
                              "quieres borrar: ");
                int programaBorr = Convert.ToInt32(Console.ReadLine());

                if ((programaBorr > cantidadDatos) ||
                    (programaBorr < 1))
                {
                    Console.WriteLine("Número no válido.");
                }
                else
                {
                    for (int i = programaBorr; i <= cantidadDatos; i++)
                    {
                        programas[i - 1] = programas[i];
                    }
                    cantidadDatos--;
                }
                break;

            case OPC_SALIR_MAY:
            case OPC_SALIR_MIN:
                terminar = true;
                break;

            default:
                Console.WriteLine("Opción no válido.");
                break;
            }

            Console.WriteLine("");
        }while (!terminar);

        Console.WriteLine("Hasta luego!");
    }