Problema al hacer una Agenda Telefonica en C++

Iniciado por Y2J, 19 Agosto 2011, 16:42 PM

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

Y2J

Veran, tengo que hacer una agenda telefonica donde el usuario introduzca el nombre y telefono de 10 personas , luego debe mostrar el menu con 3 opciones:
1) Buscar por nombre
2) Buscar por numero
3) Salir

el problema es que al buscar por nombre o por numero y programa se cuelga pero no me dice que hubo errores, este es el codigo:

#include <iostream>
#include <cstdlib>
#include <string.h>

using namespace std;

//Prototipos
void Leer_Datos();
void Buscar_Nombre();
void Buscar_Numero();
void Salir();
void Imprimir_Nombre(int pos);
void Imprimir_Numero(int pos);
int Menu();
//void(*Opciones[3])(void);

struct Datos
{
       int Numero;
       char Nombre[20];
}Persona[10];

void Leer_Datos()
{
     for(int i=0;i<10;i++)
     {
             cout<<"Persona "<<i+1<<": "<<endl;
             cout<<"Ingrese el Nombre: ";cin>>Persona.Nombre;
             cout<<"Ingrese Numero Telefonico: ";cin>>Persona.Numero;
             cout<<endl;
     }
}

int Menu()
{
    int opcion;
    cout<<"Agenda Telefonica"<<endl;
    cout<<"1) Buscar por Nombre\n2) Buscar por Numero de Telefono\n3) Salir"<<endl;
    cout<<"Ingrese una opcion: ";
    cin>>opcion;
    return opcion;
}

void Imprimir_Nombre(int pos)
{
     if(pos<0)
     cout<<"Dato no encontrado"<<endl;
     else
     cout<<Persona[pos].Numero;
}

void Imprimir_Numero(int pos)
{
     if(pos<0)
     cout<<"Dato no encontrado"<<endl;
     else
     cout<<Persona[pos].Nombre;
}



void Buscar_Nombre()
{
     char dato[20];
     cout<<"Ingrese el Nombre: ";cin>>dato;
     bool seguir=true;
     int i=0;
     signed int pos;
     while(i<10 && seguir)
     {
                if(strcmp(Persona.Nombre,dato)==0)   //if(strcmp(Persona.Nombre,Dato_Nombre())==0)
                {
                      seguir=false;
                      pos=i;
                }
     }
     if(seguir)
     pos=-1;
     Imprimir_Nombre(pos);
}
   

void Buscar_Numero()
{
     int dato;
     cout<<"Ingrese Numero de Telefono: ";cin>>dato;
     bool seguir=true;
     int i=0;
     signed int pos;
     while(i<10 && seguir)
     {
                if(Persona.Numero==dato)
                {
                      seguir=false;
                      pos=i;
                }
     }
     if(seguir)
     pos=-1;
     Imprimir_Numero(pos);
}


/*void Salir()  ////Eliminar
{
     exit(0);
}*/

//void(*Opciones[])(void)={Buscar_Nombre, Buscar_Numero, Salir};

int main(int argc, char *argv[])
{
    int opcion;
    Leer_Datos();
    opcion=Menu();
   
    do{
    switch(opcion)
    {
                  case 1:Buscar_Nombre();
                  case 2:Buscar_Numero();
    }
     }
    while(opcion!=3);
    //(Opciones[opcion-1])();
    system("PAUSE");
    return 0;
}
                                                           
Que  estoy haciendo mal???                 

satu

Hola

El fallo lo tienes aquí:
Código (cpp) [Seleccionar]

void Leer_Datos()
{
     for(int i=0;i<10;i++)
     {
             cout<<"Persona "<<i+1<<": "<<endl;
             cout<<"Ingrese el Nombre: ";cin>>Persona.Nombre;
             cout<<"Ingrese Numero Telefonico: ";cin>>Persona.Numero;
             cout<<endl;
     }
}


Deberías poner:
Código (cpp) [Seleccionar]

void Leer_Datos()
{
     for(int i=0;i<10;i++)
     {
             cout<<"Persona "<<i+1<<": "<<endl;
             cout<<"Ingrese el Nombre: ";cin>>Persona[i].Nombre;
             cout<<"Ingrese Numero Telefonico: ";cin>>Persona[i].Numero;
             cout<<endl;
     }
}


Saludos
Breakbeat como forma de vida

Y2J

Gracias por tu respuesta hice lo que me dijiste pero al ejecutar el programa cuando pongo 1, osea buscar por nombre  luego de escribir el nombre el programa se cuelga y no me dice donde esta el error , lo mismo me pasa cundo pongo para buscar por numero, que esta mal??

rir3760

En esas dos funciones tienes el mismo error que ya te indicaron (debes indicar el indice del elemento al cual quieres acceder).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

satu

Hola

Se me había escapado pero en las 2 funciones de buscar haces lo mismo, te falta poner el índice:
Código (cpp) [Seleccionar]

Persona[i].Nombre
Persona[i].Numero


Saludos
Breakbeat como forma de vida

Y2J

Ya corregi todos los lugares donde me falta poner las indices pero al ejecutar se me cuelga luego de escribir el nombre o numero a buscar, no se que pasa

rir3760

Así es muy difícil ayudarte salvo utilizando la bola de cristal o, mejor todavía, la mascara vudú y la gallina.

Publica el código fuente completo de tu programa y lo revisamos.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

satu

Hola

Te falta avanzar el índice cuando no coinciden los resultados:
Código (cpp) [Seleccionar]

if()
    .......
else
    i++;


Saludos
Breakbeat como forma de vida

Y2J

Mother of God!!!!! no puedo creer que se me haya olvidado poner el i++ ese era el problema ahora si me funciona gracias satu y a los demas por su respuesta, esque soy nuevo en c++ y estoy aprendiendo con un libro y un curso de internet. Gracias tios

Saludos 

satu

Hola

De nada hombre, para eso estamos.

Estoy revisando el código y veo que te faltan los break de cada case del switch. Además deberías meter el menú dentro del do-while si quieres que se muestre más veces.

Saludos
Breakbeat como forma de vida