(是的,这是家庭作业,但已经完成,我现在只是想改进它以进行练习)
这基本上是一个销售计算器,允许您为销售项目进行多个输入,然后显示总计、销售税和总计。
我试图做的修改是,我希望能够保存变量中每个项目的成本,而不会重叠内存,然后能够在总计之上调用它们,这样你可以看到每个项目的价值。
====
====================================================================================//importing libraries for cin and cout, as well as setw() and setprecision()
#include <iostream>
#include <iomanip>
using namespace std; //sets all code to standard syntax
int main(){ //initializes the main function
//initializing variables
char answer = ' ';
int saleItems = 0;
double saleTax = 0.0;
double grandTotal = 0.0;
double itemValue = 0.0;
double titemValue = 0.0;
double taxPerc = 0.0;
//begins a post-test loop
do {
titemValue = 0.0; //makes sure the accumulator resets WITHIN the loop
//prompts for sale items amount
cout << "How many sales items do you have? : ";
cin >> saleItems;
//creates a loop that displays the prompt for each iteration of saleItems
for (int x = 1; x <= saleItems; x += 1){
cout << "Enter in the value of sales item " << x << " : $";
cin >> itemValue;
titemValue += itemValue; //accumulator for adding up the iterated values
}
//prompts the user to enter a sales percentage
cout << endl << endl;
cout << "Enter in the sales tax percentage(Enter 10 for 10%): ";
cin >> taxPerc;
cout << endl << endl;
//processes the variables after taxPerc has been given
saleTax = titemValue * (taxPerc / 100);
grandTotal = titemValue + saleTax;
//sets decimal precision to 2 places
cout << fixed << setprecision(2);
//displays receipt with the calculated and input values
cout << "********************************************" << endl;
cout << "******** S A L E S R E C E I P T ********" << endl;
cout << "********************************************" << endl;
cout << "** **" << endl;
cout << "** **" << endl;
cout << "** **" << endl;
cout << "** **" << endl;
cout << "** Total Sales $" << setw(9) << titemValue << " **" << endl;
cout << "** Sales Tax $" << setw(9) << saleTax << " **" << endl;
cout << "** ---------- **" << endl;
cout << "** Grand Total $" << setw(9) << grandTotal << " **" << endl;
cout << "** **" << endl;
cout << "** **" << endl;
cout << "********************************************" << endl << endl << endl;
//prompts user to begin loop again
cout << "Do you want to run this program again? (Y/N):";
cin >> answer;
answer = toupper(answer);
cout << endl << endl;
} while (answer == 'Y');
====
====================================================================================因此,从本质上讲,我需要能够将每个itemValue保存为多个不同的值,而无需循环重复,而只是替换它们,考虑到累加器将继续循环,并添加itemValue值,我真的看不出我该怎么做。
下面是使用简单数组存储项目值的一种方法。
在顶部声明一个数组。注意:您必须为其指定固定大小。有一些方法可以具有可变大小,但它们变得更加复杂(例如向量)。最好使用常量而不是硬编码数字来指定大小,因为稍后将需要该常量。
const int maxSaleItems = 100;
double itemValues[maxSaleItems];
在向用户询问项目数后,Max 确保他们没有输入太大的数字。
cout << "How many sales items do you have? : ";
cin >> saleItems;
if (saleItems > maxSaleItems) {
cout << "Sorry, I can only handle " << maxSaleItems << " items.";
continue;
}
在输入项目值的循环中,将项目值保存到数组中:
cout << "Enter in the value of sales item " << x << " : $";
cin >> itemValue;
titemValue += itemValue; //accumulator for adding up the iterated values
itemValues[x - 1] = itemValue;
请注意数组访问中的x-1
- 数组基于 0(即它们的索引从 0 开始)。通常我会从0
循环x
到< saleItems
,但我不想改变你现有的循环。
打印收据时,添加一个打印出所有值的循环(您需要添加格式):
cout << "** **" << endl;
for (int x = 1; x <= saleItems; x += 1){
cout << "** Item " << x << " $" << itemValues[x-1] << " **" <<endl;
}
cout << "** **" << endl;
正如我在评论中所说,使用 std::vector
会更好,但如果你还没有达到这个水平,数组就可以了。
编辑:简单的vector
示例。要添加向量,您需要包含适当的标头:
#include <vector>
不再需要maxSaleItems
,因为载体可以增长。声明向量变量。<double>
使其成为包含double
值的向量:
std::vector<double> itemValues;
在循环中,无需按位置设置新项的数组值,只需使用 push_back
将其添加到矢量的末尾即可。
cout << "Enter in the value of sales item " << x << " : $";
cin >> itemValue;
titemValue += itemValue; //accumulator for adding up the iterated values
itemValues.push_back(itemValue);
打印收据代码可以完全保留在数组版本中,因为您可以访问数组等向量:
cout << "** **" << endl;
for (int x = 1; x <= saleItems; x += 1){
cout << "** Item " << x << " $" << itemValues[x-1] << " **" <<endl;
}
cout << "** **" << endl;
您还可以进行其他更改以使vector
版本更简单,但我想尽可能少地更改。