diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml
new file mode 100644
index 00000000..9aaec77f
--- /dev/null
+++ b/.idea/caches/deviceStreaming.xml
@@ -0,0 +1,835 @@
+
+
+
+
+
+
\ No newline at end of file
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/ArchiveMenu.kt b/src/main/kotlin/ArchiveMenu.kt
new file mode 100644
index 00000000..1ce399b9
--- /dev/null
+++ b/src/main/kotlin/ArchiveMenu.kt
@@ -0,0 +1,87 @@
+import java.util.Scanner
+
+class ArchiveMenu(scanner: Scanner) : Menu(scanner) {
+ init {
+ items.add(Item(0, "Вернуться назад", ::goBack)) // Добавляем пункт "Вернуться назад"
+ items.add(Item(1, "Создать архив", ::createArchive))
+ items.add(Item(2, "Просмотр архива", ::viewArchives))
+ items.add(Item(3, "Создать заметку", ::createNote))
+
+ }
+
+ private fun createArchive(archives: HashMap>) {
+ print("Введите название архива: ")
+ val archiveName = scanner.nextLine().trim()
+ if (archiveName.isNotEmpty()) {
+ if (!archives.containsKey(archiveName)) {
+ archives[archiveName] = HashMap()
+ println("Архив '$archiveName' создан.")
+ } else {
+ println("Архив с таким именем уже существует.")
+ goBack(archives)
+ }
+ } else {
+ println("Имя архива не может быть пустым.")
+ goBack(archives)
+ }
+ goBack(archives) // Добавляем возврат в главное меню после создания архива
+ }
+
+ private fun viewArchives(archives: HashMap>) {
+ println("Список архивов:")
+ archives.keys.forEachIndexed { index, key -> println("${index + 1}. $key") }
+ println("0. Вернуться назад")
+ print("Ваш выбор: ")
+ val choice = scanner.nextLine()
+
+ try {
+ val selectedIndex = choice.toInt() - 1 // Корректируем индекс, так как выбор начинается с 1
+ if (selectedIndex in 0 until archives.size) {
+ val selectedArchive = archives.keys.toList()[selectedIndex]
+ println("Вы выбрали архив $selectedArchive.")
+ viewNotesInArchive(selectedArchive, archives) // Вызываем метод для просмотра заметок
+ } else if (choice == "0") {
+ goBack(archives)
+ } else {
+ println("Некорректный выбор. Попробуйте снова.")
+ }
+ } catch (e: NumberFormatException) {
+ println("Пожалуйста, введите целое число.")
+ goBack(archives)
+ }
+ }
+
+ private fun viewNotesInArchive(archiveName: String, archives: HashMap>) {
+ if (archives.containsKey(archiveName)) {
+ val notes = archives[archiveName]!!
+ println("Список заметок в архиве $archiveName:")
+ notes.forEach { (title, content) -> println("Заголовок: $title, Содержание: $content") }
+ goBack(archives) // Добавляем возврат в главное меню после просмотра заметок
+ } else {
+ println("Архив с таким именем не найден.")
+ }
+ }
+
+ private fun createNote(archives: HashMap>) {
+ print("Введите название архива: ")
+ val archiveName = scanner.nextLine().trim()
+ if (archiveName.isNotEmpty() && archives.containsKey(archiveName)) {
+ print("Введите заголовок заметки: ")
+ val noteTitle = scanner.nextLine().trim()
+ print("Введите текст заметки: ")
+ val noteContent = scanner.nextLine().trim()
+
+ if (noteTitle.isNotEmpty() && noteContent.isNotEmpty()) {
+ archives[archiveName]!![noteTitle] = noteContent
+ println("Заметка '$noteTitle' создана.")
+ } else {
+ println("Заголовок или текст заметки не могут быть пустыми.")
+ }
+ } else {
+ println("Архив с таким именем не найден или название архива пустое.")
+ }
+ goBack(archives) // Добавляем возврат в главное меню после создания заметки
+ }
+
+
+}
diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt
index aade54c5..cccf9d36 100644
--- a/src/main/kotlin/Main.kt
+++ b/src/main/kotlin/Main.kt
@@ -1,3 +1,10 @@
+import java.util.Scanner
+
fun main(args: Array) {
- println("Hello World!")
-}
\ No newline at end of file
+ val scanner = Scanner(System.`in`)
+ val menu = MainMenu(scanner)
+ val archives =
+ HashMap>() // Коллекция для хранения архивов и заметок
+ menu.show(archives)
+}
+
diff --git a/src/main/kotlin/MainMenu.kt b/src/main/kotlin/MainMenu.kt
new file mode 100644
index 00000000..390998ef
--- /dev/null
+++ b/src/main/kotlin/MainMenu.kt
@@ -0,0 +1,27 @@
+import java.util.Scanner
+import kotlin.system.exitProcess
+
+class MainMenu(scanner: Scanner) : Menu(scanner) {
+ init {
+ items.add(Item(0, "Выход", ::goExit))
+ items.add(Item(1, "Архив", ::archiveMenu))
+ items.add(Item(2, "Заметка", ::noteMenu))
+ }
+
+
+ private fun goExit(archives: HashMap>) {
+ println("До свидания!")
+ System.exit(1)
+ }
+
+
+ private fun archiveMenu(archives: HashMap>) {
+ val archiveMenu = ArchiveMenu(scanner)
+ archiveMenu.show(archives)
+ }
+
+ private fun noteMenu(archives: HashMap>) {
+ val noteMenu = NoteMenu(scanner, archives)
+ noteMenu.show(archives)
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/Menu.kt b/src/main/kotlin/Menu.kt
new file mode 100644
index 00000000..816891e4
--- /dev/null
+++ b/src/main/kotlin/Menu.kt
@@ -0,0 +1,34 @@
+import java.util.Scanner
+
+abstract class Menu(protected val scanner: Scanner) {
+ protected val items = mutableListOf()
+
+ fun show(archives: HashMap>) {
+ while (true) {
+ items.forEach { item -> println("${item.index}. ${item.title}") }
+ print("Ваш выбор: ")
+ val choice = scanner.nextLine()
+
+ try {
+ val selectedIndex = choice.toInt()
+ if (selectedIndex in 0 until items.size) {
+ items[selectedIndex].action(archives)
+ break
+ } else {
+ println("Некорректный выбор. Попробуйте снова.")
+ }
+ } catch (e: NumberFormatException) {
+ println("Пожалуйста, введите целое число.")
+ }
+ }
+ }
+
+ protected fun goBack(archives: HashMap>) {
+ val mainMenu = MainMenu(scanner)
+ mainMenu.show(archives)
+ }
+
+
+
+ data class Item(val index: Int, val title: String, val action: (HashMap>) -> Unit)
+}
\ 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..262f6a05
--- /dev/null
+++ b/src/main/kotlin/NoteMenu.kt
@@ -0,0 +1,61 @@
+import java.util.Scanner
+
+class NoteMenu(scanner: Scanner, private val archives: HashMap>) : Menu(scanner) {
+ init {
+ items.add(Item(0, "Вернуться назад", ::goBack)) // Добавляем пункт "Вернуться назад"
+ items.add(Item(1, "Создать заметку", ::createNote))
+ items.add(Item(2, "Просмотр заметки", ::viewNotes))
+ }
+
+ private fun createNote(archives: HashMap>) {
+ print("Введите название архива: ")
+ val archiveName = scanner.nextLine().trim()
+ if (archiveName.isNotEmpty() && archives.containsKey(archiveName)) {
+ print("Введите заголовок заметки: ")
+ val noteTitle = scanner.nextLine().trim()
+ print("Введите текст заметки: ")
+ val noteContent = scanner.nextLine().trim()
+
+ if (noteTitle.isNotEmpty() && noteContent.isNotEmpty()) {
+ archives[archiveName]!![noteTitle] = noteContent
+ println("Заметка '$noteTitle' создана.")
+ goBack(archives)
+ } else {
+ println("Заголовок или текст заметки не могут быть пустыми.")
+ goBack(archives)
+ }
+ } else {
+ println("Архив с таким именем не найден или название архива пустое.")
+ goBack(archives)
+
+ }
+ }
+
+ private fun viewNotes(archives: HashMap>) {
+ print("Введите название архива: ")
+ val archiveName = scanner.nextLine()
+ if (archives.containsKey(archiveName)) {
+ viewNotesInArchive(archiveName, archives)
+ goBack(archives)
+
+ } else {
+ println("Архив с таким именем не найден.")
+ goBack(archives)
+
+ }
+ }
+
+ private fun viewNotesInArchive(archiveName: String, archives: HashMap>) {
+ if (archives.containsKey(archiveName)) {
+ val notes = archives[archiveName]!!
+ println("Список заметок в архиве $archiveName:")
+ notes.forEach { (title, content) -> println("Заголовок: $title, Содержание: $content") }
+ goBack(archives)
+
+ } else {
+ println("Архив с таким именем не найден.")
+ goBack(archives)
+
+ }
+ }
+}