Título: problemas de validacion, auxilio!!! Publicado por: larezaka en 1 Junio 2012, 17:21 pm hola gente. soy nuevo en esto y la hago corta,tengo dos problemas de validacion en el sig codigo.
1-primero no me toma los precios Mayorista, Minorista, y Costo en DECIMALES al momento de ingresarlos, solo en INT. :-\ 2- En Nombre Y Descripcion de producto, no me los toma con espacios ni alfanumericos. soy un desastre!! Código
La definicion de la estructura y sus parametros Código
las condiciones del menu para las acciones Código
lo que se aplico para definir que es numerico y alfanumerico Código
opciones del menu Código
para el segundo menu Código
bool ExistenProductosEnArchivo (long code) { FILE * arch; int cant; struct producto produ; bool encontrado; if((arch=fopen("producto.dat","rb+"))==NULL) { if((arch=fopen("producto.dat","wb+"))==NULL) { printf("\nNo se puede abrir el archivo"); return false; } } rewind (arch); encontrado = false; while (!feof(arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error al leer el ultimo registro\n"); break; } if(produ.code == code) { encontrado = true; break; } } fclose (arch); return encontrado; } bool IngresarProductoOrdenado (producto produnuevo) { int cant; FILE *arch, *temp; bool productoNoIngresado; struct producto produ; if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL) { if((arch=fopen("c:\\tp\\producto.dat","wb+"))==NULL) { printf("\nNo se puede abrir el archivo"); return false; } } if((temp=fopen("c:\\tp\\temporal.dat","wb"))==NULL) { printf("\nNo se puede abrir el archivo"); fclose (arch); return false; } productoNoIngresado = true; while (!feof(arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } if (productoNoIngresado && produ.code>produnuevo.code) { fwrite(&produnuevo, sizeof(produnuevo), 1, temp); productoNoIngresado=false; } fwrite(&produ, sizeof(produ), 1, temp); } if (productoNoIngresado) fwrite(&produnuevo, sizeof(produnuevo), 1, temp); fclose (temp); fclose (arch); if( remove( "c:\\tp\\producto.dat" ) != 0 ) printf ( "Error borrando producto.dat" ); if ( rename ("c:\\tp\\temporal.dat", "c:\\tp\\producto.dat") != 0 ) printf ( "Error renombrando temporal.dat a producto.dat" ); return true; } aca es el ingreso de los datos!! Código
void listado_produ () { struct producto produ; int cant, flag=0; FILE *arch; if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL) { printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos"); return; } //clrscr (); while(!feof(arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } if (flag==0) { printf("******************* PRODUCTOS ********************\n\n"); printf("\nNombre \t\tDescripcion\tCodigo\tStock\tMayorista\tMinorista\tCosto\n\n"); flag = 1; } printf ("%-15s%-15s %8ld %9d $:%7d %7d %7d\n", produ.nomb, produ.descrip, produ.code, produ.stock, produ.pmayo, produ.pmino, produ.pcost); } fclose (arch); } void mejor_dife () { struct producto produ; int dife, dife_mayor = 0; int cant, flag = 0; FILE *arch; //para abrir el archivo if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL) { printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos"); return; } //clrscr (); while(!feof(arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } dife = (produ.pmino-produ.pmayo); if (dife > dife_mayor) dife_mayor = dife; } rewind(arch); while (!feof(arch)) { if (flag==0) { printf("*********************** diferencias *********************\n\n"); printf("\nNombre\tDescripcion\tCodigo\tDiferencia\n\n"); flag = 1; } cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } dife = (produ.pmino-produ.pmayo); if (dife == dife_mayor) printf ("%-15s %-15s %8ld %12.2d\n", produ.nomb, produ.descrip, produ.code, dife); } fclose (arch); } void arch_texto () { int flag = 0, cant; struct producto produ; FILE *arch, *txt; char buff [200]; //buffer para guardar caracteres if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL) { printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos"); return; } if((txt=fopen("c:\\tp\\producto_sin_stock.txt","w"))==NULL) { printf("\nNo se puede abrir el archivo"); return; } //clrscr (); while(!feof(arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } if(produ.stock==0) { if (flag==0) { sprintf(buff, "***************** sin stock ******************\n\n" "\nNombre\tDescripcion\tCodigo\tStock\n\n"); if (fwrite(buff, strlen (buff), 1, txt)!= 1) printf ("\nERROR, no se pudo generar el archivo de texto\n"); flag = 1; } sprintf (buff, "%-15s %-15s %8ld %9d\n", produ.nomb, produ.descrip, produ.code, produ.stock); if (fwrite(buff, strlen (buff), 1, txt)!= 1) printf ("\nERROR, no se pudo generar el archivo de texto\n"); } } printf ("\nSe genero un archivo adicional de texto con los productos sin stock\n"); fclose (txt); fclose (arch); } void ver_stock () { struct producto produ; int cant, flag = 0; FILE *arch; if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL) { printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos"); return; } //clrscr (); while(!feof(arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } if (produ.stock==0) { if (flag==0) { printf(" **************** sin stock ***************** \n\n"); printf("\nNombre\t\t\t Descripcion\t Codigo\t \tStock\n\n"); flag = 1; } printf ( "%-15s %-15s %8ld %9d\n", produ.nomb, produ.descrip, produ.code, produ.stock); } } fclose (arch); } long buscar_nomb (char *str, bool BuscoporNombre) { int cant, flag=0, cnt=0, norden; struct producto produ; FILE *arch; bool resultado; long code=0; //clrscr (); if((arch=fopen("c:\\tp\\producto.dat","rb"))==NULL) { printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos"); return 0; } while (!feof (arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } if (BuscoporNombre) resultado = strcmp (produ.nomb, str); else resultado = strcmp (produ.descrip, str); if (resultado == 0) { if (flag == 0) { printf ("DATOS DEL PRODUCTO:\n\n" "NRO Producto Descripcion Codigo Cantidad Mayorista Minorista Costo\n"); flag = 1; } cnt++; printf ("%-3d %-15s %-15s %8ld %5d %5d %5d %5d\n", cnt, produ.nomb, produ.descrip, produ.code, produ.stock, produ.pmayo, produ.pmino, produ.pcost); code = produ.code; } } if (cnt>1) { printf ("\nIngrese el producto elegido por nro de orden (1 a %d): ", cnt); norden = cargarint (5, cnt, 1); rewind (arch); cnt = 0; while (!feof (arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } if (BuscoporNombre) resultado = strcmp (produ.nomb, str); else resultado = strcmp (produ.descrip, str); if (resultado == 0) { cnt++; if (cnt == norden) { code=produ.code; break; } } } } fclose (arch); return code; } void modificar_produ (long code) { int cant, flag=0; struct producto produ; FILE *arch; //clrscr (); if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL) { printf("\nNo se puede abrir el archivo, proceda primero a la carga de los producto"); return; } while (!feof (arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } if (produ.code == code) { flag=1; printf ("DATOS DEL PRODUCTO:\n\nNombreE\tDescripcion\tCodigo\tCantidad\tMayorista\tMinorista\tCosto\n"); printf ("%-15s %-15s %8ld %9d %7d %7d %7d\n", produ.nomb, produ.descrip, produ.code, produ.stock, produ.pmayo, produ.pmino, produ.pcost); // Actualizamos los datos del producto. printf("\nINGRESE EL NUEVO NOMBRE DEL PRODUCTO: "); cargarstr(produ.nomb, MAX_NOMB); printf("\nINGRESE LA NUEVA DESCRIPCION: "); cargarstr(produ.descrip, MAX_DESCRIP); printf("\nINGRSEE LA NUEVA CANTIDAD: "); produ.stock = cargarint(MAX_STOCK, 99999999, 0); printf("\nINGRESE EL NUEVO PRECIO MAYORISTA: "); produ.pmayo = cargarint(MAX_PRECIO, 99999999, 0); printf("\nINGRESE EL NUEVO PRECIO MINORISTA: "); produ.pmino = cargarint(MAX_PRECIO, 99999999, 0); printf("\nINGRESE EL NUEVO PRECIO DE COSTO: "); produ.pcost = cargarint(MAX_PRECIO, 99999999, 0); fseek (arch, (long)(-1)*sizeof(produ), SEEK_CUR); if (fwrite(&produ, sizeof(produ), 1, arch)!= 1) printf ("\nERROR, no se pudo actualizar el producto en el archivo\n"); else //clrscr(); printf ("Producto actualizado ... \n\nNomnre\tDescripcion\tCodigo\tCantidad\tMayorista\tMinorista\tCosto\n"); printf ("%-15s %-15s %8ld %9d %7d %7d %7d\n", produ.nomb, produ.descrip, produ.code, produ.stock, produ.pmayo, produ.pmino, produ.pcost); break; } } if (flag==0) printf ("\nNo se encontro ningun producto con el codigo indicado\n"); fclose (arch); } void eliminar_produ (long code) { int cant, flag=0; struct producto produ; FILE *arch, *temp; //clrscr (); if((arch=fopen("c:\\tp\\producto.dat","rb"))==NULL) { printf("\nNo se puede abrir el archivo, proceda primero a la carga de los producto"); return; } if((temp=fopen("c:\\tp\\temporal.dat","wb"))==NULL) { printf("\nNo se puede abrir el archivo"); return; } while (!feof (arch)) { cant = fread (&produ, sizeof(produ), 1, arch); if ( cant != 1 ) { if (!feof (arch)) printf("Error leyendo ultimo registro\n"); break; } if (produ.code != code) fwrite(&produ, sizeof(produ), 1, temp); else flag=1; } if (flag==0) printf ("\nNo se encontro ningun prodcuto con el codigo indicado\n"); else printf ("\nSe elimino el producto correctamente...\n"); fclose (temp); fclose (arch); if( remove( "c:\\tp\\producto.dat" ) != 0 ) printf ( "Error borrando producto.dat" ); if ( rename ("c:\\tp\\temporal.dat", "c:\\tp\\producto.dat") != 0) printf ( "Error renombrando temporal.dat a producto.dat" ); } por ultimo las funciones para el tipo de datos a ingresar Código
hay esta el cod, y lo que costo, consulte y todo, nadie me dice que tiene. lo principal es el ingreso de los datos, como dije, que los precios sean en decimal y con espacios en el nombre y la descripcion, el resto lo modifico a la marcha y de corregir lo anterioro no seria complicado gracias Camaradas!!! Título: Re: problemas de validacion, auxilio!!! Publicado por: x64core en 2 Junio 2012, 02:46 am que es este desorden ¬¬
te compila el codigo? sino lo hace mostra la linea del error, si el codigo compila y hay un error en tiempo de ejecucion depura el codigo o mostra en que linea Título: Re: problemas de validacion, auxilio!!! Publicado por: Ferno en 2 Junio 2012, 02:56 am Posteá el código entre etiquetas GeSHi. Esto es ilegible.
Título: Re: problemas de validacion, auxilio!!! Publicado por: flony en 2 Junio 2012, 04:08 am en la parte de
Código: struct producto{ ejemplo Código: float pmayo; Código: double pmayo; Código: char nomb[50]; Código: #define MAX_NOMB 20 Título: Re: problemas de validacion, auxilio!!! Publicado por: larezaka en 2 Junio 2012, 05:43 am Gracias por las aclaraciones, el programa compila a la perfeccion, el error principal esta en la validaciones que mencione.
Se que me precipite al subirlo de esta manera, mi intencion era que lo prueben y juzguen el funcionamiento, lo sigo probando. y Flony me sirvio lo que me dijiste, sigo modificandolo para ver si con los parametros que me pediste sujeriste me funcionan bien las validaciones. Repito, Gracias por los comentarios, no soy experto pero me ayudan!! |