diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 00000000..5a2f8669 --- /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..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..daa7eeda --- /dev/null +++ b/src/main/kotlin/Archive.kt @@ -0,0 +1,23 @@ +class Archive(val name: String) : NavigationMenu() { + private val noteList: MutableList = mutableListOf() + + fun createNote() { + println("Название заметки:") + val nameNote = IsEmptyInputCheck.checkEmptyInput("Название заметки не может быть пустым") + println("Содержимое заметки") + val content = IsEmptyInputCheck.checkEmptyInput("Содержимое заметки не может быть пустым") + noteList.add(Note(nameNote, content)) + println("Заметка $nameNote успешно создана") + } + + fun showNoteList() { + if (noteList.isEmpty()) { + println("Архив $name пуст") + } else { + val menuItems = noteList.map { it.nameNote } + showMenu(Operations.NOTE_MENU, menuItems, "Вернуться к архивам") { index -> + noteList[index].readNote() + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/Archives.kt b/src/main/kotlin/Archives.kt new file mode 100644 index 00000000..97eca469 --- /dev/null +++ b/src/main/kotlin/Archives.kt @@ -0,0 +1,33 @@ +class Archives : NavigationMenu() { + private val archiveList: MutableList = mutableListOf() + + fun createArchive() { + val nameArchive = IsEmptyInputCheck.checkEmptyInput("Название архива не может быть пустым") + archiveList.add(Archive(nameArchive)) + println("Архив $nameArchive успешно добавлен") + } + + fun showArchiveList() { + if (archiveList.isEmpty()) { + println("Список архивов пуст") + } else { + val menuItems = archiveList.map { it.name } + showMenu(Operations.ARCHIVES_MENU, menuItems, "Вернуться к главному меню") { index -> + openArchiveMenu(archiveList[index]) + } + } + } + + fun openArchiveMenu(archive: Archive) { + val menuItems = listOf("Добавить заметку", "Просмотреть заметки") + showMenu(Operations.NOTES_MENU, menuItems, "Вернуться к списку архивов") { input -> + when (input) { + 0 -> archive.createNote() + 1 -> { + println("Переходим в заметки архива ${archive.name}...") + archive.showNoteList() + } + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/IsEmptyInputCheck.kt b/src/main/kotlin/IsEmptyInputCheck.kt new file mode 100644 index 00000000..2eefe243 --- /dev/null +++ b/src/main/kotlin/IsEmptyInputCheck.kt @@ -0,0 +1,12 @@ +import java.util.Scanner + +object IsEmptyInputCheck { + + fun checkEmptyInput(errorMessage: String): String { + while (true) { + val input = Scanner(System.`in`).nextLine() + if (input.isNotBlank()) return input + println(errorMessage) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c5..23735d07 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,4 @@ fun main(args: Array) { - println("Hello World!") + val start = Start() + start.startProgramm() } \ No newline at end of file diff --git a/src/main/kotlin/NavigationMenu.kt b/src/main/kotlin/NavigationMenu.kt new file mode 100644 index 00000000..db65a83e --- /dev/null +++ b/src/main/kotlin/NavigationMenu.kt @@ -0,0 +1,25 @@ +import java.util.* + +open class NavigationMenu { + private val scanner = Scanner(System.`in`) + + fun showMenu(menuName: Operations, menuItems: List, exitMenu: String, numberMenu: (Int) -> Unit + ) { + while (true) { + menuName.getTypeMenu() + menuItems.forEachIndexed { index, value -> + println("${index + 1} - $value") + } + println("0 - $exitMenu") + + val input = scanner.nextLine() + if (input == "0") { + return + } else if (input.toIntOrNull() != null && input.toInt() <= menuItems.size && input.toInt() > 0) { + numberMenu(input.toInt() - 1) + } else { + println("Некорректный ввод. Выберите пункт из списка.") + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/Note.kt b/src/main/kotlin/Note.kt new file mode 100644 index 00000000..09668302 --- /dev/null +++ b/src/main/kotlin/Note.kt @@ -0,0 +1,9 @@ +data class Note( + val nameNote: String, + val content: String +) { + + fun readNote() { + println("Заметка: $nameNote\nСодержание: $content") + } +} diff --git a/src/main/kotlin/Operations.kt b/src/main/kotlin/Operations.kt new file mode 100644 index 00000000..a6d78dee --- /dev/null +++ b/src/main/kotlin/Operations.kt @@ -0,0 +1,14 @@ +enum class Operations { + MAIN_MENU, + ARCHIVES_MENU, + NOTES_MENU, + NOTE_MENU; + + fun getTypeMenu(): Unit = + when (this) { + MAIN_MENU -> println("\nГлавне меню:") + ARCHIVES_MENU -> println("\nМеню - спсиок архивов:") + NOTES_MENU -> println("\nМеню - заметки:") + NOTE_MENU -> println("\nМеню - список заметок:") + } +} \ No newline at end of file diff --git a/src/main/kotlin/Start.kt b/src/main/kotlin/Start.kt new file mode 100644 index 00000000..fd8c3890 --- /dev/null +++ b/src/main/kotlin/Start.kt @@ -0,0 +1,15 @@ +class Start : NavigationMenu() { + private val archives = Archives() + + fun startProgramm() { + val menuItems = listOf("Создать архив", "Это мой уже созданный архив") + showMenu(Operations.MAIN_MENU,menuItems, "Выход") { input -> + when (input) { + 0 -> { println("Задайте имя для архива") + archives.createArchive() } + 1 -> { println("Переходим в ваши архивы...") + archives.showArchiveList() } + } + } + } +} \ No newline at end of file