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