diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 00000000..f883ea2f --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,1462 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml new file mode 100644 index 00000000..91f95584 --- /dev/null +++ b/.idea/deviceManager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 00000000..c61ea334 --- /dev/null +++ b/.idea/markdown.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9c8e7400..49f7d9bd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,5 @@ - - + \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c5..e67cdeb8 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,5 @@ -fun main(args: Array) { - println("Hello World!") -} \ No newline at end of file +import archive.showArchiveMenu + +fun main() { + showArchiveMenu() +} diff --git a/src/main/kotlin/archive/Archive.kt b/src/main/kotlin/archive/Archive.kt new file mode 100644 index 00000000..b61d2693 --- /dev/null +++ b/src/main/kotlin/archive/Archive.kt @@ -0,0 +1,8 @@ +package archive + +import note.Note + +data class Archive( + val name: String, + val notes: MutableList = mutableListOf() +) diff --git a/src/main/kotlin/archive/ArchiveMenu.kt b/src/main/kotlin/archive/ArchiveMenu.kt new file mode 100644 index 00000000..5ed3fbb6 --- /dev/null +++ b/src/main/kotlin/archive/ArchiveMenu.kt @@ -0,0 +1,41 @@ +package archive + +import menu.Menu +import storage.Storage +import note.showNotesMenu +import java.util.Scanner +import kotlin.system.exitProcess + +fun showArchiveMenu() { + val scanner = Scanner(System.`in`) + + while (true) { + val menu = Menu("Список архивов:") + + menu.addItem("Создать архив") { + print("Введите название архива: ") + val name = scanner.nextLine().trim() + + if (name.isEmpty()) { + println("Ошибка: имя архива не может быть пустым.") + return@addItem + } + + Storage.archives.add(Archive(name)) + println("Архив \"$name\" создан.") + } + + Storage.archives.forEach { archive -> + menu.addItem(archive.name) { + showNotesMenu(archive) + } + } + + menu.addItem("Выход из программы") { + println("Завершение работы.") + exitProcess(0) + } + + menu.show() + } +} diff --git a/src/main/kotlin/menu/menu.kt b/src/main/kotlin/menu/menu.kt new file mode 100644 index 00000000..4d8fd03f --- /dev/null +++ b/src/main/kotlin/menu/menu.kt @@ -0,0 +1,40 @@ +package menu + +import java.util.Scanner + +class Menu( + private val title: String, + private val items: MutableList Unit>> = mutableListOf() +) { + private val scanner = Scanner(System.`in`) + + fun addItem(name: String, action: () -> Unit) { + items.add(name to action) + } + + fun show() { + while (true) { + println(" $title ") + items.forEachIndexed { index, item -> + println("${index + 1}. ${item.first}") + } + + print("Введите номер пункта: ") + val input = scanner.nextLine() + + val choice = input.toIntOrNull() + if (choice == null) { + println("Ошибка: нужно вводить цифру.") + continue + } + + if (choice !in 1..items.size) { + println("Ошибка: пункта с таким номером нет.") + continue + } + + items[choice - 1].second.invoke() + break + } + } +} diff --git a/src/main/kotlin/note/Note.kt b/src/main/kotlin/note/Note.kt new file mode 100644 index 00000000..711c0450 --- /dev/null +++ b/src/main/kotlin/note/Note.kt @@ -0,0 +1,6 @@ +package note + +data class Note( + val name: String, + val content: String +) diff --git a/src/main/kotlin/note/NotesMenu.kt b/src/main/kotlin/note/NotesMenu.kt new file mode 100644 index 00000000..56186818 --- /dev/null +++ b/src/main/kotlin/note/NotesMenu.kt @@ -0,0 +1,46 @@ +package note + +import archive.Archive +import menu.Menu +import java.util.Scanner + +fun showNotesMenu(archive: Archive) { + val scanner = Scanner(System.`in`) + var exit = false + + while (!exit) { + val menu = Menu("Заметки архива \"${archive.name}\"") + + menu.addItem("Создать заметку") { + print("Введите название заметки: ") + val name = scanner.nextLine().trim() + if (name.isEmpty()) { + println("Ошибка: имя заметки не может быть пустым.") + return@addItem + } + + print("Введите текст заметки: ") + val content = scanner.nextLine().trim() + if (content.isEmpty()) { + println("Ошибка: текст заметки не может быть пустым.") + return@addItem + } + + archive.notes.add(Note(name, content)) + println("Заметка \"$name\" создана.") + } + + archive.notes.forEach { note -> + menu.addItem(note.name) { + println("\n=== ${note.name} ===") + println(note.content) + } + } + + menu.addItem("Назад") { + exit = true + } + + menu.show() + } +} diff --git a/src/main/kotlin/storage/Storage.kt b/src/main/kotlin/storage/Storage.kt new file mode 100644 index 00000000..98b3e283 --- /dev/null +++ b/src/main/kotlin/storage/Storage.kt @@ -0,0 +1,7 @@ +package storage + +import archive.Archive + +object Storage { + val archives = mutableListOf() +}