diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 000000000..528f19ece --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,848 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9c8e74009..f515117bc 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c57..6c9a61999 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,8 @@ -fun main(args: Array) { - println("Hello World!") -} \ No newline at end of file +import menus.archivesMenu +import java.util.* + +fun main() { + val scanner = Scanner(System.`in`) + println("=== Программа Заметки ===") + archivesMenu(scanner) +} diff --git a/src/main/kotlin/menus/ArchivesMenu.kt b/src/main/kotlin/menus/ArchivesMenu.kt new file mode 100644 index 000000000..51c31508d --- /dev/null +++ b/src/main/kotlin/menus/ArchivesMenu.kt @@ -0,0 +1,36 @@ +package menus + +import models.Archive +import java.util.* + +fun archivesMenu(scanner: Scanner) { + val archives = mutableListOf() + + fun inputNumber(limit: Int): Int { + while (true) { + val input = scanner.nextLine() + val num = input.toIntOrNull() + if (num == null || num !in 0 until limit) { + print("Ошибка: повторите ввод: ") + } else return num + } + } + + while (true) { + println("\n--- Список архивов ---") + println("0. Создать архив") + archives.forEachIndexed { i, archive -> + println("${i + 1}. ${archive.name.ifEmpty { "(без имени)" }}") + } + println("${archives.size + 1}. Выход из программы") + + when (val choice = inputNumber(archives.size + 2)) { + 0 -> createArchiveMenu(archives, scanner) + in 1..archives.size -> notesMenu(archives[choice - 1], scanner) + archives.size + 1 -> { + println("Выход из программы...") + return + } + } + } +} diff --git a/src/main/kotlin/menus/CreateArchiveMenu.kt b/src/main/kotlin/menus/CreateArchiveMenu.kt new file mode 100644 index 000000000..52bbd4cf9 --- /dev/null +++ b/src/main/kotlin/menus/CreateArchiveMenu.kt @@ -0,0 +1,11 @@ +package menus + +import models.Archive +import java.util.* + +fun createArchiveMenu(archives: MutableList, scanner: Scanner) { + println("\nВведите название архива (можно оставить пустым):") + val name = scanner.nextLine().trim() + archives.add(Archive(name)) + println("Архив добавлен!") +} diff --git a/src/main/kotlin/menus/CreateNoteMenu.kt b/src/main/kotlin/menus/CreateNoteMenu.kt new file mode 100644 index 000000000..46e4589c6 --- /dev/null +++ b/src/main/kotlin/menus/CreateNoteMenu.kt @@ -0,0 +1,16 @@ +package menus + +import models.Archive +import models.Note +import java.util.* + +fun createNoteMenu(archive: Archive, scanner: Scanner) { + println("\nВведите название новой заметки (можно оставить пустым):") + val name = scanner.nextLine().trim() + + println("Введите текст заметки (можно оставить пустым):") + val text = scanner.nextLine().trim() + + archive.notes.add(Note(name, text)) + println("Заметка добавлена!") +} diff --git a/src/main/kotlin/menus/NotesMenu.kt b/src/main/kotlin/menus/NotesMenu.kt new file mode 100644 index 000000000..f6ae6304d --- /dev/null +++ b/src/main/kotlin/menus/NotesMenu.kt @@ -0,0 +1,31 @@ +package menus + +import models.Archive +import java.util.* + +fun notesMenu(archive: Archive, scanner: Scanner) { + fun inputNumber(limit: Int): Int { + while (true) { + val input = scanner.nextLine() + val num = input.toIntOrNull() + if (num == null || num !in 0 until limit) { + print("Ошибка: повторите ввод: ") + } else return num + } + } + + while (true) { + println("\n--- Архив: ${archive.name.ifEmpty { "(без имени)" }} ---") + println("0. Создать заметку") + archive.notes.forEachIndexed { i, note -> + println("${i + 1}. ${note.name.ifEmpty { "(без названия)" }}") + } + println("${archive.notes.size + 1}. Назад") + + when (val choice = inputNumber(archive.notes.size + 2)) { + 0 -> createNoteMenu(archive, scanner) + in 1..archive.notes.size -> viewNoteMenu(archive.notes[choice - 1], scanner) + archive.notes.size + 1 -> return + } + } +} diff --git a/src/main/kotlin/menus/ViewNoteMenu.kt b/src/main/kotlin/menus/ViewNoteMenu.kt new file mode 100644 index 000000000..1212fd648 --- /dev/null +++ b/src/main/kotlin/menus/ViewNoteMenu.kt @@ -0,0 +1,16 @@ +package menus + +import models.Note +import java.util.* + +fun viewNoteMenu(note: Note, scanner: Scanner) { + while (true) { + println("\n--- Просмотр заметки ---") + println("Название: ${note.name.ifEmpty { "(без названия)" }}") + println("Текст: ${note.text.ifEmpty { "(пусто)" }}") + println("0. Назад") + + val input = scanner.nextLine() + if (input == "0") return + } +} diff --git a/src/main/kotlin/models/Archive.kt b/src/main/kotlin/models/Archive.kt new file mode 100644 index 000000000..19f103de8 --- /dev/null +++ b/src/main/kotlin/models/Archive.kt @@ -0,0 +1,6 @@ +package models + +data class Archive( + val name: String, + val notes: MutableList = mutableListOf() +) diff --git a/src/main/kotlin/models/Note.kt b/src/main/kotlin/models/Note.kt new file mode 100644 index 000000000..b82db9aea --- /dev/null +++ b/src/main/kotlin/models/Note.kt @@ -0,0 +1,6 @@ +package models + +data class Note( + val name: String, + val text: String +)