1: public class CashRegister
2: {
3: public CashRegister()
4: {
5: Tax = 0.06m;
6: }
7:
8: private decimal Tax { get; set; }
9: private IEnumerable<Product> Products { get; set; }
10:
11: public void AcceptPayment(Customer customer, IEnumerable<Product> products, decimal payment)
12: {
13: decimal subTotal = CalculateSubtotal();
14:
15: subTotal = SubtractDiscounts(subTotal);
16:
17: decimal grandTotal = AddTax(subTotal);
18:
19: SubtractFromCustomerBalance(customer, grandTotal);
20: }
21:
22: private void SubtractFromCustomerBalance(Customer customer, decimal grandTotal)
23: {
24: customer.DeductFromAccountBalance(grandTotal);
25: }
26:
27: private decimal AddTax(decimal subTotal)
28: {
29: return subTotal * Tax;
30: }
31:
32: private decimal SubtractDiscounts(decimal subTotal)
33: {
34: foreach(Product product in Products)
35: {
36: subTotal -= product.AvailableDiscounts;
37: }
38: return subTotal;
39: }
40:
41: private decimal CalculateSubtotal()
42: {
43: decimal subTotal = 0m;
44: foreach (Product product in Products)
45: {
46: subTotal += product.Price;
47: }
48: return subTotal;
49: }
50: }
51:
52: public class Customer
53: {
54: public void DeductFromAccountBalance(decimal amount)
55: {
56: // deduct from balance
57: }
58: }
59:
60: public class Product
61: {
62: public decimal Price { get; set; }
63: public decimal AvailableDiscounts { get; set; }
64: }