elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Agenda C++ (Modificaciones)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Agenda C++ (Modificaciones)  (Leído 3,043 veces)
Exorcista12

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Agenda C++ (Modificaciones)
« en: 26 Mayo 2014, 04:21 am »

Saludos a todos, he desarrollado este código pero no puedo hacerlo funcionar bien quizás la lógica que aplico es errónea, como podría hacer que el código funcione de manera correcta?

Tuve que Desarrollar una pequeña agenda con la siguiente estructura:

id_registro
Nombre
Apellido
Celular

y desarrollar las siguientes funciones para la administración:

ingresarRegistro()
eliminarRegistro()
modificarRegistro()
imprimirTodoRegistro()

Adjunto el código que llevo al momento. De antemano muchas Gracias a los que deseen ayudarme.



#include <iostream>
#include <cstring>

using namespace std;


struct Persona {

 char Nombre[65];
 char apellido[65];
 char numcel[65];

 
}plantilla[100];


void ingresarRegistro();
void imprimirRegistro();
void modificarRegistro();
void eliminarRegistro();

int camb=0;
int copiar;


int main() {

    int opc;

   do{

                cout<<"MENU"<<endl;
      cout<<"1.Agregar Registro"<<endl;
                cout<<"2.Eliminar Registro"<<endl;
                cout<<"3.Modificar Registro"<<endl;
                cout<<"4.Imprimir Registro"<<endl;
                cout<<"5.Salir"<<endl;
      
                cin>>opc;
   
      switch(opc){
      case 1:
         ingresarRegistro();
         break;
      case 2:
         eliminarRegistro;
         
         break;
      case 3:
         modificarRegistro();
         
         break;
                            
                 case 4:
                        imprimirRegistro();
                        
                        break;
                      
      }
   }while(opc!=5);

   return 0;
}
    
 int cont=0;

void ingresarRegistro(){
 
  
    int r,f;
    
    r=cont++;
    
    
    if (camb==1)
    {
                r--;
                f=r+1;
              
    cout<< "Agregue el nombre del nuevo contacto: ";
    cin>> plantilla[f].Nombre;
    cout<<endl;
    
    cout<< "Agregue el apellido del nuevo contacto: ";
    cin>> plantilla[f].apellido;
    cout<<endl;
    
    cout<< "Agregue el numero movil del nuevo contacto: ";
    cin>> plantilla[f].numcel;
    cout<<endl;
                                    strcpy(plantilla[r].Nombre,plantilla[f].Nombre);
                                    strcpy(plantilla[r].apellido,plantilla[f].apellido);
                                    strcpy(plantilla[r].numcel,plantilla[f].numcel);
                                    copiar++;
                                        
    }
    
    cout<< "Agregue el nombre del nuevo contacto: ";
    cin>> plantilla[r].Nombre;
    cout<<endl;
    
    cout<< "Agregue el apellido del nuevo contacto: ";
    cin>> plantilla[r].apellido;
    cout<<endl;
    
    cout<< "Agregue el numero movil del nuevo contacto: ";
    cin>> plantilla[r].numcel;
    cout<<endl;

}

// Imprime 20 valores inecesarios

void imprimirRegistro(){
  
   int tr, a, r;
    
      cout<< "Lista de Contactos: ";
      cout<< endl;
      
      if (cont==0)
      {
               cout<< "Lista de contactos vacia.";
               cout<<endl;
              
               } else {
      
    
      for(a=0;a<r+1;a++)
   {
      tr=a;
      
      cout<< tr+1<< ". ";
      cout<< plantilla[a].Nombre;
      cout<<endl;
     }
      
     }
    
}

void modificarRegistro(){
    
    int a, tr,val, mod,g,r,rep;
    
cout<< "Lista de Contactos: ";
      cout<< endl;
      
      if (cont==0)
      {
               cout<< "Lista de contactos vacia.";
               cout<<endl;
          
               } else {
      
    
      for(a=0;a<r+1;a++)
      
   {
      tr=a;
      
      cout<< tr+1<< ". ";
      cout<< plantilla[a].Nombre;
      cout<<endl;
     }
                     }
      
                     cout<<"Seleccione el numero del contacto que desea modificar: ";
                     cin>>val;
                     mod=val-1;
                     g=r+1;
                  
                     int op1;
                    
                    if (val<=g)
                     {
                              
                     do
                     {
                  
                     cout<<"Contacto:"<<endl;
                     cout<<"1. Nombre: "<<plantilla[mod].Nombre<<endl;
                     cout<<"2. Apellido: "<<plantilla[mod].apellido<<endl;
                     cout<<"3. Numero Movil: "<<plantilla[mod].numcel<<endl;
                     cout<<"4. Menu anterior."<<endl;
                     cout<<"Seleccione la opcion que desea modificar: ";
                     cin>>op1;
                     switch (op1)
                     {
                            case 1:
                                 cout<< "Modifique el nombre del contacto: ";
                                 cin>> plantilla[mod].Nombre;
                                 cout<<endl;
                                 break;
                            case 2:
                                 cout<< "Modifique el apellido del contacto: ";
                                 cin>> plantilla[mod].apellido;
                                 cout<<endl;
                                 break;
                            case 3:
                                 cout<< "Modifique el numero de movil del contacto: ";
                                 cin>> plantilla[mod].numcel;
                                 cout<<endl;
                                 break;
                            case 4:
                                 rep=1;
                                 break;
                            }
                     }while (rep==0);
                     }else {cout<<"El contacto no existe."<<endl;
                          
                     rep=0;

                     }
}

void eliminarRegistro(){
    
    int del;
   int delm;
   int h;
   int rsp2;
   int copiar;
   int a1;
   int r, tr, a;
  
    
         cout<< "Lista de Contactos: ";
      cout<< endl;
      
      if (cont==0)
      {
               cout<< "Lista de contactos vacia.";
               cout<<endl;
              
               } else {
      
    
      for(a=0;a<r+1;a++)
      
   {
      tr=a;
      
      cout<< tr+1<< ". ";
      cout<< plantilla[a].Nombre;
      cout<<endl;
     }
                     }
                    
                     cout<<"Seleccione el numero del contacto que desea eliminar: ";
                     cin>>del;
                     delm=del-1;
                     h=r+1;
                      
                     if (del<=h)
                     {
                              
                                cout<< "Estas seguro que deseas borar el contacto selecionado?"<<endl;
                                cout<< "Nombre: "<<plantilla[delm].Nombre<<endl;
                                cout<< "Apellido: "<<plantilla[delm].apellido<<endl;
                                cout<< "Numero Movil: "<<plantilla[delm].numcel<<endl;
                                 cout<< "1.Si                    2.No"<<endl;
                                
                                cin>>rsp2;
                                cout<<endl;
                                
                                if (rsp2==1)
                                {
                                
                                strcpy(plantilla[delm].Nombre,"\0");
                                strcpy(plantilla[delm].apellido,"\0");
                                strcpy(plantilla[delm].numcel,"\0");
                                
                                copiar=delm;
                                for (a1=delm;a1<r+1;a1++)
                                {
                                    strcpy(plantilla[copiar].Nombre,plantilla[copiar+1].Nombre);
                                    strcpy(plantilla[copiar].apellido,plantilla[copiar+1].apellido);
                                    strcpy(plantilla[copiar].numcel,plantilla[copiar+1].numcel);
                                    copiar++;
                                    
                                }
                                r=cont-2;
                                camb=1;
                                
                                
                                } else {
                                }
                                
                     }else {cout<<"El contacto no existe."<<endl;
                            
                            }
}




En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Agenda C++ (Modificaciones)
« Respuesta #1 en: 26 Mayo 2014, 09:34 am »

La próxima vez, te lo pido por favor, usa las etiquetas GeSHi para que el código quede legible.

Más o menos así:

Código
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. struct Persona {
  8.  
  9. char Nombre[65];
  10. char apellido[65];
  11. char numcel[65];
  12.  
  13.  
  14. }plantilla[100];
  15.  
  16.  
  17. void ingresarRegistro();
  18. void imprimirRegistro();
  19. void modificarRegistro();
  20. void eliminarRegistro();
  21.  
  22. int camb=0;
  23. int copiar;
  24.  
  25.  
  26. int main() {
  27.  
  28.    int opc;
  29.  
  30.   do{
  31.  
  32.                cout<<"MENU"<<endl;
  33.      cout<<"1.Agregar Registro"<<endl;
  34.                cout<<"2.Eliminar Registro"<<endl;
  35.                cout<<"3.Modificar Registro"<<endl;
  36.                cout<<"4.Imprimir Registro"<<endl;
  37.                cout<<"5.Salir"<<endl;
  38.  
  39.                cin>>opc;
  40.  
  41.      switch(opc){
  42.      case 1:
  43.         ingresarRegistro();
  44.         break;
  45.      case 2:
  46.         eliminarRegistro;
  47.  
  48.         break;
  49.      case 3:
  50.         modificarRegistro();
  51.  
  52.         break;
  53.  
  54.                 case 4:
  55.                        imprimirRegistro();
  56.  
  57.                        break;
  58.  
  59.      }
  60.   }while(opc!=5);
  61.  
  62.   return 0;
  63. }
  64.  
  65. int cont=0;
  66.  
  67. void ingresarRegistro(){
  68.  
  69.  
  70.    int r,f;
  71.  
  72.    r=cont++;
  73.  
  74.  
  75.    if (camb==1)
  76.    {
  77.                r--;
  78.                f=r+1;
  79.  
  80.    cout<< "Agregue el nombre del nuevo contacto: ";
  81.    cin>> plantilla[f].Nombre;
  82.    cout<<endl;
  83.  
  84.    cout<< "Agregue el apellido del nuevo contacto: ";
  85.    cin>> plantilla[f].apellido;
  86.    cout<<endl;
  87.  
  88.    cout<< "Agregue el numero movil del nuevo contacto: ";
  89.    cin>> plantilla[f].numcel;
  90.    cout<<endl;
  91.                                    strcpy(plantilla[r].Nombre,plantilla[f].Nombre);
  92.                                    strcpy(plantilla[r].apellido,plantilla[f].apellido);
  93.                                    strcpy(plantilla[r].numcel,plantilla[f].numcel);
  94.                                    copiar++;
  95.  
  96.    }
  97.  
  98.    cout<< "Agregue el nombre del nuevo contacto: ";
  99.    cin>> plantilla[r].Nombre;
  100.    cout<<endl;
  101.  
  102.    cout<< "Agregue el apellido del nuevo contacto: ";
  103.    cin>> plantilla[r].apellido;
  104.    cout<<endl;
  105.  
  106.    cout<< "Agregue el numero movil del nuevo contacto: ";
  107.    cin>> plantilla[r].numcel;
  108.    cout<<endl;
  109.  
  110. }
  111.  
  112. // Imprime 20 valores inecesarios
  113.  
  114. void imprimirRegistro(){
  115.  
  116.   int tr, a, r;
  117.  
  118.      cout<< "Lista de Contactos: ";
  119.      cout<< endl;
  120.  
  121.      if (cont==0)
  122.      {
  123.               cout<< "Lista de contactos vacia.";
  124.               cout<<endl;
  125.  
  126.               } else {
  127.  
  128.  
  129.      for(a=0;a<r+1;a++)
  130.   {
  131.      tr=a;
  132.  
  133.      cout<< tr+1<< ". ";
  134.      cout<< plantilla[a].Nombre;
  135.      cout<<endl;
  136.     }
  137.  
  138.     }
  139.  
  140. }
  141.  
  142. void modificarRegistro(){
  143.  
  144.    int a, tr,val, mod,g,r,rep;
  145.  
  146. cout<< "Lista de Contactos: ";
  147.      cout<< endl;
  148.  
  149.      if (cont==0)
  150.      {
  151.               cout<< "Lista de contactos vacia.";
  152.               cout<<endl;
  153.  
  154.               } else {
  155.  
  156.  
  157.      for(a=0;a<r+1;a++)
  158.  
  159.   {
  160.      tr=a;
  161.  
  162.      cout<< tr+1<< ". ";
  163.      cout<< plantilla[a].Nombre;
  164.      cout<<endl;
  165.     }
  166.                     }
  167.  
  168.                     cout<<"Seleccione el numero del contacto que desea modificar: ";
  169.                     cin>>val;
  170.                     mod=val-1;
  171.                     g=r+1;
  172.  
  173.                     int op1;
  174.  
  175.                    if (val<=g)
  176.                     {
  177.  
  178.                     do
  179.                     {
  180.  
  181.                     cout<<"Contacto:"<<endl;
  182.                     cout<<"1. Nombre: "<<plantilla[mod].Nombre<<endl;
  183.                     cout<<"2. Apellido: "<<plantilla[mod].apellido<<endl;
  184.                     cout<<"3. Numero Movil: "<<plantilla[mod].numcel<<endl;
  185.                     cout<<"4. Menu anterior."<<endl;
  186.                     cout<<"Seleccione la opcion que desea modificar: ";
  187.                     cin>>op1;
  188.                     switch (op1)
  189.                     {
  190.                            case 1:
  191.                                 cout<< "Modifique el nombre del contacto: ";
  192.                                 cin>> plantilla[mod].Nombre;
  193.                                 cout<<endl;
  194.                                 break;
  195.                            case 2:
  196.                                 cout<< "Modifique el apellido del contacto: ";
  197.                                 cin>> plantilla[mod].apellido;
  198.                                 cout<<endl;
  199.                                 break;
  200.                            case 3:
  201.                                 cout<< "Modifique el numero de movil del contacto: ";
  202.                                 cin>> plantilla[mod].numcel;
  203.                                 cout<<endl;
  204.                                 break;
  205.                            case 4:
  206.                                 rep=1;
  207.                                 break;
  208.                            }
  209.                     }while (rep==0);
  210.                     }else {cout<<"El contacto no existe."<<endl;
  211.  
  212.                     rep=0;
  213.  
  214.                     }
  215. }
  216.  
  217. void eliminarRegistro(){
  218.  
  219.    int del;
  220.   int delm;
  221.   int h;
  222.   int rsp2;
  223.   int copiar;
  224.   int a1;
  225.   int r, tr, a;
  226.  
  227.  
  228.         cout<< "Lista de Contactos: ";
  229.      cout<< endl;
  230.  
  231.      if (cont==0)
  232.      {
  233.               cout<< "Lista de contactos vacia.";
  234.               cout<<endl;
  235.  
  236.               } else {
  237.  
  238.  
  239.      for(a=0;a<r+1;a++)
  240.  
  241.   {
  242.      tr=a;
  243.  
  244.      cout<< tr+1<< ". ";
  245.      cout<< plantilla[a].Nombre;
  246.      cout<<endl;
  247.     }
  248.                     }
  249.  
  250.                     cout<<"Seleccione el numero del contacto que desea eliminar: ";
  251.                     cin>>del;
  252.                     delm=del-1;
  253.                     h=r+1;
  254.  
  255.                     if (del<=h)
  256.                     {
  257.  
  258.                                cout<< "Estas seguro que deseas borar el contacto selecionado?"<<endl;
  259.                                cout<< "Nombre: "<<plantilla[delm].Nombre<<endl;
  260.                                cout<< "Apellido: "<<plantilla[delm].apellido<<endl;
  261.                                cout<< "Numero Movil: "<<plantilla[delm].numcel<<endl;
  262.                                 cout<< "1.Si                    2.No"<<endl;
  263.  
  264.                                cin>>rsp2;
  265.                                cout<<endl;
  266.  
  267.                                if (rsp2==1)
  268.                                {
  269.  
  270.                                strcpy(plantilla[delm].Nombre,"\0");
  271.                                strcpy(plantilla[delm].apellido,"\0");
  272.                                strcpy(plantilla[delm].numcel,"\0");
  273.  
  274.                                copiar=delm;
  275.                                for (a1=delm;a1<r+1;a1++)
  276.                                {
  277.                                    strcpy(plantilla[copiar].Nombre,plantilla[copiar+1].Nombre);
  278.                                    strcpy(plantilla[copiar].apellido,plantilla[copiar+1].apellido);
  279.                                    strcpy(plantilla[copiar].numcel,plantilla[copiar+1].numcel);
  280.                                    copiar++;
  281.  
  282.                                }
  283.                                r=cont-2;
  284.                                camb=1;
  285.  
  286.  
  287.                                } else {
  288.                                }
  289.  
  290.                     }else {cout<<"El contacto no existe."<<endl;
  291.  
  292.                            }
  293. }

Ahora, con respecto a tus dudas:

* C++ dispone de una clase "string", esta clase es mucho más potente y segura que char*, te recomiendo sustituirlo:

Código
  1. struct Persona
  2. {
  3.  string nombre;
  4.  string apellido;
  5.  string numcel;
  6. };

* No uses variables globales, intenta evitar su uso ya que dan más problemas que beneficios. Es preferible pasar los valores como argumentos de la función.

En tu caso, por ejemlo, puedes valerte del contenedor "vector" para controlar el tamaño de la plantilla:

Código
  1.  
  2. int main( )
  3. {
  4.  std::vector< Persona > plantilla;
  5.  
  6.  // nuevo elemento
  7.  Persona nuevo;
  8.  nuevo.nombre = "Carlos";
  9.  nuevo.apellido = "Sastre";
  10.  plantilla.push_back( nuevo );
  11.  
  12.  // Numero de elementos
  13.  int numElementos = plantilla.size( );
  14. }

* No tiene ningún sentido que uses varias variables para lo mismo:

Código
  1. void imprimirRegistro()
  2. {
  3.  int tr, a, r;
  4.  
  5.  cout<< "Lista de Contactos: ";
  6.  cout<< endl;
  7.  
  8.  if (cont==0)
  9.  {
  10.    cout<< "Lista de contactos vacia.";
  11.    cout<<endl;
  12.  }
  13.  else
  14.  {
  15.    for(a=0;a<r+1;a++)
  16.    {
  17.      tr=a;
  18.  
  19.      cout<< tr+1<< ". ";
  20.      cout<< plantilla[a].Nombre;
  21.      cout<<endl;
  22.    }
  23.  }
  24. }

tr = a?? para qué? eso sobra.

y si te das cuenta, r no se inicializa nunca... aunque claro, con ese nombre que no significa nada tampoco parece algo obvio.

Y no es la única vez en la que haces esto:

Código
  1.                     cout<<"Seleccione el numero del contacto que desea modificar: ";
  2.                     cin>>val;
  3.                     mod=val-1;
  4.                     g=r+1; // Antes de este punto, r no esta inicializada
  5.  

Además, qué siginifica mod??? y g??? y r??? usa nombres que tengan relación con el uso que vaya a recibir la variable, tu código será mucho más legible... eso y tabularlo con criterio.

* Reutiliza código. Tanto en modificarRegistro como en eliminarRegistro imprimes la plantilla... algo que ya está hecho en imprimirRegistro. Quita ese código duplicado y llama a ésta función:

Un ejemplo de cómo quedaría la función eliminarRegistro usando la clase vector y reutilizando código:

Código
  1. void eliminarRegistro( std::vector< Persona >& plantilla )
  2. {
  3.  imprimirRegistro( plantilla );
  4.  
  5.  if ( !plantilla.empty( ) )
  6.  {
  7.    int indice;
  8.    cout<<"Seleccione el numero del contacto que desea eliminar: ";
  9.    cin>> indice;
  10.  
  11.    if ( indice > 0 && indice <= plantilla.size( ) )
  12.    {
  13.      cout<< "Estas seguro que deseas borar el contacto selecionado?"<<endl;
  14.      cout<< "Nombre: "<<plantilla[ indice - 1 ].Nombre<<endl;
  15.      cout<< "Apellido: "<<plantilla[ indice - 1 ].Apellido<<endl;
  16.      cout<< "Numero Movil: "<<plantilla[ indice - 1 ].Numcel<<endl;
  17.      cout<< "1.Si                    2.No"<<endl;
  18.  
  19.      int respuesta;
  20.      cin>>respuesta;
  21.  
  22.      if (respuesta == 1 )
  23.      {
  24.        auto it = plantilla.begin( ) + indice - 1;
  25.        plantilla.erase( it );
  26.      }
  27.    }
  28.    else
  29.    {
  30.      cout<<"El contacto no existe."<<endl;
  31.    }
  32.  }
  33. }


En línea

Exorcista12

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Agenda C++ (Modificaciones)
« Respuesta #2 en: 26 Mayo 2014, 19:07 pm »


Saludos y gracias por responder, la parte del código que mencionaste me presentan dudas:
Este tiene que ir dentro de la función main?? Si es así en que parte del código debe ir porque si pudiste ver mi código utiliza una especie de menú que accede a cada función que he creado, este código en que opción va?? o funciona de manera independiente?. Gracias

Código
  1.   std::vector< Persona > plantilla;
  2.  // nuevo elemento
  3.  Persona nuevo;
  4.  nuevo.Nombre = "Carlos";
  5.  nuevo.apellido = "Sastre";
  6.  plantilla.push_back( nuevo );
  7.  
« Última modificación: 26 Mayo 2014, 19:14 pm por Exorcista12 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Agenda C++ (Modificaciones)
« Respuesta #3 en: 27 Mayo 2014, 08:09 am »

Es un simple código de ejemplo para que vieses cómo funciona el contenedor. No tienes que ponerlo en ninguna parte de tu código.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sobre Modificaciones En El Template
Sugerencias y dudas sobre el Foro
Crackptus^^ 0 2,130 Último mensaje 15 Junio 2004, 06:29 am
por Crackptus^^
Regedit [Comprobar Modificaciones]
Programación Visual Basic
e500 4 3,272 Último mensaje 16 Agosto 2010, 05:00 am
por e500
Modificaciones del valor de una variable en un .php
PHP
dimitrix 2 2,135 Último mensaje 10 Marzo 2011, 02:29 am
por Castg!
clase FECHA con modificaciones
Programación C/C++
david_BS 0 2,336 Último mensaje 4 Abril 2012, 23:12 pm
por david_BS
IDA Pro Advanced v5.5 no graba las modificaciones
Ingeniería Inversa
arturoro 6 3,714 Último mensaje 4 Marzo 2013, 23:31 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines