crear una lista de nombre con edad implementando en ella un menu.

Iniciado por ChuzZ02, 3 Mayo 2017, 07:48 AM

0 Miembros y 1 Visitante están viendo este tema.

ChuzZ02

Hola. Busco la ayuda de algun programador avanzado que me oriente en alguna solucion al siguiente codigo.
El ejercicio es simple, crear una lista de nombre con edad implementando en ella un menu.
Aun no consigo agregar el nombre y la edad al vector ni tampoco puedo hacer la opcion de eliminar.
agradezco cualquier ayuda que me puedan brindar.




Código (cpp) [Seleccionar]
#include<iostream>    //Incluyendo Bibliotecas
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

using namespace std;  //Jerarquia

class Persona{ // Se declara una Clase: Persona
   // Creando los campos
     private: // Metodos Privados
        string nombre;
        int edad;
     public: // Metodos Publicos
        void setValores(string n,int e){
            nombre=n; edad=e;
            } // Modificador
        string getNombre(){
            return nombre;
            } // Consultor
        int getEdad(){
            return edad;
            } // Consultor
};

class Lista{
     private:
        Persona empleado[10];
        int ultimaPersona;
        int numElemento;
     public:
        Lista(){ultimaPersona=0;}

        void agregarEmpleado(string n, int e){
             empleado[ultimaPersona].setValores(n,e);
             ultimaPersona++;
        }
         void eliminarEmpleado(int numElemento){
          for(int i=numElemento; i<ultimaPersona; i++){
             string nom = empleado[i+1].getNombre();
             int ed = empleado[i+1].getEdad();
             empleado[i].setValores(nom, ed);
             }ultimaPersona--;
}
           void mostrarLista(){
             for(int i=0; i<ultimaPersona; i++){
                 cout<<"Nombre: "<<empleado[i].getNombre()<<endl;
                 cout<<"Edad: "<<empleado[i].getEdad()<<endl;
                 cout<<endl;
             }
        }
};
int main(){ //   Comienza Ejecucion de Programa.

       while(1){// Funcion que forma un ciclo hasta que el usuario ordene romperlo.

   Lista miLista;
   string n;
   int e;
   int opc;


   cout<<"\t\t\t<------MENU PRINCIPAL------>"<<endl<<endl;// Con '\t\t\t' llevo un poco al centro el mensaje, y con '\n\n' salto 2 lineas hacia abajo.
   cout<<" 1)  Agregar Empleado\n"<<endl;
   cout<<" 2)  Eliminar Empleado\n"<<endl;
   cout<<" 3)  Mostrar la Lista de Empleados\n"<<endl;
   cout<<" 4)  Salir\n"<<endl;

   cout<<"\nElija una opcion ===> ";
   cin>>opc;

system("cls"); // Funcion para limpiar la pantalla.


   switch(opc){
           case 1:
               cout<<"\n Ingrese el nombre del empleado: \n"<<endl;
               cin>>n;
               cout<<"\n Ingrese la edad: \n"<<endl;
               cin>>e;
               miLista.agregarEmpleado(n,e);
               system("cls");
               break;

           case 2:
               cout<<"Digite el nombre del empleado que desea eliminar: "<<endl;
               miLista.eliminarEmpleado();
               system("pause");
               system("cls");
               break;


           case 3:
               cout<<"\n LISTA DE EMPLEADOS \n"<<endl;
               miLista.mostrarLista();
               system("pause");
               system("cls");
               break;

case 4:
   cout<<"Saliendo..."<<endl;
   exit(0); // Funcion que finaliza el programa.
   break;

default:
   cout<<"Opcion No valida "<<endl;
   system("pause");
       system("cls");

   getch();
   return 0;
   }
}


}



· tercera advertencia de todo lo dicho (que borraste al modificar el post)
>aquí las reglas del foro
-Engel Lex

CalgaryCorpus

Parece raro que lista derive de Persona.
El arreglo de personas definido en el main está demás.
Por qué no usas el tipo vector en vez de usar un arreglo?
Eso facilitará el borrado.
Qué tal si el borrado es solo lógico, osea marcas como si estuviera borrado pero los datos siguen allí, y luego cuando insertas reusas el espacio usado por los anteriormente borrados?
Aqui mi perfil en LinkedIn, invitame un cafe aqui

ChuzZ02

#2
gracias men.
si es innecesaria que derive de la clase Persona. se puede hacer con un vector, pero el ejecicio es asi con el arreglo. ya lo modifique un poco, pero aun asi no puedo guardar los datos ingresados en el arreglo.


Código (cpp) [Seleccionar]
#include<iostream>    //Incluyendo Bibliotecas
#include<conio.h>
#include<stdlib.h>

using namespace std;  //Jerarquia

class Persona{ // Se declara una Clase: Persona
   // Creando los campos
     private: // Metodos Privados
        string nombre;
        int edad;
     public: // Metodos Publicos
        void setValores(string n,int e){
            nombre=n; edad=e;
            } // Modificador
        string getNombre(){
            return nombre;
            } // Consultor
        int getEdad(){
            return edad;
            } // Consultor
};

class Lista{
     private:
        Persona empleado[10];
        int ultimaPersona;
        int numElemento;
     public:
        Lista(){ultimaPersona=0;}

        void agregarEmpleado(string n, int e){
             empleado[ultimaPersona].setValores(n,e);
             ultimaPersona++;
        }
         void eliminarEmpleado(int numElemento){
          for(int i=numElemento; i<ultimaPersona; i++){
             string nom = empleado[i+1].getNombre();
             int ed = empleado[i+1].getEdad();
             empleado[i].setValores(nom, ed);
             }ultimaPersona--;
}
           void mostrarLista(){
             for(int i=0; i<ultimaPersona; i++){
                 cout<<"Nombre: "<<empleado[i].getNombre()<<endl;
                 cout<<"Edad: "<<empleado[i].getEdad()<<endl;
                 cout<<endl;
             }
        }
};
int main(){ //   Comienza Ejecucion de Programa.

       while(1){// Funcion que forma un ciclo hasta que el usuario ordene romperlo.

   Lista miLista;
   string n;
   int e;
   int opc;


   cout<<"\t\t\t<------MENU PRINCIPAL------>"<<endl<<endl;// Con '\t\t\t' llevo un poco al centro el mensaje, y con '\n\n' salto 2 lineas hacia abajo.
   cout<<" 1)  Agregar Empleado\n"<<endl;
   cout<<" 2)  Eliminar Empleado\n"<<endl;
   cout<<" 3)  Mostrar la Lista de Empleados\n"<<endl;
   cout<<" 4)  Salir\n"<<endl;

   cout<<"\nElija una opcion ===> ";
   cin>>opc;

system("cls"); // Funcion para limpiar la pantalla.


   switch(opc){
           case 1:
               cout<<"\n Ingrese el nombre del empleado: \n"<<endl;
               cin>>n;
               cout<<"\n Ingrese la edad: \n"<<endl;
               cin>>e;
               miLista.agregarEmpleado(n,e);
               system("cls");
               break;

           case 2:
               cout<<"Digite el nombre del empleado que desea eliminar: "<<endl;
               miLista.eliminarEmpleado();
               system("pause");
               system("cls");
               break;


           case 3:
               cout<<"\n LISTA DE EMPLEADOS \n"<<endl;
               miLista.mostrarLista();
               system("pause");
               system("cls");
               break;

case 4:
   cout<<"Saliendo..."<<endl;
   exit(0); // Funcion que finaliza el programa.
   break;

default:
   cout<<"Opcion No valida "<<endl;
   system("pause");
       system("cls");

   getch();
   return 0;
   }
}


}




· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

CalgaryCorpus

Seria bueno saber que es lo que el programa hace (o no hace), sino es una adivinanza.
Cuales son las entradas, y cual es el comportamiento que tienes que hace que digas que no funciona?
Aqui mi perfil en LinkedIn, invitame un cafe aqui

ChuzZ02

En el primer case(1), debe de ingresar los datos a la variables n,e. Para cuando se muestre el.case(3), pueda mostrar los datos. Pero no lo hace. Y la implementación del case(2) el algoritmo esta diseñado para eliminar un empleado si se conoce el número de elemento. Como para que elimine por el nombre.

CalgaryCorpus

que tal si eliminas el ruido de estar pidiendo los datos desde el teclado, usar un menu, etc. y directamente llamas a los metodos de la clase Lista con valores conocidos, y luego los muestras con el otro metodo?
Si funciona, tienes problemas en la lectura y paso de parametros, si no funciona, puedes continuar con esa manera de ingresar datos hasta que los datos que ingresas son los que aparecen en la lista.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

MAFUS

Tienes unos cuantos errores mínimos para pulir y tal, pero el que no te deja hacer funcionar la aplicación como debería es en main:

int main(){

        while(1){// Funcion que forma un ciclo hasta que el usuario ordene romperlo.

    Lista miLista;


A cada iteración del bucle la lista se genera de nuevo, por tanto siempre estará vacía. Declara primero la lista y después entra en el bucle.