From f5f2404c0f235fc83cf219c6af96f0164189fc89 Mon Sep 17 00:00:00 2001 From: Lahtinart Date: Sat, 21 Jun 2025 17:18:33 +0200 Subject: [PATCH 1/2] Kotlin App Artem --- src/main/kotlin/Archive.kt | 0 src/main/kotlin/Menu.kt | 0 src/main/kotlin/MenuItem.kt | 0 src/main/kotlin/Note.kt | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/kotlin/Archive.kt create mode 100644 src/main/kotlin/Menu.kt create mode 100644 src/main/kotlin/MenuItem.kt create mode 100644 src/main/kotlin/Note.kt diff --git a/src/main/kotlin/Archive.kt b/src/main/kotlin/Archive.kt new file mode 100644 index 00000000..e69de29b diff --git a/src/main/kotlin/Menu.kt b/src/main/kotlin/Menu.kt new file mode 100644 index 00000000..e69de29b diff --git a/src/main/kotlin/MenuItem.kt b/src/main/kotlin/MenuItem.kt new file mode 100644 index 00000000..e69de29b diff --git a/src/main/kotlin/Note.kt b/src/main/kotlin/Note.kt new file mode 100644 index 00000000..e69de29b From 7bac81292ed6d5ea859e430a01564a14dd113461 Mon Sep 17 00:00:00 2001 From: Lahtinart Date: Sun, 22 Jun 2025 08:45:18 +0200 Subject: [PATCH 2/2] Kotlin App Artem fix --- src/main/kotlin/Archive.kt | 41 ++++++++++++++++++++++++++++++ src/main/kotlin/Main.kt | 50 +++++++++++++++++++++++++++++++++++-- src/main/kotlin/Menu.kt | 34 +++++++++++++++++++++++++ src/main/kotlin/MenuItem.kt | 3 +++ src/main/kotlin/Note.kt | 3 +++ 5 files changed, 129 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/Archive.kt b/src/main/kotlin/Archive.kt index e69de29b..8ae96d24 100644 --- a/src/main/kotlin/Archive.kt +++ b/src/main/kotlin/Archive.kt @@ -0,0 +1,41 @@ +package app + +class Archive(val name: String) { + val notes = mutableListOf() + + fun addNote() { + println("Введите название заметки:") + val name = readNonEmptyLine("Название не может быть пустым.") + + println("Введите содержание заметки:") + val content = readNonEmptyLine("Содержание не может быть пустым.") + + notes.add(Note(name, content)) + println("Заметка добавлена.") + } + + fun showNotes() { + if (notes.isEmpty()) { + println("Нет заметок в архиве.") + return + } + + val noteMenu = Menu("Заметки в архиве '$name'") + notes.forEachIndexed { index, note -> + noteMenu.addItem(note.name) { + println("\n--- ${note.name} ---") + println(note.content) + } + } + noteMenu.addItem("Назад") {} + noteMenu.show() + } + + private fun readNonEmptyLine(errorMsg: String): String { + while (true) { + val line = readln() + if (line.isNotBlank()) return line + println(errorMsg) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c5..10ad7b37 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,49 @@ -fun main(args: Array) { - println("Hello World!") +//fun main(args: Array) { + // println("Hello World!") +//} + +package app + +fun main() { + val archives = mutableListOf() + + fun showArchives() { + var running = true + while (running) { + val archiveMenu = Menu("Список архивов:") + archiveMenu.addItem("Создать архив") { + println("Введите название архива:") + val name = readNonEmptyLine("Название архива не может быть пустым.") + archives.add(Archive(name)) + println("Архив добавлен.") + } + + archives.forEach { archive -> + archiveMenu.addItem(archive.name) { + val subMenu = Menu("Архив: ${archive.name}") + subMenu.addItem("Добавить заметку") { archive.addNote() } + subMenu.addItem("Просмотреть заметки") { archive.showNotes() } + subMenu.addItem("Назад") {} + subMenu.show() + } + } + + archiveMenu.addItem("Выход из программы") { + println("До свидания!") + running = false // ✅ Меняем флаг, чтобы выйти из while + } + + archiveMenu.show() + } + } + + showArchives() +} + +fun readNonEmptyLine(errorMsg: String): String { + while (true) { + val line = readln() + if (line.isNotBlank()) return line + println(errorMsg) + } } \ No newline at end of file diff --git a/src/main/kotlin/Menu.kt b/src/main/kotlin/Menu.kt index e69de29b..9e5b5db4 100644 --- a/src/main/kotlin/Menu.kt +++ b/src/main/kotlin/Menu.kt @@ -0,0 +1,34 @@ +package app + +import java.util.Scanner + +class Menu(private val title: String) { + private val items = mutableListOf() + private val scanner = Scanner(System.`in`) + + fun addItem(title: String, action: () -> Unit) { + items.add(MenuItem(title, action)) + } + + fun show() { + while (true) { + println("\n$title") + items.forEachIndexed { index, item -> println("$index. ${item.title}") } + print("Выберите пункт меню: ") + val input = scanner.nextLine() + + val choice = input.toIntOrNull() + if (choice == null) { + println("Ошибка: нужно ввести цифру.") + continue + } + if (choice !in items.indices) { + println("Ошибка: пункта с таким номером нет.") + continue + } + + items[choice].action() + break + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/MenuItem.kt b/src/main/kotlin/MenuItem.kt index e69de29b..de875450 100644 --- a/src/main/kotlin/MenuItem.kt +++ b/src/main/kotlin/MenuItem.kt @@ -0,0 +1,3 @@ +package app + +data class MenuItem(val title: String, val action: () -> Unit) \ No newline at end of file diff --git a/src/main/kotlin/Note.kt b/src/main/kotlin/Note.kt index e69de29b..66cc4f6d 100644 --- a/src/main/kotlin/Note.kt +++ b/src/main/kotlin/Note.kt @@ -0,0 +1,3 @@ +package app + +data class Note(val name: String, val content: String) \ No newline at end of file