Загрузка данных
Саня:
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("Ошибка при сохранении чека!");
}
}
}