Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,186 changes: 1,186 additions & 0 deletions .idea/caches/deviceStreaming.xml

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions .idea/markdown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions src/main/kotlin/ArchiveMenu.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class ArchiveMenu : Menu("Список архивов") {
private val archives = mutableListOf<Archive>()

override fun show() {
runMenu(
items = archives,
getItemName = { it.name },
onSelect = { archive -> NoteListMenu(archive).show() },
onCreate = {
val name = readNonEmptyString("Введите название архива:")
archives.add(Archive(name))
println("Архив '$name' создан.")
},
exitText = "Выход из программы"
)
}
}
7 changes: 5 additions & 2 deletions src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
fun main(args: Array<String>) {
println("Hello World!")
}
// println("Hello World!")
//println("добро пожаловать")
val mainMenu = ArchiveMenu()
mainMenu.show()
}
46 changes: 46 additions & 0 deletions src/main/kotlin/Menu.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import java.util.Scanner

abstract class Menu(val title: String) {
private val scanner = Scanner(System.`in`)

// Метод, который каждый экран реализует по-своему
abstract fun show()

// Универсальный метод отрисовки меню и обработки выбора
fun <T> runMenu(
items: List<T>,
getItemName: (T) -> String,
onSelect: (T) -> Unit,
onCreate: () -> Unit,
exitText: String
) {
while (true) {
println("\n--- $title ---")
println("0. Создать")
items.forEachIndexed { index, item ->
println("${index + 1}. ${getItemName(item)}")
}
println("${items.size + 1}. $exitText")

val input = scanner.nextLine()
val choice = input.toIntOrNull()

when {
choice == 0 -> onCreate()
choice == items.size + 1 -> return // Выход из текущего меню
choice != null && choice in 1..items.size -> onSelect(items[choice - 1])
else -> println("Ошибка: введите число из списка.")
}
}
}

// Универсальный метод для безопасного ввода текста
fun readNonEmptyString(prompt: String): String {
while (true) {
println(prompt)
val input = scanner.nextLine().trim()
if (input.isNotEmpty()) return input
println("Ошибка: поле не может быть пустым.")
}
}
}
2 changes: 2 additions & 0 deletions src/main/kotlin/Models.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
data class Note(val title: String, val content: String)
data class Archive(val name: String, val notes: MutableList<Note> = mutableListOf())
13 changes: 13 additions & 0 deletions src/main/kotlin/NoteContentMenu.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import java.util.Scanner

class NoteContentMenu(private val note: Note) : Menu("Заметка: ${note.title}") {
override fun show() {
println("\nТекст заметки:\n${note.content}")
// Просто ждем ввода, чтобы пользователь успел прочитать
println("\n0. Назад")
while (true) {
if (Scanner(System.`in`).nextLine() == "0") break
else println("Введите 0 для возврата.")
}
}
}
16 changes: 16 additions & 0 deletions src/main/kotlin/NoteListMenu.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class NoteListMenu(private val archive: Archive) : Menu("Архив: ${archive.name}") {
override fun show() {
runMenu(
items = archive.notes,
getItemName = { it.title },
onSelect = { note -> NoteContentMenu(note).show() },
onCreate = {
val title = readNonEmptyString("Введите название заметки:")
val content = readNonEmptyString("Введите текст заметки:")
archive.notes.add(Note(title, content))
println("Заметка '$title' добавлена.")
},
exitText = "Назад в меню архивов"
)
}
}