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