[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