Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Приложение "Заметки" #188

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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
2 changes: 2 additions & 0 deletions src/main/kotlin/Archive.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
data class Archive(val name: String, val notes: MutableList<Note> = mutableListOf())
data class Note(val title: String, val content: String)
41 changes: 41 additions & 0 deletions src/main/kotlin/ArchiveManager.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@

import java.util.Scanner
class ArchiveManager {
private val archives = mutableListOf<Archive>()

fun showArchiveMenu() {
val menuScreen = MenuScreen()
val options = mutableListOf<Pair<String, () -> Unit>>(
"Создать архив" to ::createArchive,
"Выход" to ::exitApp
)

archives.forEachIndexed { index, archive ->
options.add("${index + 2}. ${archive.name}" to { showNotesMenu(archive) })
}

menuScreen.showMenu("Список архивов:", options)
}

private fun createArchive() {
println("Введите название архива:")
val name = readLine().orEmpty().trim()
if (name.isNotEmpty()) {
val archive = Archive(name)
archives.add(archive)
println("Архив \"$name\" создан.")
} else {
println("Название архива не может быть пустым.")
}
showArchiveMenu()
}

private fun showNotesMenu(archive: Archive) {
val notesManager = NotesManager(this, archive)
notesManager.showNotesMenu()
}

private fun exitApp() {
println("Выход из приложения.")
}
}
5 changes: 3 additions & 2 deletions src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
fun main(args: Array<String>) {
println("Hello World!")
fun main() {
val archiveManager = ArchiveManager()
archiveManager.showArchiveMenu()
}
24 changes: 24 additions & 0 deletions src/main/kotlin/MenuScreen.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
class MenuScreen {
fun showMenu(title: String, options: List<Pair<String, () -> Unit>>) {
while (true) {
println(title)
options.forEachIndexed { index, option ->
println("$index. ${option.first}")
}
print("Выберите пункт: ")

val input = readLine()
if (input != null && input.isNotBlank() && input.all { it.isDigit() }) {
val choice = input.toInt()
if (choice in options.indices) {
options[choice].second.invoke()
break
} else {
println("Нет такого пункта. Попробуйте еще раз.")
}
} else {
println("Вы не ввели корректное число, попробуйте снова.")
}
}
}
}
47 changes: 47 additions & 0 deletions src/main/kotlin/NotesManager.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class NotesManager(
private val archiveManager: ArchiveManager, private val archive: Archive) {
fun showNotesMenu() {
val menuScreen = MenuScreen()
val options = mutableListOf<Pair<String, () -> Unit>>(
"Создать заметку" to ::createNote,
"Назад" to ::goBack
)

archive.notes.forEachIndexed { index, note ->
options.add("${index + 2}. ${note.title}" to { showNoteContent(note) })
}

menuScreen.showMenu("Список заметок в архиве \"${archive.name}\":", options)
}

private fun createNote() {
println("Введите название заметки:")
val title = readLine().orEmpty().trim()
if (title.isNotEmpty()) {
println("Введите содержание заметки:")
val content = readLine().orEmpty().trim()
if (content.isNotEmpty()) {
val note = Note(title, content)
archive.notes.add(note)
println("Заметка \"$title\" создана.")
} else {
println("Содержание заметки не может быть пустым.")
}
} else {
println("Название заметки не может быть пустым.")
}
showNotesMenu()
}

private fun showNoteContent(note: Note) {
println("Заметка: ${note.title}")
println(note.content)
println("Для продолжения нажмите Enter.")
readLine()
showNotesMenu()
}

private fun goBack() {
archiveManager.showArchiveMenu()
}
}