ユーザーが注文を作成する AddOrder() というメソッドがあります。システムがユーザーに製品名の入力を求めると、システムは products.dat ファイルから特定のレコードを取得します。次に、ユーザーは製品数量と注文の確認を求められます。注文記録が確認されると、products.dat ファイルの在庫数量を更新して、その特定の製品の製品数量を差し引いてシステムに更新してもらいます。残念ながら在庫数は変わらずです。これは私のコードです。
void addOrder()
{
FILE *pfp;
order o1;
product p;
char ProductName[100];
int found = 0;
int choice = 0;
int tmpStock = 0;
double pPrice = 0.0;
int choice2 = 0;
ofp=fopen("orders.dat","ab");
pfp=fopen("products.dat", "rb");
printf("\n========================================================\n\n");
printf("\t\t Adding an Order\n\n");
printf("========================================================\n\n");
do
{
printf("Enter CustomerID: \n");
scanf("%s",&o1.CustomerID);
}while(!findCustomer(o1.CustomerID));
printf("Enter Product Name: \n");
scanf("%s", ProductName);
while(1)
{
fread(&p,sizeof(p),1,pfp);
if(feof(pfp))
{
break;
}
if(strcmp(ProductName,p.ProductName)==0)
{
found = 1;
tmpStock = p.QuantityInStock;
pPrice = p.price;
}
}
if(found == 0)
{
printf("The Product was not found!\n");
OrdersSubMenu();
}
printf("Enter Product Quantities: \n");
scanf("%d", &o1.ProductQuantities);
if(o1.ProductQuantities > tmpStock)
{
printf("You have axeceeded available stock! Available Stock: %d\n", tmpStock);
printf("Do you want to enter product quantity again(press 1)\n");
printf("or order a different product(press 2)?\n");
scanf("%d", &choice);
if(choice == 1)
{
printf("Enter Product Quantities: \n");
scanf("%d", &o1.ProductQuantities);
}
else
if(choice == 2)
{
OrdersSubMenu();
}
}
else
{
printf("Product Quantity is available\n");
}
o1.TotalOrderPrice = o1.ProductQuantities * pPrice;
printf("Total Order Price: %.2f\n", o1.TotalOrderPrice);
printf("Do you want to confirm order? If yes press 1, if no press 2: \n");
scanf("%d", &choice2);
if(choice2 == 1)
{
fwrite(&o1,sizeof(o1),1,ofp);
}
else
if(choice2 == 2)
{
OrdersSubMenu();
}
printf("Order record was added to the system!\n");
tmpStock = tmpStock-o1.ProductQuantities;
p.QuantityInStock =tmpStock;
fclose(ofp);
fclose(pfp);
}