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

Поділитися
Вставка
  • Опубліковано 14 гру 2024

КОМЕНТАРІ • 97

  • @christianetchegaray7482
    @christianetchegaray7482 9 місяців тому +2

    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 роки тому +1

    Excelente, mi profesor explicando es horrible sobre todo este tema y vos lo hiciste re fácil de entender sos el mejor!!!!!!!!!

  • @josevalencia3539
    @josevalencia3539 2 роки тому +1

    Profe usted es un crack, me sirvió todo incluso lo modifique a mi gusto y funciono nuevamente.

  • @MiguelAngelRosasOcampo
    @MiguelAngelRosasOcampo 4 роки тому +2

    ¡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

  • @ronaldocarbajal6428
    @ronaldocarbajal6428 4 роки тому +8

    Que buena manera de explicarlo! Siga asi , enseñando más cosas sobre el lenguaje C/C++ :D! Saludos!

  • @juztinho14
    @juztinho14 3 роки тому

    ES USTED UN CRACK!!!! Sin su ayuda no hubiera podido resolver mi tarea, mis respetos!

  • @lucasezequielaraujo8641
    @lucasezequielaraujo8641 2 роки тому +1

    Me gusto mucho la explicacion, sin tanta vuelta y bien explicado

  • @alfredogodoy6854
    @alfredogodoy6854 Рік тому

    Ya casi termino este curso. Muchas gracias por todo lo que compartís!

  • @kendrickishcampary9700
    @kendrickishcampary9700 2 роки тому

    Excelente video, me srivió para terminar mi proyecto

  • @debajalla8992
    @debajalla8992 Рік тому

    Excelente el curso!!!! aprendí un monton!!! Lo aplaudo!

  • @JoseCastro-ms4bo
    @JoseCastro-ms4bo 2 роки тому

    Gracias por compartir tus conocimientos....muy agradecido!!!!!!!

  • @JTB_Enginer
    @JTB_Enginer 10 місяців тому +1

    Amigo te amo.

  • @Aran02
    @Aran02 3 роки тому

    Le agradezco mucho, encontré cómo usar varias funciones que tenia en duda c:

  • @matymau1060
    @matymau1060 4 роки тому +1

    muy buen video , la verdad me ayudo bastante , sigue asi

  • @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");

  • @l.d.a9929
    @l.d.a9929 4 роки тому

    Buen video bro saludos desde Panamá !!

  • @claudiacanta5533
    @claudiacanta5533 9 місяців тому

    Muy útil, gracias!

  • @oscarsanchez7390
    @oscarsanchez7390 3 роки тому

    Sos un fenomeno, gracias, me salvaste.

  • @martinchocoo
    @martinchocoo Рік тому

    sos capo diego te re banco

  • @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.

  • @juliodejesusgarciamendez703
    @juliodejesusgarciamendez703 4 роки тому +1

    !!Que buena forma de explicar un semestre entero de programacion en c!!
    una duda, ¿como podria eliminar un registro del archivo?

    • @diegomoissetdeespanes
      @diegomoissetdeespanes  4 роки тому +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.

      ");
      }

  • @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.

  • @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

  • @l.d.a9929
    @l.d.a9929 4 роки тому

    Esto se puede hacer en c++ es parecido no ??

  • @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?

  • @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  Рік тому +1

      @@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

  • @oscarfabianchavezgomez4400
    @oscarfabianchavezgomez4400 3 роки тому

    Buenísimo tutorial!

  • @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;

  • @agustinlyon8173
    @agustinlyon8173 3 роки тому +1

    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.

  • @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 роки тому +4

      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

  • @leonelgomez2138
    @leonelgomez2138 2 роки тому

    te amo

  • @tomasdangelo6940
    @tomasdangelo6940 3 роки тому

    Buen video!

  • @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 роки тому +1

      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;
      }

  • @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

  • @johanguevara4455
    @johanguevara4455 4 роки тому

    como puedo buscar el producto por nombre y no por codigo?

    • @diegomoissetdeespanes
      @diegomoissetdeespanes  4 роки тому +5

      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

  • @adolfoalfaro8684
    @adolfoalfaro8684 4 роки тому +1

    disculpe, tiene el codigo de modificación?

    • @diegomoissetdeespanes
      @diegomoissetdeespanes  4 роки тому +3

      #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;
      }

  • @bryaneduardomarmolejoechev2609
    @bryaneduardomarmolejoechev2609 2 роки тому +1

    Se siente raro que la voz de Dtoke te enseñe a programar jaja

  • @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 роки тому +1

      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 роки тому +1

      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 роки тому

    Profe, ¿cual es la diferencia entre “ab” y “ab+”? Saludos

    • @diegomoissetdeespanes
      @diegomoissetdeespanes  2 роки тому +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.

  • @luispalencia91
    @luispalencia91 3 роки тому

    ¿Y como se haría para eliminar un registro?

    • @diegomoissetdeespanes
      @diegomoissetdeespanes  3 роки тому +1

      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 роки тому +1

      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 🙏