Archivos binarios: agregar, consultar y modificar registros (struct) en un archivo

  Рет қаралды 38,611

diego moisset de espanes

diego moisset de espanes

Күн бұрын

Пікірлер
@christianetchegaray7482
@christianetchegaray7482 9 ай бұрын
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
@gabrielsin5844
@gabrielsin5844 2 жыл бұрын
Excelente, mi profesor explicando es horrible sobre todo este tema y vos lo hiciste re fácil de entender sos el mejor!!!!!!!!!
@diegomoissetdeespanes
@diegomoissetdeespanes 2 жыл бұрын
Saludos Gabriel.
@josevalencia3539
@josevalencia3539 2 жыл бұрын
Profe usted es un crack, me sirvió todo incluso lo modifique a mi gusto y funciono nuevamente.
@MiguelAngelRosasOcampo
@MiguelAngelRosasOcampo 4 жыл бұрын
¡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
@diegomoissetdeespanes
@diegomoissetdeespanes 4 жыл бұрын
Saludos Miguel.
@juztinho14
@juztinho14 3 жыл бұрын
ES USTED UN CRACK!!!! Sin su ayuda no hubiera podido resolver mi tarea, mis respetos!
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
Saludos.
@lucasezequielaraujo8641
@lucasezequielaraujo8641 2 жыл бұрын
Me gusto mucho la explicacion, sin tanta vuelta y bien explicado
@ronaldocarbajal6428
@ronaldocarbajal6428 4 жыл бұрын
Que buena manera de explicarlo! Siga asi , enseñando más cosas sobre el lenguaje C/C++ :D! Saludos!
@diegomoissetdeespanes
@diegomoissetdeespanes 4 жыл бұрын
Gracias, saludos!
@alfredogodoy6854
@alfredogodoy6854 Жыл бұрын
Ya casi termino este curso. Muchas gracias por todo lo que compartís!
@debajalla8992
@debajalla8992 Жыл бұрын
Excelente el curso!!!! aprendí un monton!!! Lo aplaudo!
@JTB_Enginer
@JTB_Enginer 10 ай бұрын
Amigo te amo.
@kendrickishcampary9700
@kendrickishcampary9700 2 жыл бұрын
Excelente video, me srivió para terminar mi proyecto
@JoseCastro-ms4bo
@JoseCastro-ms4bo 2 жыл бұрын
Gracias por compartir tus conocimientos....muy agradecido!!!!!!!
@diegomoissetdeespanes
@diegomoissetdeespanes 2 жыл бұрын
Saludos Jose.
@claudiacanta5533
@claudiacanta5533 9 ай бұрын
Muy útil, gracias!
@martinchocoo
@martinchocoo Жыл бұрын
sos capo diego te re banco
@Aran02
@Aran02 3 жыл бұрын
Le agradezco mucho, encontré cómo usar varias funciones que tenia en duda c:
@matymau1060
@matymau1060 4 жыл бұрын
muy buen video , la verdad me ayudo bastante , sigue asi
@diegomoissetdeespanes
@diegomoissetdeespanes 4 жыл бұрын
Saludos Maty
@oscarsanchez7390
@oscarsanchez7390 3 жыл бұрын
Sos un fenomeno, gracias, me salvaste.
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
Saludos Oscar.
@l.d.a9929
@l.d.a9929 4 жыл бұрын
Buen video bro saludos desde Panamá !!
@diegomoissetdeespanes
@diegomoissetdeespanes 4 жыл бұрын
Saludos y gracias
@chicapercebe
@chicapercebe 3 жыл бұрын
muchas gracias justo andaba buscando un ejercicio asi, me sirvio mucho
@facuackerman3044
@facuackerman3044 2 жыл бұрын
printf("Incríble video, me sirvio mucho. Gracias");
@diegomoissetdeespanes
@diegomoissetdeespanes 2 жыл бұрын
#include #include int main() { int f; char cad[]="Tbmvept"; for(f=0;f
@oscarfabianchavezgomez4400
@oscarfabianchavezgomez4400 3 жыл бұрын
Buenísimo tutorial!
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
Gracias!
@dougnaho
@dougnaho 3 жыл бұрын
Muchas gracias, esta super claro.
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
Saludos Doug.
@dougnaho
@dougnaho 3 жыл бұрын
Disculpa Diego, como podria hacer para eliminar un registro.
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
@@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; }
@dougnaho
@dougnaho 3 жыл бұрын
​@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.
@facundoalvarez1587
@facundoalvarez1587 2 жыл бұрын
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.
@yop7403
@yop7403 3 жыл бұрын
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
@leonelgomez2138
@leonelgomez2138 2 жыл бұрын
te amo
@juliodejesusgarciamendez703
@juliodejesusgarciamendez703 4 жыл бұрын
!!Que buena forma de explicar un semestre entero de programacion en c!! una duda, ¿como podria eliminar un registro del archivo?
@diegomoissetdeespanes
@diegomoissetdeespanes 4 жыл бұрын
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; }
@gabrielreyes8725
@gabrielreyes8725 4 жыл бұрын
@@diegomoissetdeespanes lo probé y no me elimina nada:(
@eduardoruizrios6140
@eduardoruizrios6140 3 жыл бұрын
@@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. "); }
@agustinlyon8173
@agustinlyon8173 3 жыл бұрын
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;
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
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(); }
@agustinlyon8173
@agustinlyon8173 3 жыл бұрын
@@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
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
@@agustinlyon8173 con archivos de texto no podemos grabar registros, solo podemos grabar texto.
@tomasdangelo6940
@tomasdangelo6940 3 жыл бұрын
Buen video!
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
Gracias.
@bearose710
@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
@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
@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
@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
@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
@bearose710 Жыл бұрын
@@diegomoissetdeespanes Gracias otra vez!!!!
@kevinjoel1083
@kevinjoel1083 3 жыл бұрын
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.a9929
@l.d.a9929 4 жыл бұрын
Esto se puede hacer en c++ es parecido no ??
@danielsolito5387
@danielsolito5387 3 жыл бұрын
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 ?
@LautaroParrado
@LautaroParrado 3 жыл бұрын
Hola, create otro campo en la structura, por ejemplo. typedef struct{ int codigo; char descripcion[41]; float precioCompra; float precioVenta; }producto;
@boanergesdikenslopezjimene1955
@boanergesdikenslopezjimene1955 4 жыл бұрын
Como podria sumar lo precios de los productos??
@guillermogiorgis8245
@guillermogiorgis8245 3 жыл бұрын
¿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?
@wooziplay
@wooziplay 3 жыл бұрын
No sé si este canal sigue activo, pero tengo una duda Hay manera de salir de ese while sin necesidad de usar el break; ?
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
Podemos salir del while sin el break disponiendo una condición compuesta: int existe=0; while(!feof(arch) && existe==0) { .... }
@wooziplay
@wooziplay 3 жыл бұрын
@@diegomoissetdeespanes Por alguna razón no funciona de esa forma.. rarisimo
@josevalencia3539
@josevalencia3539 2 жыл бұрын
bro con tu pregunta me salvaste la vida
@wooziplay
@wooziplay 2 жыл бұрын
@@josevalencia3539 buenaaa
@josevalencia3539
@josevalencia3539 2 жыл бұрын
@@wooziplay sabes como podría crear y cargar datos en la misma función crear()?
@ricardoacosta6436
@ricardoacosta6436 2 жыл бұрын
¿Me podría explicar las líneas: pos= ftell(arch) - sizeof(tproducto); fseek(arch, pos, SEEK_SET);?
@abcLaRry
@abcLaRry 2 жыл бұрын
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
@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-zu5st
@Inaros-zu5st 3 жыл бұрын
Necesito ayuda, como seria posible borrar un registro?? En lugar de modificarlo que sea borrarlo por completo como si nunca se hubiera escrito
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
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; }
@johanguevara4455
@johanguevara4455 4 жыл бұрын
como puedo buscar el producto por nombre y no por codigo?
@diegomoissetdeespanes
@diegomoissetdeespanes 4 жыл бұрын
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(); }
@johanguevara4455
@johanguevara4455 4 жыл бұрын
@@diegomoissetdeespanes muchas gracias me sirvió de mucho y aprendí muchísimo ya me suscribo a tu canal
@rodrigogajardo6396
@rodrigogajardo6396 3 жыл бұрын
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.
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
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; }
@rodrigogajardo6396
@rodrigogajardo6396 3 жыл бұрын
@@diegomoissetdeespanes Muchas gracias!!
@rodrigogajardo6396
@rodrigogajardo6396 3 жыл бұрын
@@gonzaloagudo exactamente
@adolfoalfaro8684
@adolfoalfaro8684 4 жыл бұрын
disculpe, tiene el codigo de modificación?
@diegomoissetdeespanes
@diegomoissetdeespanes 4 жыл бұрын
#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; }
@ricardoacosta6436
@ricardoacosta6436 2 жыл бұрын
Profe, ¿cual es la diferencia entre “ab” y “ab+”? Saludos
@diegomoissetdeespanes
@diegomoissetdeespanes 2 жыл бұрын
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.
@ricardoacosta6436
@ricardoacosta6436 2 жыл бұрын
@@diegomoissetdeespanes muchas gracias profe. Buena manera de explicar desde lo más sencillo a lo más complicado con usted uno si aprende.
@bryaneduardomarmolejoechev2609
@bryaneduardomarmolejoechev2609 2 жыл бұрын
Se siente raro que la voz de Dtoke te enseñe a programar jaja
@luispalencia91
@luispalencia91 3 жыл бұрын
¿Y como se haría para eliminar un registro?
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
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; }
@luispalencia91
@luispalencia91 3 жыл бұрын
@@diegomoissetdeespanes gracias, llevaba tiempo tratando de averiguarlo y me lo facilitaste
@sebastianmartin7085
@sebastianmartin7085 3 жыл бұрын
Como se hace para eliminar registros?
@diegomoissetdeespanes
@diegomoissetdeespanes 3 жыл бұрын
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; }
@heartz2003
@heartz2003 Жыл бұрын
Cómo sería si en vez que int en borrar sea char
@heartz2003
@heartz2003 Жыл бұрын
Buenas tardes 🙏
Archivos de texto: creación y grabación de datos
5:43
diego moisset de espanes
Рет қаралды 2,7 М.
Что-что Мурсдей говорит? 💭 #симбочка #симба #мурсдей
00:19
To Brawl AND BEYOND!
00:51
Brawl Stars
Рет қаралды 17 МЛН
Manejo de Archivos Binarios en C++ | Introducción a la Programación
32:51
Alejandro Morales
Рет қаралды 2,3 М.
Clase 10 - Programacion en C - struct + archivos binarios I
1:20:59
Archivos de texto en Lenguaje C - Abrir, cerrar, leer y agregar ficheros txt
27:07
sql (3/3): subconsultas PARTE 2
1:15:34
y3
Рет қаралды 44
Archivos Binarios en C
1:16:27
YouTics
Рет қаралды 7 М.
ArrayList con Archivos Seriados en Java
38:53
Andrés Mauricio Martínez Hincapié
Рет қаралды 10 М.
7_2 Archivos de Registros. Altas, Bajas y Consultas
24:13
carlos ballesteros
Рет қаралды 1,3 М.
Reading and Writing from Binary Files in C!
20:26
Astrocode
Рет қаралды 14 М.
Modificar Registro en C++
16:10
InformativaC
Рет қаралды 30 М.
Ejemplo simple de manejo  archivos en C [Arreglos + Archivos ]
22:15
El Profe Ariel
Рет қаралды 9 М.