C ++ |尝试在C ++中创建“修改”选项不起作用

时间:2019-11-18 20:14:00

标签: c++ file logic fstream

我正在做一个关于咖啡店的小项目。我正在尝试开发一个选项来修改“ ListaDeProductos.dat”文件中的任何项目,该文件存储用户创建的所有项目。我发现了我4年前编写的非常老的代码,大声笑,还有一些代码我不知道它是如何工作的(如果有人可以解释我它是如何工作的,我会非常满意的)。关键是我需要帮助,以查看代码出了什么问题以及为什么修改后的数据无法正确存储。

要进行此修改,我做到了:

  • 打开“ ListaDeProductos.dat”
  • 打开“ ProductosAux.dat”,该文件是第一个文件的副本,但是该文件存储了修改后的内容
  • 询问商品ID将被修改
  • 检查“ ListaDeProductos.dat”是否存在
  • 如果存在,则系统逐项检查ID是否存在;如果存在,则系统会询问新数据;如果不存在,则删除“ ProductosAux.dat”
  • 使用以下我不记得确切的代码:

    fseek(ProductosAuxiliar,0l,SEEK_END);             fread(&nuevoproducto,sizeof(Producto),1,Productos);             fwrite(&nuevoproducto,sizeof(Producto),1,ProductosAuxiliar);

  • 关闭两个文件

  • 如果进行了更改,系统会询问您是否要保存它
  • 如果是,则删除“ ListaDeProductos.dat”,并将“ ProductosAux.dat”重命名为“ ListaDeProductos.dat”
  • 如果否,则删除“ ProductosAux.dat”

以下是执行此操作的代码:

#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

请检查“运行代码”是否为西班牙语,我已将其尽可能地适合所有人,希望您能理解。

0 个答案:

没有答案