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) + + } + } +}