8-2 小專案參考解答
#include <iostream>
#include <ctime>
using namespace std;
struct Item
{
string name;
double price;
int quantity;
};
struct Date
{
int year;
int month;
int day;
};
struct Time
{
int hh;
int mm;
int ss;
};
struct Invoice
{
Item itemList[100];
int countOfItemList;
Date date;
Time time;
double amount;
double taxRate;
double totalDue;
};
Invoice prepareInvoice(double taxRate)
{
Invoice invoice{};
// get & set current date/time
time_t now = time(nullptr);
tm localTime{};
localtime_s(&localTime, &now);
invoice.date.year = localTime.tm_year + 1900;
invoice.date.month = localTime.tm_mon + 1;
invoice.date.day = localTime.tm_mday;
invoice.time.hh = localTime.tm_hour;
invoice.time.mm = localTime.tm_min;
invoice.time.ss = localTime.tm_sec;
invoice.countOfItemList = 0;
invoice.amount = 0.0;
invoice.taxRate = taxRate;
invoice.totalDue = invoice.amount * (1.0 + invoice.taxRate);
return invoice;
}
void printInvoice(const Invoice& invoice)
{
cout << printf("Date: " <<%d/%d/%d\n", invoice.date.year << "/" <<year, invoice.date.month << "/" <<month, invoice.date.dayday);
<< endl;
cout << printf("Time: " <<%d:%d:%d\n", invoice.time.hh << ":" <<hh, invoice.time.mm << ":" <<mm, invoice.time.ssss);
<< endl;
cout << printf("------------------------------"\n");
<< endl;
cout << printf("Items:" << endl;\n");
for (int i = 0; i < invoice.countOfItemList; ++i)
{
const Item& item = invoice.itemList[i];
cout << printf("- " << item.name << ":%s: $" << item.price << "%.2f x " <<%d\n", item.quantityname.c_str(), <<item.price, endl;item.quantity);
}
cout << printf("------------------------------"\n");
<< endl;
cout << printf("Amount: $" <<%.2f\n", invoice.amountamount);
<< endl;
cout << printf("Tax Rate: " <<%.2f%%\n", invoice.taxRate * 100100);
<< "%" << endl;
cout << printf("Total Due: $" <<%.2f\n", invoice.totalDue << endl;totalDue);
}
void scanItem(Invoice& invoice)
{
string name;
double price;
cin >> name;
cin >> price;
for (int i = 0; i < invoice.countOfItemList; ++i)
{
if (invoice.itemList[i].name == name)
{
invoice.itemList[i].quantity += 1;
invoice.amount += price;
invoice.totalDue = invoice.amount * (1.0 + invoice.taxRate);
return;
}
}
Item newItem{name, price, 1};
invoice.itemList[invoice.countOfItemList++] = newItem;
invoice.amount += price;
invoice.totalDue = invoice.amount * (1.0 + invoice.taxRate);
}
int main()
{
double taxRate = 0.05;
Invoice invoice = prepareInvoice(0.05);
int n;
cin >> n;
for(int i=0; i<n; ++i)
{
scanItem(invoice);
}
printInvoice(invoice);
return 0;
}