-1

我需要在产品列表上执行此批量更新。此批量更新必须从数据库中检索每个产品并获得它的“订单数量”。然后必须将此“订购数量”添加到当前库存中:

例如:

当前库存:100 订购:150

批量更新后,它们必须是: 当前库存:250 订购:0

我已经完成了这个方法(见下文),但是当我运行它时,它并没有更新我的库存,也没有更新我的订单。

void batchUpdate()
{
    printf ("\n\n\n\n\t\t    ********** Batch Update *******\n \n \n");

    int tempOrder;
    int tempStock;
    int tempAdding;


    if ((pfp = fopen("products.dat","r+b")) == NULL)
    {
        printf ("Error! Cannot Open Products.dat!\n");
        printf ("Returning to Main Menu\n");
        system ("PAUSE");
        orderMainMenu();
    }


        while (fread(&p,STRUCTSIZE,1,pfp) == 1)
        {
            tempOrder = p.pOrder;
            tempStock = p.pStock;
            tempAdding = tempOrder + tempStock;
            p.pOrder = 0;
            p.pStock = tempAdding;
            fwrite (&p,STRUCTSIZE,1,pfp);
        }

    fclose (pfp);
    printf ("Orders and Stock Updated!\n");
    printf ("Returning to Main Menu!\n");
    system ("PAUSE");
    orderMainMenu();

}

我尝试使用 fseek (pfp, -STRUCTSIZE,SEEK_CUR); 但这把我的程序变成了一个无限循环。此外,当我尝试使用 show All products in database 时,他们跳过了我的第一条记录,只是进入了一个仅显示最后一条记录的无限循环。我只需要最终从系统中删除 products.dat 文件,然后再重做一次。

有什么建议吗?我确实相信 fseek() 有问题。

提前致谢

4

1 回答 1

0

发现错误,没有做 fflush (pfp);在 fwrite() 之后;

这是最终的工作代码;

void batchUpdate()
{
    printf ("\n\n\n\n\t\t    ********** Batch Update *******\n \n \n");

    int tempOrder;
    int tempStock;
    int tempAdding;


    if ((pfp = fopen("products.dat","r+b")) == NULL)
    {
        printf ("Error! Cannot Open Products.dat!\n");
        printf ("Returning to Main Menu\n");
        system ("PAUSE");
        orderMainMenu();
    }


        while (fread(&p,STRUCTSIZE,1,pfp) == 1)
        {
            tempOrder = p.pOrder;
            tempStock = p.pStock;
            tempAdding = tempOrder + tempStock;
            p.pOrder = 0;
            p.pStock = tempAdding;
            fseek (pfp,-STRUCTSIZE,SEEK_CUR);
            fwrite (&p,STRUCTSIZE,1,pfp);
            fflush(pfp); //THIS WAS EMITTED AND WAS CAUSING PROBLEMS
        }

fclose (pfp);
printf ("Orders and Stock Updated!\n");
printf ("Returning to Main Menu!\n");
system ("PAUSE");
orderMainMenu();

}

于 2012-12-26T09:58:28.117 回答