From 10be9d870751b7a099051894f8b1cd79034de45f Mon Sep 17 00:00:00 2001 From: Nikita Saltykov Date: Mon, 3 Mar 2025 23:46:02 +0300 Subject: [PATCH] Commit 1 --- .idea/misc.xml | 2 +- src/main/kotlin/Archive.kt | 47 ++++++++++++++++++++++++++++++++++++++ src/main/kotlin/Main.kt | 38 ++++++++++++++++++++++++++++-- src/main/kotlin/Menu.kt | 43 ++++++++++++++++++++++++++++++++++ src/main/kotlin/Note.kt | 18 +++++++++++++++ 5 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/Archive.kt create mode 100644 src/main/kotlin/Menu.kt create mode 100644 src/main/kotlin/Note.kt diff --git a/.idea/misc.xml b/.idea/misc.xml index 9c8e7400..e6be3f13 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..a3c7179a --- /dev/null +++ b/src/main/kotlin/Archive.kt @@ -0,0 +1,47 @@ +import java.util.Scanner + +class Archive (val name: String) { + private val menu: Menu = Menu("Список заметок в архиве `$name`:") + private val notes: MutableList = mutableListOf() + + init { + menu.listOfCommands.add("Создать заметку" to {createNote()}) + } + + + fun archiveScreenStart() { + notes.forEach { menu.listOfCommands.add(it.name to {it.noteScreenStart()}) } + menu.start() + } + + private fun createNote() { + val note = Note(getNoteTitle(), getNoteText()) + notes.add(note) + menu.listOfCommands.add(note.name to {note.noteScreenStart()}) + println("Заметка ${note.name} была добавлена в список заметок\n") + } + + private fun getNoteTitle(): String { + while (true) { + println("Введите название заметки:") + val title = Scanner(System.`in`).nextLine() + if (title.isEmpty()) { + println("Название заметки не может быть пустым") + } else { + return title + } + } + } + + private fun getNoteText(): String { + while (true) { + println("Введите текст заметки:") + val text = Scanner(System.`in`).nextLine() + if (text.isEmpty()) { + println("Текст заметки не может быть пустым") + } else { + return text + } + } + } +} diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c5..f781c04b 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,37 @@ +import java.util.Scanner + fun main(args: Array) { - println("Hello World!") -} \ No newline at end of file + val app: App = App() + app.start() +} + +class App { + private val menu: Menu = Menu("Список архивов:") + private val listOfArchives: MutableList = mutableListOf() + + init { + menu.listOfCommands.add(("Создать архив" to {createArchive()})) + } + + + fun start() { + listOfArchives.forEach { menu.listOfCommands.add(it.name to {it.archiveScreenStart()}) } + menu.start() + } + + private fun createArchive() { + while (true) { + println("Введите название архива:") + val name: String = Scanner(System.`in`).nextLine() + if (name.isEmpty()) { + println("Название архива не может быть пустым") + } else { + val archive = Archive(name) + listOfArchives.add(archive) + menu.listOfCommands.add(name to {archive.archiveScreenStart()}) + println("Архив $name был добавлен в список архивов \n") + break + } + } + } +} diff --git a/src/main/kotlin/Menu.kt b/src/main/kotlin/Menu.kt new file mode 100644 index 00000000..0a765b7c --- /dev/null +++ b/src/main/kotlin/Menu.kt @@ -0,0 +1,43 @@ +import java.util.Scanner + +class Menu (private val title: String) { + val listOfCommands: MutableList Unit>> = mutableListOf() + + fun start() { + while (true) { + printMenu() + val userInput: Int = getInput() + if (userInput == listOfCommands.size) { + break + } + listOfCommands[userInput].second() + } + } + + private fun getInput(): Int { + while (true) { + println("Введите команду:") + val input: String = Scanner(System.`in`).nextLine() + val menuCode: Int? = input.toIntOrNull() + if (menuCode == null) { + println("Введено не число. Пожалуйста, введите число:") + printMenu() + continue + } else { + if (menuCode < 0 || menuCode > listOfCommands.size) { + println("\nТакой цифры нет, необходимо ввести корректную цифру") + printMenu() + continue + } else { + return menuCode + } + } + } + } + + private fun printMenu() { + println(title) + listOfCommands.forEachIndexed { index, pair -> println("$index. ${pair.first}") } + println("${listOfCommands.size}. Выход") + } +} diff --git a/src/main/kotlin/Note.kt b/src/main/kotlin/Note.kt new file mode 100644 index 00000000..a0eacfb7 --- /dev/null +++ b/src/main/kotlin/Note.kt @@ -0,0 +1,18 @@ +class Note ( + val name: String, + val text: String +) { + private val menu: Menu = Menu("Текст заметки `$name`:") + + init { + menu.listOfCommands.add("Показать текст заметки" to {getText()}) + } + + fun noteScreenStart() { + menu.start() + } + + private fun getText() { + println("$text\n") + } +} \ No newline at end of file