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