Sos un Genio Diego, gracias totales. Sin vos no se como hubiese hecho para aprender a manejar C. Tengo que volver a ver unos videos de cosas que saltee porque no me las pedian en el examen. Voy a ponerte like en todos los videos. Mil gracias. Hoy rindo, espero recordar todo. slds
@gabrielsin58442 жыл бұрын
Excelente, mi profesor explicando es horrible sobre todo este tema y vos lo hiciste re fácil de entender sos el mejor!!!!!!!!!
@diegomoissetdeespanes2 жыл бұрын
Saludos Gabriel.
@josevalencia35392 жыл бұрын
Profe usted es un crack, me sirvió todo incluso lo modifique a mi gusto y funciono nuevamente.
@MiguelAngelRosasOcampo4 жыл бұрын
¡Maestrooooo!! uff, no encontraba la manera de modificar el registro !! muchas gracias profesooooor !! la verdad me encantan sus videos, ojalá siga subiendo videos de este maravilloso lenguaje
@diegomoissetdeespanes4 жыл бұрын
Saludos Miguel.
@juztinho143 жыл бұрын
ES USTED UN CRACK!!!! Sin su ayuda no hubiera podido resolver mi tarea, mis respetos!
@diegomoissetdeespanes3 жыл бұрын
Saludos.
@lucasezequielaraujo86412 жыл бұрын
Me gusto mucho la explicacion, sin tanta vuelta y bien explicado
@ronaldocarbajal64284 жыл бұрын
Que buena manera de explicarlo! Siga asi , enseñando más cosas sobre el lenguaje C/C++ :D! Saludos!
@diegomoissetdeespanes4 жыл бұрын
Gracias, saludos!
@alfredogodoy6854 Жыл бұрын
Ya casi termino este curso. Muchas gracias por todo lo que compartís!
@debajalla8992 Жыл бұрын
Excelente el curso!!!! aprendí un monton!!! Lo aplaudo!
@JTB_Enginer10 ай бұрын
Amigo te amo.
@kendrickishcampary97002 жыл бұрын
Excelente video, me srivió para terminar mi proyecto
@JoseCastro-ms4bo2 жыл бұрын
Gracias por compartir tus conocimientos....muy agradecido!!!!!!!
@diegomoissetdeespanes2 жыл бұрын
Saludos Jose.
@claudiacanta55339 ай бұрын
Muy útil, gracias!
@martinchocoo Жыл бұрын
sos capo diego te re banco
@Aran023 жыл бұрын
Le agradezco mucho, encontré cómo usar varias funciones que tenia en duda c:
@matymau10604 жыл бұрын
muy buen video , la verdad me ayudo bastante , sigue asi
@diegomoissetdeespanes4 жыл бұрын
Saludos Maty
@oscarsanchez73903 жыл бұрын
Sos un fenomeno, gracias, me salvaste.
@diegomoissetdeespanes3 жыл бұрын
Saludos Oscar.
@l.d.a99294 жыл бұрын
Buen video bro saludos desde Panamá !!
@diegomoissetdeespanes4 жыл бұрын
Saludos y gracias
@chicapercebe3 жыл бұрын
muchas gracias justo andaba buscando un ejercicio asi, me sirvio mucho
@facuackerman30442 жыл бұрын
printf("Incríble video, me sirvio mucho. Gracias");
@diegomoissetdeespanes2 жыл бұрын
#include #include int main() { int f; char cad[]="Tbmvept"; for(f=0;f
@oscarfabianchavezgomez44003 жыл бұрын
Buenísimo tutorial!
@diegomoissetdeespanes3 жыл бұрын
Gracias!
@dougnaho3 жыл бұрын
Muchas gracias, esta super claro.
@diegomoissetdeespanes3 жыл бұрын
Saludos Doug.
@dougnaho3 жыл бұрын
Disculpa Diego, como podria hacer para eliminar un registro.
@diegomoissetdeespanes3 жыл бұрын
@@dougnaho Lo que se hace es agregar un campo al registro que indique si el registro está borrado o no. Luego se modifican todos los algoritmos a partir de dicho campo (listados, consultas, modificaciones etc.) El algoritmo modificado es: #include #include #include typedef struct { int codigo; char descripcion[41]; float precio; int borrado; // 0=existe 1=borrado } tproducto; void continuar() { printf("Presione una tecla para continuar "); getch(); } void crear() { FILE *arch; arch=fopen("productos.dat","wb"); if (arch==NULL) exit(1); fclose(arch); continuar(); } void cargar() { FILE *arch; arch=fopen("productos.dat","ab"); if (arch==NULL) exit(1); tproducto producto; printf("Ingrese el codigo del producto:"); scanf("%i",&producto.codigo); fflush(stdin); printf("Ingrese el nombre del producto:"); gets(producto.descripcion); printf("Ingrese precio:"); scanf("%f",&producto.precio); producto.borrado=0; fwrite(&producto, sizeof(tproducto), 1, arch); fclose(arch); continuar(); } void listado() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); tproducto producto; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); } fread(&producto, sizeof(tproducto), 1, arch); } fclose(arch); continuar(); } void consulta() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a consultar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void modificacion() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a modificar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); printf("Ingrese nuevo precio:"); scanf("%f",&producto.precio); int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se modifico el precio para dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void borrar() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a borrar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { producto.borrado=1; int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se borro dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } int main() { int opcion; do { printf("1 - Crear un archivo binario llamado \"productos.dat\" "); printf("2 - Carga de registros de tipo tproducto "); printf("3 - Listado completo de productos. "); printf("4 - Consulta de un producto por su codigo. "); printf("5 - Modificacion del precio de un producto. "); printf("6 - Borrar. "); printf("7 - Finalizar "); printf("Ingrese su opcion:"); scanf("%i",&opcion); switch (opcion) { case 1:crear(); break; case 2:cargar(); break; case 3:listado(); break; case 4:consulta(); break; case 5:modificacion(); break; case 6:borrar(); break; } } while (opcion!=7); return 0; }
@dougnaho3 жыл бұрын
@diego, Mil, mil, mil pero en serio mil gracias. agradezco mucho la manera en poder compartir tu conocimiento de una manera muy clara y detallada, y mas aún el hecho de ayudar de una forma fraternal. Tienes un amigo en Guatemala, saludos y bendiciones.
@facundoalvarez15872 жыл бұрын
Quisiera encontrar la forma de validar el UserName de mi carga , si en la carga de datos siguiente se repite el nombre que no me deje seguir cargando hasta que lo modifique? Tenes algo sobre ese tema?? Estoy haciendo un sistema de clientes y pedidos.
@yop74033 жыл бұрын
hola! quería saber como se aria en caso que quisiera modificar un dato pero el valor nuevo lo tengo ya en una variable, es decir sin preguntar al usuario con el scanf
@leonelgomez21382 жыл бұрын
te amo
@juliodejesusgarciamendez7034 жыл бұрын
!!Que buena forma de explicar un semestre entero de programacion en c!! una duda, ¿como podria eliminar un registro del archivo?
@diegomoissetdeespanes4 жыл бұрын
Lo que se hace es agregar un campo al registro que indique si el registro está borrado o no. Luego se modifican todos los algoritmos a partir de dicho campo (listados, consultas, modificaciones etc.) El algoritmo modificado es: #include #include #include typedef struct { int codigo; char descripcion[41]; float precio; int borrado; // 0=existe 1=borrado } tproducto; void continuar() { printf("Presione una tecla para continuar "); getch(); } void crear() { FILE *arch; arch=fopen("productos.dat","wb"); if (arch==NULL) exit(1); fclose(arch); continuar(); } void cargar() { FILE *arch; arch=fopen("productos.dat","ab"); if (arch==NULL) exit(1); tproducto producto; printf("Ingrese el codigo del producto:"); scanf("%i",&producto.codigo); fflush(stdin); printf("Ingrese el nombre del producto:"); gets(producto.descripcion); printf("Ingrese precio:"); scanf("%f",&producto.precio); producto.borrado=0; fwrite(&producto, sizeof(tproducto), 1, arch); fclose(arch); continuar(); } void listado() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); tproducto producto; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); } fread(&producto, sizeof(tproducto), 1, arch); } fclose(arch); continuar(); } void consulta() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a consultar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void modificacion() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a modificar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); printf("Ingrese nuevo precio:"); scanf("%f",&producto.precio); int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se modifico el precio para dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void borrar() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a borrar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { producto.borrado=1; int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se borro dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } int main() { int opcion; do { printf("1 - Crear un archivo binario llamado \"productos.dat\" "); printf("2 - Carga de registros de tipo tproducto "); printf("3 - Listado completo de productos. "); printf("4 - Consulta de un producto por su codigo. "); printf("5 - Modificacion del precio de un producto. "); printf("6 - Borrar. "); printf("7 - Finalizar "); printf("Ingrese su opcion:"); scanf("%i",&opcion); switch (opcion) { case 1:crear(); break; case 2:cargar(); break; case 3:listado(); break; case 4:consulta(); break; case 5:modificacion(); break; case 6:borrar(); break; } } while (opcion!=7); return 0; }
@gabrielreyes87254 жыл бұрын
@@diegomoissetdeespanes lo probé y no me elimina nada:(
@eduardoruizrios61403 жыл бұрын
@@gabrielreyes8725 Se pueden eliminar los registros de un archivo de dos maneras: borrado lógico o borrado físico. No sé si hallaste la forma de hacerlo finalmente pero yo tengo una manera de hacer el borrado físico y es mediante una función que va a pedir que ingreses el código del producto que se desea eliminar. Lo que se pretende hacer es comparar el código del producto ingresado con el código de cada registro y para aquellos códigos que sean diferentes al código ingresado los iremos guardando en un archivo nuevo. Finalmente cerramos los archivos y eliminamos con la función remove() el archivo original y renombramos el nuevo archivo con la función rename(). Te dejo el ejemplo de la función: void deleteproduct(){ FILE *archivo; FILE *temporal; archivo=fopen("Catálogo de productos.dat", "rb"); temporal=fopen("temporal.dat", "wb"); if(archivo==NULL || temporal==NULL) printf("ERROR: uno de los dos archivos no ha sido encontrado. "); printf("Ingrese el código del producto que desea eliminar: "); int codigo; scanf("%d", &codigo); char a; printf("¿Desea continuar con la eliminación del producto? [S/N] "); fflush(stdin); scanf("%c", &a); if(a=='S' || a=='s'){ product producto; fread(&producto, sizeof(product), 1, archivo); while(!feof(archivo)){ if(producto.code!=codigo) fwrite(&producto, sizeof(product), 1, temporal); fread(&producto, sizeof(product), 1, archivo); } printf("El producto ha sido eliminado satisfactoriamente. "); fclose(archivo); fclose(temporal); remove("Catálogo de productos.dat"); rename("temporal.dat", "Catálogo de productos.dat"); printf("¿Desea eliminar otro producto? [S/N] "); fflush(stdin); scanf("%c", &a); if(a=='S' || a=='s'){ deleteproduct(); } else printf("Proceso terminado. ");; } else if(a=='N' || a=='n') printf("Proceso cancelado. "); }
@agustinlyon81733 жыл бұрын
Amigo estoy trabajando con un archivo de texto, quiero hacer la funcion de consulta como seria en este caso? Porque hago lo del video y no me funciona... void consultarNP(){ char nom[15]; int band=0; personas p; FILE *fp2; fp2 = fopen("PersonasInfo.txt", "r"); printf("Digita nombre a buscar "); fgets(nom,15,stdin); verif(nom); fread(&p,sizeof(personas),1,fp2); while (!feof(fp2)){ if (strstr(nom,p.nombre)!=NULL) { printf(" Nombre = %s",p.nombre); printf("Cedula = %d",p.diab); band = 1; break; } fread(&p,sizeof(personas),1,fp2); } fclose(fp2); } y esta es mi estruct typedef struct{ long int cedula; char nombre[15]; int diab; int mesb; int anob; }personas;
@diegomoissetdeespanes3 жыл бұрын
En principio esta bien el algoritmo de búsqueda, yo lo pruebo cargando 3 registros y luego consultando cualquiera de ellos y funciona: #include #include #include typedef struct{ long int cedula; char nombre[15]; int diab; int mesb; int anob; }personas; void crear() { FILE *arch; arch=fopen("PersonasInfo.txt","wb"); if (arch==NULL) exit(1); fclose(arch); } void cargar() { FILE *arch; arch=fopen("PersonasInfo.txt","ab"); if (arch==NULL) exit(1); personas persona; printf("Ingrese cedula de la persona:"); scanf("%ld",&persona.cedula); fflush(stdin); printf("Ingrese el nombre :"); gets(persona.nombre); printf("Ingrese dia:"); scanf("%i",&persona.diab); printf("Ingrese mes:"); scanf("%i",&persona.mesb); printf("Ingrese anio:"); scanf("%i",&persona.anob); fwrite(&persona, sizeof(personas), 1, arch); fclose(arch); } void consultarNP(){ char nom[15]; int band=0; personas p; FILE *fp2; fp2 = fopen("PersonasInfo.txt", "r"); printf("Digita nombre a buscar "); fgets(nom,15,stdin); //verif(nom); fread(&p,sizeof(personas),1,fp2); while (!feof(fp2)){ if (strstr(nom,p.nombre)!=NULL) { printf(" Nombre = %s",p.nombre); printf(" Cedula = %ld",p.cedula); printf(" Dia = %d",p.diab); printf(" Mes = %d",p.mesb); printf(" Anio = %d",p.anob); band = 1; break; } fread(&p,sizeof(personas),1,fp2); } fclose(fp2); } void main() { crear(); cargar(); cargar(); cargar(); consultarNP(); }
@agustinlyon81733 жыл бұрын
@@diegomoissetdeespanes Gracias amigo, la cosa es que yo ajuro tengo que trabajar con archivos txt. Y bueno cambie los fread por fscanf, solo tengo una duda. Sabras por que al hacer dicho cambio cuando le das a consultar y tiene mas de un registro no lee los demas? O no los muestra por asi decirlo, si yo tengo el registro a con el codigo 1 y el registro b con el codigo 2 si quiero consultar codigo 2 me dice que no existe
@diegomoissetdeespanes3 жыл бұрын
@@agustinlyon8173 con archivos de texto no podemos grabar registros, solo podemos grabar texto.
@tomasdangelo69403 жыл бұрын
Buen video!
@diegomoissetdeespanes3 жыл бұрын
Gracias.
@bearose710 Жыл бұрын
Hola buen curso, como seria el algoritmo con un archivo secuencial indexado, ya que he estado viendo que utilizan dos archivos uno para los datos del archivo y otro para el area de indices con una clave y la direccion, si pudiera darme alguna informacion o algun ejemplo de como seria el algoritmo en lenguaje c, ya que tengo que hacer un proyecto con este tipo de archivos se lo agradeceria...
@diegomoissetdeespanes Жыл бұрын
Es un tema bastante más complejo que el video sobre archivos binarios. Pero te puede servir un bosquejo de como implementar dicho algoritmo con este ejemplo: #include #include // Definición de estructuras typedef struct { int id; char nombre[50]; float precio; int cantidad; } Producto; typedef struct { int id; long posicion; } Indice; void crearArchivos() { FILE* archivoProductos; FILE* archivoIndice; archivoProductos = fopen("productos.dat", "wb"); archivoIndice = fopen("indice.dat", "wb"); if (archivoProductos == NULL || archivoIndice == NULL) { printf("Error al abrir el archivo"); return; } fclose(archivoProductos); fclose(archivoIndice); } // Función para insertar una fila en el archivo de productos y en el archivo de índice void insertarFila() { FILE* archivoProductos; FILE* archivoIndice; Producto producto; Indice indice; long posicion; archivoProductos = fopen("productos.dat", "ab"); archivoIndice = fopen("indice.dat", "ab"); if (archivoProductos == NULL || archivoIndice == NULL) { printf("Error al abrir el archivo"); return; } // Pedir al usuario que ingrese los datos del nuevo producto printf("Ingrese los datos del nuevo producto: "); printf("ID: "); scanf("%d", &producto.id); printf("Nombre: "); scanf("%s", producto.nombre); printf("Precio: "); scanf("%f", &producto.precio); printf("Cantidad: "); scanf("%d", &producto.cantidad); // Escribir el nuevo producto en el archivo de productos fwrite(&producto, sizeof(Producto), 1, archivoProductos); // Obtener la posición en el archivo de productos del nuevo producto posicion = ftell(archivoProductos) - sizeof(Producto); // Escribir el nuevo índice en el archivo de índices indice.id = producto.id; // Escribir el nuevo índice en el archivo de índices indice.posicion = posicion; fwrite(&indice, sizeof(Indice), 1, archivoIndice); fclose(archivoProductos); fclose(archivoIndice); } void buscarProducto() { FILE* archivoProductos; FILE* archivoIndice; Indice indice; Producto producto; int codigo; archivoIndice = fopen("indice.dat", "rb"); if (archivoIndice == NULL) { printf("Error al abrir el archivo de indice "); return; } // Pedir al usuario que ingrese el codigo del producto a buscar printf("Ingrese el codigo del producto a buscar: "); scanf("%d", &codigo); // Buscar el indice correspondiente al codigo de producto ingresado // El archivo de indice es mas pequeno y por lo tanto lo vamos a encontrar mas rapidamente // Se pueden organizar el archivo indice como un arbol para localizar el codigo de producto while (fread(&indice, sizeof(Indice), 1, archivoIndice)) { if (indice.id == codigo) { // Posicionar el cursor en el archivo de productos archivoProductos = fopen("productos.dat", "rb"); if (archivoProductos == NULL) { printf("Error al abrir el archivo de productos "); return; } fseek(archivoProductos, indice.posicion, SEEK_SET); // Leer los datos del producto y mostrarlos en pantalla fread(&producto, sizeof(Producto), 1, archivoProductos); printf("ID: %d ", producto.id); printf("Nombre: %s ", producto.nombre); printf("Precio: %f ", producto.precio); printf("Cantidad: %d ", producto.cantidad); fclose(archivoProductos); fclose(archivoIndice); return; } } // Si no se encontró un índice correspondiente al codigo de producto ingresado printf("No se encontró el producto con el codigo ingresado "); fclose(archivoIndice); } int main() { crearArchivos(); // Insertamos tres registros de prueba insertarFila(); insertarFila(); insertarFila(); buscarProducto(); }
@bearose710 Жыл бұрын
@@diegomoissetdeespanes Muchas Gracias, Se lo agradezco, el codigo me sirve bastante para adaptarlo a mi proyecto y agregarle otras cosas ya que muy pocos explican el tema de archivos indexados!!
@bearose710 Жыл бұрын
@@diegomoissetdeespanes Disculpe me surge otro problema como haria para modificar este tipo de archivos, ya que he estado realizando pruebas y logro modificar el archivo principal,pero no he encontrado la forma de actualizar el archivo de indices, por ejemplo cuando modifico el codigo y lo vuelvo a buscar no me funciona ya que el archivo indice no se actualiza, disculpe la molestia si me puede ayudar se lo agradeceria.
@diegomoissetdeespanes Жыл бұрын
@@bearose710 #include #include // Definición de estructuras typedef struct { int id; char nombre[50]; float precio; int cantidad; } Producto; typedef struct { int id; long posicion; } Indice; void crearArchivos() { FILE* archivoProductos; FILE* archivoIndice; archivoProductos = fopen("productos.dat", "wb"); archivoIndice = fopen("indice.dat", "wb"); if (archivoProductos == NULL || archivoIndice == NULL) { printf("Error al abrir el archivo"); return; } fclose(archivoProductos); fclose(archivoIndice); } // Función para insertar una fila en el archivo de productos y en el archivo de índice void insertarFila() { FILE* archivoProductos; FILE* archivoIndice; Producto producto; Indice indice; long posicion; archivoProductos = fopen("productos.dat", "ab"); archivoIndice = fopen("indice.dat", "ab"); if (archivoProductos == NULL || archivoIndice == NULL) { printf("Error al abrir el archivo"); return; } // Pedir al usuario que ingrese los datos del nuevo producto printf("Ingrese los datos del nuevo producto: "); printf("ID: "); scanf("%d", &producto.id); printf("Nombre: "); scanf("%s", producto.nombre); printf("Precio: "); scanf("%f", &producto.precio); printf("Cantidad: "); scanf("%d", &producto.cantidad); // Escribir el nuevo producto en el archivo de productos fwrite(&producto, sizeof(Producto), 1, archivoProductos); // Obtener la posición en el archivo de productos del nuevo producto posicion = ftell(archivoProductos) - sizeof(Producto); // Escribir el nuevo índice en el archivo de índices indice.id = producto.id; // Escribir el nuevo índice en el archivo de índices indice.posicion = posicion; fwrite(&indice, sizeof(Indice), 1, archivoIndice); fclose(archivoProductos); fclose(archivoIndice); } void buscarProducto() { FILE* archivoProductos; FILE* archivoIndice; Indice indice; Producto producto; int codigo; archivoIndice = fopen("indice.dat", "rb"); if (archivoIndice == NULL) { printf("Error al abrir el archivo de indice "); return; } // Pedir al usuario que ingrese el codigo del producto a buscar printf("Ingrese el codigo del producto a buscar: "); scanf("%d", &codigo); // Buscar el indice correspondiente al codigo de producto ingresado // El archivo de indice es mas pequeno y por lo tanto lo vamos a encontrar mas rapidamente // Se pueden organizar el archivo indice como un arbol para localizar el codigo de producto while (fread(&indice, sizeof(Indice), 1, archivoIndice)) { if (indice.id == codigo) { // Posicionar el cursor en el archivo de productos archivoProductos = fopen("productos.dat", "rb"); if (archivoProductos == NULL) { printf("Error al abrir el archivo de productos "); return; } fseek(archivoProductos, indice.posicion, SEEK_SET); // Leer los datos del producto y mostrarlos en pantalla fread(&producto, sizeof(Producto), 1, archivoProductos); printf("ID: %d ", producto.id); printf("Nombre: %s ", producto.nombre); printf("Precio: %f ", producto.precio); printf("Cantidad: %d ", producto.cantidad); fclose(archivoProductos); fclose(archivoIndice); return; } } // Si no se encontró un índice correspondiente al codigo de producto ingresado printf("No se encontró el producto con el codigo ingresado "); fclose(archivoIndice); } void modificarProducto() { FILE* archivoProductos; FILE* archivoIndice; Indice indice; Producto producto; int codigo; long posicion; archivoIndice = fopen("indice.dat", "rb+"); if (archivoIndice == NULL) { printf("Error al abrir el archivo de indice "); return; } // Pedir al usuario que ingrese el codigo del producto a modificar printf("Ingrese el codigo del producto a modificar: "); scanf("%d", &codigo); // Buscar el indice correspondiente al codigo de producto ingresado // El archivo de indice es mas pequeno y por lo tanto lo vamos a encontrar mas rapidamente // Se pueden organizar el archivo indice como un arbol para localizar el codigo de producto while (fread(&indice, sizeof(Indice), 1, archivoIndice)) { if (indice.id == codigo) { // Posicionar el cursor en el archivo de productos archivoProductos = fopen("productos.dat", "rb+"); if (archivoProductos == NULL) { printf("Error al abrir el archivo de productos "); return; } fseek(archivoProductos, indice.posicion, SEEK_SET); // Leer los datos del producto y mostrarlos en pantalla fread(&producto, sizeof(Producto), 1, archivoProductos); printf("ID: %d ", producto.id); printf("Nombre: %s ", producto.nombre); printf("Precio: %f ", producto.precio); printf("Cantidad: %d ", producto.cantidad); // Modificar los datos del producto printf("Ingrese los nuevos datos del producto: "); printf("ID: "); scanf("%d", &producto.id); printf("Nombre: "); scanf("%s", producto.nombre); printf("Precio: "); scanf("%f", &producto.precio); printf("Cantidad: "); scanf("%d", &producto.cantidad); // Escribir el producto modificado en el archivo de productos fseek(archivoProductos, indice.posicion, SEEK_SET); fwrite(&producto, sizeof(Producto), 1, archivoProductos); // Actualizar el indice en el archivo de indice indice.id = producto.id; indice.posicion = ftell(archivoProductos) - sizeof(Producto); fseek(archivoIndice, -sizeof(Indice), SEEK_CUR); fwrite(&indice, sizeof(Indice), 1, archivoIndice); fclose(archivoProductos); fclose(archivoIndice); return; } } // Si no se encontró un índice correspondiente al codigo de producto ingresado printf("No se encontró el producto con el codigo ingresado "); fclose(archivoIndice); } int main() { crearArchivos(); // Insertamos un registro de prueba insertarFila(); buscarProducto(); modificarProducto(); buscarProducto(); }
@bearose710 Жыл бұрын
@@diegomoissetdeespanes Gracias otra vez!!!!
@kevinjoel10833 жыл бұрын
Ayudenme necesito hacer una interfaz de tienda en la que almacene 10 objetos y los que se pueda mostrar la lista borrar y modificar
@l.d.a99294 жыл бұрын
Esto se puede hacer en c++ es parecido no ??
@danielsolito53873 жыл бұрын
buenas como le hago para que aparte ter otro precio, por ejemplo precio de compra y precio de venta o sea agregar otro precio al producto ?
@LautaroParrado3 жыл бұрын
Hola, create otro campo en la structura, por ejemplo. typedef struct{ int codigo; char descripcion[41]; float precioCompra; float precioVenta; }producto;
@boanergesdikenslopezjimene19554 жыл бұрын
Como podria sumar lo precios de los productos??
@guillermogiorgis82453 жыл бұрын
¿Tiene algún video que hable de cómo almacenar una cadena de caracteres, que son leidos de un archivo y que deben ser guardados en un arreglo de estructuras?
@wooziplay3 жыл бұрын
No sé si este canal sigue activo, pero tengo una duda Hay manera de salir de ese while sin necesidad de usar el break; ?
@diegomoissetdeespanes3 жыл бұрын
Podemos salir del while sin el break disponiendo una condición compuesta: int existe=0; while(!feof(arch) && existe==0) { .... }
@wooziplay3 жыл бұрын
@@diegomoissetdeespanes Por alguna razón no funciona de esa forma.. rarisimo
@josevalencia35392 жыл бұрын
bro con tu pregunta me salvaste la vida
@wooziplay2 жыл бұрын
@@josevalencia3539 buenaaa
@josevalencia35392 жыл бұрын
@@wooziplay sabes como podría crear y cargar datos en la misma función crear()?
Mira los 4 vídeos anteriores del curso. ftell(); devuelve la posición actual del puntero en el archivo y fseek(); sirve para mover el puntero a través del archivo.
@alfredogodoy6854 Жыл бұрын
cuando fread termina de leer un bloque, apunta al final del mismo y no al inicio. entonces para guardar la posición del bloque que acaba de leer, tenés que ir al inicio del bloque. esto se hace preguntando con ftell la posicion en bytes donde quedó fread y restándole el tamaño en bytes de un registro de tipo producto
@Inaros-zu5st3 жыл бұрын
Necesito ayuda, como seria posible borrar un registro?? En lugar de modificarlo que sea borrarlo por completo como si nunca se hubiera escrito
@diegomoissetdeespanes3 жыл бұрын
Para borrar un registro lo que se hace es un borrado lógico agregando otro campo que indique si el registro esta borrado o no. (En último caso se debe crear luego un nuevo archivo copiando solo los registros que tienen en el campo borrado el valor 0) El algoritmo modificado es: #include #include #include typedef struct { int codigo; char descripcion[41]; float precio; int borrado; // 0=existe 1=borrado } tproducto; void continuar() { printf("Presione una tecla para continuar "); getch(); } void crear() { FILE *arch; arch=fopen("productos.dat","wb"); if (arch==NULL) exit(1); fclose(arch); continuar(); } void cargar() { FILE *arch; arch=fopen("productos.dat","ab"); if (arch==NULL) exit(1); tproducto producto; printf("Ingrese el codigo del producto:"); scanf("%i",&producto.codigo); fflush(stdin); printf("Ingrese el nombre del producto:"); gets(producto.descripcion); printf("Ingrese precio:"); scanf("%f",&producto.precio); producto.borrado=0; fwrite(&producto, sizeof(tproducto), 1, arch); fclose(arch); continuar(); } void listado() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); tproducto producto; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); } fread(&producto, sizeof(tproducto), 1, arch); } fclose(arch); continuar(); } void consulta() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a consultar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void modificacion() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a modificar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); printf("Ingrese nuevo precio:"); scanf("%f",&producto.precio); int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se modifico el precio para dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void borrar() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a borrar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { producto.borrado=1; int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se borro dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } int main() { int opcion; do { printf("1 - Crear un archivo binario llamado \"productos.dat\" "); printf("2 - Carga de registros de tipo tproducto "); printf("3 - Listado completo de productos. "); printf("4 - Consulta de un producto por su codigo. "); printf("5 - Modificacion del precio de un producto. "); printf("6 - Borrar. "); printf("7 - Finalizar "); printf("Ingrese su opcion:"); scanf("%i",&opcion); switch (opcion) { case 1:crear(); break; case 2:cargar(); break; case 3:listado(); break; case 4:consulta(); break; case 5:modificacion(); break; case 6:borrar(); break; } } while (opcion!=7); return 0; }
@johanguevara44554 жыл бұрын
como puedo buscar el producto por nombre y no por codigo?
@diegomoissetdeespanes4 жыл бұрын
void consultaPorNombre() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); printf("Ingrese el nombre del producto a consultar:"); char aux[41]; fflush(stdin); gets(aux); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (strcmp(producto.descripcion,aux)==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho nombre "); fclose(arch); continuar(); }
@johanguevara44554 жыл бұрын
@@diegomoissetdeespanes muchas gracias me sirvió de mucho y aprendí muchísimo ya me suscribo a tu canal
@rodrigogajardo63963 жыл бұрын
Muy buena explicación! Vengo aprendiendo bastante gracias a tus videos. Tengo una duda, ¿Cómo seria el caso en el que tengo estructuras anidadas? Porque estoy intentando resolver lo siguiente: modificar la fecha de nacimiento de una persona. Serian dos estructuras, persona, y fecha (fecha estaría dentro de la estructura persona). Fecha contiene día, mes, año.
@diegomoissetdeespanes3 жыл бұрын
Un ejemplo: #include #include #include typedef struct { int dia; int mes; int anio; }tfecha; typedef struct { char nombre[81]; tfecha fechaNac; } tpersona; void continuar() { printf("Presione una tecla para continuar "); getch(); } void crear() { FILE *arch; arch=fopen("personas.dat","wb"); if (arch==NULL) exit(1); fclose(arch); continuar(); } void cargar() { FILE *arch; arch=fopen("personas.dat","ab"); if (arch==NULL) exit(1); tpersona persona; printf("Ingrese el nombre de la persona:"); fflush(stdin); gets(persona.nombre); printf("Ingrese dia de nacimiento:"); scanf("%d",&persona.fechaNac.dia); printf("Ingrese mes de nacimiento:"); scanf("%d",&persona.fechaNac.mes); printf("Ingrese año de nacimiento:"); scanf("%d",&persona.fechaNac.anio); fwrite(&persona, sizeof(tpersona), 1, arch); fclose(arch); continuar(); } void listado() { FILE *arch; arch=fopen("personas.dat","rb"); if (arch==NULL) exit(1); tpersona persona; fread(&persona, sizeof(tpersona), 1, arch); while(!feof(arch)) { printf("%s %i/%i/%i ", persona.nombre, persona.fechaNac.dia,persona.fechaNac.mes,persona.fechaNac.anio); fread(&persona, sizeof(tpersona), 1, arch); } fclose(arch); continuar(); } int main() { int opcion; do { printf("1 - Crear un archivo binario llamado \"personas.dat\" "); printf("2 - Carga de registros de tipo tpersona "); printf("3 - Listado completo de personas. "); printf("4 - Finalizar "); printf("Ingrese su opcion:"); scanf("%i",&opcion); switch (opcion) { case 1:crear(); break; case 2:cargar(); break; case 3:listado(); break; } } while (opcion!=4); return 0; }
@rodrigogajardo63963 жыл бұрын
@@diegomoissetdeespanes Muchas gracias!!
@rodrigogajardo63963 жыл бұрын
@@gonzaloagudo exactamente
@adolfoalfaro86844 жыл бұрын
disculpe, tiene el codigo de modificación?
@diegomoissetdeespanes4 жыл бұрын
#include #include #include typedef struct { int codigo; char descripcion[41]; float precio; } tproducto; void continuar() { printf("Presione una tecla para continuar "); getch(); } void crear() { FILE *arch; arch=fopen("productos.dat","wb"); if (arch==NULL) exit(1); fclose(arch); continuar(); } void cargar() { FILE *arch; arch=fopen("productos.dat","ab"); if (arch==NULL) exit(1); tproducto producto; printf("Ingrese el codigo del producto:"); scanf("%i",&producto.codigo); fflush(stdin); printf("Ingrese el nombre del producto:"); gets(producto.descripcion); printf("Ingrese precio:"); scanf("%f",&producto.precio); fwrite(&producto, sizeof(tproducto), 1, arch); fclose(arch); continuar(); } void listado() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); tproducto producto; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); fread(&producto, sizeof(tproducto), 1, arch); } fclose(arch); continuar(); } void consulta() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a consultar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void modificacion() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a modificar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); printf("Ingrese nuevo precio:"); scanf("%f",&producto.precio); int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se modifico el precio para dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } int main() { int opcion; do { printf("1 - Crear un archivo binario llamado \"productos.dat\" "); printf("2 - Carga de registros de tipo tproducto "); printf("3 - Listado completo de productos. "); printf("4 - Consulta de un producto por su codigo. "); printf("5 - Modificacion del precio de un producto. "); printf("6 - Finalizar "); printf("Ingrese su opcion:"); scanf("%i",&opcion); switch (opcion) { case 1:crear(); break; case 2:cargar(); break; case 3:listado(); break; case 4:consulta(); break; case 5:modificacion(); break; } } while (opcion!=6); return 0; }
@ricardoacosta64362 жыл бұрын
Profe, ¿cual es la diferencia entre “ab” y “ab+”? Saludos
@diegomoissetdeespanes2 жыл бұрын
ab abre el fichero para añadirle datos al final, en cambio con ab+ podemos además de añadir datos al final leer datos.
@ricardoacosta64362 жыл бұрын
@@diegomoissetdeespanes muchas gracias profe. Buena manera de explicar desde lo más sencillo a lo más complicado con usted uno si aprende.
@bryaneduardomarmolejoechev26092 жыл бұрын
Se siente raro que la voz de Dtoke te enseñe a programar jaja
@luispalencia913 жыл бұрын
¿Y como se haría para eliminar un registro?
@diegomoissetdeespanes3 жыл бұрын
Lo que se hace es agregar un campo al registro que indique si el registro está borrado o no. Luego se modifican todos los algoritmos a partir de dicho campo (listados, consultas, modificaciones etc.) El algoritmo modificado es: #include #include #include typedef struct { int codigo; char descripcion[41]; float precio; int borrado; // 0=existe 1=borrado } tproducto; void continuar() { printf("Presione una tecla para continuar "); getch(); } void crear() { FILE *arch; arch=fopen("productos.dat","wb"); if (arch==NULL) exit(1); fclose(arch); continuar(); } void cargar() { FILE *arch; arch=fopen("productos.dat","ab"); if (arch==NULL) exit(1); tproducto producto; printf("Ingrese el codigo del producto:"); scanf("%i",&producto.codigo); fflush(stdin); printf("Ingrese el nombre del producto:"); gets(producto.descripcion); printf("Ingrese precio:"); scanf("%f",&producto.precio); producto.borrado=0; fwrite(&producto, sizeof(tproducto), 1, arch); fclose(arch); continuar(); } void listado() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); tproducto producto; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); } fread(&producto, sizeof(tproducto), 1, arch); } fclose(arch); continuar(); } void consulta() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a consultar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void modificacion() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a modificar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); printf("Ingrese nuevo precio:"); scanf("%f",&producto.precio); int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se modifico el precio para dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void borrar() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a borrar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { producto.borrado=1; int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se borro dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } int main() { int opcion; do { printf("1 - Crear un archivo binario llamado \"productos.dat\" "); printf("2 - Carga de registros de tipo tproducto "); printf("3 - Listado completo de productos. "); printf("4 - Consulta de un producto por su codigo. "); printf("5 - Modificacion del precio de un producto. "); printf("6 - Borrar. "); printf("7 - Finalizar "); printf("Ingrese su opcion:"); scanf("%i",&opcion); switch (opcion) { case 1:crear(); break; case 2:cargar(); break; case 3:listado(); break; case 4:consulta(); break; case 5:modificacion(); break; case 6:borrar(); break; } } while (opcion!=7); return 0; }
@luispalencia913 жыл бұрын
@@diegomoissetdeespanes gracias, llevaba tiempo tratando de averiguarlo y me lo facilitaste
@sebastianmartin70853 жыл бұрын
Como se hace para eliminar registros?
@diegomoissetdeespanes3 жыл бұрын
Lo que se hace es agregar un campo al registro que indique si el registro está borrado o no. Luego se modifican todos los algoritmos a partir de dicho campo (listados, consultas, modificaciones etc.) El algoritmo modificado es: #include #include #include typedef struct { int codigo; char descripcion[41]; float precio; int borrado; // 0=existe 1=borrado } tproducto; void continuar() { printf("Presione una tecla para continuar "); getch(); } void crear() { FILE *arch; arch=fopen("productos.dat","wb"); if (arch==NULL) exit(1); fclose(arch); continuar(); } void cargar() { FILE *arch; arch=fopen("productos.dat","ab"); if (arch==NULL) exit(1); tproducto producto; printf("Ingrese el codigo del producto:"); scanf("%i",&producto.codigo); fflush(stdin); printf("Ingrese el nombre del producto:"); gets(producto.descripcion); printf("Ingrese precio:"); scanf("%f",&producto.precio); producto.borrado=0; fwrite(&producto, sizeof(tproducto), 1, arch); fclose(arch); continuar(); } void listado() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); tproducto producto; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); } fread(&producto, sizeof(tproducto), 1, arch); } fclose(arch); continuar(); } void consulta() { FILE *arch; arch=fopen("productos.dat","rb"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a consultar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void modificacion() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a modificar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { printf("%i %s %0.2f ", producto.codigo, producto.descripcion, producto.precio); printf("Ingrese nuevo precio:"); scanf("%f",&producto.precio); int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se modifico el precio para dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } void borrar() { FILE *arch; arch=fopen("productos.dat","r+b"); if (arch==NULL) exit(1); printf("Ingrese el codigo de producto a borrar:"); int cod; scanf("%i", &cod); tproducto producto; int existe=0; fread(&producto, sizeof(tproducto), 1, arch); while(!feof(arch)) { if (cod==producto.codigo && producto.borrado==0) { producto.borrado=1; int pos=ftell(arch)-sizeof(tproducto); fseek(arch,pos,SEEK_SET); fwrite(&producto, sizeof(tproducto), 1, arch); printf("Se borro dicho producto. "); existe=1; break; } fread(&producto, sizeof(tproducto), 1, arch); } if (existe==0) printf("No existe un producto con dicho codigo "); fclose(arch); continuar(); } int main() { int opcion; do { printf("1 - Crear un archivo binario llamado \"productos.dat\" "); printf("2 - Carga de registros de tipo tproducto "); printf("3 - Listado completo de productos. "); printf("4 - Consulta de un producto por su codigo. "); printf("5 - Modificacion del precio de un producto. "); printf("6 - Borrar. "); printf("7 - Finalizar "); printf("Ingrese su opcion:"); scanf("%i",&opcion); switch (opcion) { case 1:crear(); break; case 2:cargar(); break; case 3:listado(); break; case 4:consulta(); break; case 5:modificacion(); break; case 6:borrar(); break; } } while (opcion!=7); return 0; }