Как создать консольное To‑do приложение на C#

Коротко: создание To‑do приложения — отличный практический проект для начинающих. Вы научитесь обрабатывать ввод пользователя, хранить данные в коллекциях, использовать условные операторы и циклы. Для примера мы используем консольное приложение C# в Visual Studio.
Зачем это полезно
To‑do приложение иллюстрирует базовые концепции разработки:
- CRUD‑операции: создание (Create), чтение (Read), удаление (Delete).
- Работа с коллекциями (List
). Определение индексов, проверка границ. - Управление циклом жизни программы (while, switch/if).
- Прикладное взаимодействие с пользователем через консоль.
Определение: List
Как создать новое консольное приложение
Ниже краткая последовательность действий для Visual Studio. Полный исходный код можно разместить на GitHub для дальнейшего изучения.
- Откройте Visual Studio на компьютере.
- Нажмите Create a new project (Создать новый проект).
- Выберите шаблон C# Console Application, затем нажмите Next.
- Задайте имя проекта и папку для решения.
- Оставьте Target Framework по умолчанию и нажмите Create.
Важно: для новичка подходит шаблон консольного приложения — он минимален и позволяет сосредоточиться на логике программы.
Простой план разработки (мини‑методология)
- Создать проект.
- Импортировать нужные пространства имён (namespace).
- Объявить коллекцию для задач.
- Реализовать цикл меню (display / input / action).
- Добавить обработку добавления, отображения и удаления.
- Протестировать сценарии ошибок (пустая строка, неверный индекс).
Как добавить задачу в список
После создания проекта вы увидите автоматически сгенерированную программу «Hello World». Заменим её логикой управления списком задач.
- В начале файла добавьте пространство имён для коллекций:
using System;
using System.Collections.Generic;- Объявите enum для действий пользователя:
enum UserChoice {
AddTask = 1,
DeleteTask,
Exit
}- В методе Main удалите код «Hello World» и создайте список задач и бесконечный цикл меню:
static void Main(string[] args)
{
List toDoList = new List();
while (true)
{
// здесь будет логика отображения, ввода и выполнения действий
}
} - Отобразите варианты действий и прочитайте выбор пользователя:
Console.WriteLine("1. Add task");
Console.WriteLine("2. Delete task");
Console.WriteLine("3. Exit");
int choice = int.Parse(Console.ReadLine());- Обработка добавления задачи (пример с if):
if (choice == (int)UserChoice.AddTask)
{
Console.Write("Enter task: ");
string task = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(task))
{
toDoList.Add(task);
Console.Clear();
Console.WriteLine("Task added successfully!");
}
else
{
Console.WriteLine("Task cannot be empty.");
}
}Примечание: лучше использовать int.TryParse для безопасного разбора ввода; это мы покажем в финальном примере кода.
Как отображать задачи
Перед тем как предлагать действия, показывайте текущие задачи — так пользователь видит контекст.
if (toDoList.Count > 0)
{
Console.WriteLine("To-do List:");
for (int i = 0; i < toDoList.Count; i++)
{
Console.WriteLine("- " + toDoList[i]);
}
Console.WriteLine();
}
else
{
Console.WriteLine("You currently have no tasks in your To-do list.");
Console.WriteLine();
}Совет: при большом количестве задач полезно нумеровать их при выводе, чтобы пользователь видел индекс для удаления или редактирования.
Как удалить задачу
Добавим в enum действие удаления, расширим меню и обработку.
if (choice == (int)UserChoice.DeleteTask)
{
if (toDoList.Count > 0)
{
Console.WriteLine("Enter the number of the task you want to delete:");
for (int i = 0; i < toDoList.Count; i++)
{
Console.WriteLine("(" + (i + 1) + ") " + toDoList[i]);
}
if (int.TryParse(Console.ReadLine(), out int taskNum))
{
taskNum--;
if (taskNum >= 0 && taskNum < toDoList.Count)
{
toDoList.RemoveAt(taskNum);
Console.Clear();
Console.WriteLine("Task deleted successfully!");
Console.WriteLine();
}
else
{
Console.Clear();
Console.WriteLine("Invalid task number.");
Console.WriteLine();
}
}
else
{
Console.WriteLine("Please enter a valid number.");
}
}
else
{
Console.WriteLine("There are no tasks to delete.");
}
}Полный пример кода (консольное приложение)
Ниже приведён цельный и устойчивый пример консольного To‑do приложения. Скопируйте его в Program.cs и запустите.
using System;
using System.Collections.Generic;
enum UserChoice
{
AddTask = 1,
DeleteTask,
Exit
}
class Program
{
static void Main(string[] args)
{
List toDoList = new List();
while (true)
{
Console.Clear();
if (toDoList.Count > 0)
{
Console.WriteLine("To-do List:");
for (int i = 0; i < toDoList.Count; i++)
Console.WriteLine($"({i + 1}) {toDoList[i]}");
Console.WriteLine();
}
else
{
Console.WriteLine("You currently have no tasks in your To-do list.");
Console.WriteLine();
}
Console.WriteLine("1. Add task");
Console.WriteLine("2. Delete task");
Console.WriteLine("3. Exit");
Console.Write("Choice: ");
if (!int.TryParse(Console.ReadLine(), out int choice))
{
Console.WriteLine("Please enter a valid number.");
Console.ReadKey();
continue;
}
if (choice == (int)UserChoice.AddTask)
{
Console.Write("Enter task: ");
string task = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(task))
{
toDoList.Add(task.Trim());
Console.WriteLine("Task added successfully!");
}
else
{
Console.WriteLine("Task cannot be empty.");
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
else if (choice == (int)UserChoice.DeleteTask)
{
if (toDoList.Count == 0)
{
Console.WriteLine("There are no tasks to delete.");
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
continue;
}
Console.WriteLine("Enter the number of the task you want to delete:");
for (int i = 0; i < toDoList.Count; i++)
Console.WriteLine($"({i + 1}) {toDoList[i]}");
if (int.TryParse(Console.ReadLine(), out int taskNum))
{
taskNum--;
if (taskNum >= 0 && taskNum < toDoList.Count)
{
toDoList.RemoveAt(taskNum);
Console.WriteLine("Task deleted successfully!");
}
else
{
Console.WriteLine("Invalid task number.");
}
}
else
{
Console.WriteLine("Please enter a valid number.");
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
else if (choice == (int)UserChoice.Exit)
{
break;
}
else
{
Console.WriteLine("Unknown option. Try again.");
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
}
}
} Тесты и критерии приёмки
Критерии приёмки:
- Приложение запускается без ошибок.
- Можно успешно добавить задачу — она появляется в списке.
- Можно удалить задачу по номеру — список обновляется.
- Приложение корректно обрабатывает пустой ввод и неверный номер.
Примеры тестов (acceptance):
- Добавить задачу “Купить хлеб” — задача появляется в выводе.
- Попытаться удалить задачу с номером 0 — приложение сообщает об ошибке.
- Удалить последнюю задачу — список пуст.
- Ввести нечисловой ввод в меню — программа просит ввести число.
Альтернативные подходы и расширения
- Долговременное хранение: использовать файл (JSON/CSV) или базу данных SQLite вместо List
для сохранения между запусками. - GUI: реализовать интерфейс на Windows Forms или WPF для кнопок, списков и диалогов.
- Web‑версия: ASP.NET Core + фронтенд — если хотите выносить приложение в браузер.
- Добавить возможность редактирования задач, пометки статуса (выполнено/в работе), приоритет и дату выполнения.
Когда это не подойдёт:
- Если нужна многопользовательская система или облачный доступ — консоль слишком ограничена.
- Для больших объёмов данных нужен другой подход хранения и пагинация.
Ментальные модели и соглашения
- Модель CRUD: добавление, просмотр, обновление, удаление — основа интерфейсов управления данными.
- Данные в памяти = быстрый доступ, но недолговечны. Для устойчивости сохраняйте на диск.
- Валидация ввода на каждом шаге уменьшает количество ошибок.
Роли и чек-листы
Для новичка:
- Создать проект.
- Реализовать добавление задач.
- Реализовать показ задач.
- Реализовать удаление по номеру.
- Обработать неверный ввод.
Для ревьюера/наставника:
- Проверить обработку исключений.
- Проверить корректность индексов при удалении.
- Посоветовать улучшения UX (подтверждения, отмена).
Шаблоны и заготовки
Таблица приоритетов (пример для расширения):
| Приоритет | Описание |
|---|---|
| Высокий | Срочные задачи, дедлайн сегодня |
| Средний | Важные, но не срочные |
| Низкий | Можно отложить |
Можно расширить структуру задачи до класса TaskItem с полями Title, DueDate, Priority, IsDone.
Безопасность и приватность
В консольном приложении локальные данные обычно хранятся на машине пользователя. Если добавляете синхронизацию/облачное хранилище — учитывайте шифрование и управление доступом.
Краткое резюме
- Консольный To‑do — простой и эффективный проект для практики C#.
- Начните с List
, затем добавьте хранение в файл или GUI. - Тестируйте граничные случаи и обработку ввода.
Важно: после освоения консольной версии переходите к Windows Forms или веб‑решениям, чтобы научиться разделять логику и представление (MVVM/MVC).
Дополнительные ресурсы и идеи проектов
- Преобразовать приложение в Windows Forms с ListBox и кнопками.
- Сохранение в JSON — использовать System.Text.Json для сериализации.
- Реализовать экспорт/импорт задач в CSV.
Вы успешно создали простое To‑do приложение на C#. Теперь можно постепенно усложнять проект: добавлять GUI, хранение на диске, фильтры и сортировку задач.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента