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
2 changes: 1 addition & 1 deletion .idea/misc.xml

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

47 changes: 47 additions & 0 deletions src/main/kotlin/Archive.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import java.util.Scanner

class Archive (val name: String) {
private val menu: Menu = Menu("Список заметок в архиве `$name`:")
private val notes: MutableList<Note> = mutableListOf()

init {
menu.listOfCommands.add("Создать заметку" to {createNote()})
}


fun archiveScreenStart() {
notes.forEach { menu.listOfCommands.add(it.name to {it.noteScreenStart()}) }
menu.start()
}

private fun createNote() {
val note = Note(getNoteTitle(), getNoteText())
notes.add(note)
menu.listOfCommands.add(note.name to {note.noteScreenStart()})
println("Заметка ${note.name} была добавлена в список заметок\n")
}

private fun getNoteTitle(): String {
while (true) {
println("Введите название заметки:")
val title = Scanner(System.`in`).nextLine()
if (title.isEmpty()) {
println("Название заметки не может быть пустым")
} else {
return title
}
}
}

private fun getNoteText(): String {
while (true) {
println("Введите текст заметки:")
val text = Scanner(System.`in`).nextLine()
if (text.isEmpty()) {
println("Текст заметки не может быть пустым")
} else {
return text
}
}
}
}
38 changes: 36 additions & 2 deletions src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,37 @@
import java.util.Scanner

fun main(args: Array<String>) {
println("Hello World!")
}
val app: App = App()
app.start()
}

class App {
private val menu: Menu = Menu("Список архивов:")
private val listOfArchives: MutableList<Archive> = mutableListOf()

init {
menu.listOfCommands.add(("Создать архив" to {createArchive()}))
}


fun start() {
listOfArchives.forEach { menu.listOfCommands.add(it.name to {it.archiveScreenStart()}) }
menu.start()
}

private fun createArchive() {
while (true) {
println("Введите название архива:")
val name: String = Scanner(System.`in`).nextLine()
if (name.isEmpty()) {
println("Название архива не может быть пустым")
} else {
val archive = Archive(name)
listOfArchives.add(archive)
menu.listOfCommands.add(name to {archive.archiveScreenStart()})
println("Архив $name был добавлен в список архивов \n")
break
}
}
}
}
43 changes: 43 additions & 0 deletions src/main/kotlin/Menu.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import java.util.Scanner

class Menu (private val title: String) {
val listOfCommands: MutableList<Pair<String, () -> Unit>> = mutableListOf()

fun start() {
while (true) {
printMenu()
val userInput: Int = getInput()
if (userInput == listOfCommands.size) {
break
}
listOfCommands[userInput].second()
}
}

private fun getInput(): Int {
while (true) {
println("Введите команду:")
val input: String = Scanner(System.`in`).nextLine()
val menuCode: Int? = input.toIntOrNull()
if (menuCode == null) {
println("Введено не число. Пожалуйста, введите число:")
printMenu()
continue
} else {
if (menuCode < 0 || menuCode > listOfCommands.size) {
println("\nТакой цифры нет, необходимо ввести корректную цифру")
printMenu()
continue
} else {
return menuCode
}
}
}
}

private fun printMenu() {
println(title)
listOfCommands.forEachIndexed { index, pair -> println("$index. ${pair.first}") }
println("${listOfCommands.size}. Выход")
}
}
18 changes: 18 additions & 0 deletions src/main/kotlin/Note.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
class Note (
val name: String,
val text: String
) {
private val menu: Menu = Menu("Текст заметки `$name`:")

init {
menu.listOfCommands.add("Показать текст заметки" to {getText()})
}

fun noteScreenStart() {
menu.start()
}

private fun getText() {
println("$text\n")
}
}