forked from Yandex-Practicum/Java-Module-Project-YP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUI.java
More file actions
139 lines (120 loc) · 5.63 KB
/
UI.java
File metadata and controls
139 lines (120 loc) · 5.63 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import static java.lang.System.in;
import static java.util.Locale.ROOT;
import java.util.Scanner;
/*класс предназначен для хранения переменных, необходимых для взаимодействия программы и пользователя
* переменные инициализируются в классе Main
* также в классе хранятся методы взаимодействия программы с пользователем*/
public class UI {
public static int inputInt;
public static float inputFloat;
public static String inputStr;
public static int minPersonForSplit;
public static float minProductPrice;
public static int howManyPerson;
public static boolean readyToGo(Scanner input, String needVariableType) {/*метод, для получения разрешения на продолжения программы
в зависимости от от двух аргументов, введенной переменной и строки, включающая в себя необходимый ти переменной,
возвращает true или false, в ходе работы использует методы прооверки текущего класса*/
switch (needVariableType) {
case "needInt":
return checkForIntAndMinPersons(input);
case "needFloat":
return checkForFloatAndMinProductPrice(input);
case "needStr":
return checkForStr(input);
default:
System.err.println("error in Ui class methods");
break;
}
return false;
}
/*методы проверки введенных данных с консоли, на требуемый тип данных, возвращает логическую переменную
* в ходе работы присваивает сооответствующим переменным класса соответствующие данные, методы, также
* включает в себя вывод ошибки, в случае не сооответсвия типу данных, требуемому*/
public static boolean checkForIntAndMinPersons(Scanner input) {
boolean a = input.hasNextInt();
if (a) {
int b = input.nextInt();
if (b == 1) {
System.err.print("На одного человека нет смысла делить\nповторите ввод: ");
return false;
}
if (b > UI.minPersonForSplit - 1) {
inputInt = b;
return true;
} else {
return errMsgIntPrint();
}
} else {
return errMsgIntPrint();
}
}
public static boolean checkForFloatAndMinProductPrice(Scanner input) {
input = PriceFormatterToString.dotToPointReplacing(input);
boolean a = input.hasNextFloat();
if (a) {
float b = input.nextFloat();
if (b > (UI.minProductPrice - UI.minProductPrice)) {
inputFloat = b;
return true;
}
} else {
return errMsgFloatPrint();//false
}
return errMsgFloatPrint();//false
}
public static boolean checkForStr(Scanner input) {
inputStr = input.nextLine();
return true;
}
public static boolean errMsgIntPrint() {
System.err.print("Введите целое число, больше единицы\nповторите ввод колличества гостей: ");
return false;
}
public static boolean errMsgFloatPrint() {
System.err.print("Введите дробное число, больше нуля\nи повторите попытку ввода стоимости продукта: ");
return false;
}
public static void getPersonsCount() {
boolean a;
do {
Scanner scanner = new Scanner(in);
a = UI.readyToGo(scanner, "needInt");
} while (!a);
}
public static boolean getOneProduct() {
boolean readProductName;
int i = 0;
do {
boolean readProductPrice;
i++;
Scanner scanner = new Scanner(in);
inputStr = scanner.nextLine();
inputStr = inputStr.trim();
inputStr = inputStr.toLowerCase(ROOT);
readProductName = inputStr.equals("завершить");
readProductPrice = readProductName;
if (!readProductPrice) {
getProductPrice();
Product product = new Product(i, inputStr, inputFloat);
ProductList.writeToProductList(product);
System.out.print("продукт и его стоимость успешно добавлены\n" +
"если вы хотите закончить добавление товара, то введите \"завершить\" или\nвведите название продукта: ");
}
} while (!readProductName);
return true;
}
public static void getProductPrice() {
boolean readProductPrice;
System.out.print("Введите стоимость продукта: ");
do {
Scanner scanner = new Scanner(in);
readProductPrice = checkForFloatAndMinProductPrice(scanner);
} while (!readProductPrice);
}
public static void makeProductList() {
boolean a;
do {
a = getOneProduct();
} while (!a);
}
}