[ Foro de C# ]

Menú que se sale

03-Jun-2014 20:25
Invitado (ejercicio en vs2013)
1 Respuestas

//////////////////////////Ejercicio/////////////////////////////////
escriba la clase abstracta ser. Defina solo el atributo nombre, encapsule el mismo y cree el constructor correspondiente. Cree un método abstracto llamado getNombreCompleto. Modifique la clase persona que para que extienda de la clase ser implemente el método abstracto getNombreCompleto para que retorne un string con el nombre completo. Modifica el ejercicio 2 para utilizar este método en la primera opción del menu
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Problema: tengo el ejercicio  resuelto y compila bien, el problema es que al elegir la opción uno del menú (que es la que usa el método getNombreCompleto) me saca del programa y no memuestra nada..
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Codigo
//////////////////////////////////////////////////////////////////////////////////////////////////////


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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string nombre, apellido;
            int edad, opcion;
            double altura = 0;
            Int32 dni = 0;
            int seguro = 0;
            string nac;
            Console.WriteLine("Ingresa tu nombre");
            nombre = Console.ReadLine();
            Console.WriteLine("ingresa tu apellido");
            apellido = Console.ReadLine();
            Console.WriteLine("ingresa tu edad");
            edad = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Ingresa tu altura");
            altura = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Ingresa tu numero de documento");
            dni = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Nacionalidad Argentino o  yanky");
            nac = Console.ReadLine();
            Console.WriteLine("Selelccione una opcion");
            Console.WriteLine("1:Mostrar nombre completo");
            Console.WriteLine("2:Mostrar dni,edad y altura");
            Console.WriteLine("3:Modificar edad");
            Console.WriteLine("4:Modificar altura");
            Console.WriteLine("5:Mostrar todos los datos");
            
            opcion = Convert.ToInt32(Console.ReadLine());
            Persona yo = new Persona (nombre, nombre,apellido, edad,altura);
            Argentino arg = new Argentino(dni,nombre,apellido,edad,altura,nombre);
            Yanki ing = new Yanki(seguro,nombre,nombre,apellido,edad,altura);
            switch (opcion)
            {
                case 1:
                    yo.GetNombreCompleto();
                    break;
                case 2:
                    yo.maltura();
                    yo.medad();
                    arg.mdni();
                    break;
                case 3:
                    Console.WriteLine("ingresa tu edad");
                    edad = Convert.ToInt32(Console.ReadLine());
                    yo.medad();
                    break;
                case 4:
                    Console.WriteLine("ingresa tu altura");
                    altura = Convert.ToInt32(Console.ReadLine());
                    yo.maltura();
                    break;
                case 5:
                    yo.mapellido();
                    yo.mnombre();
                    yo.maltura();
                    yo.medad();
                    if (nac == "Argentino")
                    {
                        arg.mdni();
                    }
                    if (nac == "yanki")
                    {
                        ing.Mseguro();
                    }
                    break;
                default:
                    Console.WriteLine("Error");
                    break;
            }
            Console.ReadLine();
        }
        }
    }
______________________________________________________________________________
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Persona:Ser
    {
        /*atributos*/
        protected string nnombre;
        private string apellido;
        private int edad;
        private double altura;
        /*Constructor*/
        public Persona(string newnombre, string new_nombre, string new_apellido, int new_edad, double new_altura):base(newnombre)
        {
            nnombre = new_nombre;
            apellido = new_apellido;
            edad = new_edad;
            altura = new_altura;

        }


        /*setters and getters*/
        public string Nombre
        {
            set
            {
                nombre = value;
            }
            get
            {
                return this.nombre;
            }
        }
        public string Apellido
        {
            set
            {
                apellido = value;
            }
            get
            {
                return this.apellido;
            }
        }
        public Int32 Edad
        {
            set
            {
                edad = value;
            }
            get
            {
                return this.edad;
            }
        }
        public double Altura
        {
            set
            {
                altura = value;
            }
            get
            {
                return this.altura;
            }
        }
        /*Metodos*/
        public void medad()
        {
            Console.WriteLine("Edad: " + Edad + " años");

        }
        public void mnombre()
        {
            Console.WriteLine("Nombre: " + Nombre);
        }
        public void mapellido()
        {
            Console.WriteLine("Apellido : " + Apellido);
        }
        public void maltura() 
        {
            Console.WriteLine("Altura" + Altura + " cm.");
        }
        

    }
}
______________________________________________________________________________
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    abstract class Ser
    {
        protected string nombre;

        public Ser(string newnombre)
        {
            nombre=newnombre;
        }
        public string NOMBRE
        {
            set
            {
                this.nombre= value;
            }
            get
            {
                return this.nombre;
            }
        }
        public abstract string GetNombreCompleto();
    }
}
_______________________________________________________________________________
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Argentino:Persona

    {
        //atributos
        private Int32 dni;
        //constructor
        public Argentino(Int32 new_dni, string new_nombre, string new_apellido, int new_edad, double new_altura, string newnombre)
            : base(newnombre, new_nombre, new_apellido, new_edad, new_altura)
        {
            dni = new_dni;
        }
        //set and get
        public Int32 Dni
        {
            set
            {
                dni = value;
            }
            get
            {
                return this.dni;
            }
        }
        //metodos
        public void mdni()
        {
            Console.WriteLine(" mi documento es " + Dni);
        }
    }
}



04-Jun-2014 19:50
Nacho Cabanes (+83)

Cuando te saca de un programa es porque ha "saltado una excepción". Ayudaría mucho saber qué excepción es la que ha aparecido, porque eso te indicará qué está fallando.

Aun así, en tu caso, la opción 1 hace "yo.GetNombreCompleto();", donde "yo" es de tipo "Persona". En "Persona" no existe ese método, y en "Ser" aparece como abstracto, luego fallará si no lo redefines:


public abstract string GetNombreCompleto();







(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)