From 45920b39c307aa2b9ab107b1701558e852ce70b9 Mon Sep 17 00:00:00 2001 From: kir24 Date: Tue, 7 Oct 2025 09:14:07 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B8=D1=88=D0=B5=D0=BC=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=81=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=E2=84=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/caches/deviceStreaming.xml | 909 +++++++++++++++++++++++++++++++ .idea/misc.xml | 2 +- src/main/kotlin/ArchiveMenu.kt | 21 + src/main/kotlin/Main.kt | 5 +- src/main/kotlin/Menu.kt | 42 ++ src/main/kotlin/Models.kt | 3 + src/main/kotlin/NoteMenu.kt | 30 + 7 files changed, 1009 insertions(+), 3 deletions(-) create mode 100644 .idea/caches/deviceStreaming.xml create mode 100644 src/main/kotlin/ArchiveMenu.kt create mode 100644 src/main/kotlin/Menu.kt create mode 100644 src/main/kotlin/Models.kt create mode 100644 src/main/kotlin/NoteMenu.kt diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 000000000..2697e350f --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,909 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9c8e74009..52b96137f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/main/kotlin/ArchiveMenu.kt b/src/main/kotlin/ArchiveMenu.kt new file mode 100644 index 000000000..72cb13080 --- /dev/null +++ b/src/main/kotlin/ArchiveMenu.kt @@ -0,0 +1,21 @@ +class ArchiveMenu(archives: List) : Menu(archives, "Список архивов:") { + override fun getDisplayName(item: Archive) = item.name + override fun createItem(): Boolean { + print("Введите название архива: ") + val name = scanner.nextLine().trim() + when { + name.isEmpty() -> showError("Название не может быть пустым") + else -> { + items as MutableList + items.add(Archive(name)) + println("Архив '$name' создан") + } + } + return true + } + + override fun selectItem(item: Archive): Boolean { + NoteMenu(item.notes).show() + return true + } +} \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c57..812fb64f0 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,4 @@ -fun main(args: Array) { - println("Hello World!") +fun main() { + val archives = mutableListOf() + ArchiveMenu(archives).show() } \ No newline at end of file diff --git a/src/main/kotlin/Menu.kt b/src/main/kotlin/Menu.kt new file mode 100644 index 000000000..372825c8d --- /dev/null +++ b/src/main/kotlin/Menu.kt @@ -0,0 +1,42 @@ +import java.util.Scanner + +abstract class Menu(protected val items: List, protected val header: String) { + protected val scanner = Scanner(System.`in`) + + open fun show() { + while (true) { + printMenu() + when (val input = readInput()) { + 0 -> if (createItem()) continue else return + in 1..items.size -> if (selectItem(items[input - 1])) continue else return + items.size + 1 -> return + else -> showError("Неверный пункт меню") + } + } + } + + protected open fun printMenu() { + println(header) + println("0. Создать") + items.forEachIndexed { index, item -> println("${index + 1}. ${getDisplayName(item)}") } + println("${items.size + 1}. Выход") + } + + protected fun readInput(): Int { + while (true) { + try { + return scanner.nextLine().toInt() + } catch (e: NumberFormatException) { + showError("Введите число") + } + } + } + + protected fun showError(message: String) { + println("Ошибка: $message") + } + + abstract fun getDisplayName(item: T): String + abstract fun createItem(): Boolean + abstract fun selectItem(item: T): Boolean +} \ No newline at end of file diff --git a/src/main/kotlin/Models.kt b/src/main/kotlin/Models.kt new file mode 100644 index 000000000..45e369a6c --- /dev/null +++ b/src/main/kotlin/Models.kt @@ -0,0 +1,3 @@ +data class Archive(val name: String, val notes: MutableList = mutableListOf()) + +data class Note(val title: String, val content: String) \ No newline at end of file diff --git a/src/main/kotlin/NoteMenu.kt b/src/main/kotlin/NoteMenu.kt new file mode 100644 index 000000000..c9a4cf43f --- /dev/null +++ b/src/main/kotlin/NoteMenu.kt @@ -0,0 +1,30 @@ +class NoteMenu(private val notes: MutableList) : Menu(notes, "Список заметок:") { + override fun getDisplayName(item: Note) = item.title + override fun createItem(): Boolean { + print("Введите название заметки: ") + val title = scanner.nextLine().trim() + if (title.isEmpty()) { + showError("Название не может быть пустым") + return true + } + + print("Введите содержание заметки: ") + val content = scanner.nextLine().trim() + if (content.isEmpty()) { + showError("Содержание не может быть пустым") + return true + } + + notes.add(Note(title, content)) + println("Заметка '$title' создана") + return true + } + + override fun selectItem(item: Note): Boolean { + println("\n=== ${item.title} ===") + println(item.content) + println("\nНажмите Enter для возврата") + scanner.nextLine() + return true + } +} \ No newline at end of file