-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathorder.h
33 lines (27 loc) · 907 Bytes
/
order.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma once
#include <iostream>
#include <numeric>
#include <string>
#include <vector>
struct Purchase {
std::string product_name;
double unit_price;
int count;
};
struct Order {
std::string customer_name;
std::string address;
std::string phone_number;
std::vector<Purchase> purchase;
};
std::istream& operator>>(std::istream& is, Purchase& p);
std::istream& operator>>(std::istream& is, Order& o);
std::ostream& operator<<(std::ostream& os, const Purchase& p);
std::ostream& operator<<(std::ostream& os, const Order& o);
void end_of_loop(std::istream& ist, char terminator, const std::string& message);
double get_purchase_value(const Purchase& p);
double get_order_value(const Order& o);
template<class Iter>
double get_total_value(Iter first, Iter last) {
return std::accumulate(first, last, 0.0, [](double v, const Order& o) { return v + get_order_value(o); });
}