@@ -60,21 +60,26 @@ public CustomCollection<Client> getData() throws IOException {
6060 int clientNumber = 1 ;
6161
6262 while (true ) {
63- if (userIds .size () == 1000 ) {
63+ if (userIds .size () == 1000 ) {
6464 System .out .println ("Достигнут лимит клиентов" );
6565 break ;
6666 }
6767
6868 System .out .println ("Ввод клиент №" + clientNumber );
6969
70- if (!promptForConfirmation ("Добавляем клиента?" )) {
71- break ;
72- }
70+ try {
71+ if (!promptForConfirmation ("Добавляем клиента?" )) {
72+ break ;
73+ }
7374
74- Client client = inputClient (clientNumber );
75- if (client != null ) {
76- clients .add (client );
77- clientNumber ++;
75+ Client client = inputClient (clientNumber );
76+ if (client != null ) {
77+ clients .add (client );
78+ clientNumber ++;
79+ }
80+ } catch (StopInputException e ) {
81+ System .out .println ("\n Ввод прерван пользователем. Текущий клиент не добавлен." );
82+ break ;
7883 }
7984 }
8085 System .out .println ("\n Ввод завершен. Добавлено клиентов: " + clients .size ());
@@ -88,43 +93,55 @@ public CustomCollection<Client> getData() throws IOException {
8893 *
8994 * @param clientNumber порядковый номер клиента (для отображения в интерфейсе)
9095 * @return объект {@link Client} с введенными данными или {@code null},
91- * если пользователь отменил ввод
96+ * если пользователь отменил ввод
9297 */
9398 private Client inputClient (int clientNumber ) {
94- String name = promptForName ();
95- String phone = promptForNumber ();
96- int id = promptForId ();
97-
98- Client .ClientBuilder builder = new Client .ClientBuilder ().name (name )
99- .phoneNumber (phone )
100- .idNumber (id );
101-
102- System .out .println ("\n Вы ввели:" );
103- System .out .println (" Имя: " + name );
104- System .out .println (" Телефон: " + phone );
105- System .out .println (" ID: " + id );
106-
107- if (promptForConfirmation ("Все верно?" )) {
108- return builder .build ();
109- } else {
110- System .out .println ("Отмена ввода этого клиента" );
111- return null ;
99+ try {
100+ String name = promptForName ();
101+ String phone = promptForNumber ();
102+ int id = promptForId ();
103+
104+ Client .ClientBuilder builder = new Client .ClientBuilder ().name (name )
105+ .phoneNumber (phone )
106+ .idNumber (id );
107+
108+ System .out .println ("\n Вы ввели:" );
109+ System .out .println (" Имя: " + name );
110+ System .out .println (" Телефон: " + phone );
111+ System .out .println (" ID: " + id );
112+
113+ if (promptForConfirmation ("Все верно?" )) {
114+ return builder .build ();
115+ } else {
116+ System .out .println ("Отмена ввода этого клиента" );
117+ return null ;
118+ }
119+ } catch (StopInputException e ) {
120+ throw e ;
112121 }
113122 }
114123
115124 private String promptForName () {
116- return promptForString ("Введите имя" , true );
125+ try {
126+ return promptForString ("Введите имя" , true );
127+ } catch (StopInputException e ) {
128+ throw e ;
129+ }
117130 }
118131
119132 private String promptForNumber () {
120133 while (true ) {
121- String phone = promptForString ("Введите номер телефона в формате +7XXXXXXXXXX" , true );
134+ try {
135+ String phone = promptForString ("Введите номер телефона в формате +7XXXXXXXXXX" , true );
122136
123- if (phone .matches ("^\\ +7\\ d{10}$" )) {
124- return phone ;
125- } else {
126- System .out .println ("⚠️ Неверный формат телефона! Пример: +79991234567" );
127- System .out .println (" Должно начинаться с +7 и содержать 11 цифр" );
137+ if (phone .matches ("^\\ +7\\ d{10}$" )) {
138+ return phone ;
139+ } else {
140+ System .out .println ("⚠️ Неверный формат телефона! Пример: +79991234567" );
141+ System .out .println (" Должно начинаться с +7 и содержать 11 цифр" );
142+ }
143+ } catch (StopInputException e ) {
144+ throw new RuntimeException (e );
128145 }
129146 }
130147 }
@@ -148,6 +165,8 @@ private int promptForId() {
148165
149166 userIds .add (id );
150167 return id ;
168+ } catch (StopInputException e ) {
169+ throw e ;
151170 } catch (NumberFormatException e ) {
152171 System .out .println ("ID должен быть целым числом" );
153172 }
@@ -168,19 +187,24 @@ private int promptForId() {
168187 *
169188 * @param message сообщение с вопросом для подтверждения
170189 * @return {@code true} если пользователь подтвердил действие,
171- * {@code false} если отказался
190+ * {@code false} если отказался
172191 */
173192 private boolean promptForConfirmation (String message ) {
174193 while (true ) {
175- System .out .print (message + " (да/нет): " );
194+ System .out .print (message + " (да/д/yes/y или нет/н/no/n ): " );
176195 String input = scanner .nextLine ().trim ().toLowerCase ();
196+
197+ if (input .equalsIgnoreCase ("стоп" )) {
198+ throw new StopInputException ();
199+ }
200+
177201 if (input .equals ("да" ) || input .equals ("д" ) || input .equals ("y" ) || input .equals ("yes" )) {
178202 return true ;
179203 }
180204 if (input .equals ("нет" ) || input .equals ("н" ) || input .equals ("n" ) || input .equals ("no" )) {
181205 return false ;
182206 }
183- System .out .println ("⚠️ Пожалуйста, введите 'да' или 'нет'" );
207+ System .out .println ("⚠️ Пожалуйста, введите 'да/д/yes/y ' или 'нет/н/no/n '" );
184208 }
185209 }
186210
@@ -191,27 +215,40 @@ private boolean promptForConfirmation(String message) {
191215 * <p>Если поле является обязательным ({@code required = true}),
192216 * метод будет продолжать запрашивать ввод до получения непустой строки.</p>
193217 *
194- * @param message сообщение с описанием запрашиваемых данных
218+ * @param message сообщение с описанием запрашиваемых данных
195219 * @param required флаг, указывающий является ли поле обязательным для заполнения
196220 * @return введенная пользователем строка (без начальных и конечных пробелов)
197221 */
198- private String promptForString (String message , boolean required ) {
222+ private String promptForString (String message , boolean required ) {
199223 while (true ) {
200224 System .out .print (message + ": " );
201225
202226 try {
203227 String input = scanner .nextLine ().trim ();
204228
229+ if (input .equalsIgnoreCase ("стоп" )) {
230+ throw new StopInputException ();
231+ }
232+
205233 if (required && input .isEmpty ()) {
206234 System .out .println ("⚠️ Это поле обязательно для заполнения!" );
207235 continue ;
208236 }
209237
210238 return input ;
211239 } catch (Exception e ) {
240+ if (e instanceof StopInputException ) {
241+ throw e ; // Пробрасываем дальше
242+ }
212243 System .out .println ("Ошибка ввода: " + e .getMessage ());
213244 scanner .nextLine (); // Очистка буфера
214245 }
215246 }
216247 }
248+
249+ class StopInputException extends RuntimeException {
250+ public StopInputException () {
251+ super ("Ввод прерван пользователем" );
252+ }
253+ }
217254}
0 commit comments