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

Large diffs are not rendered by default.

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.

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

class ArchiveMenu(scanner: Scanner) : Menu(scanner) {
init {
items.add(Item(0, "Вернуться назад", ::goBack)) // Добавляем пункт "Вернуться назад"
items.add(Item(1, "Создать архив", ::createArchive))
items.add(Item(2, "Просмотр архива", ::viewArchives))
items.add(Item(3, "Создать заметку", ::createNote))

}

private fun createArchive(archives: HashMap<String, HashMap<String, String>>) {
print("Введите название архива: ")
val archiveName = scanner.nextLine().trim()
if (archiveName.isNotEmpty()) {
if (!archives.containsKey(archiveName)) {
archives[archiveName] = HashMap()
println("Архив '$archiveName' создан.")
} else {
println("Архив с таким именем уже существует.")
goBack(archives)
}
} else {
println("Имя архива не может быть пустым.")
goBack(archives)
}
goBack(archives) // Добавляем возврат в главное меню после создания архива
}

private fun viewArchives(archives: HashMap<String, HashMap<String, String>>) {
println("Список архивов:")
archives.keys.forEachIndexed { index, key -> println("${index + 1}. $key") }
println("0. Вернуться назад")
print("Ваш выбор: ")
val choice = scanner.nextLine()

try {
val selectedIndex = choice.toInt() - 1 // Корректируем индекс, так как выбор начинается с 1
if (selectedIndex in 0 until archives.size) {
val selectedArchive = archives.keys.toList()[selectedIndex]
println("Вы выбрали архив $selectedArchive.")
viewNotesInArchive(selectedArchive, archives) // Вызываем метод для просмотра заметок
} else if (choice == "0") {
goBack(archives)
} else {
println("Некорректный выбор. Попробуйте снова.")
}
} catch (e: NumberFormatException) {
println("Пожалуйста, введите целое число.")
goBack(archives)
}
}

private fun viewNotesInArchive(archiveName: String, archives: HashMap<String, HashMap<String, String>>) {
if (archives.containsKey(archiveName)) {
val notes = archives[archiveName]!!
println("Список заметок в архиве $archiveName:")
notes.forEach { (title, content) -> println("Заголовок: $title, Содержание: $content") }
goBack(archives) // Добавляем возврат в главное меню после просмотра заметок
} else {
println("Архив с таким именем не найден.")
}
}

private fun createNote(archives: HashMap<String, HashMap<String, String>>) {
print("Введите название архива: ")
val archiveName = scanner.nextLine().trim()
if (archiveName.isNotEmpty() && archives.containsKey(archiveName)) {
print("Введите заголовок заметки: ")
val noteTitle = scanner.nextLine().trim()
print("Введите текст заметки: ")
val noteContent = scanner.nextLine().trim()

if (noteTitle.isNotEmpty() && noteContent.isNotEmpty()) {
archives[archiveName]!![noteTitle] = noteContent
println("Заметка '$noteTitle' создана.")
} else {
println("Заголовок или текст заметки не могут быть пустыми.")
}
} else {
println("Архив с таким именем не найден или название архива пустое.")
}
goBack(archives) // Добавляем возврат в главное меню после создания заметки
}


}
11 changes: 9 additions & 2 deletions src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
import java.util.Scanner

fun main(args: Array<String>) {
println("Hello World!")
}
val scanner = Scanner(System.`in`)
val menu = MainMenu(scanner)
val archives =
HashMap<String, HashMap<String, String>>() // Коллекция для хранения архивов и заметок
menu.show(archives)
}

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

class MainMenu(scanner: Scanner) : Menu(scanner) {
init {
items.add(Item(0, "Выход", ::goExit))
items.add(Item(1, "Архив", ::archiveMenu))
items.add(Item(2, "Заметка", ::noteMenu))
}


private fun goExit(archives: HashMap<String, HashMap<String, String>>) {
println("До свидания!")
System.exit(1)
}


private fun archiveMenu(archives: HashMap<String, HashMap<String, String>>) {
val archiveMenu = ArchiveMenu(scanner)
archiveMenu.show(archives)
}

private fun noteMenu(archives: HashMap<String, HashMap<String, String>>) {
val noteMenu = NoteMenu(scanner, archives)
noteMenu.show(archives)
}
}
34 changes: 34 additions & 0 deletions src/main/kotlin/Menu.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import java.util.Scanner

abstract class Menu(protected val scanner: Scanner) {
protected val items = mutableListOf<Menu.Item>()

fun show(archives: HashMap<String, HashMap<String, String>>) {
while (true) {
items.forEach { item -> println("${item.index}. ${item.title}") }
print("Ваш выбор: ")
val choice = scanner.nextLine()

try {
val selectedIndex = choice.toInt()
if (selectedIndex in 0 until items.size) {
items[selectedIndex].action(archives)
break
} else {
println("Некорректный выбор. Попробуйте снова.")
}
} catch (e: NumberFormatException) {
println("Пожалуйста, введите целое число.")
}
}
}

protected fun goBack(archives: HashMap<String, HashMap<String, String>>) {
val mainMenu = MainMenu(scanner)
mainMenu.show(archives)
}



data class Item(val index: Int, val title: String, val action: (HashMap<String, HashMap<String, String>>) -> Unit)
}
61 changes: 61 additions & 0 deletions src/main/kotlin/NoteMenu.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import java.util.Scanner

class NoteMenu(scanner: Scanner, private val archives: HashMap<String, HashMap<String, String>>) : Menu(scanner) {
init {
items.add(Item(0, "Вернуться назад", ::goBack)) // Добавляем пункт "Вернуться назад"
items.add(Item(1, "Создать заметку", ::createNote))
items.add(Item(2, "Просмотр заметки", ::viewNotes))
}

private fun createNote(archives: HashMap<String, HashMap<String, String>>) {
print("Введите название архива: ")
val archiveName = scanner.nextLine().trim()
if (archiveName.isNotEmpty() && archives.containsKey(archiveName)) {
print("Введите заголовок заметки: ")
val noteTitle = scanner.nextLine().trim()
print("Введите текст заметки: ")
val noteContent = scanner.nextLine().trim()

if (noteTitle.isNotEmpty() && noteContent.isNotEmpty()) {
archives[archiveName]!![noteTitle] = noteContent
println("Заметка '$noteTitle' создана.")
goBack(archives)
} else {
println("Заголовок или текст заметки не могут быть пустыми.")
goBack(archives)
}
} else {
println("Архив с таким именем не найден или название архива пустое.")
goBack(archives)

}
}

private fun viewNotes(archives: HashMap<String, HashMap<String, String>>) {
print("Введите название архива: ")
val archiveName = scanner.nextLine()
if (archives.containsKey(archiveName)) {
viewNotesInArchive(archiveName, archives)
goBack(archives)

} else {
println("Архив с таким именем не найден.")
goBack(archives)

}
}

private fun viewNotesInArchive(archiveName: String, archives: HashMap<String, HashMap<String, String>>) {
if (archives.containsKey(archiveName)) {
val notes = archives[archiveName]!!
println("Список заметок в архиве $archiveName:")
notes.forEach { (title, content) -> println("Заголовок: $title, Содержание: $content") }
goBack(archives)

} else {
println("Архив с таким именем не найден.")
goBack(archives)

}
}
}