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

Hola a todos, quería hacer una consulta sobre c++, antes que nada uso netbeans 8.0.2 y linuz mint 17.1, mi problema es que intento simplificar el código para que no quede demasiado largo, y hasta ahí bien pero cuando ejecuto el menú no me funcionan la parte para acceder a las modificaciones y las bajas, pongo el código:

Header Files:

Persona.h

Código C++:
Ver original
  1. #ifndef PERSONA_H
  2. #define PERSONA_H
  3. using namespace std;
  4. struct persona{
  5.     int id;
  6.     string nom;
  7.     string ape;
  8. };
  9. #endif  /* PERSONA_H */

ManPersonas.h

Código C++:
Ver original
  1. #include "Persona.h"
  2. #ifndef CONTRPERSONAS_H
  3. #define CONTRPERSONAS_H
  4. using namespace std;    
  5.     struct persona lista[20];
  6.     int maxIdP = 0;
  7.     int lastP = 0;
  8.     int ind = 0;
  9.     int getMaxIdP(){
  10.         return maxIdP+1;
  11.     }
  12.     void upMaxIdP(){
  13.         maxIdP++;
  14.     }
  15.     bool check(persona p){
  16.         for (int i=0; i< lastP; i++){
  17.             if(lista[i].nom == p.nom){
  18.                 ind = i;
  19.                 return true;
  20.             }
  21.         }
  22.         return false;
  23.     }
  24.     persona getRow(string xnom){
  25.         persona p;
  26.         for (int i=0; i< lastP; i++){
  27.             if(lista[i].nom == xnom){
  28.                 p = lista[i];
  29.                 break;
  30.             }
  31.         }
  32.         return p;
  33.     }
  34.     persona getRow(int id){
  35.         persona p;
  36.         for (int i=0; i< lastP; i++){
  37.             if(lista[i].id == id){
  38.                 p = lista[i];
  39.                 break;
  40.             }
  41.         }
  42.         return p;
  43.     }
  44.     bool create(persona p){
  45.         if(check(p)){            
  46.             return false;
  47.         }
  48.         else{
  49.             lista[lastP] = p;
  50.             lastP++;
  51.             upMaxIdP();
  52.             return true;
  53.         }
  54.     }
  55.     bool update(persona p){
  56.         persona p1 = getRow(p.id);
  57.         if(p1.nom != p.nom){
  58.             if(check(p)){
  59.                 return false;                
  60.             }            
  61.         }        
  62.         lista[ind] = p;
  63.         ind = 0;
  64.         return true;
  65.     }
  66.     void remove(persona p){
  67.         if(check(p)){
  68.             for(int i=ind; i<lastP-1; i++){
  69.                 lista[i] = lista[i+1];
  70.             }
  71.             lastP--;
  72.             ind = 0;
  73.         }
  74.     }
  75.     persona * read(){
  76.         return lista;        
  77.     }
  78.    
  79. #endif  /* CONTRPERSONAS_H */

crud_per.h

Código C++:
Ver original
  1. #include <iostream>
  2. #include "Util.h"
  3. #include "ManPersonas.h"
  4. #ifndef CRUD_PER_H
  5. #define CRUD_PER_H
  6. using namespace std;
  7. void created(){
  8.     int op;
  9.     cout << "\n ¿Desea crear una nueva persona? Aceptar=1/Cancelar=2 : ";
  10.     cin >> op;
  11.     if(op == 1) {
  12.         persona p;
  13.         p.id = getMaxIdP();
  14.         p.nom = addString("Nombre");
  15.         p.ape = addString("Apelido");
  16.         if(create(p)){
  17.             cout << "\n persona creada :)" << endl;            
  18.         }
  19.         else {
  20.             cout << "\n la persona ya existe :(" << endl;
  21.         }                        
  22.     }
  23.     else if(op == 2) {        
  24.         pause(2);
  25.     }
  26.     else {
  27.         cout << "\n error :(" << endl;
  28.     }
  29. }
  30. void updated(){  
  31.     int op;
  32.     string xnom;
  33.     persona p;
  34.     cout << "\n Ingrese nombre: ";
  35.     cin >> xnom;
  36.     p = getRow(xnom);
  37.     cout << "\n Persona: " << p.id << " Nombre: " << p.nom << " Apellido: " << p.ape;
  38.     cout << "\n ¿Desea algún dato? Aceptar=1/Cancelar=2 :";
  39.     cin >> op;
  40.     if(op == 1){
  41.         cout << "\n ¿Desea editar el nombre ("<< p.nom <<") actual? Aceptar=1/Cancelar=2 :";
  42.         cin >> op;
  43.         if(op == 1){
  44.             p.nom = addString("Nombre");
  45.         }
  46.         else {
  47.             pause(2);
  48.         }
  49.         cout << "\n ¿Desea editar el apellido ("<< p.ape <<") actual? Aceptar=1/Cancelar=2 :";
  50.         cin >> op;
  51.         if(op == 1){
  52.             p.ape = addString("Apellido");
  53.         }
  54.         else {
  55.             pause(2);
  56.         }
  57.         if(update(p)){            
  58.             cout << "\n persona editada :)" << endl;            
  59.         }
  60.         else {
  61.             cout << "\n la persona ya existe :(" << endl;
  62.         }
  63.     }
  64.     else if(op == 2) {        
  65.         pause(2);
  66.     }
  67.     else {
  68.         cout << "\n error :(" << endl;
  69.     }
  70. }
  71. void deleted(){
  72.     int op;
  73.     string xnom;
  74.     persona p;
  75.     cout << "\n Ingrese nombre: ";
  76.     cin >> xnom;
  77.     p = getRow(xnom);
  78.     cout << "\n Persona: " << p.id << " Nombre: " << p.nom << " Apellido: " << p.ape;
  79.     cout << "\n ¿Desea eliminar la persona seleccionada? Aceptar=1/Cancelar=2 :";
  80.     cin >> op;
  81.     if(op == 1){
  82.         remove(p);
  83.         cout << "\n persona eliminada :)" << endl;
  84.     }
  85.     else if(op == 2) {        
  86.         pause(2);
  87.     }
  88.     else {
  89.         cout << "\n error :(" << endl;
  90.     }
  91. }
  92. void list(){
  93.     cout << "\n ---Mostrar Personas--- \n";        
  94.     cout << "Persona\t  Nombre\t  Apellido \n";    
  95.     for (int i=0; i< lastP; i++){
  96.         cout << read()[i].id << "\t  " << read()[i].nom << "\t  " << read()[i].ape << "\n";                        
  97.     }
  98. }
  99. #endif  /* CRUD_PER_H */

menu_per.h

Código C++:
Ver original
  1. #include "crud_per.h"
  2. #ifndef MENU_PER_H
  3. #define MENU_PER_H
  4. void menu(){
  5.     int op = 0;
  6.     cout << "\n ---CRUD Personas---\n";
  7.     cout << "\n 1. Crear Persona";
  8.     cout << "\n 2. Editar Persona";
  9.     cout << "\n 3. Borrar Persona";
  10.     cout << "\n 4. Mostrar Personas";
  11.     cout << "\n 5. Salir \n";
  12.     cout << "\n Ingrese Opción: ";
  13.     cin >> op;    
  14.     switch(op){
  15.         case 1:
  16.             created();
  17.             break;  
  18.         case 2:
  19.             updated();
  20.             break;
  21.         case 3:
  22.             deleted();
  23.             break;    
  24.         case 4:
  25.             list();
  26.             break;
  27.         case 5:
  28.             cout << "\n Gracias por usarme ;) \n";
  29.             exit(0);
  30.             break;
  31.         default:
  32.             cout << "\n Error :( \n";
  33.             break;    
  34.     }
  35.     menu();
  36. }
  37. #endif  /* MENU_PER_H */

Util.h

Código C++:
Ver original
  1. #ifndef UTIL_H
  2. #define UTIL_H
  3. using namespace std;
  4. bool checkInt(int s){
  5.     return s >= 48 and s <= 57;
  6. }
  7. bool checkStr(string s){
  8.     for(int i=0; i < s.size(); i++){
  9.         if((s[i] >= 65 and s[i]<= 90) or (s[i] >= 90 and s[i]<= 122)){
  10.             return true;
  11.         }
  12.     }
  13.     return false;
  14. }
  15. void pause(int dur) {
  16.     int temp = time(NULL) + dur;
  17.     while(temp > time(NULL));
  18. }
  19. string addString(string type){
  20.     int intento = 1;
  21.     string nom = "";    
  22.     while(!checkStr(nom)){
  23.         cout << "\n intento nro "<< intento << " Ingrese " << type <<": ";
  24.         cin >> nom;
  25.         intento++;
  26.     }
  27.     return nom;
  28. }
  29. #endif  /* UTIL_H */

Sources Files:

main.cpp

Código C++:
Ver original
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include "menu_per.h"
  4. using namespace std;
  5. int main(int argc, char** argv) {
  6.     menu();
  7.     exit(2);
  8. }

Espero sus respuestas y saludos