我正在做一个关于咖啡店的小项目。我正在尝试开发一个选项来修改“ ListaDeProductos.dat”文件中的任何项目,该文件存储用户创建的所有项目。我发现了我4年前编写的非常老的代码,大声笑,还有一些代码我不知道它是如何工作的(如果有人可以解释我它是如何工作的,我会非常满意的)。关键是我需要帮助,以查看代码出了什么问题以及为什么修改后的数据无法正确存储。
要进行此修改,我做到了:
使用以下我不记得确切的代码:
fseek(ProductosAuxiliar,0l,SEEK_END); fread(&nuevoproducto,sizeof(Producto),1,Productos); fwrite(&nuevoproducto,sizeof(Producto),1,ProductosAuxiliar);
关闭两个文件
以下是执行此操作的代码:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string>
#include<cstdlib>
using namespace std;
int main (void)
{
typedef struct{
int codigo;
char N_Produc [20];// N_Product = Name of item
char ID_Produc [20];//ID_Produc = ID of Product
char Precio_Product[20]; // Price of the Item
}Producto;
char N_Produc[20];
char Precio_Product[20];
char ID_Produc[20];
Productos = fopen ("ListaDeProductos.dat", "r+");// abre el archivo en modod de adicion "r+": Escritura y Lectura por medio de modificacion.
cout << "================================================================================" << endl
<< " Welcome to Modify" << endl
<< "================================================================================" << endl << endl;
FILE *Productos;
FILE *ProductosAuxiliar;
Producto nuevoproducto;
int codigoaux;
bool registro=false;
int opcionmodificar=0, opcionguardar=0;
Productos = fopen("ListaDeProductos.dat","r");
ProductosAuxiliar = fopen("ProductosAux.dat","a+");
printf("Insert ID: ");
scanf("%d",&codigoaux);
getchar();
if(Productos!=NULL)
{
fread(&nuevoproducto,sizeof(Producto),1,Productos);
while (!feof(Productos))
{
if (nuevoproducto.codigo == codigoaux)
{
printf("\nCodigo: %d \nNombre: %s \nPrecio: %s\n\n",nuevoproducto.codigo, nuevoproducto.N_Produc, nuevoproducto.Precio_Product);
cout<<"Are you sure to Modify? <y/n>";
scanf("%s", &opcionmodificar);
getchar();
if(opcionmodificar=='y'||opcionmodificar=='Y')
{
// printf(" Insert Name: ");
// scanf("%d",&prove.codigo);
cout<<"\n Nombre Producto: ";
scanf("%s",nuevoproducto.N_Produc);
cout<<"\n Price: ";
scanf("%s",nuevoproducto.Precio_Product);
registro=true;
}
}
fseek(ProductosAuxiliar,0l,SEEK_END);
fread(&nuevoproducto,sizeof(Producto),1,Productos);
fwrite(&nuevoproducto,sizeof(Producto),1,ProductosAuxiliar);
}
}
fclose(Productos);
fclose(ProductosAuxiliar);
if(registro==true)
{
printf("\n Want to keep it? <y/n>");
scanf("%s",&opcionguardar);
if(opcionguardar=='y'||opcionguardar=='Y')
{
remove("ListaDeProductos.dat");
rename("ProductosAux.dat","ListaDeProductos.dat");
cout<<"\nData modified \n";
}
else
{
remove("ProductosAux.dat");
cout<<"Data not modified\n";
}
}
else
{
remove("ProductosAux.dat");
cout<<"Entry not found\n";
}
system("PAUSE()");
cout << "Want to modify another? <y/n> ";
regreso = getch();
}while (regreso == 'y'|| regreso =='Y');
remove("ProductosAux.dat");
在尝试修改输出之前,输出是相同的数据。 This is on the code working, at the top is the data inside "ListaDeProductos.dat" and down is the form to update the data
请检查“运行代码”是否为西班牙语,我已将其尽可能地适合所有人,希望您能理解。