diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml
new file mode 100644
index 00000000..6c97f0a2
--- /dev/null
+++ b/.idea/caches/deviceStreaming.xml
@@ -0,0 +1,494 @@
+
+
+
+
+
+
\ 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..74b32da0
--- /dev/null
+++ b/src/main/kotlin/Archive.kt
@@ -0,0 +1,3 @@
+data class Archive(val name: String, val notes: MutableList = mutableListOf())
+
+data class Note(val name: String, val content: String)
\ No newline at end of file
diff --git a/src/main/kotlin/ArchiveMenu.kt b/src/main/kotlin/ArchiveMenu.kt
new file mode 100644
index 00000000..babc8cfe
--- /dev/null
+++ b/src/main/kotlin/ArchiveMenu.kt
@@ -0,0 +1,34 @@
+class ArchiveMenu(private val archives: MutableList, private val navigator: MenuNavigator) {
+ fun show() {
+ while (true) {
+ val options = listOf( Pair("Создать архив", { createArchive() }), Pair("Выход", { null })) + archives.map { Pair(it.name, { showNotes(it) })
+ }
+
+ val choice = navigator.showMenu(options)
+ if (choice == null) {
+ println("Программа завершена")
+ break
+ }
+ }
+ }
+
+
+ private fun createArchive(): Archive {
+ println("Введите название архива:")
+ val name = readLine() ?: ""
+ if (name.isEmpty()) {
+ println("Архив не может быть без имени.")
+ return createArchive()
+ }
+
+ val archive = Archive(name)
+ archives.add(archive)
+ println("Архив создан. Возвращаемся к меню.")
+ return archive
+ }
+
+ private fun showNotes(archive: Archive) {
+ NoteMenu(archive, navigator).show()
+ println("Возвращаемся к архивам.")
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt
index aade54c5..3d273a90 100644
--- a/src/main/kotlin/Main.kt
+++ b/src/main/kotlin/Main.kt
@@ -1,3 +1,9 @@
+import java.util.Scanner
+
fun main(args: Array) {
- println("Hello World!")
+ val scanner = Scanner(System.`in`)
+ val navigator = MenuNavigator(scanner)
+ val archives = mutableListOf()
+ ArchiveMenu(archives, navigator).show()
+
}
\ No newline at end of file
diff --git a/src/main/kotlin/MenuNavigator.kt b/src/main/kotlin/MenuNavigator.kt
new file mode 100644
index 00000000..e9c4b350
--- /dev/null
+++ b/src/main/kotlin/MenuNavigator.kt
@@ -0,0 +1,25 @@
+import java.util.InputMismatchException
+import java.util.Scanner
+
+class MenuNavigator(private val scanner: Scanner) {
+ fun showMenu(options: List T>>): T? {
+ while (true) {
+ options.forEachIndexed { index, option ->
+ println("${index}. ${option.first}")
+ }
+ try {
+ val choice = scanner.nextInt()
+ scanner.nextLine();
+ if (choice in options.indices) {
+ return options[choice].second()
+ } else {
+ println("Такого пункта нет. Пожалуйста, выберите корректный.")
+ }
+ } catch (e: InputMismatchException) {
+ println("Пожалуйста, введите цифру.")
+ scanner.nextLine()
+
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/NoteMenu.kt b/src/main/kotlin/NoteMenu.kt
new file mode 100644
index 00000000..9463c12b
--- /dev/null
+++ b/src/main/kotlin/NoteMenu.kt
@@ -0,0 +1,43 @@
+class NoteMenu(private val archive: Archive, private val navigator: MenuNavigator) {
+ fun show() {
+ while (true) {
+ val options = listOf(
+ Pair("Создать заметку", { createNote() }),
+ Pair("Назад", { null })
+ ) + archive.notes.map { Pair(it.name, { showNote(it) }) }
+
+ val choice = navigator.showMenu(options)
+ if (choice == null) {
+ break
+ }
+ }
+ }
+
+ private fun createNote(): Note {
+ println("Введите имя заметки:")
+ val name = readLine() ?: ""
+ if (name.isEmpty()) {
+ println("Заметка не может быть без имени.")
+ return createNote()
+ }
+
+ println("Введите содержание заметки:")
+ val content = readLine() ?: ""
+ if (content.isEmpty()) {
+ println("Заметка не может быть пустой.")
+ return createNote()
+ }
+
+ val note = Note(name, content)
+ archive.notes.add(note)
+ println("Заметка создана. Возвращаемся к меню заметок.")
+ return note
+ }
+
+ private fun showNote(note: Note) {
+ println("Имя заметки: ${note.name}")
+ println("Содержание заметки: ${note.content}")
+ println("Нажмите Enter для возврата...")
+ readLine()
+ }
+}
\ No newline at end of file