import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
public class ShoppingCartAnalyzer {
public static void main(String[] args) {
Path filePath = Path.of("products.txt");
try {
List<String> lines = Files.readAllLines(filePath);
BigDecimal totalSum = BigDecimal.ZERO;
BigDecimal maxPrice = BigDecimal.ZERO;
BigDecimal minPrice = null;
String mostExpensiveItem = "";
String cheapestItem = "";
int validItemsCount = 0;
System.out.println("=== СПИСОК ПОКУПОК ===");
for (String line : lines) {
line = line.trim();
if (line.isEmpty()) continue;
int lastSpaceIndex = line.lastIndexOf(' ');
if (lastSpaceIndex == -1) {
System.out.println("[Пропуск] Неверный формат строки: " + line);
continue;
}
String productName = line.substring(0, lastSpaceIndex).trim();
String pricePart = line.substring(lastSpaceIndex + 1).replace(',', '.');
try {
BigDecimal price = new BigDecimal(pricePart);
totalSum = totalSum.add(price);
validItemsCount++;
if (price.compareTo(maxPrice) > 0) {
maxPrice = price;
mostExpensiveItem = productName;
}
if (minPrice == null || price.compareTo(minPrice) < 0) {
minPrice = price;
cheapestItem = productName;
}
System.out.printf("%-35s | %8.2f руб.%n", productName, price);
} catch (NumberFormatException e) {
System.out.println("[Ошибка цены] Не удалось распознать число в строке: " + line);
}
}
if (validItemsCount > 0) {
BigDecimal averagePrice = totalSum.divide(BigDecimal.valueOf(validItemsCount), 2, RoundingMode.HALF_UP);
BigDecimal vatAmount = totalSum.multiply(new BigDecimal("0.20")).setScale(2, RoundingMode.HALF_UP);
BigDecimal totalWithVat = totalSum.add(vatAmount);
System.out.println("\n=== ИТОГОВЫЙ РАСКРУТ (ЧЕК) ===");
System.out.println("Всего позиций: " + validItemsCount);
System.out.println("Сумма без НДС: " + totalSum.setScale(2, RoundingMode.HALF_UP) + " руб.");
System.out.println("Сумма НДС (20%): " + vatAmount + " руб.");
System.out.println("ИТОГО К ОПЛАТЕ: " + totalWithVat + " руб.");
System.out.println("Средняя цена за товар: " + averagePrice + " руб.");
System.out.println("Самый дорогой товар: " + mostExpensiveItem + " (" + maxPrice + " руб.)");
System.out.println("Самый дешевый товар: " + cheapestItem + " (" + minPrice + " руб.)");
} else {
System.out.println("Список покупок пуст.");
}
} catch (IOException e) {
System.err.println("Ошибка при чтении файла: " + e.getMessage());
}
}
}