[C con Clase] espacios en blanco (cin.getline no anda)

EMILIO MARTINEZ emimartinez15 en hotmail.com
Mie Mar 10 01:12:40 CET 2010


Probe con (cin.getline) pero nunca me toma los espacios en blanco la base de datos porq no recojo los datos con (cin) sino que los SETEO derecho..... y cada vez q hago un espacio solo guarda lo ultimo despues del espacio..... aca les dejo el codigo si alguien me puede decir como puedo hacer se lo agradeceria mucho!!!

#include <iostream>
#include <C:\Documents and Settings\Emilio\Escritorio\PRODUCTO_ADMIN_FINAL2\Pro.h>
#include "SQLdb.h"
#include <string>
#include <conio.h>
#include <stdio.h>

using namespace std;

sql_db obj_mysql("localhost", "root", "root", "productos");

void leerMenu(int *);
void hacerMenu(int);
void agregarProducto();
void insertar(Pro p);
void modificarProducto();
void actualizar(Pro p, string nombre);
void actualizar2(Pro p, string nombre, string proveedor);
void buscarProducto();
void buscarProductoNombre();
void buscarProductoProveedor();
void buscarProductoCodigo();
void listarProductos();
void eliminarProducto();

void menuPrincipal();

int main(){
    system("CLS");
    menuPrincipal();
    return 0;
}

void menuPrincipal(){
    
     int opcion;
     system("CLS");
     cout << "========================================================"<<endl;
     cout << "|                      SANITARIOS RIKI                 |"<< endl;
     cout << "|                       ADMINISTRADOR                  |"<<endl;
     cout << "========================================================"<<endl;
     cout << "|                                                      |"<< endl;
     cout << "\n------------------------- MENU -----------------------" << endl;
     cout << "1- Agregar Nuevo Producto" << endl;
     cout << "2- Modificar un Producto" << endl;
     cout << "3- Buscar un Producto" << endl;
     cout << "4- Mostrar los Productos" << endl;
     cout << "5- Eliminar un Producto" << endl;
     cout << "6- Salir" << endl;
     cout << "\n------------------------------------------------------\n" << endl;
     leerMenu(&opcion);
     hacerMenu(opcion);
     cout << endl;
   
     system("PAUSE");
}

void leerMenu(int *opcion){
     cout << "\nIngrese la opcion deseada: ";
     cin.getline >> *opcion;
}

void hacerMenu(int opcion){
     do{
         switch(opcion){
                        case 1: agregarProducto(); menuPrincipal(); break;
                        case 2: modificarProducto(); menuPrincipal(); break;
                        case 3: buscarProducto(); menuPrincipal(); break;
                        case 4: listarProductos(); menuPrincipal(); break;
                        case 5: eliminarProducto(); menuPrincipal(); break;
                        case 6: exit(1);
                        default: cout << "\nError: Debe seleccionar una opcion entre 1 y 6\n\n"; system("PAUSE"); main();
         }
     }while(opcion>0 && opcion<7);
}
class Utilidades{      
      public:
             static bool validarIngreso(char*, char*, char[]); 
             static bool Numeros(char[]); 
             static bool Letras(char[]); 
             
           
};

bool Utilidades::validarIngreso(char* tipo, char* mensaje, char ingreso[100]){
     bool continua=false;
     while(continua==false){
         cout<<endl<<mensaje;cin>>ingreso;
         if(tipo=="Numeros"){
             continua=Utilidades::Numeros(ingreso);
         }
         else if(tipo=="Letras"){
             continua=Utilidades::Letras(ingreso);
         }
         else if(tipo=="letrasYNumeros"){
             continua=true;
         }
     }
     
     return continua; 
}
bool Utilidades::Numeros(char ingreso[]){
    int cont=0;
    for(int i=0;i<strlen(ingreso);i++){
          char numero=ingreso[i];
          if(isalpha(numero)>0){
              cont++;
          }
    }    
    if(cont==0){
         return true;
    }
    else{
         cout<<"Error debe ingresar numeros"<<endl<<endl;
         return false;
    }
}

bool Utilidades::Letras(char ingreso[]){
    int cont=0;
    for(int i=0;i<strlen(ingreso);i++){
          char letra=ingreso[i];
          if(isdigit(letra)>0){
              cont++;
          }
    }    
    if(cont==0){
         return true;
    }
    else{
         cout<<"Error debe ingresar letras"<<endl<<endl;     
         return false;
    }
}



void agregarProducto(){
     system("CLS");
     Pro p;
   
     char atrib[100];
    if(Utilidades::validarIngreso("Letras", "Nombre: ", atrib)){
         (p).setNombre(atrib);
         cout<<endl;
    }
      char atrib2[100];
    if(Utilidades::validarIngreso("Letras", "Proveedor: ", atrib2)){
         (p).setProveedor(atrib2);
         cout<<endl;
    }
      char atrib3[100];
    if(Utilidades::validarIngreso("Numeros", "Codigo: ", atrib3)){
         (p).setCodigo(atrib3);
         cout<<endl;
    }
    char atrib4[100];
    if(Utilidades::validarIngreso("Numeros", "Stock: ", atrib4)){
         (p).setStock(atrib4);
         cout<<endl;
    }
    char atrib5[100];
    if(Utilidades::validarIngreso("Numeros", "Precio: ", atrib5)){
         (p).setPrecio(atrib5);
         cout<<endl;
    }
     
     insertar(p);
     
     cout << "\nNuevo Producto Agregado Exitosamente\n" << endl;
     cout << endl;
     
     system("PAUSE");
     
}

void insertar(Pro p){
     char *nom = strdup(p.getNombre());
     char *prv = strdup(p.getProveedor());
     char *cod = strdup(p.getCodigo());
     char *sto = strdup(p.getStock());
     char *pre = strdup(p.getPrecio()); 
     char *consulta;
     char sentencia[] = "INSERT INTO pro(nombre, proveedor, codigo, stock, precio) VALUES (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\')";
     
     consulta = new char[strlen(sentencia)+100];
     sprintf(consulta, sentencia, nom, prv, cod, sto, pre);

     obj_mysql.ejecutar_sql(consulta);
}
  

void listarProductos(){
     system("CLS");
     MYSQL_RES *res;
     MYSQL_ROW row;
     int filas;
     int columnas;
     
     res = obj_mysql.ejecutar_sql("SELECT *FROM pro");
     filas = obj_mysql.numero_filas(res);
     columnas = obj_mysql.numero_columnas(res);
     
     cout << "\n                       PRODUCTOS GUARDADOS                " << endl;
     cout << "\nCantidad de Productos en el Administrador: " << filas << endl;
     cout << endl;
     
     for(int j=0; j<columnas; j++)
             cout << obj_mysql.nombre_columna(res, j) << "\t ";
     cout << endl;
     
     while(row = obj_mysql.obtener_fila(res)){
               for(int j=0; j<columnas; j++){
                       cout << row[j] << "\t ";
               }
               cout << endl;
     }
     cout << endl;
     system("PAUSE");
}

void buscarProducto(){
     int opcion1;
     system("CLS");
     cout << "\n                       BUSCAR PRODUCTOS                " << endl;
     cout << "\n**************************************************************\n" << endl;
     cout << "1- Buscar por Nombre" << endl;
     cout << "2- Buscar por Proveedor" << endl;
     cout << "3- Buscar por Codigo" << endl;
     cout << "4- Salir" << endl;
     cout << "\n**************************************************************\n" << endl;
     
     cout << "\nIngrese la Opcion Deseada: ";
     cin.getline >> opcion1;
     
     do{
         switch(opcion1){
                        case 1: buscarProductoNombre(); menuPrincipal(); break;
                        case 2: buscarProductoProveedor(); menuPrincipal(); break;
                        case 3: buscarProductoCodigo(); menuPrincipal(); break;
                        case 4: menuPrincipal();
                        default: cout << "\nError: Debe seleccionar una opcion entre 1 y 4\n\n"; system("PAUSE"); buscarProducto();
         }
     }while(opcion1>0 && opcion1<5);
}

void buscarProductoNombre(){
     system("CLS");
     char nombre[20];
     char *consulta;
     char sentencia[] = "SELECT *FROM pro WHERE nombre = \'%s\'";
     MYSQL_RES *res;
     MYSQL_ROW row;
     int filas;
     int columnas;
     
     cout << "Ingrese el Nombre a Buscar: ";
     cin.getline >> nombre;
     
     system("CLS");
     consulta = new char[strlen(sentencia)+strlen(nombre)];
     sprintf(consulta, sentencia, nombre);
     res = obj_mysql.ejecutar_sql(consulta);
     filas = obj_mysql.numero_filas(res);
     columnas = obj_mysql.numero_columnas(res);
     
     if(obj_mysql.filas_afectadas()>0){
             for(int j=0; j<columnas; j++)
                     cout << obj_mysql.nombre_columna(res, j) << "\t ";
             cout << endl;
     
             while(row = obj_mysql.obtener_fila(res)){
                       for(int j=0; j<columnas; j++){
                               cout << row[j] << "\t ";
                       }
                       cout << endl;
             }
     }else
          cout << "El Contacto No Existe" << endl;
     cout << endl;
     system("PAUSE");
}

void buscarProductoProveedor(){
     system("CLS");
     char proveedor[20];
     char *consulta;
     char sentencia[] = "SELECT *FROM pro WHERE proveedor = \'%s\'";
     MYSQL_RES *res;
     MYSQL_ROW row;
     int filas;
     int columnas;
     
     cout << "Ingrese el Proveedor a Buscar: ";
     cin.getline >> proveedor;
     
     system("CLS");
     consulta = new char[strlen(sentencia)+strlen(proveedor)];
     sprintf(consulta, sentencia, proveedor);
     res = obj_mysql.ejecutar_sql(consulta);
     filas = obj_mysql.numero_filas(res);
     columnas = obj_mysql.numero_columnas(res);
     
     if(obj_mysql.filas_afectadas()>0){
             for(int j=0; j<columnas; j++)
                     cout << obj_mysql.nombre_columna(res, j) << "\t ";
             cout << endl;
     
             while(row = obj_mysql.obtener_fila(res)){
                       for(int j=0; j<columnas; j++){
                               cout << row[j] << "\t ";
                       }
                       cout << endl;
             }
     }else
          cout << "El Producto No Existe" << endl;
     cout << endl;
     system("PAUSE");
}

void buscarProductoCodigo(){
     system("CLS");
     char codigo[10];
     char *consulta;
     char sentencia[] = "SELECT *FROM pro WHERE codigo = \'%s\'";
     MYSQL_RES *res;
     MYSQL_ROW row;
     int filas;
     int columnas;
     
     cout << "Ingrese el Codigo a Buscar: ";
     cin.getline >> codigo;
     
     system("CLS");
     consulta = new char[strlen(sentencia)+strlen(codigo)];
     sprintf(consulta, sentencia, codigo);
     res = obj_mysql.ejecutar_sql(consulta);
     filas = obj_mysql.numero_filas(res);
     columnas = obj_mysql.numero_columnas(res);
     
     if(obj_mysql.filas_afectadas()>0){
             for(int j=0; j<columnas; j++)
                     cout << obj_mysql.nombre_columna(res, j) << "\t ";
             cout << endl;
     
             while(row = obj_mysql.obtener_fila(res)){
                       for(int j=0; j<columnas; j++){
                               cout << row[j] << "\t ";
                       }
                       cout << endl;
             }
     }else
          cout << "El Producto No Existe" << endl;
     cout << endl;
     system("PAUSE");
}

void eliminarProducto(){
     system("CLS");
     char nombre[20];
     char proveedor[20];
     char codigo[6];
     char *consulta;
     char sentenciaBuscar[] = "SELECT *FROM pro WHERE nombre = \'%s\'";
     char sentenciaEliminar[] = "DELETE FROM pro WHERE nombre = \'%s\'";
     char sentenciaEliminar2[] = "DELETE FROM pro WHERE nombre = \'%s\' AND proveedor = \'%s\'";
     char sentenciaBuscar2[] = "SELECT *FROM pro WHERE nombre = \'%s\' AND proveedor = \'%s\'";
     char sentenciaBuscar3[] = "SELECT *FROM pro WHERE nombre = \'%s\' AND proveedor = \'%s\' AND codigo = \'%s\'";
     char sentenciaEliminar3[] = "DELETE FROM pro WHERE nombre = \'%s\' AND proveedor = \'%s\' AND codigo = \'%s\'";
     MYSQL_RES *res;
     MYSQL_ROW  row;
     int columnas;
     
     cout << "Ingrese el Nombre a Eliminar: ";
     cin.getline >> nombre;
     
     consulta = new char[strlen(sentenciaBuscar)+strlen(nombre)];
     sprintf(consulta, sentenciaBuscar, nombre);
     res = obj_mysql.ejecutar_sql(consulta);
     
     if(obj_mysql.filas_afectadas()>0){
            if(obj_mysql.filas_afectadas()==1){
                   row = obj_mysql.obtener_fila(res);
                   consulta = new char[strlen(sentenciaEliminar)+sizeof(nombre)];   
                   sprintf(consulta, sentenciaEliminar, nombre);
                   obj_mysql.ejecutar_sql(consulta);
                   cout << "\nEl Producto Fue Eliminado Exitosamente\n" << endl;  
            }else
                 if(obj_mysql.filas_afectadas()>1){
                        cout << "\nHay mas de un Producto con el Nombre " << nombre << endl;
                        
                        system("PAUSE");
                        system("CLS");
                        
                        cout << "Ingrese el Proveedor a Eliminar: ";
                        cin.getline >> proveedor;
                        
                        consulta = new char[strlen(sentenciaBuscar2)+strlen(nombre)+strlen(proveedor)];
                        sprintf(consulta, sentenciaBuscar2, nombre, proveedor);
                        res = obj_mysql.ejecutar_sql(consulta);
                        row = obj_mysql.obtener_fila(res);
                        
                        if(obj_mysql.filas_afectadas()>0){
                               if(obj_mysql.filas_afectadas()==1){
                                      row = obj_mysql.obtener_fila(res);
                                      consulta = new char[strlen(sentenciaEliminar2)+sizeof(nombre)+sizeof(proveedor)];   
                                      sprintf(consulta, sentenciaEliminar2, nombre, proveedor);
                                      obj_mysql.ejecutar_sql(consulta);
                                      cout << "\nEl Producto Fue Eliminado Exitosamente\n" << endl;
                               }else
                                    if(obj_mysql.filas_afectadas()>1){
                                           cout << "\nHay mas de un Producto con el Proveedor " << proveedor << endl;
                        
                                           system("PAUSE");
                                           system("CLS");
                        
                                           cout << "Ingrese el Codigo a Eliminar: ";
                                           cin.getline >> codigo;
                        
                                           consulta = new char[strlen(sentenciaBuscar3)+strlen(nombre)+strlen(proveedor)+strlen(codigo)];
                                           sprintf(consulta, sentenciaBuscar3, nombre, proveedor, codigo);
                                           res = obj_mysql.ejecutar_sql(consulta);
                                           row = obj_mysql.obtener_fila(res);
                                           
                                           if(obj_mysql.filas_afectadas()>0){
                                                  row = obj_mysql.obtener_fila(res);
                                                  consulta = new char[strlen(sentenciaEliminar3)+sizeof(nombre)+sizeof(proveedor)+sizeof(codigo)];   
                                                  sprintf(consulta, sentenciaEliminar3, nombre, proveedor, codigo);
                                                  obj_mysql.ejecutar_sql(consulta);
                                                  cout << "\nEl Producto Fue Eliminado Exitosamente\n" << endl;
                                                  }else
                                                       cout << "El Producto No Existe\n" << endl;
                        }
                        }else
                             cout << "El Producto No Existe\n" << endl;
                 }
     }else
          cout << "\nEl Producto No Existe\n" << endl;
     system("PAUSE");
}

void modificarProducto(){
     system("CLS");
     char nombre[20];
     char proveedor[20];
     char *consulta;
     char sentencia[] = "SELECT *FROM pro WHERE nombre = \'%s\'";
     char sentencia2[] = "SELECT *FROM pro WHERE nombre = \'%s\' AND proveedor = \'%s\'";
     MYSQL_RES *res;
     MYSQL_ROW  row; 
     Pro p;
     string a;
     
     cout << "Ingrese el Nombre del Producto a Modificar: ";
     cin.getline >> nombre;
     
     consulta = new char[strlen(sentencia)+strlen(nombre)];   
     sprintf(consulta, sentencia, nombre);
     res = obj_mysql.ejecutar_sql(consulta);

     if(obj_mysql.filas_afectadas()>0){
            if(obj_mysql.filas_afectadas()==1){
                   row = obj_mysql.obtener_fila(res);
                   system("CLS");
       char atrib[100];
    if(Utilidades::validarIngreso("Letras", "Nombre: ", atrib)){
         (p).setNombre(atrib);
         cout<<endl;
    }
      char atrib2[100];
    if(Utilidades::validarIngreso("Letras", "Proveedor: ", atrib2)){
         (p).setProveedor(atrib2);
         cout<<endl;
    }
      char atrib3[100];
    if(Utilidades::validarIngreso("Numeros", "Codigo: ", atrib3)){
         (p).setCodigo(atrib3);
         cout<<endl;
    }
          char atrib4[100];
    if(Utilidades::validarIngreso("Numeros", "Stock: ", atrib4)){
         (p).setStock(atrib4);
         cout<<endl;
    }
          char atrib5[100];
    if(Utilidades::validarIngreso("Numeros", "Precio: ", atrib5)){
         (p).setPrecio(atrib5);
         cout<<endl;
    }
            
                   actualizar(p, nombre);
                   cout << "\nLos Datos del Producto Fueron Actualizados Exitosamente\n" << endl;
            }else
                 if(obj_mysql.filas_afectadas()>1){
                        cout << "\nHay mas de un Producto con el Nombre " << nombre << endl;
                        
                        system("PAUSE");
                        system("CLS");
                        
                        cout << "Ingrese el Proveedor del Producto a Modificar: ";
                        cin.getline >> proveedor;
                        
                        consulta = new char[strlen(sentencia2)+strlen(nombre)+strlen(proveedor)];   
                        sprintf(consulta, sentencia2, nombre, proveedor);
                        res = obj_mysql.ejecutar_sql(consulta);
                        
                        if(obj_mysql.filas_afectadas()>0){
                               row = obj_mysql.obtener_fila(res);
                               system("CLS");
           char atrib[100];
    if(Utilidades::validarIngreso("Letras", "Nombre: ", atrib)){
         (p).setNombre(atrib);
         cout<<endl;
    }
      char atrib2[100];
    if(Utilidades::validarIngreso("Letras", "Proveedor: ", atrib2)){
         (p).setProveedor(atrib2);
         cout<<endl;
    }
      char atrib3[100];
    if(Utilidades::validarIngreso("Numeros", "Codigo: ", atrib3)){
         (p).setCodigo(atrib3);
         cout<<endl;
    }
    char atrib4[100];
    if(Utilidades::validarIngreso("Numeros", "Stock: ", atrib4)){
         (p).setStock(atrib4);
         cout<<endl;
    }
          char atrib5[100];
    if(Utilidades::validarIngreso("Numeros", "Precio: ", atrib5)){
         (p).setPrecio(atrib5);
         cout<<endl;
    }
    
                               actualizar2(p, nombre, proveedor);
                               cout << "\nLos Datos del Producto Fueron Actualizados Exitosamente\n" << endl;
                        }else
                             cout << "\nEl Producto No Existe\n" << endl;
                 }      
     }else
            cout << "\nEl Producto No Existe\n" << endl;
     system("PAUSE");
}

void actualizar(Pro p, string pNombre){
     char *nombre = strdup(p.getNombre());
     char *proveedor = strdup(p.getProveedor());
     char *codigo = strdup(p.getCodigo());
     char *stock = strdup(p.getStock());
     char *precio = strdup(p.getPrecio());
     char *nombreActual = strdup(pNombre.c_str());
     
     
     char *consulta;
     char sentencia[] = "UPDATE pro SET nombre = \'%s\', proveedor = \'%s\', codigo = \'%s\', stock = \'%s\', precio = \'%s\' WHERE nombre = \'%s\'";
     
     consulta = new char[strlen(sentencia)+100];   
     sprintf(consulta, sentencia, nombre, proveedor, codigo, stock, precio, nombreActual);
     obj_mysql.ejecutar_sql(consulta);
}

void actualizar2(Pro p, string pNombre, string pProveedor){
     char *nombre = strdup(p.getNombre());
     char *proveedor = strdup(p.getProveedor());
     char *codigo = strdup(p.getCodigo());
     char *stock = strdup(p.getStock());
     char *precio = strdup(p.getPrecio());
     char *nombreActual = strdup(pNombre.c_str());
     char *proveedorActual = strdup(pProveedor.c_str());
     
     char *consulta;
     char sentencia[] = "UPDATE pro SET nombre = \'%s\', proveedor = \'%s\', codigo = \'%s\', stock = \'%s\', precio = \'%s\' WHERE nombre = \'%s\' AND proveedor = \'%s\'";
     
     consulta = new char[strlen(sentencia)+100];   
     sprintf(consulta, sentencia, nombre, proveedor, codigo, stock, precio, nombreActual, proveedorActual);
     obj_mysql.ejecutar_sql(consulta);
}
 		 	   		  
_________________________________________________________________
¿Te gustaría tener Hotmail en tu móvil Movistar? ¡Es gratis!
http://serviciosmoviles.es.msn.com/hotmail/movistar-particulares.aspx
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100310/d0db1fa4/attachment.html>


Más información sobre la lista de distribución Cconclase