[ Foro de C ]

Borrar datos fichero

26-Oct-2020 18:44
Invitado (Shumaro)
0 Respuestas

Tengo un programa que va registrando una serie de productos, parte de la funcionalidad que me falta es como borrar estos datos, no manejo un contador que solo pueda eliminar; por ahora tengo la función borrar que solo es replica de la función consulta que no incluyo, que la idea es borrar el producto que solicites.

Inicialmente se debe crear un archivo si es que no existe, en el menú se hace con el número 6 que es la función crear

#include<stdio.h>
#include<stdlib.h>

typedef struct {
   int codigo;
   char descripcion[41];
   float precio;
   int cantidad;
   char fecha[10];
} tproducto;

void continuar()
{
   printf("Presione una tecla para continuar...\n\n");
   getch();
}

void crear()
{
   FILE *arch;
   arch=fopen("productos.dat","wb");
   if (arch==NULL)
       exit(1);
   fclose(arch);
   continuar();
}

void borrar()
{
   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\n", 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\n");
   fclose(arch);
   continuar();
}

void cargar()
{
   FILE *arch;
   arch=fopen("productos.dat","ab");
   if (arch==NULL)
       exit(1);
   tproducto producto;
   system("cls");
   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);
   printf("Cantidad de articulos: ");
   scanf("%i",&producto.cantidad);
   printf("Fecha de manufactura: ");
   scanf("%s",&producto.fecha);
   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);
   printf("\nCodigo\t Descripcion    \t Precio \tCantidad \t Fecha\n");
   while(!feof(arch))
   {
       printf("%-8i %-23s %0-8.2f  %9d \t\t %10s\n", producto.codigo, producto.descripcion, producto.precio, producto.cantidad, producto.fecha);
       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\n", 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\n");
   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\n", 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.\n");
          existe=1;
          break;
       }
       fread(&producto, sizeof(tproducto), 1, arch);
   }
   if (existe==0)
       printf("No existe un producto con dicho codigo\n");
   fclose(arch);
   continuar();
}

int main()
{
   int opcion;

   do {

       system("cls");
       printf("\t\tALMACEN\n");
       printf("\n1 - Agregar un articulo\n");
       printf("2 - Borrar un articulo\n");
       printf("3 - Listado completo de articulos\n");
       printf("4 - Consulta de un producto por su codigo.\n");
       printf("5 - Modificacion del precio de un producto. \n");
       printf("6 - Generar archivo. \n");
       printf("7 - Finalizar\n\n");
       printf("Ingrese su opcion: ");
       scanf("%i",&opcion);
       switch (opcion) {
           case 1:cargar();
                  break;
           case 2:borrar();
                  break;
           case 3:listado();
                  break;
           case 4:consulta();
                  break;
           case 5:modificacion();
                  break;
           case 6:crear();
               break;
           case 7:exit(1);
               break;
       }
       printf("\nDesea realizar otra accion?: [1]Si  [2]No\n");
       fflush(stdin);
       scanf("\n%d",&opcion);

   } while (opcion == 1);
   return 0;
}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)