Загрузка данных


Саня:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;

public class ShoppingTask {
    public static void main(String[] args) {
        File inputFile = new File("products.txt");

        // Списки для хранения названий и цен (с плавающей точкой float)
        ArrayList<String> names = new ArrayList<>();
        ArrayList<Float> prices = new ArrayList<>();

        // 1. Читаем файл и разбираем строки
        try {
            Scanner scanner = new Scanner(inputFile);

            while (scanner.hasNextLine()) {
                String line = scanner.nextLine().trim();
                if (line.isEmpty()) continue;

                // Разделяем строку пробелами на массив слов
                String[] parts = line.split(" ");

                // Если в строке меньше 2 элементов (нет цены или названия), пропускаем
                if (parts.length < 2) continue;

                // Вторая часть (после последнего пробела) — это последний элемент массива
                String priceStr = parts[parts.length - 1].replace(',', '.');
                float price = Float.parseFloat(priceStr);

                // Первая часть — собираем обратно все слова до последнего пробела
                String name = "";
                for (int i = 0; i < parts.length - 1; i++) {
                    name += parts[i] + " ";
                }
                name = name.trim(); // убираем лишний пробел в конце

                names.add(name);
                prices.add(price);
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            System.out.println("Ошибка: файл products.txt не найден!");
            return;
        }

        if (names.isEmpty()) {
            System.out.println("Список покупок пуст.");
            return;
        }

        // 2. Считаем статистику: сумму, среднее, НДС, минимум и максимум
        float total = 0;
        float maxPrice = prices.get(0);
        float minPrice = prices.get(0);
        String maxName = names.get(0);
        String minName = names.get(0);

        for (int i = 0; i < prices.size(); i++) {
            float currentPrice = prices.get(i);
            total += currentPrice;

            if (currentPrice > maxPrice) {
                maxPrice = currentPrice;
                maxName = names.get(i);
            }
            if (currentPrice < minPrice) {
                minPrice = currentPrice;
                minName = names.get(i);
            }
        }

        float average = total / prices.size();
        
        // Скидка 5%, если набрали больше чем на 1000 рублей
        float discount = (total > 1000) ? total * 0.05f : 0;
        float finalTotal = total - discount;
        float vat = finalTotal * 0.20f; // НДС 20%

        // 3. Выводим чек в консоль и одновременно сохраняем в файл receipt.txt
        try {
            PrintWriter writer = new PrintWriter("receipt.txt");

            System.out.println("========== КАССОВЫЙ ЧЕК ==========");
            writer.println("========== КАССОВЫЙ ЧЕК ==========");

            for (int i = 0; i < names.size(); i++) {
                String itemLine = String.format("%d. %-25s %.2f руб.", (i + 1), names.get(i), prices.get(i));
                System.out.println(itemLine);
                writer.println(itemLine);
            }

            String summary = "----------------------------------\n" +
                    String.format("Всего позиций:           %d шт.\n", names.size()) +
                    String.format("Сумма без скидки:        %.2f руб.\n", total) +
                    String.format("Скидка (5%% от 1000 р.): -%.2f руб.\n", discount) +
                    String.format("ИТОГО К ОПЛАТЕ:          %.2f руб.\n", finalTotal) +

String.format("В т.ч. НДС (20%%):        %.2f руб.\n", vat) +
                    "----------------------------------\n" +
                    String.format("Средняя цена за товар:   %.2f руб.\n", average) +
                    String.format("Самый дорогой:           %s (%.2f руб.)\n", maxName, maxPrice) +
                    String.format("Самый дешевый:           %s (%.2f руб.)\n", minName, minPrice) +
                    "==================================";

            System.out.println(summary);
            writer.println(summary);

            writer.close();
            System.out.println("\n[Чек также сохранен в файл receipt.txt]");

        } catch (FileNotFoundException e) {
            System.out.println("Ошибка при сохранении чека!");
        }
    }
}