Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с программированием на go пожалуйста.

Арокаок Араоара Ученик (133), на голосовании 1 неделю назад
Помогите пж решить: Итак, у Гоши уже есть задачи, но зачем задачи сами по себе, без списка дел? Помогите Гоше воплотить его мечту и создайте его идеальный список дел.

Напишите структура Note (сущность заметок, у которых в отличие от задач нет чётких дедлайнов и приоритета):

1. title - заголовок (тип string)

2. text - текст заметок (тип string)


Создайте структуру ToDoList с такими полями:

1. name - название списка (тип string)

2. tasks - список дел на сегодня (тип слайс структур Task (из предыдущего задания))

3. notes - список дополнительных заметок (тип слайс структур Note)

Для этой структуры реализуйте методы TasksCount и NotesCount, которые возвращают общее количество задач и заметок соответственно.

Также реализуйте метод CountTopPrioritiesTasks, который возвращает количество приоритетных задач. А также метод CountOverdueTasks, который возвращает количество просроченных задач.

Сама структура Task и все её методы из предыдущего задания также должны быть реализованы в этом.
Голосование за лучший ответ
Рустам Абдрашитов Мыслитель (9518) 1 месяц назад
package main

import (
"fmt"
"time"
)

type TaskManager interface {
TasksCount() int
NotesCount() int
CountTopPrioritiesTasks() int
CountOverdueTasks() int
AddTask(task Task)
AddNote(note Note)
}

type Task struct {
Title string
Description string
DueDate time.Time
Priority int
}

func (t Task) IsOverdue() bool {
return time.Now ().After(t.DueDate)
}

func (t Task) IsHighPriority() bool {
return t.Priority == 1
}

type Note struct {
Title string
Text string
}

type ToDoList struct {
Name string
Tasks []Task
Notes []Note
}

func (tdl *ToDoList) TasksCount() int {
return len(tdl.Tasks)
}

func (tdl *ToDoList) NotesCount() int {
return len(tdl.Notes)
}

func (tdl *ToDoList) CountTopPrioritiesTasks() int {
count := 0
for _, task := range tdl.Tasks {
if task.IsHighPriority() {
count++
}
}
return count
}

func (tdl *ToDoList) CountOverdueTasks() int {
count := 0
for _, task := range tdl.Tasks {
if task.IsOverdue() {
count++
}
}
return count
}

func (tdl *ToDoList) AddTask(task Task) {
tdl.Tasks = append(tdl.Tasks, task)
}

func (tdl *ToDoList) AddNote(note Note) {
tdl.Notes = append(tdl.Notes, note)
}

func main() {
todoList := ToDoList{Name: "Мой список дел"}

for {
var command string
fmt.Println("Введите команду (add_task, add_note, show_stats, exit):")
fmt.Scan(&command)

switch command {
case "add_task":
var title, description string
var dueDateStr string
var priority int

fmt.Println("Введите заголовок задачи:")
fmt.Scan(&title)
fmt.Println("Введите описание задачи:")
fmt.Scan(&description)
fmt.Println("Введите срок выполнения (в формате YYYY-MM-DD):")
fmt.Scan(&dueDateStr)
dueDate, err := time.Parse("2006-01-02", dueDateStr)
if err != nil {
fmt.Println("Ошибка формата даты:", err)
continue
}
fmt.Println("Введите приоритет (1 - высокий, 2 - средний, 3 - низкий):")
fmt.Scan(&priority)

task := Task{Title: title, Description: description, DueDate: dueDate, Priority: priority}
todoList.AddTask(task)

case "add_note":
var title, text string

fmt.Println("Введите заголовок заметки:")
fmt.Scan(&title)
fmt.Println("Введите текст заметки:")
fmt.Scan(&text)

note := Note{Title: title, Text: text}
todoList.AddNote(note)

case "show_stats":
fmt.Printf("Общее количество задач: %d\n", todoList.TasksCount())
fmt.Printf("Общее количество заметок: %d\n", todoList.NotesCount())
fmt.Printf("Количество приоритетных задач: %d\n", todoList.CountTopPrioritiesTasks())
fmt.Printf("Количество просроченных задач: %d\n", todoList.CountOverdueTasks())

case "exit":
return

default:
fmt.Println("Неизвестная команда. Пожалуйста, попробуйте снова.")
}
}
}
Похожие вопросы