From 71a5f1439c627df06840b75e190d1fe1461cb0e1 Mon Sep 17 00:00:00 2001 From: Qsyoma Date: Tue, 4 Mar 2025 16:18:36 +0300 Subject: [PATCH] secTry --- .idea/caches/deviceStreaming.xml | 494 +++++++++++++++++++++++++++++++ .idea/misc.xml | 2 +- src/main/kotlin/Archive.kt | 3 + src/main/kotlin/ArchiveMenu.kt | 34 +++ src/main/kotlin/Main.kt | 8 +- src/main/kotlin/MenuNavigator.kt | 25 ++ src/main/kotlin/NoteMenu.kt | 43 +++ 7 files changed, 607 insertions(+), 2 deletions(-) create mode 100644 .idea/caches/deviceStreaming.xml create mode 100644 src/main/kotlin/Archive.kt create mode 100644 src/main/kotlin/ArchiveMenu.kt create mode 100644 src/main/kotlin/MenuNavigator.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 00000000..6c97f0a2 --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,494 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9c8e7400..31e1ebce 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/Archive.kt b/src/main/kotlin/Archive.kt new file mode 100644 index 00000000..74b32da0 --- /dev/null +++ b/src/main/kotlin/Archive.kt @@ -0,0 +1,3 @@ +data class Archive(val name: String, val notes: MutableList = mutableListOf()) + +data class Note(val name: String, val content: String) \ 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 00000000..babc8cfe --- /dev/null +++ b/src/main/kotlin/ArchiveMenu.kt @@ -0,0 +1,34 @@ +class ArchiveMenu(private val archives: MutableList, private val navigator: MenuNavigator) { + fun show() { + while (true) { + val options = listOf( Pair("Создать архив", { createArchive() }), Pair("Выход", { null })) + archives.map { Pair(it.name, { showNotes(it) }) + } + + val choice = navigator.showMenu(options) + if (choice == null) { + println("Программа завершена") + break + } + } + } + + + private fun createArchive(): Archive { + println("Введите название архива:") + val name = readLine() ?: "" + if (name.isEmpty()) { + println("Архив не может быть без имени.") + return createArchive() + } + + val archive = Archive(name) + archives.add(archive) + println("Архив создан. Возвращаемся к меню.") + return archive + } + + private fun showNotes(archive: Archive) { + NoteMenu(archive, navigator).show() + println("Возвращаемся к архивам.") + } +} \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c5..3d273a90 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,9 @@ +import java.util.Scanner + fun main(args: Array) { - println("Hello World!") + val scanner = Scanner(System.`in`) + val navigator = MenuNavigator(scanner) + val archives = mutableListOf() + ArchiveMenu(archives, navigator).show() + } \ No newline at end of file diff --git a/src/main/kotlin/MenuNavigator.kt b/src/main/kotlin/MenuNavigator.kt new file mode 100644 index 00000000..e9c4b350 --- /dev/null +++ b/src/main/kotlin/MenuNavigator.kt @@ -0,0 +1,25 @@ +import java.util.InputMismatchException +import java.util.Scanner + +class MenuNavigator(private val scanner: Scanner) { + fun showMenu(options: List T>>): T? { + while (true) { + options.forEachIndexed { index, option -> + println("${index}. ${option.first}") + } + try { + val choice = scanner.nextInt() + scanner.nextLine(); + if (choice in options.indices) { + return options[choice].second() + } else { + println("Такого пункта нет. Пожалуйста, выберите корректный.") + } + } catch (e: InputMismatchException) { + println("Пожалуйста, введите цифру.") + scanner.nextLine() + + } + } + } +} \ 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 00000000..9463c12b --- /dev/null +++ b/src/main/kotlin/NoteMenu.kt @@ -0,0 +1,43 @@ +class NoteMenu(private val archive: Archive, private val navigator: MenuNavigator) { + fun show() { + while (true) { + val options = listOf( + Pair("Создать заметку", { createNote() }), + Pair("Назад", { null }) + ) + archive.notes.map { Pair(it.name, { showNote(it) }) } + + val choice = navigator.showMenu(options) + if (choice == null) { + break + } + } + } + + private fun createNote(): Note { + println("Введите имя заметки:") + val name = readLine() ?: "" + if (name.isEmpty()) { + println("Заметка не может быть без имени.") + return createNote() + } + + println("Введите содержание заметки:") + val content = readLine() ?: "" + if (content.isEmpty()) { + println("Заметка не может быть пустой.") + return createNote() + } + + val note = Note(name, content) + archive.notes.add(note) + println("Заметка создана. Возвращаемся к меню заметок.") + return note + } + + private fun showNote(note: Note) { + println("Имя заметки: ${note.name}") + println("Содержание заметки: ${note.content}") + println("Нажмите Enter для возврата...") + readLine() + } +} \ No newline at end of file