ООП вариант “Списки дел”

Попробуйте изменить код программы, который был представлен как решение по задаче “Избавьтесь от дублирующегося кода “Списки дел”” таким образом, чтобы можно было удобно добавлять новые списки с задачами.

Решение:

using System;
using System.Collections.Generic;

namespace TODOList
{
    class Program
    {
        static void Main(string[] args)
        {
            Table table = new Table(new Goals("Индивидуальные"), new Goals("Рабочий"), new Goals("Семейный"));

            while (true)
            {
                Console.Clear();

                DrawTable(table);

                ShowAddNewGoalForm(table);
            }
        }

        private static void ShowAddNewGoalForm(Table table)
        {
            Console.WriteLine("Куда вы хотите добавить цель?");
            string listName = Console.ReadLine().ToLower(); //то что введёт пользователь переведённое в нижний регистр
            Console.WriteLine("Что это за цель?");
            string goal = Console.ReadLine();

            foreach (var column in table.GetColumns())
                if (column.Name.ToLower() == listName)
                    column.AddGoal(goal);
        }

        private static void DrawTable(Table table)
        {
            int height = table.GetHeight();

            foreach (var column in table.GetColumns())
                Console.Write($"{column.Name} | ");

            Console.WriteLine();

            for (int i = 0; i < height; i++)
            {
                foreach (var column in table.GetColumns())
                    Console.Write($"{column.TryGet(i)} | ");

                Console.WriteLine();
            }
        }
    }

    public class Table
    {
        private Goals[] _table;

        public Table(params Goals[] table)
        {
            _table = table;
        }

        public int GetHeight()
        {
            int height = 0;
            foreach (var column in _table)
            {
                if (column.Count() > height)
                {
                    height = column.Count();
                }
            }

            return height;
        }

        public IEnumerable<Goals> GetColumns()
        {
            return _table;
        }
    }

    public class Goals
    {
        private string[] _goals = new string[0];

        public string Name { get; }

        public Goals(string name)
        {
            Name = name;
        }

        public void AddGoal(string goal)
        {
            var newGoals = new string[_goals.Length + 1];

            for (int i = 0; i < _goals.Length; i++)
                newGoals[i] = _goals[i];

            newGoals[_goals.Length] = goal;

            _goals = newGoals;
        }

        public string TryGet(int index)
        {
            if (index > 0)
                throw new ArgumentOutOfRangeException();

            if (index >= _goals.Length)
                return "Empty";

            return _goals[index];
        }

        public IEnumerable<string> GetGoals()
        {
            return _goals;
        }

        public int Count()
        {
            return _goals.Length;
        }
    }
}

Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *