From 976ca3cf1ba2f6057699ea585dc0e9c79e67a156 Mon Sep 17 00:00:00 2001 From: JohnPrigozhin Date: Wed, 14 Jan 2026 17:49:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BF=D1=80=D0=B8=D0=BD=D1=82=207=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/Main.kt | 8 ++-- src/main/kotlin/menu/Menu.kt | 39 +++++++++++++++++++ src/main/kotlin/menu/MenuItem.kt | 6 +++ src/main/kotlin/model/Archive.kt | 6 +++ src/main/kotlin/model/Note.kt | 6 +++ src/main/kotlin/screens/ArchiveListScreen.kt | 32 +++++++++++++++ .../kotlin/screens/CreateArchiveScreen.kt | 22 +++++++++++ src/main/kotlin/screens/CreateNoteScreen.kt | 25 ++++++++++++ src/main/kotlin/screens/NoteListScreen.kt | 32 +++++++++++++++ src/main/kotlin/screens/NoteViewScreen.kt | 15 +++++++ src/main/kotlin/storage/Storage.kt | 7 ++++ 11 files changed, 195 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/menu/Menu.kt create mode 100644 src/main/kotlin/menu/MenuItem.kt create mode 100644 src/main/kotlin/model/Archive.kt create mode 100644 src/main/kotlin/model/Note.kt create mode 100644 src/main/kotlin/screens/ArchiveListScreen.kt create mode 100644 src/main/kotlin/screens/CreateArchiveScreen.kt create mode 100644 src/main/kotlin/screens/CreateNoteScreen.kt create mode 100644 src/main/kotlin/screens/NoteListScreen.kt create mode 100644 src/main/kotlin/screens/NoteViewScreen.kt create mode 100644 src/main/kotlin/storage/Storage.kt diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index aade54c5..096d4495 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,3 +1,5 @@ -fun main(args: Array) { - println("Hello World!") -} \ No newline at end of file +import screens.ArchiveListScreen + +fun main() { + ArchiveListScreen().show() +} diff --git a/src/main/kotlin/menu/Menu.kt b/src/main/kotlin/menu/Menu.kt new file mode 100644 index 00000000..4ee3803b --- /dev/null +++ b/src/main/kotlin/menu/Menu.kt @@ -0,0 +1,39 @@ +package menu + +import java.util.Scanner + +class Menu( + private val title: String, + private val items: List +) { + private val scanner = Scanner(System.`in`) + + fun show() { + while (true) { + println() + println(title) + + for (i in items.indices) { + println("$i. ${items[i].title}") + } + + print("Введите номер: ") + val input = scanner.nextLine() + + if (input.toIntOrNull() == null) { + println("Ошибка: нужно ввести цифру") + continue + } + + val choice = input.toInt() + + if (choice < 0 || choice >= items.size) { + println("Ошибка: такого пункта нет") + continue + } + + items[choice].action() + break + } + } +} diff --git a/src/main/kotlin/menu/MenuItem.kt b/src/main/kotlin/menu/MenuItem.kt new file mode 100644 index 00000000..2b55ac74 --- /dev/null +++ b/src/main/kotlin/menu/MenuItem.kt @@ -0,0 +1,6 @@ +package menu + +class MenuItem( + val title: String, + val action: () -> Unit +) diff --git a/src/main/kotlin/model/Archive.kt b/src/main/kotlin/model/Archive.kt new file mode 100644 index 00000000..e1dd4fc8 --- /dev/null +++ b/src/main/kotlin/model/Archive.kt @@ -0,0 +1,6 @@ +package model + +data class Archive( + val name: String, + val notes: MutableList = mutableListOf() +) diff --git a/src/main/kotlin/model/Note.kt b/src/main/kotlin/model/Note.kt new file mode 100644 index 00000000..e76bf799 --- /dev/null +++ b/src/main/kotlin/model/Note.kt @@ -0,0 +1,6 @@ +package model + +data class Note( + val title: String, + val text: String +) diff --git a/src/main/kotlin/screens/ArchiveListScreen.kt b/src/main/kotlin/screens/ArchiveListScreen.kt new file mode 100644 index 00000000..a39a317d --- /dev/null +++ b/src/main/kotlin/screens/ArchiveListScreen.kt @@ -0,0 +1,32 @@ +package screens + +import menu.Menu +import menu.MenuItem +import storage.Storage + +class ArchiveListScreen { + + fun show() { + var isExit = false + + while (!isExit) { + val items = mutableListOf() + + items.add(MenuItem("Создать архив") { + CreateArchiveScreen().show() + }) + + for (archive in Storage.archives) { + items.add(MenuItem(archive.name) { + NoteListScreen(archive).show() + }) + } + + items.add(MenuItem("Выход") { + isExit = true + }) + + Menu("Список архивов:", items).show() + } + } +} diff --git a/src/main/kotlin/screens/CreateArchiveScreen.kt b/src/main/kotlin/screens/CreateArchiveScreen.kt new file mode 100644 index 00000000..c5eec570 --- /dev/null +++ b/src/main/kotlin/screens/CreateArchiveScreen.kt @@ -0,0 +1,22 @@ +package screens + +import model.Archive +import storage.Storage +import java.util.Scanner + +class CreateArchiveScreen { + private val scanner = Scanner(System.`in`) + + fun show() { + print("Введите имя архива: ") + val name = scanner.nextLine() + + if (name.isBlank()) { + println("Имя архива не может быть пустым") + return + } + + Storage.archives.add(Archive(name)) + println("Архив создан") + } +} diff --git a/src/main/kotlin/screens/CreateNoteScreen.kt b/src/main/kotlin/screens/CreateNoteScreen.kt new file mode 100644 index 00000000..1a26d05b --- /dev/null +++ b/src/main/kotlin/screens/CreateNoteScreen.kt @@ -0,0 +1,25 @@ +package screens + +import model.Archive +import model.Note +import java.util.Scanner + +class CreateNoteScreen(private val archive: Archive) { + private val scanner = Scanner(System.`in`) + + fun show() { + print("Введите заголовок: ") + val title = scanner.nextLine() + + print("Введите текст заметки: ") + val text = scanner.nextLine() + + if (title.isBlank() || text.isBlank()) { + println("Заголовок и текст не могут быть пустыми") + return + } + + archive.notes.add(Note(title, text)) + println("Заметка создана") + } +} diff --git a/src/main/kotlin/screens/NoteListScreen.kt b/src/main/kotlin/screens/NoteListScreen.kt new file mode 100644 index 00000000..c55e69db --- /dev/null +++ b/src/main/kotlin/screens/NoteListScreen.kt @@ -0,0 +1,32 @@ +package screens + +import menu.Menu +import menu.MenuItem +import model.Archive + +class NoteListScreen(private val archive: Archive) { + + fun show() { + var isBack = false + + while (!isBack) { + val items = mutableListOf() + + items.add(MenuItem("Создать заметку") { + CreateNoteScreen(archive).show() + }) + + for (note in archive.notes) { + items.add(MenuItem(note.title) { + NoteViewScreen(note).show() + }) + } + + items.add(MenuItem("Назад") { + isBack = true + }) + + Menu("Архив: ${archive.name}", items).show() + } + } +} diff --git a/src/main/kotlin/screens/NoteViewScreen.kt b/src/main/kotlin/screens/NoteViewScreen.kt new file mode 100644 index 00000000..d0cc57b7 --- /dev/null +++ b/src/main/kotlin/screens/NoteViewScreen.kt @@ -0,0 +1,15 @@ +package screens + +import model.Note + +class NoteViewScreen(private val note: Note) { + + fun show() { + println() + println(note.title) + println(note.text) + println() + println("Нажмите Enter для возврата") + readLine() + } +} diff --git a/src/main/kotlin/storage/Storage.kt b/src/main/kotlin/storage/Storage.kt new file mode 100644 index 00000000..b53703eb --- /dev/null +++ b/src/main/kotlin/storage/Storage.kt @@ -0,0 +1,7 @@ +package storage + +import model.Archive + +object Storage { + val archives = mutableListOf() +}