From c62ed0c17a42fae598735c47a82356a2ff2702d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B5=D0=BE=D1=80=D0=B3=D0=B8=D0=B9?= Date: Mon, 13 Oct 2025 23:05:04 +0500 Subject: [PATCH 1/4] =?UTF-8?q?=D0=9F=D0=BB=D0=BE=D1=82=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=93=D0=B5=D0=BE=D1=80=D0=B3=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=9F=D1=80=D0=98-202=20=E2=80=94=20=D0=97=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/LogLevel.java | 8 ++ task01/src/com/example/task01/Logger.java | 89 +++++++++++++++++++ task01/src/com/example/task01/Task01Main.java | 4 +- 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 task01/src/com/example/task01/LogLevel.java create mode 100644 task01/src/com/example/task01/Logger.java diff --git a/task01/src/com/example/task01/LogLevel.java b/task01/src/com/example/task01/LogLevel.java new file mode 100644 index 00000000..8e452ee9 --- /dev/null +++ b/task01/src/com/example/task01/LogLevel.java @@ -0,0 +1,8 @@ +package com.example.task01; + +public enum LogLevel { + DEBUG, + INFO, + WARNING, + ERROR +} diff --git a/task01/src/com/example/task01/Logger.java b/task01/src/com/example/task01/Logger.java new file mode 100644 index 00000000..ff6a8262 --- /dev/null +++ b/task01/src/com/example/task01/Logger.java @@ -0,0 +1,89 @@ +package com.example.task01; + +import java.text.MessageFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +public class Logger { + private final String name; + private static ArrayList loggersList; + private LogLevel logLevel; + + public Logger(String name){ + this.name = name; + } + + public Logger(){ + this.name = "Logger"; + } + + public String getName(){ + return name; + } + + public static Logger getLogger(String name){ + for(Logger i : loggersList){ + if(i.name.equals(name)) + return i; + } + Logger logger = new Logger(name); + loggersList.add(logger); + return logger; + } + + public void error(String message){ + log(LogLevel.ERROR, message); + } + + public void error(String format, Object... args){ + log(LogLevel.ERROR, format, args); + } + + public void warning(String message){ + log(LogLevel.WARNING, message); + } + + public void warning(String format, Object... args){ + log(LogLevel.WARNING, format, args); + } + + public void info(String message){ + log(LogLevel.INFO, message); + } + + public void info(String format, Object... args){ + log(LogLevel.INFO, format, args); + } + + public void debug(String message){ + log(LogLevel.DEBUG, message); + } + + public void debug(String format, Object... args){ + log(LogLevel.DEBUG, format, args); + } + + private String formatMessage(LogLevel logLevel, String Message){ + String date = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()); + return MessageFormat.format("[{0}] {1} {2} - {3}", logLevel.name(), date, this.name, Message); + } + + public void log(LogLevel logLevel, String message){ + if(logLevel.compareTo(this.logLevel) >= 0) + System.out.println(formatMessage(logLevel, message)); + } + + public void log(LogLevel logLevel, String format, Object... args){ + if(logLevel.compareTo(this.logLevel) >= 0) + System.out.println(formatMessage(logLevel, String.format(format, args))); + } + + public LogLevel getLevel(){ + return logLevel; + } + + public void setLevel(LogLevel logLevel){ + this.logLevel = logLevel; + } +} diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 9973557d..749a4409 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -2,6 +2,8 @@ public class Task01Main { public static void main(String[] args) { - + Logger logger1 = new Logger("Biba"); + logger1.setLevel(LogLevel.DEBUG); + logger1.log(LogLevel.DEBUG, "Boba!"); } } From 606fa282fad307b9a8271fb0adf058f8edd8b51a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B5=D0=BE=D1=80=D0=B3=D0=B8=D0=B9?= Date: Mon, 13 Oct 2025 23:05:31 +0500 Subject: [PATCH 2/4] =?UTF-8?q?=D0=9F=D0=BB=D0=BE=D1=82=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=93=D0=B5=D0=BE=D1=80=D0=B3=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=9F=D1=80=D0=98-202=20=E2=80=94=20=D0=97=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/example/task02/DiscountBill.java | 37 +++++++++++++++++++ task02/src/com/example/task02/Task02Main.java | 12 +++++- 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 task02/src/com/example/task02/DiscountBill.java diff --git a/task02/src/com/example/task02/DiscountBill.java b/task02/src/com/example/task02/DiscountBill.java new file mode 100644 index 00000000..fcc171a2 --- /dev/null +++ b/task02/src/com/example/task02/DiscountBill.java @@ -0,0 +1,37 @@ +package com.example.task02; + +public class DiscountBill extends Bill { + private final double discount; + + public DiscountBill(double discount) { + this.discount = discount; + } + + /** + * Подсчитывает общую сумму покупки с учетом скидки + * + * @return общую стоимость покупки с учетом скидки + */ + @Override + public long getPrice() { + return (long)(super.getPrice() * (1 - discount / 100)); + } + + /** + * Возвращает размер скидки (в процентах) + * + * @return размер скидки (в процентах) + */ + public String getDiscount() { + return discount + "%"; + } + + /** + * Подсчитывает абсолютное значение скидки + * + * @return абсолютное значение скидки + */ + public long getBenefit() { + return super.getPrice() - getPrice(); + } +} diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index e589f2d3..45cfbbf2 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -15,7 +15,15 @@ public static void main(String[] args) { bill.add(ITEM3, 3); bill.add(ITEM6, 1); System.out.println(bill); - bill.add(ITEM3, 3); - System.out.println(bill); + + System.out.println("\n"); + + DiscountBill dBill = new DiscountBill(30); + dBill.add(ITEM1, 10); + dBill.add(ITEM3, 3); + dBill.add(ITEM6, 1); + System.out.println(dBill); + System.out.println("Значение скидки: " + dBill.getDiscount()); + System.out.println("Выгода: " + dBill.getBenefit()); } } From 632ca807a7670d53729fbe222dd1509744df670a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B5=D0=BE=D1=80=D0=B3=D0=B8=D0=B9?= Date: Sun, 26 Oct 2025 18:33:44 +0500 Subject: [PATCH 3/4] =?UTF-8?q?=D0=9F=D0=BB=D0=BE=D1=82=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=93=D0=B5=D0=BE=D1=80=D0=B3=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=9F=D1=80=D0=98-202=20=E2=80=94=20=D0=97=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task03/src/com/example/task03/Hours.java | 29 +++++++++++++++++++ .../src/com/example/task03/Milliseconds.java | 9 ++++-- task03/src/com/example/task03/Minutes.java | 18 +++++++----- task03/src/com/example/task03/Seconds.java | 6 +++- task03/src/com/example/task03/TimeUnit.java | 7 +++++ .../src/com/example/task03/TimeUnitUtils.java | 20 +++++++++++++ 6 files changed, 78 insertions(+), 11 deletions(-) create mode 100644 task03/src/com/example/task03/Hours.java diff --git a/task03/src/com/example/task03/Hours.java b/task03/src/com/example/task03/Hours.java new file mode 100644 index 00000000..4f46e734 --- /dev/null +++ b/task03/src/com/example/task03/Hours.java @@ -0,0 +1,29 @@ +package com.example.task03; + +public class Hours implements TimeUnit { + private final long amount; + + public Hours(long amount) { + this.amount = amount; + } + + @Override + public long toMillis() { + return amount * 60 * 60 * 1000; + } + + @Override + public long toSeconds() { + return amount * 60 * 60; + } + + @Override + public long toMinutes() { + return amount * 60; + } + + @Override + public long toHours() { + return amount; + } +} diff --git a/task03/src/com/example/task03/Milliseconds.java b/task03/src/com/example/task03/Milliseconds.java index 5115bc7d..6490f52d 100644 --- a/task03/src/com/example/task03/Milliseconds.java +++ b/task03/src/com/example/task03/Milliseconds.java @@ -18,11 +18,16 @@ public long toMillis() { @Override public long toSeconds() { - return amount / 1000; + return Math.round(amount / 1000f); } @Override public long toMinutes() { - return amount / 1000 * 60; + return Math.round(amount / 1000f / 60f); + } + + @Override + public long toHours() { + return Math.round(amount / 1000f / 60f / 60f); } } diff --git a/task03/src/com/example/task03/Minutes.java b/task03/src/com/example/task03/Minutes.java index d6fa0594..ece666c0 100644 --- a/task03/src/com/example/task03/Minutes.java +++ b/task03/src/com/example/task03/Minutes.java @@ -1,27 +1,29 @@ package com.example.task03; public class Minutes implements TimeUnit { + private final long amount; public Minutes(long amount) { - // TODO: реализовать - throw new UnsupportedOperationException(); + this.amount = amount; } @Override public long toMillis() { - // TODO: реализовать - throw new UnsupportedOperationException(); + return amount * 60 * 1000; } @Override public long toSeconds() { - // TODO: реализовать - throw new UnsupportedOperationException(); + return amount * 60; } @Override public long toMinutes() { - // TODO: реализовать - throw new UnsupportedOperationException(); + return amount; + } + + @Override + public long toHours() { + return Math.round(amount / 60f); } } diff --git a/task03/src/com/example/task03/Seconds.java b/task03/src/com/example/task03/Seconds.java index ce6bc213..d25bff6c 100644 --- a/task03/src/com/example/task03/Seconds.java +++ b/task03/src/com/example/task03/Seconds.java @@ -23,6 +23,10 @@ public long toSeconds() { @Override public long toMinutes() { - return Math.round(amount / 60); + return Math.round(amount / 60f); + } + + public long toHours() { + return Math.round(amount / 60f / 60f); } } diff --git a/task03/src/com/example/task03/TimeUnit.java b/task03/src/com/example/task03/TimeUnit.java index 3b123fb8..bf03dcd8 100644 --- a/task03/src/com/example/task03/TimeUnit.java +++ b/task03/src/com/example/task03/TimeUnit.java @@ -28,4 +28,11 @@ public interface TimeUnit { */ long toMinutes(); + /** + * Возвращает продолжительность текущего интервала, пересчитанного в часах. + * При необходимости округлять по обычным правилам округления (число, меньшее 0.5 переходит в 0, большее или равное - в 1) + * + * @return количество часов в текущем интервале + */ + long toHours(); } diff --git a/task03/src/com/example/task03/TimeUnitUtils.java b/task03/src/com/example/task03/TimeUnitUtils.java index 790f8850..1d63ba0e 100644 --- a/task03/src/com/example/task03/TimeUnitUtils.java +++ b/task03/src/com/example/task03/TimeUnitUtils.java @@ -24,4 +24,24 @@ public static Milliseconds toMillis(Seconds seconds) { public static Seconds toSeconds(Milliseconds millis) { return new Seconds(millis.toSeconds()); } + + /** + * Конвертирует интервал в миллисекундах в интервал в минутах + * + * @param millis интервал в миллисекундах + * @return интервал в минутах + */ + public static Minutes toMinutes(Milliseconds millis) { + return new Minutes(millis.toMinutes()); + } + + /** + * Конвертирует интервал в миллисекундах в интервал в часах + * + * @param millis интервал в миллисекундах + * @return интервал в часах + */ + public static Hours toHours(Milliseconds millis) { + return new Hours(millis.toHours()); + } } From 903238af31a2863b3616e011219c4f1e26cd0b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B5=D0=BE=D1=80=D0=B3=D0=B8=D0=B9?= Date: Sun, 26 Oct 2025 19:32:26 +0500 Subject: [PATCH 4/4] =?UTF-8?q?=D0=9F=D0=BB=D0=BE=D1=82=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=93=D0=B5=D0=BE=D1=80=D0=B3=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=9F=D1=80=D0=98-202=20=E2=80=94=20=D0=97=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/task04/ConsoleHandler.java | 11 +++ .../src/com/example/task04/FileHandler.java | 19 ++++ task04/src/com/example/task04/LogLevel.java | 8 ++ task04/src/com/example/task04/Logger.java | 91 +++++++++++++++++++ .../src/com/example/task04/MemoryHandler.java | 31 +++++++ .../com/example/task04/MessageHandler.java | 8 ++ .../example/task04/RotationFileHandler.java | 32 +++++++ task04/src/com/example/task04/Task04Main.java | 18 ++++ 8 files changed, 218 insertions(+) create mode 100644 task04/src/com/example/task04/ConsoleHandler.java create mode 100644 task04/src/com/example/task04/FileHandler.java create mode 100644 task04/src/com/example/task04/LogLevel.java create mode 100644 task04/src/com/example/task04/Logger.java create mode 100644 task04/src/com/example/task04/MemoryHandler.java create mode 100644 task04/src/com/example/task04/MessageHandler.java create mode 100644 task04/src/com/example/task04/RotationFileHandler.java diff --git a/task04/src/com/example/task04/ConsoleHandler.java b/task04/src/com/example/task04/ConsoleHandler.java new file mode 100644 index 00000000..3628ed38 --- /dev/null +++ b/task04/src/com/example/task04/ConsoleHandler.java @@ -0,0 +1,11 @@ +package com.example.task04; + +public class ConsoleHandler implements MessageHandler { + /** + * Выводит сообщение + */ + @Override + public void log(String message) { + System.out.println(message); + } +} diff --git a/task04/src/com/example/task04/FileHandler.java b/task04/src/com/example/task04/FileHandler.java new file mode 100644 index 00000000..344a71cf --- /dev/null +++ b/task04/src/com/example/task04/FileHandler.java @@ -0,0 +1,19 @@ +package com.example.task04; + +import java.io.FileWriter; +import java.io.IOException; + +public class FileHandler implements MessageHandler { + /** + * Записывает сообщение в файл + */ + @Override + public void log(String message) { + try(FileWriter writer = new FileWriter("log.txt", true)){ + writer.write(message + "\n"); + } + catch (IOException ex){ + System.out.println(ex.getMessage()); + } + } +} diff --git a/task04/src/com/example/task04/LogLevel.java b/task04/src/com/example/task04/LogLevel.java new file mode 100644 index 00000000..b2770854 --- /dev/null +++ b/task04/src/com/example/task04/LogLevel.java @@ -0,0 +1,8 @@ +package com.example.task04; + +public enum LogLevel { + DEBUG, + INFO, + WARNING, + ERROR +} diff --git a/task04/src/com/example/task04/Logger.java b/task04/src/com/example/task04/Logger.java new file mode 100644 index 00000000..6158f7be --- /dev/null +++ b/task04/src/com/example/task04/Logger.java @@ -0,0 +1,91 @@ +package com.example.task04; + +import com.example.task04.LogLevel; + +import java.text.MessageFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +public class Logger { + private final String name; + private static ArrayList loggersList; + private LogLevel logLevel; + + public Logger(String name){ + this.name = name; + } + + public Logger(){ + this.name = "Logger"; + } + + public String getName(){ + return name; + } + + public static Logger getLogger(String name){ + for(Logger i : loggersList){ + if(i.name.equals(name)) + return i; + } + Logger logger = new Logger(name); + loggersList.add(logger); + return logger; + } + + public void error(String message){ + log(LogLevel.ERROR, message); + } + + public void error(String format, Object... args){ + log(LogLevel.ERROR, format, args); + } + + public void warning(String message){ + log(LogLevel.WARNING, message); + } + + public void warning(String format, Object... args){ + log(LogLevel.WARNING, format, args); + } + + public void info(String message){ + log(LogLevel.INFO, message); + } + + public void info(String format, Object... args){ + log(LogLevel.INFO, format, args); + } + + public void debug(String message){ + log(LogLevel.DEBUG, message); + } + + public void debug(String format, Object... args){ + log(LogLevel.DEBUG, format, args); + } + + private String formatMessage(LogLevel logLevel, String Message){ + String date = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()); + return MessageFormat.format("[{0}] {1} {2} - {3}", logLevel.name(), date, this.name, Message); + } + + public void log(LogLevel logLevel, String message){ + if(logLevel.compareTo(this.logLevel) >= 0) + System.out.println(formatMessage(logLevel, message)); + } + + public void log(LogLevel logLevel, String format, Object... args){ + if(logLevel.compareTo(this.logLevel) >= 0) + System.out.println(formatMessage(logLevel, String.format(format, args))); + } + + public LogLevel getLevel(){ + return logLevel; + } + + public void setLevel(LogLevel logLevel){ + this.logLevel = logLevel; + } +} diff --git a/task04/src/com/example/task04/MemoryHandler.java b/task04/src/com/example/task04/MemoryHandler.java new file mode 100644 index 00000000..b2b76bd3 --- /dev/null +++ b/task04/src/com/example/task04/MemoryHandler.java @@ -0,0 +1,31 @@ +package com.example.task04; + +import java.util.ArrayList; + +public class MemoryHandler implements MessageHandler { + private final int maxOfMessages; + private final ArrayList handlers; + private final ArrayList messages = new ArrayList<>(); + + public MemoryHandler(int maxOfMessages, ArrayList handlers){ + this.maxOfMessages = maxOfMessages; + this.handlers = handlers; + } + + /** + * Добавление сообщения в массив и вывод накопленных сообщений при достаточном их количестве + */ + @Override + public void log(String message) { + messages.add(message); + + if(messages.size() >= maxOfMessages){ + for(MessageHandler handler : handlers){ + for(String m : messages){ + handler.log(m); + } + messages.clear(); + } + } + } +} diff --git a/task04/src/com/example/task04/MessageHandler.java b/task04/src/com/example/task04/MessageHandler.java new file mode 100644 index 00000000..08d7198f --- /dev/null +++ b/task04/src/com/example/task04/MessageHandler.java @@ -0,0 +1,8 @@ +package com.example.task04; + +public interface MessageHandler { + /** + * Выводит/записывает сообщение + */ + void log(String message); +} diff --git a/task04/src/com/example/task04/RotationFileHandler.java b/task04/src/com/example/task04/RotationFileHandler.java new file mode 100644 index 00000000..53b5c478 --- /dev/null +++ b/task04/src/com/example/task04/RotationFileHandler.java @@ -0,0 +1,32 @@ +package com.example.task04; + +import java.io.FileWriter; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; + +public class RotationFileHandler implements MessageHandler{ + + private final ChronoUnit rotationUnit; + + public RotationFileHandler(ChronoUnit rotationUnit){ + this.rotationUnit = rotationUnit; + } + + /** + * Запсивает сообщение в файл определенного временного интервала + */ + @Override + public void log(String message) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"); + String fileName = LocalDateTime.now().truncatedTo(rotationUnit).format(formatter) + ".log"; + try { + FileWriter writer = new FileWriter(fileName, true); + writer.write(message); + writer.append("\n"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 55917a30..a91d0925 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -1,7 +1,25 @@ package com.example.task04; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; + public class Task04Main { public static void main(String[] args) { + ConsoleHandler consoleHandler = new ConsoleHandler(); + consoleHandler.log("Hi!"); + + FileHandler fileHandler = new FileHandler(); + fileHandler.log("I will write this to a file"); + + RotationFileHandler rotationFileHandler = new RotationFileHandler(ChronoUnit.DAYS); + rotationFileHandler.log("And this today"); + + ArrayList handlers = new ArrayList<>(); + handlers.add(consoleHandler); + handlers.add(fileHandler); + MemoryHandler memoryHandler = new MemoryHandler(2, handlers); + memoryHandler.log("This message will be displayed someday"); + memoryHandler.log("..."); } }