Ver Mensaje Individual
  #32 (permalink)  
Antiguo 15/03/2016, 15:03
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: headers, carpetas y menúes c++

Hola instru, gracias por responder, me sirvió lo que me dijiste, al final creé una función fantasma creando un objeto vacío:

ManPersonas.h

Código C++:
Ver original
  1. Persona getPhantom(){
  2.         Persona p;
  3.         p.id = 0;
  4.         p.nom ="";
  5.         p.ape ="";
  6.         return p;
  7.     }
  8.     Persona getRow(std::string xnom){
  9.         for(Persona p : lista){
  10.             if(p.nom == xnom){
  11.                 return p;
  12.             }
  13.         }
  14.         return getPhantom();
  15.     }
  16.     Persona getRow(int xid){
  17.         for(Persona p : lista){
  18.             if(p.id == xid){
  19.                 return p;
  20.             }
  21.         }
  22.         return getPhantom();
  23.     }

y en crud_per.h hice unos if para solucionar el problema en updated y deleted:

Código C++:
Ver original
  1. void updated(){  
  2.     int op;
  3.     string xnom;
  4.     Persona p;
  5.     xnom = addString("Nombre");
  6.     p = getRow(xnom);
  7.     if(p.id == 0){
  8.         cout << "\n La persona deseada no existe :(" << endl;
  9.     }
  10.     else {
  11.         cout << "\n Persona: " << p.id << " Nombre: " << p.nom << " Apellido: " << p.ape;
  12.         cout << "\n ¿Desea algún dato? Aceptar=1/Cancelar=2 :";
  13.         cin >> op;
  14.         if(op == 1){
  15.             cout << "\n ¿Desea editar el nombre ("<< p.nom <<") actual? Aceptar=1/Cancelar=2 :";
  16.             cin >> op;
  17.             if(op == 1){
  18.                 p.nom = addString("Nombre");
  19.             }
  20.             else {
  21.                 pause(2);
  22.             }
  23.             cout << "\n ¿Desea editar el apellido ("<< p.ape <<") actual? Aceptar=1/Cancelar=2 :";
  24.             cin >> op;
  25.             if(op == 1){
  26.                 p.ape = addString("Apellido");
  27.             }
  28.             else {
  29.                 pause(2);
  30.             }
  31.             if(update(p)){            
  32.                 cout << "\n persona editada :)" << endl;            
  33.             }
  34.             else {
  35.                 cout << "\n la persona ya existe :(" << endl;
  36.             }
  37.         }
  38.         else if(op == 2) {        
  39.             pause(2);
  40.         }
  41.         else {
  42.             cout << "\n error :(" << endl;
  43.         }
  44.     }
  45. }
  46. void deleted(){
  47.     int op;
  48.     string xnom;
  49.     Persona p;
  50.     xnom = addString("Nombre");
  51.     p = getRow(xnom);
  52.     if(p.id == 0){
  53.         cout << "\n La persona deseada no existe :(" << endl;
  54.     }
  55.     else {
  56.         cout << "\n Persona: " << p.id << " Nombre: " << p.nom << " Apellido: " << p.ape;
  57.         cout << "\n ¿Desea eliminar la persona seleccionada? Aceptar=1/Cancelar=2 :";
  58.         cin >> op;
  59.         if(op == 1){
  60.             deleted(p);
  61.             cout << "\n persona eliminada :)" << endl;
  62.         }
  63.         else if(op == 2) {        
  64.             pause(2);
  65.         }
  66.         else {
  67.             cout << "\n error :(" << endl;
  68.         }
  69.     }
  70. }

Pero en ManPersonas.h con el update no me doy cuenta cómo editar, lo del if que me dijiste es para evitarlos duplicados en los nombres (en java usaba el equals), pero que debo usar de la lista para actualizar??

Código C++:
Ver original
  1. bool update(const Persona& p){
  2.         Persona per = getRow(p.id);
  3.         if(per.nom != p.nom){
  4.             if(check(p)){
  5.                 return false;
  6.             }
  7.         }
  8.         return true;
  9.     }

Espero sus respuestas y saludos