Ya hice lo que quería con la ayuda que no me diste, ahora la cosa es que mi inventario pueda modificar un artículo con espacio
Es decir, al crear un articulo, puede guardarmelo con el caracter espacio, pero al modificar el artículo que tiene espacio, no me lo lee, solo me lee la parte antes del espacio, al igual que eliminar
Es decir, al crear un articulo, puede guardarmelo con el caracter espacio, pero al modificar el artículo que tiene espacio, no me lo lee, solo me lee la parte antes del espacio, al igual que eliminar
Código (c) [Seleccionar]
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <windows>
FILE *fp;
FILE *fp1;
struct inven{
char codigo[80];
char nombre[80];
char descrip[80];
char precio[85];
}inventario;
// === funciones ===
void crear();
void consultar();
void modificar();
void eliminar();
// ----------------PROGRAMA PRINCIPAL ----------------------------
void main()
{
char resp;
do
{
system("cls");
printf("\n\n\t\t\t* * * * * INVENTARIO * * * * *");
printf("\n\t\t---------------------------------------------------");
printf("\n\t\t\t ALTA Y CONTROL DE PRODUCTOS ");
printf("\n\t\t-------------------------------------------------\n\n\n\n");
printf("\t\t\t\t (1) Agregar \n");
printf("\t\t\t\t (2) Consultar \n");
printf("\t\t\t\t (3) Modificar \n");
printf("\t\t\t\t (4) Eliminar \n");
printf("\t\t\t\t (5) Salir ");
printf("\n\n\t\t\t\tSeleccione una opci%cn: ",162);
resp=getch();
switch(resp)
{
case '1': crear();
break;
case '2': consultar();
break;
case '3': modificar();
break;
case '4': eliminar();
break;
case '5' : exit(1);
}
}
while(resp!='6');
getch();
}
// === Funcion de crear un archivo/nuevo articulo ====
void crear()
{
system("cls");
char opcion = 's';
int i=0;
if ((fp=fopen("inventario.dat","ab"))==NULL)
printf("\n\n\n\n\t\t< < < Error de apertura de archivo inventario.dat > > >");
else
{
while(opcion == 's'){
printf("\n\n Escriba el c%cdigo del producto que desea registrar (NO EXEDER DE 16 DIGITOS): ",162);
scanf("%[^\n]",&inventario.codigo);
fflush(stdin);
printf("\n\n Escriba el nombre del producto ");
scanf("%[^\n]", &inventario.nombre);
fflush(stdin);
printf("\n\n Escriba la descripci%cn del producto: ",162);
scanf("%[^\n]", &inventario.descrip);
fflush(stdin);
printf("\n\n Escriba el precio del producto: ");
scanf("%[^\n]",&inventario.precio);
fflush(stdin);
fwrite(&inventario, sizeof(inventario), 1, fp);
printf("\n\n\n\t\t Desea registrar otro producto? [s/n]: ");
scanf("%[^\n]",&opcion);
system("cls");
}
}
fclose(fp);
}
//=================MODIFICAR
void modificar(){
system("cls");
int opc,i=0;
char elim[66];
printf("\nIngrese el c%cdigo del producto que desea modificar: ",162);
scanf("%s",&elim);
fp=fopen("inventario.dat","r+b");
if(!fp)
printf("\n Error de apertura del archivo %cinventario.dat%c\n",34,34);
else{
while (((fread(&inventario, sizeof(inventario), 1, fp))!=0)&&i!=1){
if(!strcmp(inventario.codigo,elim)){
printf("\n\nC%cdigo: %s\n",162,inventario.codigo);
printf("Nombre: %s\n",inventario.nombre);
printf("Descripci%cn: %s\n",162,inventario.descrip);
printf("Precio: %s\n",inventario.precio);
printf ("\n %cQu%c desea modificar? ",168,130);
printf ("\n\n(1) C%cdigo\n",162);
printf("(2) Nombre\n");
printf ("(3) Descripci%cn\n",162);
printf("(4) Precio\n");
printf("(5) Salir\n");
printf("\nEscriba una opci%cn: ",162);
scanf("%d",&opc);
switch (opc){
case 1:
printf ("\nIngrese el nuevo C%cdigo: ",162);
scanf("%s", &inventario.codigo);
break;
case 2:
printf ("\nIngrese el nuevo nombre: ");
scanf("%s",&inventario.nombre);
break;
case 3:
printf ("\nIngrese la nueva descripci%cn: ",162);
scanf("%s",&inventario.descrip);
break;
case 4:
printf ("\nIngrese el nuevo precio: ");
scanf("%s",&inventario.precio);
break;
}
fseek(fp,-sizeof(inventario),SEEK_CUR);
fwrite(&inventario,sizeof(inventario), 1, fp);
i=1;
fclose(fp);
}
}
}
}
///=======================================eliminar producto
void eliminar()
{
char elim[70];
system("cls");
printf("\nIngrese el c%cdigo del producto que desea eliminar eliminar: ",162);
scanf("%s",&elim);
fp=fopen("inventario.dat","r+b");
fp1=fopen("inventario1.dat","wb");
if(!fp)
printf("\n Error de apertura del archivo inventario.dat\n");
else{
while (((fread(&inventario, sizeof(inventario), 1, fp))!=0)&&(inventario.codigo!=0)){
if(strcmp(inventario.codigo,elim)){
fseek(fp1,sizeof(inventario),SEEK_END);
fseek(fp1,-sizeof(inventario),SEEK_CUR);
fwrite(&inventario,sizeof(inventario), 1, fp1);
fclose(fp1);
fp1=fopen("inventario1.dat","r+b");
system("cls");
printf ("\n\n\n\n\n\n\n\n\n\n\nEl producto se ha eliminado correctamente \n");
Sleep(500);
}
}
fclose(fp);
fclose(fp1);
system("del inventario.dat");
system("ren inventario1.dat inventario.dat");
}
}
//// ====================================Consulta de productos//////////
void consultar (){
int i;
system("cls");
FILE *invent;
invent = fopen("inventario.dat", "r");
if(invent == NULL)
{
printf("\nNo existe archivo inventario.dat");
}
fread(&inventario, sizeof(struct inven), 1, invent);
printf("------------------------------------------------------------------\n");
printf("C%CDIGO NOMBRE\t\tDESCRIPCI%cN\tPRECIO \n",224,224);
printf("------------------------------------------------------------------\n");
while(!feof(invent)) //mientras no sea fin de archivo
{
gotoxy(2,i);
printf(" %s %s\t\t %s\t\t %s\n",inventario.codigo,inventario.nombre,inventario.descrip,inventario.precio);
gotoxy(9,i);
fread(&inventario, sizeof(struct inven), 1, invent);
}
fclose(invent);
getch();
}