diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 00000000..821dc38d --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,329 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9c8e7400..9c42d737 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/Main.kt b/src/main/kotlin/Main.kt index aade54c5..ab1e9783 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,33 @@ +import menu.chooseNote +import menu.createArchive +import menu.createNote +import modules.Archive + +import utils.showMenu fun main(args: Array) { - println("Hello World!") + val archives = mutableListOf() + var isRunnig = true + while (isRunnig) { + val mainMenuOptions = listOf("Создать архив", "Выбрать архив", "Выход") + when(showMenu(mainMenuOptions, "Главное меню: ")) { + 1 -> createArchive(archives) + 2 -> { + val selectedArchive = chooseArchive(archives) + if (selectedArchive != null) { + var isRunningNoteMenu = true + while (isRunningNoteMenu) { + val noteMenuOption = listOf("Создать заметку", "Выбрать заметку", "Выход") + when(showMenu(noteMenuOption, "Меню заметок:")) { + 1 -> createNote(selectedArchive) + 2 -> chooseNote(selectedArchive) + 3 -> isRunningNoteMenu = false + else -> println("Неверное значение") + } + } + } + } + 3 -> isRunnig = false + else -> println("Неверное значение") } + } + println("Завершение работы!") } \ No newline at end of file diff --git a/src/main/kotlin/menu/MenuChooseArchive.kt b/src/main/kotlin/menu/MenuChooseArchive.kt new file mode 100644 index 00000000..ac916799 --- /dev/null +++ b/src/main/kotlin/menu/MenuChooseArchive.kt @@ -0,0 +1,16 @@ +import modules.Archive +import utils.readIntInput + +fun chooseArchive(archives: List) : Archive? { + if (archives.isEmpty()) { + println("Архивов нет") + return null + } + + println("Список архивов") + archives.forEachIndexed { index, archive -> println("${index + 1}. ${archive.nameArchive}") } + println("0. Назад") + + val action = readIntInput("Введите номер архива", 0, archives.size) + return if (action == 0) return null else archives[action - 1] +} \ No newline at end of file diff --git a/src/main/kotlin/menu/MenuChooseNote.kt b/src/main/kotlin/menu/MenuChooseNote.kt new file mode 100644 index 00000000..714c6cd7 --- /dev/null +++ b/src/main/kotlin/menu/MenuChooseNote.kt @@ -0,0 +1,21 @@ +package menu + +import modules.Archive +import utils.readIntInput + +fun chooseNote(archive: Archive) { + if (archive.notes.isEmpty()) { + println("Заметок нет") + return + } + + println("Список заметок") + archive.notes.forEachIndexed { index, note -> println("${index + 1}. ${note.title}") } + println("0. Выход") + + val action = readIntInput("Введите номер заметки", 0, archive.notes.size) + if (action != 0) { + val selectedNote = archive.notes[action - 1] + displayNote(selectedNote) + } +} \ No newline at end of file diff --git a/src/main/kotlin/menu/MenuCreateArchive.kt b/src/main/kotlin/menu/MenuCreateArchive.kt new file mode 100644 index 00000000..30769909 --- /dev/null +++ b/src/main/kotlin/menu/MenuCreateArchive.kt @@ -0,0 +1,9 @@ +package menu +import modules.Archive +import utils.readNonBlankString + +fun createArchive(archives: MutableList) { + val name = readNonBlankString("Введите название архива:") + archives.add(Archive(name)) + println("Архив \"$name\" был создан") +} \ No newline at end of file diff --git a/src/main/kotlin/menu/MenuCreateNote.kt b/src/main/kotlin/menu/MenuCreateNote.kt new file mode 100644 index 00000000..edde6a47 --- /dev/null +++ b/src/main/kotlin/menu/MenuCreateNote.kt @@ -0,0 +1,13 @@ +package menu + +import modules.Archive +import modules.Note +import utils.readNonBlankString + +fun createNote(archive: Archive) { + val title = readNonBlankString("Введите заголовок заметки:") + val content = readNonBlankString("Введите содержимое заметки") + archive.notes.add(Note(title, content)) + println("Заметка \"$title\" была создана") + println() +} diff --git a/src/main/kotlin/menu/MenuDisplayNote.kt b/src/main/kotlin/menu/MenuDisplayNote.kt new file mode 100644 index 00000000..0dad3926 --- /dev/null +++ b/src/main/kotlin/menu/MenuDisplayNote.kt @@ -0,0 +1,9 @@ +package menu + +import modules.Note + +fun displayNote(note: Note) { + println("Заголовок заметки: ${note.title}") + println("Содержимое заметки: ${note.content}") + println() +} \ No newline at end of file diff --git a/src/main/kotlin/models/Archive.kt b/src/main/kotlin/models/Archive.kt new file mode 100644 index 00000000..38690e9f --- /dev/null +++ b/src/main/kotlin/models/Archive.kt @@ -0,0 +1,3 @@ +package modules + +data class Archive(val nameArchive: String, val notes: MutableList = mutableListOf()) \ No newline at end of file diff --git a/src/main/kotlin/models/Note.kt b/src/main/kotlin/models/Note.kt new file mode 100644 index 00000000..7c6946b0 --- /dev/null +++ b/src/main/kotlin/models/Note.kt @@ -0,0 +1,3 @@ +package modules + +data class Note(val title: String, val content: String) \ No newline at end of file diff --git a/src/main/kotlin/utils/SuperUtil.kt b/src/main/kotlin/utils/SuperUtil.kt new file mode 100644 index 00000000..eb68db11 --- /dev/null +++ b/src/main/kotlin/utils/SuperUtil.kt @@ -0,0 +1,28 @@ +package utils + +fun readIntInput (name: String, min: Int, max: Int) : Int { + while (true) { + println(name) + val input = readln().toIntOrNull() + if (input != null && input in min..max) { + return input + } else { + println("Введите корректное число!") + } + } +} + +fun readNonBlankString(name: String) : String { + while (true) { + println(name) + val input = readln().trim() + if (input.isBlank()) { + println("Поле не может быть пустым") + } else return input + } +} +fun showMenu(options: List, title: String) : Int { + println(title) + options.forEachIndexed { index, option -> println("${index + 1}. $option") } + return readIntInput("Выберите пункт меню: ", 0, options.size) +} \ No newline at end of file