diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml
new file mode 100644
index 000000000..528f19ece
--- /dev/null
+++ b/.idea/caches/deviceStreaming.xml
@@ -0,0 +1,848 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 9c8e74009..f515117bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-
diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt
index aade54c57..6c9a61999 100644
--- a/src/main/kotlin/Main.kt
+++ b/src/main/kotlin/Main.kt
@@ -1,3 +1,8 @@
-fun main(args: Array) {
- println("Hello World!")
-}
\ No newline at end of file
+import menus.archivesMenu
+import java.util.*
+
+fun main() {
+ val scanner = Scanner(System.`in`)
+ println("=== Программа Заметки ===")
+ archivesMenu(scanner)
+}
diff --git a/src/main/kotlin/menus/ArchivesMenu.kt b/src/main/kotlin/menus/ArchivesMenu.kt
new file mode 100644
index 000000000..51c31508d
--- /dev/null
+++ b/src/main/kotlin/menus/ArchivesMenu.kt
@@ -0,0 +1,36 @@
+package menus
+
+import models.Archive
+import java.util.*
+
+fun archivesMenu(scanner: Scanner) {
+ val archives = mutableListOf()
+
+ fun inputNumber(limit: Int): Int {
+ while (true) {
+ val input = scanner.nextLine()
+ val num = input.toIntOrNull()
+ if (num == null || num !in 0 until limit) {
+ print("Ошибка: повторите ввод: ")
+ } else return num
+ }
+ }
+
+ while (true) {
+ println("\n--- Список архивов ---")
+ println("0. Создать архив")
+ archives.forEachIndexed { i, archive ->
+ println("${i + 1}. ${archive.name.ifEmpty { "(без имени)" }}")
+ }
+ println("${archives.size + 1}. Выход из программы")
+
+ when (val choice = inputNumber(archives.size + 2)) {
+ 0 -> createArchiveMenu(archives, scanner)
+ in 1..archives.size -> notesMenu(archives[choice - 1], scanner)
+ archives.size + 1 -> {
+ println("Выход из программы...")
+ return
+ }
+ }
+ }
+}
diff --git a/src/main/kotlin/menus/CreateArchiveMenu.kt b/src/main/kotlin/menus/CreateArchiveMenu.kt
new file mode 100644
index 000000000..52bbd4cf9
--- /dev/null
+++ b/src/main/kotlin/menus/CreateArchiveMenu.kt
@@ -0,0 +1,11 @@
+package menus
+
+import models.Archive
+import java.util.*
+
+fun createArchiveMenu(archives: MutableList, scanner: Scanner) {
+ println("\nВведите название архива (можно оставить пустым):")
+ val name = scanner.nextLine().trim()
+ archives.add(Archive(name))
+ println("Архив добавлен!")
+}
diff --git a/src/main/kotlin/menus/CreateNoteMenu.kt b/src/main/kotlin/menus/CreateNoteMenu.kt
new file mode 100644
index 000000000..46e4589c6
--- /dev/null
+++ b/src/main/kotlin/menus/CreateNoteMenu.kt
@@ -0,0 +1,16 @@
+package menus
+
+import models.Archive
+import models.Note
+import java.util.*
+
+fun createNoteMenu(archive: Archive, scanner: Scanner) {
+ println("\nВведите название новой заметки (можно оставить пустым):")
+ val name = scanner.nextLine().trim()
+
+ println("Введите текст заметки (можно оставить пустым):")
+ val text = scanner.nextLine().trim()
+
+ archive.notes.add(Note(name, text))
+ println("Заметка добавлена!")
+}
diff --git a/src/main/kotlin/menus/NotesMenu.kt b/src/main/kotlin/menus/NotesMenu.kt
new file mode 100644
index 000000000..f6ae6304d
--- /dev/null
+++ b/src/main/kotlin/menus/NotesMenu.kt
@@ -0,0 +1,31 @@
+package menus
+
+import models.Archive
+import java.util.*
+
+fun notesMenu(archive: Archive, scanner: Scanner) {
+ fun inputNumber(limit: Int): Int {
+ while (true) {
+ val input = scanner.nextLine()
+ val num = input.toIntOrNull()
+ if (num == null || num !in 0 until limit) {
+ print("Ошибка: повторите ввод: ")
+ } else return num
+ }
+ }
+
+ while (true) {
+ println("\n--- Архив: ${archive.name.ifEmpty { "(без имени)" }} ---")
+ println("0. Создать заметку")
+ archive.notes.forEachIndexed { i, note ->
+ println("${i + 1}. ${note.name.ifEmpty { "(без названия)" }}")
+ }
+ println("${archive.notes.size + 1}. Назад")
+
+ when (val choice = inputNumber(archive.notes.size + 2)) {
+ 0 -> createNoteMenu(archive, scanner)
+ in 1..archive.notes.size -> viewNoteMenu(archive.notes[choice - 1], scanner)
+ archive.notes.size + 1 -> return
+ }
+ }
+}
diff --git a/src/main/kotlin/menus/ViewNoteMenu.kt b/src/main/kotlin/menus/ViewNoteMenu.kt
new file mode 100644
index 000000000..1212fd648
--- /dev/null
+++ b/src/main/kotlin/menus/ViewNoteMenu.kt
@@ -0,0 +1,16 @@
+package menus
+
+import models.Note
+import java.util.*
+
+fun viewNoteMenu(note: Note, scanner: Scanner) {
+ while (true) {
+ println("\n--- Просмотр заметки ---")
+ println("Название: ${note.name.ifEmpty { "(без названия)" }}")
+ println("Текст: ${note.text.ifEmpty { "(пусто)" }}")
+ println("0. Назад")
+
+ val input = scanner.nextLine()
+ if (input == "0") return
+ }
+}
diff --git a/src/main/kotlin/models/Archive.kt b/src/main/kotlin/models/Archive.kt
new file mode 100644
index 000000000..19f103de8
--- /dev/null
+++ b/src/main/kotlin/models/Archive.kt
@@ -0,0 +1,6 @@
+package models
+
+data class Archive(
+ val name: String,
+ val notes: MutableList = mutableListOf()
+)
diff --git a/src/main/kotlin/models/Note.kt b/src/main/kotlin/models/Note.kt
new file mode 100644
index 000000000..b82db9aea
--- /dev/null
+++ b/src/main/kotlin/models/Note.kt
@@ -0,0 +1,6 @@
+package models
+
+data class Note(
+ val name: String,
+ val text: String
+)