diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml
new file mode 100644
index 00000000..7d60e7b8
--- /dev/null
+++ b/.idea/caches/deviceStreaming.xml
@@ -0,0 +1,1186 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/markdown.xml b/.idea/markdown.xml
new file mode 100644
index 00000000..c61ea334
--- /dev/null
+++ b/.idea/markdown.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 9c8e7400..977f64f9 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,5 @@
-
-
+
\ 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..98f15dcf
--- /dev/null
+++ b/src/main/kotlin/ArchiveMenu.kt
@@ -0,0 +1,17 @@
+class ArchiveMenu : Menu("Список архивов") {
+ private val archives = mutableListOf()
+
+ override fun show() {
+ runMenu(
+ items = archives,
+ getItemName = { it.name },
+ onSelect = { archive -> NoteListMenu(archive).show() },
+ onCreate = {
+ val name = readNonEmptyString("Введите название архива:")
+ archives.add(Archive(name))
+ println("Архив '$name' создан.")
+ },
+ exitText = "Выход из программы"
+ )
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt
index aade54c5..426e706c 100644
--- a/src/main/kotlin/Main.kt
+++ b/src/main/kotlin/Main.kt
@@ -1,3 +1,6 @@
fun main(args: Array) {
- println("Hello World!")
-}
\ No newline at end of file
+ // println("Hello World!")
+ //println("добро пожаловать")
+ val mainMenu = ArchiveMenu()
+ mainMenu.show()
+}
diff --git a/src/main/kotlin/Menu.kt b/src/main/kotlin/Menu.kt
new file mode 100644
index 00000000..c7a2b762
--- /dev/null
+++ b/src/main/kotlin/Menu.kt
@@ -0,0 +1,46 @@
+import java.util.Scanner
+
+abstract class Menu(val title: String) {
+ private val scanner = Scanner(System.`in`)
+
+ // Метод, который каждый экран реализует по-своему
+ abstract fun show()
+
+ // Универсальный метод отрисовки меню и обработки выбора
+ fun runMenu(
+ items: List,
+ getItemName: (T) -> String,
+ onSelect: (T) -> Unit,
+ onCreate: () -> Unit,
+ exitText: String
+ ) {
+ while (true) {
+ println("\n--- $title ---")
+ println("0. Создать")
+ items.forEachIndexed { index, item ->
+ println("${index + 1}. ${getItemName(item)}")
+ }
+ println("${items.size + 1}. $exitText")
+
+ val input = scanner.nextLine()
+ val choice = input.toIntOrNull()
+
+ when {
+ choice == 0 -> onCreate()
+ choice == items.size + 1 -> return // Выход из текущего меню
+ choice != null && choice in 1..items.size -> onSelect(items[choice - 1])
+ else -> println("Ошибка: введите число из списка.")
+ }
+ }
+ }
+
+ // Универсальный метод для безопасного ввода текста
+ fun readNonEmptyString(prompt: String): String {
+ while (true) {
+ println(prompt)
+ val input = scanner.nextLine().trim()
+ if (input.isNotEmpty()) return input
+ println("Ошибка: поле не может быть пустым.")
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/Models.kt b/src/main/kotlin/Models.kt
new file mode 100644
index 00000000..8f718ff1
--- /dev/null
+++ b/src/main/kotlin/Models.kt
@@ -0,0 +1,2 @@
+data class Note(val title: String, val content: String)
+data class Archive(val name: String, val notes: MutableList = mutableListOf())
\ No newline at end of file
diff --git a/src/main/kotlin/NoteContentMenu.kt b/src/main/kotlin/NoteContentMenu.kt
new file mode 100644
index 00000000..2826ea30
--- /dev/null
+++ b/src/main/kotlin/NoteContentMenu.kt
@@ -0,0 +1,13 @@
+import java.util.Scanner
+
+class NoteContentMenu(private val note: Note) : Menu("Заметка: ${note.title}") {
+ override fun show() {
+ println("\nТекст заметки:\n${note.content}")
+ // Просто ждем ввода, чтобы пользователь успел прочитать
+ println("\n0. Назад")
+ while (true) {
+ if (Scanner(System.`in`).nextLine() == "0") break
+ else println("Введите 0 для возврата.")
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/NoteListMenu.kt b/src/main/kotlin/NoteListMenu.kt
new file mode 100644
index 00000000..d9bb791b
--- /dev/null
+++ b/src/main/kotlin/NoteListMenu.kt
@@ -0,0 +1,16 @@
+class NoteListMenu(private val archive: Archive) : Menu("Архив: ${archive.name}") {
+ override fun show() {
+ runMenu(
+ items = archive.notes,
+ getItemName = { it.title },
+ onSelect = { note -> NoteContentMenu(note).show() },
+ onCreate = {
+ val title = readNonEmptyString("Введите название заметки:")
+ val content = readNonEmptyString("Введите текст заметки:")
+ archive.notes.add(Note(title, content))
+ println("Заметка '$title' добавлена.")
+ },
+ exitText = "Назад в меню архивов"
+ )
+ }
+}
\ No newline at end of file