bool Customer::checkout(Inventory* inv) {
double total = 0;
for( unsigned int i=0; i < _Cart.size(); i++ ) {
total += (_Cart[i].price * _Cart[i].quant); //
}
if( balance < total ) {
cout << "Checkout Failed. You do not have enough money to afford everything."
<<"Please go back and remove items as necessary.\n";
return false;
}
else {
unsigned int j = 0; //Then, you need to add said food into the purchased vector
for (j = 0; j < inv->_Purchases.size(); j++) { //When you add the food into the purchased vector, you need to look through
if (inv->_Purchases[j].name == _Cart[j].name) { //the entire purchased vector to see if the food is already there,
inv->_Purchases[j].quant += _Cart[j].quant; //if so, increment quantity if not, just push the food into the vector
break;
}
}
if( j == inv->_Purchases.size()) {
inv->_Purchases.push_back(_Cart[j]);
cout << "Checkout is Complete.\n";
return true;
}
_Cart.clear();
}
balance -= total;
inv->interval += 1;
inv->restock( "restock fruits.txt", 2 );
inv->restock( "restock inventory.txt", 3);
cout << "Checkout Complete.\n";
return true;
}
void Inventory::summary() {
double total = 0;
for( unsigned int j=0; j<_Purchases.size(); j++ ) {
cout << "\nTotal purchases for the store are:";
cout << "\nFood: " << _Purchases[j].name << " | Quantity: " << _Purchases[j].quant << " | Price: " << _Purchases[j].price << endl;
total += (_Purchases[j].quant * _Purchases[j].price);
}
cout << "Total Purchase: " << total << endl;
//cout the purchased vector's .name
//cout the quant
//cout the price*quant
//make a total, and cout it at the end
}
这是我的主要内容:
#include "foodservice.h"
#include <iostream>
using namespace std;
int main() {
Inventory Master;
bool flag;
Customer Bob("Bob", 12345, 100.00 );
Customer Joe("Joe", 56789, 50.00 );
Customer Arjun("Arjun", 98765, 35.89 );
Customer Randy("Randy", 54689, 30.28);
Customer Mark("Mark", 76598, 15.18);
Master.firststock( "inventory.txt" );
vector<Food> temp = Master._Inv;
cout <<"Hi, What would you like to buy today?" << endl;
for(unsigned int i=0; i<temp.size(); i++ ) {
cout << temp[i].name << " " << temp[i].quant << " " << temp[i].price << endl;
}
cout <<"\n";
Food Apple("Apples", .99, 10);
Food Oranges("Oranges", .99, 2);
Food Chips("Chips", 3.00, 2);
cout <<"\nHi Bob" << endl;
flag = Bob.addCart(Apple, 7, &Master);
cout <<"Bob's total purchases are Currently: \n";
Bob.report();
flag = Bob.addCart(Oranges, 2, &Master);
flag = Bob.addCart(Chips, 2, &Master);
flag = Bob.removeCart(Apple, 3, &Master);
Bob.report();
cout <<"Bob, ";
flag = Bob.checkout(&Master);
cout <<"\nHi Arjun" << endl;
flag = Arjun.addCart(Apple, 3, &Master);
cout <<"Arjun, ";
Arjun.report();
flag = Arjun.checkout(&Master);
Master.summary();
当我打电话给summary();总的来说,由于某种原因,我似乎只能让苹果显示输出,如下所示:
“该商店的总购买量为:
食物:苹果|数量:7 |价格:0.99
总购买:6.93英寸
但是正如您所看到的,我已经为Bob的购物车添加了苹果,橙子和薯条,因此这三个都应该显示,但不是。我会很感激的。这项工作仍在进行中。我觉得这与它有关
if( j == inv->_Purchases.size()) {
inv->_Purchases.push_back(_Cart[j]);
cout << "Checkout is Complete.\n";
return true;
But i am not sure.
最佳答案
问题出在您添加已购买商品的循环中。逻辑是错误的。
你写了
for (j = 0; j < inv->_Purchases.size(); j++)
if (inv->_Purchases[j].name == _Cart[j].name)
...
但这会将
_Purchases[0]
与_Cart[0]
进行比较,并且将_Purchases[1]
与_Cart[1]
等进行比较。您需要两个循环,以便将每个_Cart
项与每个_Purchases
项进行比较。像这样for (i = 0; i < _Cart.size(); i++)
{
for (j = 0; j < inv->_Purchases.size(); j++)
{
if (_Cart[i].name == inv->_Purchases[j].name)
...
我让你去填补其余的。这将是一个很好的练习。