Repository navigation
Expand file tree
/
Copy pathLetsCount.java
More file actions
112 lines (97 loc) · 4.49 KB
/
Copy pathLetsCount.java
File metadata and controls
112 lines (97 loc) · 4.49 KB
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import java.util.HashMap;
import java.util.Scanner;
public class LetsCount {
Scanner scanner = new Scanner(System.in);
int guestCount;
LetsCount(int guestCount) {
this.guestCount = guestCount;
}
private final HashMap<String, Double> productList = new HashMap<>();
String productName;
double price;
// Метод для заведения товаров
public void inputProduct() {
while (true) {
System.out.println("Введите название товара:");
productName = scanner.next();
// Точка прерывания метода на ключевом слове "завершить"
if (productName.equalsIgnoreCase("завершить")) {
break;
}
System.out.println("Введите цену в т.ч. с копейками, формат 'рубли.копейки' [10.45, 11.40]:");
try {
price = scanner.nextDouble();
if (productList.containsKey(productName) && price > 0) { // На случай, если мы уже добавили такой продукт
price = productList.get(productName) + price;
productList.put(productName, price);
System.out.println("Вы успешно добавили товар \"" + productName + "\"");
} else if (price > 0) {
productList.put(productName, price);
System.out.println("Вы успешно добавили товар \"" + productName + "\"");
} else if (price <= 0) {
System.out.println("Товар не может быть с отрицательной или нулевой стоимостью");
}
} catch (Exception nfe) {
System.out.println("Убедитесь, что вы вводите число в формате 00.00 руб. Попробуйте добавить товар еще раз.");
scanner.next(); //очистка сканера
}
System.out.println("Промежуточный итог: " + subTotal() +
" руб. \nДля завершения подсчета просто напишите \"завершить\"");
}
}
// Метод для подсчета промежуточного итога
public double subTotal() {
double sum = 0;
for (double d : productList.values()) {
sum += d;
}
return sum;
}
// Метод для вывода чека в конце
public void finalReceipt() {
int i = 1;
for (String key : productList.keySet()) {
System.out.println("№ " + i + ". " + key + ", " + productList.get(key) + " руб.");
i++;
}
}
// Метод для подсчета долга на душу
public double duePerGuest(double guestCount, double subTotal) {
double d;
d = subTotal / guestCount;
return d;
}
// Метод для определения формы слова "рубль" в зависимости от числа,
// которое передается на входе
public String rubCase(double duePerGuest) {
int i = (int) Math.floor(duePerGuest);
if (i >= 100) { // Для чеков больше 100 руб., для обработки остатков 11, 12, 13 и 14.
switch (i % 100) {
case 11:
case 12:
case 13:
case 14:
return "рублей";
default: // на случай, если остаток деления будет, например, 01, 24 и т.д.
return rubCaseDefault(i);
}
} else if (11 <= i && i <= 14) {
return "рублей";
} else { // Если итоговый чек меньше, чем на 100 руб.
return rubCaseDefault(i);
}
}
// В отдельный метод вынесено определение формы слова "рубль" для случаев по умолчанию.
private String rubCaseDefault(int i) {
switch (i % 10) {
case 1:
return "рубль";
case 2:
case 3:
case 4:
return "рубля";
default:
return "рублей";
}
}
}