From 61b958e7f6bbc93197f1192fa7691f12762907c9 Mon Sep 17 00:00:00 2001 From: Joker7999 Date: Fri, 24 Apr 2026 06:48:29 +0300 Subject: [PATCH 1/3] 123 --- .idea/caches/deviceStreaming.xml | 1670 ++++++++++++++++++++++++++++ .idea/markdown.xml | 8 + .idea/misc.xml | 3 +- src/main/kotlin/Archive.kt | 0 src/main/kotlin/ArchiveListMenu.kt | 78 ++ src/main/kotlin/ArchiveManager.kt | 49 + src/main/kotlin/Main.kt | 9 +- src/main/kotlin/Menu.kt | 54 + 8 files changed, 1867 insertions(+), 4 deletions(-) create mode 100644 .idea/caches/deviceStreaming.xml create mode 100644 .idea/markdown.xml create mode 100644 src/main/kotlin/Archive.kt create mode 100644 src/main/kotlin/ArchiveListMenu.kt create mode 100644 src/main/kotlin/ArchiveManager.kt create mode 100644 src/main/kotlin/Menu.kt diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 000000000..05c51b5a2 --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,1670 @@ + + + + + + \ No newline at end of file diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 000000000..c61ea3346 --- /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 9c8e74009..cf9058214 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/Archive.kt b/src/main/kotlin/Archive.kt new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/kotlin/ArchiveListMenu.kt b/src/main/kotlin/ArchiveListMenu.kt new file mode 100644 index 000000000..196518096 --- /dev/null +++ b/src/main/kotlin/ArchiveListMenu.kt @@ -0,0 +1,78 @@ +import java.util.Scanner + +class ArchiveManagementMenu( + private val archiveManager: ArchiveManager, + private val scanner: Scanner +) { + private var archiveName = "" + fun show() { + println("Введите название архива для управления:") + val archiveName = scanner.nextLine() + + if (archiveName !in archiveManager.getArchiveNames()) { + println("Архив не найден. Возвращаемся в главное меню.") + return + } + + this.archiveName = archiveName + + while (true) { + println("\n=== Управление архивом '$archiveName' ===") + println("1. Добавить заметку") + println("2. Просмотреть заметки") + println("3. Редактировать заметку") + println("4. Удалить заметку") + println("5. Вернуться в главное меню") + + val choice = scanner.nextLine() + when (choice) { + "1" -> addNote() + "2" -> viewNotes() + "3" -> editNote() + "4" -> deleteNote() + "5" -> return // Выход из цикла и возврат в главное меню + else -> println("Неправильный выбор. Попробуйте снова.") + } + } + } + + + private fun addNote() { + println("Введите заголовок заметки:") + val title = scanner.nextLine() + + println("Введите текст заметки:") + val text = scanner.nextLine() + + if (archiveManager.addNoteToArchive(archiveName, title, text)) { + println("Заметка успешно добавлена!") + } else { + println("Не удалось добавить заметку.") + } + } + + + private fun viewNotes() { + val notes = archiveManager.getNotes(archiveName) + if (notes.isEmpty()) { + println("Заметок нет.") + return + } + + println("\nСписок заметок:") + notes.forEachIndexed { index, note -> + println("$index. Заголовок: ${note.title}") + println(" Текст: ${note.text}\n") + } + } + + + private fun editNote() { + println("Функция редактирования заметки пока не реализована.") + } + + + private fun deleteNote() { + println("Функция удаления заметки пока не реализована.") + } +} \ No newline at end of file diff --git a/src/main/kotlin/ArchiveManager.kt b/src/main/kotlin/ArchiveManager.kt new file mode 100644 index 000000000..de9ee01af --- /dev/null +++ b/src/main/kotlin/ArchiveManager.kt @@ -0,0 +1,49 @@ + +class ArchiveManager { + private val archives = mutableMapOf>() + + fun createArchive(name: String): Boolean { + if (name.isBlank() || name in archives) { + return false + } + archives[name] = mutableListOf() + return true + } + + fun getArchiveNames(): List = archives.keys.toList() + + fun addNoteToArchive(archiveName: String, title: String, text: String): Boolean { + val archive = archives[archiveName] + if (archive == null || title.isBlank()) { + return false + } + archive.add(Note(title, text)) + return true + } + + fun getNotes(archiveName: String): List = archives[archiveName] ?: emptyList() + + fun editNote(archiveName: String, index: Int, newTitle: String?, newText: String?): Boolean { + val archive = archives[archiveName] + return if (archive != null && index in archive.indices) { + val note: Note = archive[index] + note.title = newTitle ?: note.title + note.text = newText ?: note.text + true + } else { + false + } + } + + fun deleteNote(archiveName: String, index: Int): Boolean { + val archive = archives[archiveName] + return if (archive != null && index in archive.indices) { + archive.removeAt(index) + true + } else { + false + } + } +} + +data class Note(var title: String, var text: String) \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c57..4223d89f2 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,8 @@ -fun main(args: Array) { - println("Hello World!") + +import java.util.Scanner + +fun main() { + val scanner = Scanner(System.`in`) + val archiveManager = ArchiveManager() + MainMenu(archiveManager, scanner).show() } \ 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 000000000..6faea4ebf --- /dev/null +++ b/src/main/kotlin/Menu.kt @@ -0,0 +1,54 @@ + +import java.util.Scanner + + + +class MainMenu(private val archiveManager: ArchiveManager, private val scanner: Scanner) { + fun show() { + while (true) { + println("\n=== Главное меню ===") + println("1. Создать новый архив") + println("2. Просмотреть архивы") + println("3. Управление архивом") + println("4. Выйти из программы") + + print("Выберите действие: ") + val choice = scanner.nextLine() + + when (choice) { + "1" -> createArchive() + "2" -> viewArchives() + "3" -> archiveManagementMenu() + "4" -> { + println("До свидания!") + return + } + else -> println("Неверное действие. Попробуйте снова.") + } + } + } + + private fun createArchive() { + print("Введите название архива: ") + val name = scanner.nextLine() + if (archiveManager.createArchive(name)) { + println("Архив создан успешно.") + } else { + println("Ошибка: Имя не может быть пустым.") + } + } + + private fun viewArchives() { + val archives = archiveManager.getArchiveNames() + if (archives.isNotEmpty()) { + println("Список архивов:") + archives.forEach { println(it) } + } else { + println("Архивы не найдены.") + } + } + + private fun archiveManagementMenu() { + ArchiveManagementMenu(archiveManager, scanner).show() + } +} From fb34554eddfd739957e442afb840cedc4507b43c Mon Sep 17 00:00:00 2001 From: Joker7999 Date: Mon, 27 Apr 2026 18:25:45 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9F=D0=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/Archive.kt | 0 ...veListMenu.kt => ArchiveManagementMenu.kt} | 56 ++++++++++--------- src/main/kotlin/ArchiveManager.kt | 25 +-------- src/main/kotlin/Note.kt | 1 + 4 files changed, 33 insertions(+), 49 deletions(-) delete mode 100644 src/main/kotlin/Archive.kt rename src/main/kotlin/{ArchiveListMenu.kt => ArchiveManagementMenu.kt} (55%) create mode 100644 src/main/kotlin/Note.kt diff --git a/src/main/kotlin/Archive.kt b/src/main/kotlin/Archive.kt deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/kotlin/ArchiveListMenu.kt b/src/main/kotlin/ArchiveManagementMenu.kt similarity index 55% rename from src/main/kotlin/ArchiveListMenu.kt rename to src/main/kotlin/ArchiveManagementMenu.kt index 196518096..e8c248453 100644 --- a/src/main/kotlin/ArchiveListMenu.kt +++ b/src/main/kotlin/ArchiveManagementMenu.kt @@ -5,10 +5,18 @@ class ArchiveManagementMenu( private val scanner: Scanner ) { private var archiveName = "" + fun show() { println("Введите название архива для управления:") val archiveName = scanner.nextLine() + // Проверка: имя архива не может быть пустым + if (archiveName.isNullOrEmpty()) { + println("Имя архива не может быть пустым. Пожалуйста, введите корректное имя.") + return + } + + // Проверяем, существует ли архив if (archiveName !in archiveManager.getArchiveNames()) { println("Архив не найден. Возвращаемся в главное меню.") return @@ -17,26 +25,22 @@ class ArchiveManagementMenu( this.archiveName = archiveName while (true) { - println("\n=== Управление архивом '$archiveName' ===") - println("1. Добавить заметку") - println("2. Просмотреть заметки") - println("3. Редактировать заметку") - println("4. Удалить заметку") - println("5. Вернуться в главное меню") + println("\nВыберите действие:") + println("1 — Добавить заметку") + println("2 — Просмотреть заметки") + println("3 — Выйти из меню архива") val choice = scanner.nextLine() + when (choice) { "1" -> addNote() "2" -> viewNotes() - "3" -> editNote() - "4" -> deleteNote() - "5" -> return // Выход из цикла и возврат в главное меню - else -> println("Неправильный выбор. Попробуйте снова.") + "3" -> return + else -> println("Неверный выбор. Попробуйте снова.") } } } - private fun addNote() { println("Введите заголовок заметки:") val title = scanner.nextLine() @@ -44,6 +48,19 @@ class ArchiveManagementMenu( println("Введите текст заметки:") val text = scanner.nextLine() + + if (title.isNullOrEmpty()) { + println("Заголовок заметки не может быть пустым.") + return + } + + + if (text.isNullOrEmpty()) { + println("Текст заметки не может быть пустым.") + return + } + + if (archiveManager.addNoteToArchive(archiveName, title, text)) { println("Заметка успешно добавлена!") } else { @@ -51,7 +68,6 @@ class ArchiveManagementMenu( } } - private fun viewNotes() { val notes = archiveManager.getNotes(archiveName) if (notes.isEmpty()) { @@ -60,19 +76,9 @@ class ArchiveManagementMenu( } println("\nСписок заметок:") - notes.forEachIndexed { index, note -> - println("$index. Заголовок: ${note.title}") - println(" Текст: ${note.text}\n") + notes.forEach { note -> + println("Заголовок: ${note.title}") + println("Текст: ${note.text}\n") } } - - - private fun editNote() { - println("Функция редактирования заметки пока не реализована.") - } - - - private fun deleteNote() { - println("Функция удаления заметки пока не реализована.") - } } \ No newline at end of file diff --git a/src/main/kotlin/ArchiveManager.kt b/src/main/kotlin/ArchiveManager.kt index de9ee01af..267f52110 100644 --- a/src/main/kotlin/ArchiveManager.kt +++ b/src/main/kotlin/ArchiveManager.kt @@ -23,27 +23,4 @@ class ArchiveManager { fun getNotes(archiveName: String): List = archives[archiveName] ?: emptyList() - fun editNote(archiveName: String, index: Int, newTitle: String?, newText: String?): Boolean { - val archive = archives[archiveName] - return if (archive != null && index in archive.indices) { - val note: Note = archive[index] - note.title = newTitle ?: note.title - note.text = newText ?: note.text - true - } else { - false - } - } - - fun deleteNote(archiveName: String, index: Int): Boolean { - val archive = archives[archiveName] - return if (archive != null && index in archive.indices) { - archive.removeAt(index) - true - } else { - false - } - } -} - -data class Note(var title: String, var text: String) \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/kotlin/Note.kt b/src/main/kotlin/Note.kt new file mode 100644 index 000000000..8e77e29f8 --- /dev/null +++ b/src/main/kotlin/Note.kt @@ -0,0 +1 @@ +data class Note(var title: String, var text: String) \ No newline at end of file From 8082f515f44fcf33056d2f23fc6f9966f91ebc3e Mon Sep 17 00:00:00 2001 From: Joker7999 Date: Mon, 27 Apr 2026 18:58:28 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9F=D0=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/ArchiveManagementMenu.kt | 42 +++++++++--------------- src/main/kotlin/Menu.kt | 24 +++++++++++--- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/main/kotlin/ArchiveManagementMenu.kt b/src/main/kotlin/ArchiveManagementMenu.kt index e8c248453..6c643ad19 100644 --- a/src/main/kotlin/ArchiveManagementMenu.kt +++ b/src/main/kotlin/ArchiveManagementMenu.kt @@ -10,22 +10,12 @@ class ArchiveManagementMenu( println("Введите название архива для управления:") val archiveName = scanner.nextLine() - // Проверка: имя архива не может быть пустым - if (archiveName.isNullOrEmpty()) { - println("Имя архива не может быть пустым. Пожалуйста, введите корректное имя.") - return - } - - // Проверяем, существует ли архив - if (archiveName !in archiveManager.getArchiveNames()) { - println("Архив не найден. Возвращаемся в главное меню.") - return - } + if (!validateInput(archiveName, "Имя архива")) return this.archiveName = archiveName while (true) { - println("\nВыберите действие:") + println("Выберите действие:") println("1 — Добавить заметку") println("2 — Просмотреть заметки") println("3 — Выйти из меню архива") @@ -48,18 +38,8 @@ class ArchiveManagementMenu( println("Введите текст заметки:") val text = scanner.nextLine() - - if (title.isNullOrEmpty()) { - println("Заголовок заметки не может быть пустым.") - return - } - - - if (text.isNullOrEmpty()) { - println("Текст заметки не может быть пустым.") - return - } - + if (!validateInput(title, "Заголовок заметки")) return + if (!validateInput(text, "Текст заметки")) return if (archiveManager.addNoteToArchive(archiveName, title, text)) { println("Заметка успешно добавлена!") @@ -71,14 +51,22 @@ class ArchiveManagementMenu( private fun viewNotes() { val notes = archiveManager.getNotes(archiveName) if (notes.isEmpty()) { - println("Заметок нет.") + println("В этом архиве пока нет заметок. Хотите добавить новую?") return } - println("\nСписок заметок:") + println("Список заметок:") notes.forEach { note -> println("Заголовок: ${note.title}") - println("Текст: ${note.text}\n") + println("Текст: ${note.text}") + } + } + + private fun validateInput(input: String, description: String): Boolean { + if (input.isEmpty()) { + println("Ошибка: $description не может быть пустым.") + return false } + return true } } \ No newline at end of file diff --git a/src/main/kotlin/Menu.kt b/src/main/kotlin/Menu.kt index 6faea4ebf..2b5cfa2f3 100644 --- a/src/main/kotlin/Menu.kt +++ b/src/main/kotlin/Menu.kt @@ -1,11 +1,10 @@ import java.util.Scanner - - class MainMenu(private val archiveManager: ArchiveManager, private val scanner: Scanner) { fun show() { - while (true) { + while (true + ) { println("\n=== Главное меню ===") println("1. Создать новый архив") println("2. Просмотреть архивы") @@ -31,10 +30,25 @@ class MainMenu(private val archiveManager: ArchiveManager, private val scanner: private fun createArchive() { print("Введите название архива: ") val name = scanner.nextLine() + + + if (name.isNullOrEmpty()) { + println("Ошибка: Имя не может быть пустым.") + return + } + + + if (name in archiveManager.getArchiveNames()) { + println("Такой архив уже существует.") + return + } + + if (archiveManager.createArchive(name)) { println("Архив создан успешно.") } else { - println("Ошибка: Имя не может быть пустым.") + + println("Произошла ошибка при создании архива.") } } @@ -51,4 +65,4 @@ class MainMenu(private val archiveManager: ArchiveManager, private val scanner: private fun archiveManagementMenu() { ArchiveManagementMenu(archiveManager, scanner).show() } -} +} \ No newline at end of file