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,450 changes: 1,450 additions & 0 deletions .idea/caches/deviceStreaming.xml

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions .idea/deviceManager.xml

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

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.

1 change: 1 addition & 0 deletions Kotlin-Module-Project.iml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/kotlin" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
Expand Down
4 changes: 4 additions & 0 deletions src/main/kotlin/Archive.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
data class Archive(
val name: String,
val notes: MutableList<Note> = mutableListOf()
)
50 changes: 50 additions & 0 deletions src/main/kotlin/ArchiveMenu.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
class ArchiveMenu(
private val archives: MutableList<Archive>

) {
fun start() {

while (true) {
//var needRefresh = false
val menuItems = mutableListOf<MenuScreen.MenuItem>()

// 0 — создание архива
menuItems.add(MenuScreen.MenuItem("Создать архив") {
createArchive()
// needRefresh = true
})

// Существующие архивы
archives.forEachIndexed { index, archive ->
menuItems.add(MenuScreen.MenuItem(archive.name) {
NoteListScreen(archive).start()
})
}

// Последним всегда выход
menuItems.add(MenuScreen.exitItem {
println("\nДо свидания!")
kotlin.system.exitProcess(0)
})

val screen = MenuScreen(
title = "Список архивов:",
items = menuItems
)

screen.show()

}
}

private fun createArchive() {
println("Начало создания архива")
println("\nВведите название архива:")
val name = readNotEmptyString("Название архива не может быть пустым")
println("Имя получено: '$name'")
archives.add(Archive(name))
println("Архив $name успешно создан.")
println("Архив добавлен, теперь размер списка = ${archives.size}")

}
}
25 changes: 22 additions & 3 deletions src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
fun main(args: Array<String>) {
println("Hello World!")
}
//fun main(args: Array<String>) {
fun main() {
val archives = mutableListOf<Archive>()

ArchiveMenu(archives).start()
//println("Hello World!")


}

fun readNotEmptyString(errorMessage: String): String {
val scanner = java.util.Scanner(System.`in`)
while (true) {
val input = scanner.nextLine().trim()
if (input.isNotBlank()) {
return input
}
println()
println(errorMessage)
print("Попробуйте снова: ")
}
}
46 changes: 46 additions & 0 deletions src/main/kotlin/MenuScreen.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
class MenuScreen(
private val title: String, // Заголовок - "Список архивов:"
private val items: List<MenuItem>, // список к выбору
//private val onExit: () -> Unit = {} // действие при выходе
) {
data class MenuItem(
val text: String, // элементы меню
val action: () -> Unit // действие при выборе элемента меню
)

private val scanner = java.util.Scanner(System.`in`)
fun show() {
while (true) {
println("$title")
items.forEachIndexed { index, item ->
println("$index. ${item.text}")
}
print("Выберите пункт меню: ")

val input = scanner.nextLine().trim()

val selectedIndex = input.toIntOrNull()

when {
selectedIndex == null -> {
println("Ошибка: нужно ввести число.")
}

selectedIndex < 0 || selectedIndex >= items.size -> {
println("Ошибка: такого пункта нет. Выберите число от 0 до ${items.size - 1}")
}

else -> {
val selectedItem = items[selectedIndex]
selectedItem.action() // выполняем действие пункта меню
return
}
}
}

}

companion object {
fun exitItem(onExit: () -> Unit) = MenuItem("Выход") { onExit() }
}
}
5 changes: 5 additions & 0 deletions src/main/kotlin/Note.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
data class Note(
val title: String,
val text: String

)
47 changes: 47 additions & 0 deletions src/main/kotlin/NoteListScreen.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class NoteListScreen(
private val archive: Archive
) {
fun start() {
while (true) {
var exitRequested = false
val menuItems = mutableListOf<MenuScreen.MenuItem>()

menuItems.add(MenuScreen.MenuItem("Создать заметку") {
createNote()
})

archive.notes.forEachIndexed { index, note ->
menuItems.add(MenuScreen.MenuItem(note.title) {
NoteViewScreen(note).show()
})

}


menuItems.add(MenuScreen.MenuItem("Назад") {
exitRequested = true
})

val screen = MenuScreen(
title = "Архив: ${archive.name}\nЗаметки:",
items = menuItems
)

screen.show()
if (exitRequested) {
return // выход из функции start() и возврат в меню архивов
}
}
}

private fun createNote() {
println("\nВведите заголовок заметки:")
val title = readNotEmptyString("Заголовок не может быть пустым")

println("Введите текст заметки:")
val text = readNotEmptyString("Текст заметки не может быть пустым")

archive.notes.add(Note(title, text))
println("Заметка «$title» сохранена.")
}
}
11 changes: 11 additions & 0 deletions src/main/kotlin/NoteViewScreen.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class NoteViewScreen(
private val note: Note
) {
fun show() {
println("Заметка: ${note.title}")
println(note.text)
println("Нажмите Enter для возврата...")
readln()
// После нажатия Enter возврат в предыдущее меню
}
}